2016-08-05 13 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類型如何阻止這些玩家。 –