2016-08-05 42 views
9

Robimy losową grę z dopasowaniem za pomocą silnika Photon. Chcemy dopasować graczy do różnych użytkowników w określonym czasie. Jeśli PlayerA zagra z PlayerB, nie będzie mógł grać ponownie przez 30 minut. Jaki jest najlepszy sposób na zrobienie tego rodzaju systemu?Jak mogę zablokować określonego użytkownika w losowym dopasowywaniu przy użyciu Photon Engine?

Próbujemy algorytmów, ale nie pasuje dobrze.

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



} 

Działa, ale istnieją pewne wady, takie jak czasochłonne vs .. Wszelkie pomysły na lepsze rozwiązania?

Odpowiedz

2

Rozwiązanie można znaleźć tutaj: documentation

Trzeba użyć SQL Lobby Rodzaj:

Tworzenie pokoju:

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

Łączenie pokoju:

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" 

W twoja sprawa, którą właśnie masz d zastąpić C0 listą graczy, którzy są zablokowani, i aktualizować tę listę za każdym razem, gdy nowy użytkownik zagra w grę, i usuwa go z listy po 30 minutach.

Jeśli napotkasz na inne problemy, daj nam znać.

+0

dzięki za odpowiedź. Jeśli zastąpię C0 nazwą gracza, to nie jest on dostępny dla tych graczy. Nie rozumiem logiki, którą myślę. Jak typ sql zablokował tych graczy. –