如何使用 Photon Engine 在随机匹配中屏蔽特定用户?

9

我们正在使用Photon引擎制作随机匹配游戏。我们希望在一定时间内将玩家与不同的用户匹配。如果玩家A和玩家B进行了游戏,则在30分钟内他们不能再次组队。如何最好地实现这种系统?

我们尝试了一些算法,但效果不佳。

public override void OnJoinedRoom()
{
    if(PhotonNetwork.isMasterClient) 
        StartCoroutine("StartWaiting");

    theSameGame = false;

    var photonPlayer =  PhotonNetwork.Instantiate("PhotonPlayerKO", Vector3.zero, Quaternion.identity, 0) as GameObject;
    photonPlayer.name = "Local Player";


    if(PhotonNetwork.playerList.Count() > 1 && !PhotonNetwork.isMasterClient)
        photonViewOfManager.RPC("MyNameIs", PhotonTargets.Others, PlayerInfos.thePlayersName);
    //Sending player name to other player to check whether this name is playable or not ?

    if(!PhotonNetwork.isMasterClient)
        StartCoroutine("CheckError");



}

它可以工作,但存在一些缺点,例如耗时等。有更好的解决方案吗?

1个回答

2

解决方案可以在这里找到:文档

您需要使用SQL大厅类型

创建房间:

    RoomOptions roomOptions = new RoomOptions();
    roomOptions.MaxPlayers = expectedMaxPlayers;
   // in this example, C0 might be 0 or 1 for the two (fictional) game modes
    roomOptions.customRoomProperties = new ExitGames.Client.Photon.Hashtable() { { "C0", 1 } };
    roomOptions.customRoomPropertiesForLobby = new string[] { "C0" }; // this makes "C0" available in the lobby
    // let's create this room in SqlLobby "myLobby" explicitly
    TypedLobby sqlLobby = new TypedLobby("myLobby", LobbyType.SqlLobby);
    lbClient.OpCreateRoom(roomName, roomOptions, sqlLobby);

加入房间:

TypedLobby sqlLobby = new TypedLobby("myLobby", LobbyType.SqlLobby);    // same as above
string sqlLobbyFilter = "C0 = 0";   // find a game with mode 0
lbClient.OpJoinRandomRoom(null, expectedMaxPlayers, matchmakingMode, sqlLobby, sqlLobbyFilter);
// more filter variations:
// "C0 = 1 AND C2 > 50"
// "C5 = \"Map2\" AND C2 > 10 AND C2 < 20"

在您的情况下,您只需要使用被封锁的玩家列表替换C0,并在每次新用户玩游戏时更新此列表,并在30分钟后从列表中将其删除。如果您遇到其他问题,请告诉我们。

谢谢你的回答。如果我用playerNames替换C0,那么这些球员不就可以使用了吗?我不太明白逻辑。是什么样的SQL类型阻止了这些球员的使用? - Çağatay Kaya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接