144 client: &mut HWClient, |
144 client: &mut HWClient, |
145 room: &mut HWRoom, |
145 room: &mut HWRoom, |
146 response: &mut Response, |
146 response: &mut Response, |
147 msg: &str, |
147 msg: &str, |
148 ) { |
148 ) { |
149 if room.players_number > 1 || room.is_fixed() { |
149 room.players_number -= 1; |
150 room.players_number -= 1; |
150 if room.players_number > 0 || room.is_fixed() { |
151 if client.is_ready() && room.ready_players_number > 0 { |
151 if client.is_ready() && room.ready_players_number > 0 { |
152 room.ready_players_number -= 1; |
152 room.ready_players_number -= 1; |
153 } |
153 } |
154 |
154 |
155 let team_names: Vec<_> = room |
155 let team_names: Vec<_> = room |
258 if let Some(room_id) = client.room_id { |
258 if let Some(room_id) = client.room_id { |
259 let room = &mut server.rooms[room_id]; |
259 let room = &mut server.rooms[room_id]; |
260 |
260 |
261 remove_client_from_room(client, room, response, msg); |
261 remove_client_from_room(client, room, response, msg); |
262 |
262 |
263 if !room.is_fixed() && room.master_id == None { |
263 if !room.is_fixed() { |
264 let new_master_id = server.room_clients(room_id).next(); |
264 if room.players_number == 0 { |
265 if let Some(new_master_id) = new_master_id { |
265 server.rooms.remove(room_id); |
266 let new_master_nick = server.clients[new_master_id].nick.clone(); |
266 } else if room.master_id == None { |
267 let room = &mut server.rooms[room_id]; |
267 let new_master_id = server.room_clients(room_id).next(); |
268 room.master_id = Some(new_master_id); |
268 if let Some(new_master_id) = new_master_id { |
269 server.clients[new_master_id].set_is_master(true); |
269 let new_master_nick = server.clients[new_master_id].nick.clone(); |
270 |
270 let room = &mut server.rooms[room_id]; |
271 if room.protocol_number < 42 { |
271 room.master_id = Some(new_master_id); |
272 room.name = new_master_nick.clone(); |
272 server.clients[new_master_id].set_is_master(true); |
|
273 |
|
274 if room.protocol_number < 42 { |
|
275 room.name = new_master_nick.clone(); |
|
276 } |
|
277 |
|
278 room.set_join_restriction(false); |
|
279 room.set_team_add_restriction(false); |
|
280 room.set_unregistered_players_restriction(true); |
|
281 |
|
282 response.add( |
|
283 ClientFlags(add_flags(&[Flags::RoomMaster]), vec![new_master_nick]) |
|
284 .send_all() |
|
285 .in_room(room.id), |
|
286 ); |
273 } |
287 } |
274 |
|
275 room.set_join_restriction(false); |
|
276 room.set_team_add_restriction(false); |
|
277 room.set_unregistered_players_restriction(true); |
|
278 |
|
279 response.add( |
|
280 ClientFlags(add_flags(&[Flags::RoomMaster]), vec![new_master_nick]) |
|
281 .send_all() |
|
282 .in_room(room.id), |
|
283 ); |
|
284 } |
288 } |
285 } |
289 } |
286 } |
290 } |
287 } |
291 } |
288 |
292 |