rust/hedgewars-server/src/server/handlers/inroom.rs
changeset 14788 6dea1ca64992
parent 14785 a1077e8d26f4
child 14789 18240b308505
equal deleted inserted replaced
14787:0e64acbc3f8b 14788:6dea1ca64992
     9     },
     9     },
    10     server::{
    10     server::{
    11         core::HWServer,
    11         core::HWServer,
    12         coretypes,
    12         coretypes,
    13         coretypes::{ClientId, GameCfg, RoomId, VoteType, Voting, MAX_HEDGEHOGS_PER_TEAM},
    13         coretypes::{ClientId, GameCfg, RoomId, VoteType, Voting, MAX_HEDGEHOGS_PER_TEAM},
    14         room::{HWRoom, RoomFlags},
    14         room::{HWRoom, RoomFlags, MAX_TEAMS_IN_ROOM},
    15     },
    15     },
    16     utils::is_name_illegal,
    16     utils::is_name_illegal,
    17 };
    17 };
    18 use base64::{decode, encode};
    18 use base64::{decode, encode};
    19 use log::*;
    19 use log::*;
   131                 }
   131                 }
   132                 .send_all()
   132                 .send_all()
   133                 .in_room(room_id),
   133                 .in_room(room_id),
   134             );
   134             );
   135         }
   135         }
       
   136         TeamChat(msg) => {
       
   137             let room = &server.rooms[room_id];
       
   138             if let Some(ref info) = room.game_info {
       
   139                 if let Some(clan_color) = room.find_team_color(client_id) {
       
   140                     let client = &server.clients[client_id];
       
   141                     let engine_msg =
       
   142                         to_engine_msg(format!("b{}]{}\x20\x20", client.nick, msg).bytes());
       
   143                     let team = room.clan_team_owners(clan_color).collect();
       
   144                     response.add(ForwardEngineMessage(vec![engine_msg]).send_many(team))
       
   145                 }
       
   146             }
       
   147         }
   136         Fix => {
   148         Fix => {
   137             if client.is_admin() {
   149             if client.is_admin() {
   138                 room.set_is_fixed(true);
   150                 room.set_is_fixed(true);
   139                 room.set_join_restriction(false);
   151                 room.set_join_restriction(false);
   140                 room.set_team_add_restriction(false);
   152                 room.set_team_add_restriction(false);
   147             }
   159             }
   148         }
   160         }
   149         Greeting(text) => {
   161         Greeting(text) => {
   150             if client.is_admin() || client.is_master() && !room.is_fixed() {
   162             if client.is_admin() || client.is_master() && !room.is_fixed() {
   151                 room.greeting = text;
   163                 room.greeting = text;
       
   164             }
       
   165         }
       
   166         MaxTeams(count) => {
       
   167             if !client.is_master() {
       
   168                 response.add(Warning("You're not the room master!".to_string()).send_self());
       
   169             } else if count < 2 || count > MAX_TEAMS_IN_ROOM {
       
   170                 response
       
   171                     .add(Warning("/maxteams: specify number from 2 to 8".to_string()).send_self());
       
   172             } else {
       
   173                 server.rooms[room_id].max_teams = count;
   152             }
   174             }
   153         }
   175         }
   154         RoomName(new_name) => {
   176         RoomName(new_name) => {
   155             if is_name_illegal(&new_name) {
   177             if is_name_illegal(&new_name) {
   156                 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());
   178                 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());
   190             if room.is_fixed() && room.ready_players_number == room.players_number {
   212             if room.is_fixed() && room.ready_players_number == room.players_number {
   191                 super::common::start_game(server, room_id, response);
   213                 super::common::start_game(server, room_id, response);
   192             }
   214             }
   193         }
   215         }
   194         AddTeam(mut info) => {
   216         AddTeam(mut info) => {
   195             if room.teams.len() >= room.team_limit as usize {
   217             if room.teams.len() >= room.max_teams as usize {
   196                 response.add(Warning("Too many teams!".to_string()).send_self());
   218                 response.add(Warning("Too many teams!".to_string()).send_self());
   197             } else if room.addable_hedgehogs() == 0 {
   219             } else if room.addable_hedgehogs() == 0 {
   198                 response.add(Warning("Too many hedgehogs!".to_string()).send_self());
   220                 response.add(Warning("Too many hedgehogs!".to_string()).send_self());
   199             } else if room.find_team(|t| t.name == info.name) != None {
   221             } else if room.find_team(|t| t.name == info.name) != None {
   200                 response.add(
   222                 response.add(