equal
deleted
inserted
replaced
1 use mio; |
1 use mio; |
2 |
2 |
3 use crate::{ |
3 use crate::{ |
4 server::{ |
4 server::{ |
5 coretypes::{ |
5 coretypes::{ |
6 ClientId, RoomId, Voting, VoteType, |
6 ClientId, RoomId, Voting, VoteType, GameCfg, |
7 MAX_HEDGEHOGS_PER_TEAM |
7 MAX_HEDGEHOGS_PER_TEAM |
8 }, |
8 }, |
9 server::HWServer, |
9 server::HWServer, |
10 room::{HWRoom, RoomFlags}, |
10 room::{HWRoom, RoomFlags}, |
11 actions::{Action, Action::*} |
11 actions::{Action, Action::*} |
166 "-r" |
166 "-r" |
167 } else { |
167 } else { |
168 r.ready_players_number += 1; |
168 r.ready_players_number += 1; |
169 "+r" |
169 "+r" |
170 }; |
170 }; |
171 c.set_is_ready(!c.is_ready()); |
171 |
172 let mut v = |
172 let msg = if c.protocol_number < 38 { |
173 vec![ClientFlags(flags.to_string(), vec![c.nick.clone()]) |
173 LegacyReady(c.is_ready(), vec![c.nick.clone()]) |
174 .send_all().in_room(r.id).action()]; |
174 } else { |
|
175 ClientFlags(flags.to_string(), vec![c.nick.clone()]) |
|
176 }; |
|
177 |
|
178 let mut v = vec![msg.send_all().in_room(r.id).action()]; |
|
179 |
175 if r.is_fixed() && r.ready_players_number == r.players_number { |
180 if r.is_fixed() && r.ready_players_number == r.players_number { |
176 v.push(StartRoomGame(r.id)) |
181 v.push(StartRoomGame(r.id)) |
177 } |
182 } |
|
183 |
|
184 c.set_is_ready(!c.is_ready()); |
178 server.react(client_id, v); |
185 server.react(client_id, v); |
179 } |
186 } |
180 } |
187 } |
181 AddTeam(info) => { |
188 AddTeam(info) => { |
182 let mut actions = Vec::new(); |
189 let mut actions = Vec::new(); |
190 } else if r.game_info.is_some() { |
197 } else if r.game_info.is_some() { |
191 actions.push(Warn("Joining not possible: Round is in progress.".to_string())) |
198 actions.push(Warn("Joining not possible: Round is in progress.".to_string())) |
192 } else if r.is_team_add_restricted() { |
199 } else if r.is_team_add_restricted() { |
193 actions.push(Warn("This room currently does not allow adding new teams.".to_string())); |
200 actions.push(Warn("This room currently does not allow adding new teams.".to_string())); |
194 } else { |
201 } else { |
195 let team = r.add_team(c.id, *info); |
202 let team = r.add_team(c.id, *info, c.protocol_number < 42); |
196 c.teams_in_game += 1; |
203 c.teams_in_game += 1; |
197 c.clan = Some(team.color); |
204 c.clan = Some(team.color); |
198 actions.push(TeamAccepted(team.name.clone()) |
205 actions.push(TeamAccepted(team.name.clone()) |
199 .send_self().action()); |
206 .send_self().action()); |
200 actions.push(TeamAdd(HWRoom::team_info(&c, team)) |
207 actions.push(TeamAdd(HWRoom::team_info(&c, team)) |
276 let actions = if r.is_fixed() { |
283 let actions = if r.is_fixed() { |
277 vec![Warn("Access denied.".to_string())] |
284 vec![Warn("Access denied.".to_string())] |
278 } else if !c.is_master() { |
285 } else if !c.is_master() { |
279 vec![ProtocolError("You're not the room master!".to_string())] |
286 vec![ProtocolError("You're not the room master!".to_string())] |
280 } else { |
287 } else { |
|
288 let cfg = match cfg { |
|
289 GameCfg::Scheme(name, mut values) => { |
|
290 if c.protocol_number == 49 && values.len() >= 2 { |
|
291 let mut s = "X".repeat(50); |
|
292 s.push_str(&values.pop().unwrap()); |
|
293 values.push(s); |
|
294 } |
|
295 GameCfg::Scheme(name, values) |
|
296 } |
|
297 cfg => cfg |
|
298 }; |
|
299 |
281 let v = vec![cfg.to_server_msg() |
300 let v = vec![cfg.to_server_msg() |
282 .send_all().in_room(r.id).but_self().action()]; |
301 .send_all().in_room(r.id).but_self().action()]; |
283 r.set_config(cfg); |
302 r.set_config(cfg); |
284 v |
303 v |
285 }; |
304 }; |