#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.