Don't crash when host leaves the lobby, fixes #2980

This commit is contained in:
Matthias Mailänder
2013-04-07 21:00:27 +02:00
parent 3272b6725e
commit 6b164672eb

View File

@@ -517,13 +517,14 @@ namespace OpenRA.Server
SendDisconnected(toDrop); /* Report disconnection */ SendDisconnected(toDrop); /* Report disconnection */
lobbyInfo.Clients.RemoveAll(c => c.Index == toDrop.PlayerIndex); lobbyInfo.Clients.RemoveAll(c => c.Index == toDrop.PlayerIndex);
// remove the bots he added
lobbyInfo.Clients.RemoveAll(c => c.BotControllerClientIndex == toDrop.PlayerIndex);
// reassign admin if necessary // reassign admin if necessary
if (lobbyInfo.GlobalSettings.Dedicated && dropClient.IsAdmin && State == ServerState.WaitingPlayers) if (lobbyInfo.GlobalSettings.Dedicated && dropClient.IsAdmin && State == ServerState.WaitingPlayers)
{ {
if (lobbyInfo.Clients.Where(c1 => c1.Bot == null).Count() > 0) // clean up the bots that were added by the last admin
lobbyInfo.Clients.RemoveAll(c => c.Bot != null && c.BotControllerClientIndex == toDrop.PlayerIndex);
if (lobbyInfo.Clients.Any(c1 => c1.Bot == null))
{ {
// client was not alone on the server but he was admin: set admin to the last connected client // client was not alone on the server but he was admin: set admin to the last connected client
OpenRA.Network.Session.Client lastClient = lobbyInfo.Clients.Where(c1 => c1.Bot == null).Last(); OpenRA.Network.Session.Client lastClient = lobbyInfo.Clients.Where(c1 => c1.Bot == null).Last();