rust/hedgewars-server/src/core/server.rs
changeset 15553 852682c2003f
parent 15552 0031683bfa76
child 15569 4b2f3228f13b
equal deleted inserted replaced
15552:0031683bfa76 15553:852682c2003f
   987         let (client, room) = self.get_mut();
   987         let (client, room) = self.get_mut();
   988         let client_left = client.is_in_game();
   988         let client_left = client.is_in_game();
   989         if client_left {
   989         if client_left {
   990             client.set_is_in_game(false);
   990             client.set_is_in_game(false);
   991 
   991 
   992             let team_names: Vec<_> = room
       
   993                 .client_teams(client.id)
       
   994                 .map(|t| t.name.clone())
       
   995                 .collect();
       
   996 
       
   997             if let Some(ref mut info) = room.game_info {
   992             if let Some(ref mut info) = room.game_info {
       
   993                 let team_names: Vec<_> = info
       
   994                     .client_teams(client.id)
       
   995                     .map(|t| t.name.clone())
       
   996                     .collect();
       
   997 
       
   998                 info.left_teams.extend(team_names.iter().cloned());
       
   999                 info.ingame_teams_count -= team_names.len() as u8;
       
  1000 
   998                 for team_name in &team_names {
  1001                 for team_name in &team_names {
   999                     let remove_msg =
  1002                     let remove_msg =
  1000                         utils::to_engine_msg(std::iter::once(b'F').chain(team_name.bytes()));
  1003                         utils::to_engine_msg(std::iter::once(b'F').chain(team_name.bytes()));
  1001                     if let Some(m) = &info.sync_msg {
  1004                     if let Some(m) = &info.sync_msg {
  1002                         info.msg_log.push(m.clone());
  1005                         info.msg_log.push(m.clone());
  1006                     }
  1009                     }
  1007                     info.msg_log.push(remove_msg);
  1010                     info.msg_log.push(remove_msg);
  1008                 }
  1011                 }
  1009                 Some(team_names)
  1012                 Some(team_names)
  1010             } else {
  1013             } else {
  1011                 unreachable!();
  1014                 None
  1012             }
  1015             }
  1013         } else {
  1016         } else {
  1014             None
  1017             None
  1015         }
  1018         }
  1016     }
  1019     }
  1123         client.clan = teams.clone().next().map(|t| t.color);
  1126         client.clan = teams.clone().next().map(|t| t.color);
  1124         let team_names: Vec<_> = teams.map(|t| t.name.clone()).collect();
  1127         let team_names: Vec<_> = teams.map(|t| t.name.clone()).collect();
  1125 
  1128 
  1126         if !team_names.is_empty() {
  1129         if !team_names.is_empty() {
  1127             info.left_teams.retain(|name| !team_names.contains(&name));
  1130             info.left_teams.retain(|name| !team_names.contains(&name));
  1128         }
  1131             info.ingame_teams_count += team_names.len() as u8;
  1129     }
  1132         }
  1130 }
  1133     }
       
  1134 }