rust/hedgewars-server/src/core/server.rs
changeset 15569 4b2f3228f13b
parent 15553 852682c2003f
child 15697 25371cae9fd7
--- a/rust/hedgewars-server/src/core/server.rs	Sat May 16 04:43:11 2020 +0200
+++ b/rust/hedgewars-server/src/core/server.rs	Sun May 17 04:07:10 2020 +0300
@@ -128,7 +128,6 @@
 
 #[derive(Debug)]
 pub struct EndGameResult {
-    pub joined_mid_game_clients: Vec<ClientId>,
     pub left_teams: Vec<String>,
     pub unreadied_nicks: Vec<String>,
 }
@@ -607,13 +606,20 @@
                 room.ready_players_number -= 1;
             }
 
-            removed_teams = room
-                .client_teams(client.id)
-                .map(|t| t.name.clone())
-                .collect();
-
-            for team_name in &removed_teams {
-                room.remove_team(team_name);
+            if let Some(ref mut info) = room.game_info {
+                removed_teams = info
+                    .client_teams(client.id)
+                    .map(|t| t.name.clone())
+                    .collect();
+                info.mark_left_teams(removed_teams.iter());
+            } else {
+                removed_teams = room
+                    .client_teams(client.id)
+                    .map(|t| t.name.clone())
+                    .collect();
+                for team_name in &removed_teams {
+                    room.remove_team(team_name);
+                }
             }
 
             if client.is_master() && !is_fixed {
@@ -995,20 +1001,8 @@
                     .map(|t| t.name.clone())
                     .collect();
 
-                info.left_teams.extend(team_names.iter().cloned());
-                info.ingame_teams_count -= team_names.len() as u8;
+                info.mark_left_teams(team_names.iter());
 
-                for team_name in &team_names {
-                    let remove_msg =
-                        utils::to_engine_msg(std::iter::once(b'F').chain(team_name.bytes()));
-                    if let Some(m) = &info.sync_msg {
-                        info.msg_log.push(m.clone());
-                    }
-                    if info.sync_msg.is_some() {
-                        info.sync_msg = None
-                    }
-                    info.msg_log.push(remove_msg);
-                }
                 Some(team_names)
             } else {
                 None
@@ -1028,14 +1022,6 @@
                 room.remove_team(team_name);
             }
 
-            let joined_mid_game_clients = self
-                .server
-                .clients
-                .iter()
-                .filter(|(_, c)| c.room_id == Some(self.room_id) && c.is_joined_mid_game())
-                .map(|(_, c)| c.id)
-                .collect();
-
             let unreadied_nicks: Vec<_> = self
                 .server
                 .clients
@@ -1043,7 +1029,6 @@
                 .filter(|(_, c)| c.room_id == Some(room_id))
                 .map(|(_, c)| {
                     c.set_is_ready(c.is_master());
-                    c.set_is_joined_mid_game(false);
                     c
                 })
                 .filter_map(|c| {
@@ -1056,7 +1041,6 @@
                 .collect();
 
             Some(EndGameResult {
-                joined_mid_game_clients,
                 left_teams: replace(&mut info.left_teams, vec![]),
                 unreadied_nicks,
             })
@@ -1103,7 +1087,6 @@
     client.set_is_master(true);
     client.set_is_ready(true);
     client.set_is_in_game(false);
-    client.set_is_joined_mid_game(false);
     client.clan = None;
     client.teams_in_game = 0;
     client.team_indices = vec![];
@@ -1117,7 +1100,6 @@
     room.players_number += 1;
 
     client.room_id = Some(room.id);
-    client.set_is_joined_mid_game(room.game_info.is_some());
     client.set_is_in_game(room.game_info.is_some());
 
     if let Some(ref mut info) = room.game_info {
@@ -1128,7 +1110,6 @@
 
         if !team_names.is_empty() {
             info.left_teams.retain(|name| !team_names.contains(&name));
-            info.ingame_teams_count += team_names.len() as u8;
         }
     }
 }