2016-08-05 14 views
9

我们使用Photon引擎进行随机比赛制作游戏。我们希望在一定的时间内将玩家与不同的用户进行匹配。如果PlayerA与PlayerB一起玩,他们不能再玩30分钟。做这种系统的最好方法是什么?如何使用Photon Engine在随机匹配中阻止特定用户?

我们尝试了一些算法,但它不适合。

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"); 



} 

它的工作原理,但也有一些缺点,如耗时vs ..任何更好的解决方案的想法?

回答

2

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

你需要使用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" 

在你的情况你只是需要d将C0替换为被阻止的玩家列表,并在每次新玩家玩游戏时更新该列表,并在30分钟后将其从列表中移除。

如果您将遇到其他一些问题,请告诉我们。

+0

感谢您的回答。如果我用playerNames代替C0不适合这些球员。我不明白我的想法。 SQL类型如何阻止这些玩家。 –