unity3d block rpc photon matchmaking

unity3d - ¿Cómo puedo bloquear a un usuario específico en la creación de coincidencias aleatorias mediante el uso de Photon Engine?



block rpc (1)

Estamos haciendo un juego de hacer combinaciones al azar usando el motor Photon. Queremos unir jugadores con diferentes usuarios en un cierto período de tiempo. Si el jugador A juega con el jugador B, no podrá volver a jugar durante 30 minutos. ¿Cuál es la mejor manera de hacer este tipo de sistema?

Intentamos algunos algoritmos, pero no encaja bien.

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

Funciona, pero hay algunas desventajas, tales como el tiempo que consume ... ¿Alguna idea para obtener mejores soluciones?


La solución se puede encontrar aquí: documentación

Necesita usar el tipo de Lobby SQL :

Creando habitación:

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

Sala de unión:

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"

En su caso, solo necesita reemplazar C0 con la lista de jugadores bloqueados, y actualizar esta lista cada vez que un nuevo usuario juegue el juego, y lo elimina de la lista luego de 30 minutos.

Si enfrentas otros problemas con eso, avísanos.