rust/hedgewars-server/src/core/server.rs
changeset 15540 479911540e17
parent 15536 a798e6441a36
child 15541 d122b65bdf6f
--- a/rust/hedgewars-server/src/core/server.rs	Tue Jan 07 15:17:22 2020 +0100
+++ b/rust/hedgewars-server/src/core/server.rs	Sat Jan 11 00:44:25 2020 +0300
@@ -986,6 +986,8 @@
                 .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()));
@@ -1104,15 +1106,21 @@
     client.set_is_joined_mid_game(room.game_info.is_some());
     client.set_is_in_game(room.game_info.is_some());
 
-    let teams = room.client_teams(client.id);
-    client.teams_in_game = teams.clone().count() as u8;
-    client.clan = teams.clone().next().map(|t| t.color);
-    let team_names: Vec<_> = teams.map(|t| t.name.clone()).collect();
+    if let Some(ref mut info) = room.game_info {
+        let teams = info.client_teams(client.id);
+        client.teams_in_game = teams.clone().count() as u8;
+        client.clan = teams.clone().next().map(|t| t.color);
+        let team_names: Vec<_> = teams.map(|t| t.name.clone()).collect();
 
-    match room.game_info {
-        Some(ref mut info) if !team_names.is_empty() => {
-            info.left_teams.retain(|name| !team_names.contains(&name))
+        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();
         }
-        _ => (),
     }
 }