2016-08-05 12 views
9

Chúng tôi đang tạo trò chơi kết hợp ngẫu nhiên bằng cách sử dụng công cụ Photon. Chúng tôi muốn kết hợp người chơi với những người dùng khác nhau trong một khoảng thời gian nhất định. Nếu PlayerA chơi với PlayerB, họ không thể chơi lại trong 30 phút. Cách tốt nhất để thực hiện loại hệ thống này là gì?Làm cách nào để chặn một người dùng cụ thể trong việc tạo đối sánh ngẫu nhiên bằng cách sử dụng Photon Engine?

Chúng tôi thử một số thuật toán nhưng không phù hợp.

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



} 

Nó hoạt động nhưng có một số nhược điểm như tốn thời gian so với .. Bất kỳ ý tưởng nào cho giải pháp tốt hơn?

Trả lời

2

Giải pháp có thể được tìm thấy ở đây: documentation

Bạn cần phải sử dụng SQL Lobby Loại:

Tạo phòng:

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

Tham gia phòng:

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" 

Trong trường hợp của bạn bạn chỉ cần nee d để thay thế C0 bằng danh sách những người chơi bị chặn và cập nhật danh sách này mỗi khi người dùng mới chơi trò chơi và xóa anh ấy khỏi danh sách sau 30 phút.

Nếu bạn sẽ gặp phải một số vấn đề khác với điều đó, hãy cho chúng tôi biết.

+0

cảm ơn câu trả lời của bạn. Nếu tôi thay thế C0 bằng playerNames thì không phải nó có sẵn cho những người chơi đó. Tôi không hiểu logic. Làm thế nào loại sql chặn những người chơi. –

Các vấn đề liên quan