diff -r 479911540e17 -r d122b65bdf6f rust/hedgewars-server/src/core/server.rs --- a/rust/hedgewars-server/src/core/server.rs Sat Jan 11 00:44:25 2020 +0300 +++ b/rust/hedgewars-server/src/core/server.rs Sat Jan 11 01:06:41 2020 +0300 @@ -986,8 +986,6 @@ .collect(); if let Some(ref mut info) = room.game_info { - info.teams_in_game -= team_names.len() as u8; - for team_name in &team_names { let remove_msg = utils::to_engine_msg(std::iter::once(b'F').chain(team_name.bytes())); @@ -1012,8 +1010,12 @@ let room = self.room_mut(); room.ready_players_number = room.master_id.is_some() as u8; - if let Some(info) = replace(&mut room.game_info, None) { + if let Some(mut info) = replace(&mut room.game_info, None) { let room_id = room.id; + for team_name in &info.left_teams { + room.remove_team(team_name); + } + let joined_mid_game_clients = self .server .clients @@ -1043,7 +1045,7 @@ Some(EndGameResult { joined_mid_game_clients, - left_teams: info.left_teams.clone(), + left_teams: replace(&mut info.left_teams, vec![]), unreadied_nicks, }) } else { @@ -1114,13 +1116,6 @@ if !team_names.is_empty() { info.left_teams.retain(|name| !team_names.contains(&name)); - info.teams_in_game += team_names.len() as u8; - room.teams = info - .teams_at_start - .iter() - .filter(|(_, t)| !team_names.contains(&t.name)) - .cloned() - .collect(); } } }