Почему PhotonNetwork GetCustomRoomList завершается с ошибкой после нескольких подключений?

#c# #unity3d #photon

#c# #unity3d #photon

Вопрос:

Я пытаюсь создать пользовательское лобби, и игроки случайным образом заполняют комнаты с maxPlayers = 2, первые 2 игрока подключаются и присоединяются к комнате, но когда третий игрок подключается и вызывает GetCustomRoomList, я получаю эту ошибку:

Сбой GetGameList: OperationResponse 217: код возврата: -2 (логическая ошибка SQL или отсутствие базы данных вблизи «ПРЕДЕЛА»: синтаксическая ошибка). Параметры: {}

Что я делаю, так это сначала пытаюсь присоединиться к случайной комнате внутри этого пользовательского лобби, и если это не удается, создайте новую комнату.

Я начинаю подключение следующим образом:

 TypedLobby lobbyData = new TypedLobby ("Proto01Lobby", LobbyType.SqlLobby);

PhotonNetwork.GameVersion = GAME_VERSION;
PhotonNetwork.ConnectUsingSettings ();
  

Затем я пытаюсь присоединиться к случайной комнате:

 public override void OnConnectedToMaster()
{
   Debug.Log ("Connetected!");
   PhotonNetwork.JoinRandomRoom (null, 2, MatchmakingMode.FillRoom, lobbyData, null, null);
}
  

ЕСЛИ это не удается, я пытаюсь получить список комнат, чтобы затем создать уникальное название комнаты на основе количества комнат в лобби:

 public override void OnJoinRandomFailed(short returnCode, string message)
{
   Debug.Log ("Failed to connect to random room, Create a New Room");
   PhotonNetwork.GetCustomRoomList (lobbyData, null);
}

public override void OnRoomListUpdate (List<RoomInfo> roomList)
{
   Debug.Log ("Amount of rooms in lobbby: " roomList.Count);
   string roomName = "CanvasProto"   roomList.Count;
   Debug.Log ("Create room: " roomName);

   RoomOptions options = new RoomOptions ();
   options.MaxPlayers = 2;
   PhotonNetwork.CreateRoom(roomName, options, lobbyData, null);
}
  

Но когда подключается третий игрок, он / она никогда не достигает OnRoomListUpdate, потому что по какой-то причине происходит сбой.

Ответ №1:

Сбой GetCustomRoomList вызван тем, что он пытается выполнить SQL-запрос с null.

Вам нужно добавить запрос, который фильтрует номера, которые вы пытаетесь получить.

Если вам нужны все комнаты, используйте GetRoomList().

Я должен предупредить вас, если 2 игрока находятся в одной комнате и 2 новых игрока пытаются присоединиться, оба увидят, что им нужно создать новую комнату, и вам, моим клиентам, придется пытаться создать 2 комнаты с одинаковыми именами одновременно.

Вы также не будете повторно использовать названия комнат для игр, которые завершились.

Комментарии:

1. Спасибо. Я не вижу статического метода для PhotonNetwork. Однако GetRoomList()… Используя версию 2.7. Кроме того, из того, что вы говорите, лучше создать случайное имя, чем я предполагаю, верно?

2. Я также заметил, что первый пользователь, который подключается, на самом деле вызывает GetCustomRoomList, передавая SQL-запрос как null, возможно, это не сбой, потому что еще нет комнат?

3. @user2000950 GetRoomList был удален в PUN2. Вы можете найти эту информацию и другие в » Заметках по миграции» с PUN1 на PUN2.