Unity Player не удаляется из лобби при выходе с помощью alt f4C#

Место общения программистов C#
Ответить
Anonymous
 Unity Player не удаляется из лобби при выходе с помощью alt f4

Сообщение Anonymous »

Когда игрок выходит из лобби с помощью кнопки выхода из лобби, он удаляется из лобби, и к нему могут присоединиться новые игроки. но когда игрок уходит с помощью alt f4, лобби все равно думает, что лобби заполнено. Как я могу это исправить?
Сервер может видеть, когда игрок отключается, и я пытаюсь удалить его.
public void StartHost()
{
NetworkManager.Singleton.ConnectionApprovalCallback += NetworkManager_ConnectionApprovalCallback;
NetworkManager.Singleton.OnClientDisconnectCallback += NetworkManager_Server_OnClientDisconnectCallback; ;
NetworkManager.Singleton.StartHost();
}

private void NetworkManager_Server_OnClientDisconnectCallback(ulong clientId)
{
if (IsServer)
{
// Log the disconnection
Debug.Log($"ONMUILTIPLAYERMANAGER Client {clientId} disconnected.");

// Update the lobby by removing the player
GameLobby.Instance?.DisconnectPlayer(clientId.ToString());

// Optionally handle any cleanup like respawning or managing game state.
}
}

private void NetworkManager_ConnectionApprovalCallback(NetworkManager.ConnectionApprovalRequest connectionApprovalRequest, NetworkManager.ConnectionApprovalResponse connectionApprovalResponse)
{
connectionApprovalResponse.Approved = true;
}

Я также пробовал обновить слоты в лобби, но ничего не помогло.
public async void DisconnectPlayer(string playerId)
{
try
{
if (joinedLobby != null)
{
// First, check if the player exists in the lobby
var player = joinedLobby.Players.Find(p => p.Id == playerId);
if (player != null)
{
// Attempt to remove the player from the lobby
await LobbyService.Instance.RemovePlayerAsync(joinedLobby.Id, playerId);
Debug.Log($"Player {playerId} successfully removed from lobby.");
}
else
{
Debug.Log($"Player {playerId} not found in the lobby.");
}

// Force update the lobby slots after the player leaves
await UpdateLobbySlots();

// Optionally, refresh the lobby state
joinedLobby = await LobbyService.Instance.GetLobbyAsync(joinedLobby.Id);
Debug.Log("Lobby slots updated after player disconnection.");
}
}
catch (LobbyServiceException e)
{
Debug.LogError($"Failed to remove player {playerId}: {e.Message}");
}
}

private async Task UpdateLobbySlots()
{
try
{
// Force update lobby data to reflect the correct available slots
await LobbyService.Instance.UpdateLobbyAsync(joinedLobby.Id, new UpdateLobbyOptions
{
Data = new Dictionary
{
{ "availableSlots", new DataObject(DataObject.VisibilityOptions.Public, (MultiplayerManager.MAX_PLAYER_AMOUNT - joinedLobby.Players.Count).ToString()) }
}
});

Debug.Log("Lobby slots successfully updated.");
Debug.Log(joinedLobby.Players.Count);
}
catch (LobbyServiceException e)
{
Debug.LogError($"Failed to update lobby slots: {e.Message}");
}
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... ith-alt-f4
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»