diff -r 0e64acbc3f8b -r 6dea1ca64992 rust/hedgewars-server/src/server/handlers/inroom.rs --- a/rust/hedgewars-server/src/server/handlers/inroom.rs Thu Apr 11 01:42:14 2019 +0300 +++ b/rust/hedgewars-server/src/server/handlers/inroom.rs Thu Apr 11 19:30:22 2019 +0300 @@ -11,7 +11,7 @@ core::HWServer, coretypes, coretypes::{ClientId, GameCfg, RoomId, VoteType, Voting, MAX_HEDGEHOGS_PER_TEAM}, - room::{HWRoom, RoomFlags}, + room::{HWRoom, RoomFlags, MAX_TEAMS_IN_ROOM}, }, utils::is_name_illegal, }; @@ -133,6 +133,18 @@ .in_room(room_id), ); } + TeamChat(msg) => { + let room = &server.rooms[room_id]; + if let Some(ref info) = room.game_info { + if let Some(clan_color) = room.find_team_color(client_id) { + let client = &server.clients[client_id]; + let engine_msg = + to_engine_msg(format!("b{}]{}\x20\x20", client.nick, msg).bytes()); + let team = room.clan_team_owners(clan_color).collect(); + response.add(ForwardEngineMessage(vec![engine_msg]).send_many(team)) + } + } + } Fix => { if client.is_admin() { room.set_is_fixed(true); @@ -151,6 +163,16 @@ room.greeting = text; } } + MaxTeams(count) => { + if !client.is_master() { + response.add(Warning("You're not the room master!".to_string()).send_self()); + } else if count < 2 || count > MAX_TEAMS_IN_ROOM { + response + .add(Warning("/maxteams: specify number from 2 to 8".to_string()).send_self()); + } else { + server.rooms[room_id].max_teams = count; + } + } RoomName(new_name) => { if is_name_illegal(&new_name) { response.add(Warning("Illegal room name! A room name must be between 1-40 characters long, must not have a trailing or leading space and must not have any of these characters: $()*+?[]^{|}".to_string()).send_self()); @@ -192,7 +214,7 @@ } } AddTeam(mut info) => { - if room.teams.len() >= room.team_limit as usize { + if room.teams.len() >= room.max_teams as usize { response.add(Warning("Too many teams!".to_string()).send_self()); } else if room.addable_hedgehogs() == 0 { response.add(Warning("Too many hedgehogs!".to_string()).send_self());