diff options
Diffstat (limited to 'src/core/gameserver.cc')
-rw-r--r-- | src/core/gameserver.cc | 162 |
1 files changed, 27 insertions, 135 deletions
diff --git a/src/core/gameserver.cc b/src/core/gameserver.cc index 3268e38..db99356 100644 --- a/src/core/gameserver.cc +++ b/src/core/gameserver.cc @@ -62,7 +62,7 @@ void func_mute(std::string const &args) targetplayer->player_mute = true; server()->broadcast("^B" + targetplayer->name() + "^B has been muted.", targetplayer); - server()->send(targetplayer, "^BYou have been muted."); + targetplayer->send("^BYou have been muted."); } void func_unmute(std::string const &args) @@ -78,7 +78,7 @@ void func_unmute(std::string const &args) targetplayer->player_mute = false; server()->broadcast("^B" +targetplayer->name() + "^B has been unmuted.", targetplayer); - server()->send(targetplayer, "^BYou have been unmuted."); + targetplayer->send("^BYou have been unmuted."); } void func_kick(std::string const &args) @@ -271,7 +271,7 @@ void GameServer::say(Player *player, std::string const &message) return; if (player->mute()) { - send(player, "^BYou have been muted."); + player->send("^BYou have been muted."); return; } @@ -280,7 +280,7 @@ void GameServer::say(Player *player, std::string const &message) notification.append("^F:^N "); notification.append(message); - broadcast_message(Message::Public, notification); + broadcast(Message::Public, notification); } void GameServer::private_message(Player *player, std::string const &args) @@ -289,7 +289,7 @@ void GameServer::private_message(Player *player, std::string const &args) return; if (player->mute()) { - send(player, "^BYou have been muted."); + player->send("^BYou have been muted."); return; } @@ -301,14 +301,14 @@ void GameServer::private_message(Player *player, std::string const &args) core::Player *targetplayer = core::server()->find_player(target); if (!targetplayer) { - send(player, "^BPlayer " + target + "^B not found."); + player->send("^BPlayer " + target + "^B not found."); return; } std::string message(args.substr(target.size())); - send_message(Message::Private, player, "^FTo ^B" + targetplayer->name() + "^F:" + message); - send_message(Message::Private, targetplayer, "^FFrom ^B" + player->name() + "^F:" + message); + player->message(Message::Private, "^FTo ^B" + targetplayer->name() + "^F:" + message); + targetplayer->message(Message::Private, "^FFrom ^B" + player->name() + "^F:" + message); } // FIXME kicked by @@ -322,7 +322,7 @@ void GameServer::kick(Player *player, std::string const &reason) NetClient *client = server_network->find_client(player); if (client) { broadcast("^B" + player->name() + "^B has been kicked: " + reason, player); - server_network->send_message(client, "info", "^WYou have been kicked: " + reason); + player->send("^WYou have been kicked: " + reason); server_network->send_disconnect(client); } else { con_print << "Network client not found." << std::endl; @@ -330,146 +330,38 @@ void GameServer::kick(Player *player, std::string const &reason) } // broadcast an "info" message to all players -void GameServer::broadcast(std::string const message, Player *ignore_player) +void GameServer::broadcast(const std::string text, Player *ignore_player) { - if (!message.size()) - return; - - broadcast_message(Message::Info, message, ignore_player); -} - -// send and "info" message to a single player -void GameServer::send(Player *player, std::string const message) -{ - send_message(Message::Info, player, message); + broadcast(Message::Info, text, ignore_player); } -// send an rcon message to a single player -void GameServer::send_rcon(Player *player, std::string const message) -{ - send_message(Message::RCon, player, message); -} - -void GameServer::send_message(Message::Channel const channel, Player *player, std::string const message) -{ - if (!message.size()) - return; - - if (player == localplayer()) { - application()->notify_message(channel, message); - return; - } else { - if (server_network) { - std::string msg_channel; - switch(channel) { - case core::Message::Info: // Info message - msg_channel.assign("info"); - break; - - case core::Message::Local: // Chat message in the local zone - msg_channel.assign("local"); - break; - - case core::Message::Public: // Public chat message - msg_channel.assign("public"); - break; - - case core::Message::Private: // Private chat message - msg_channel.assign("private"); - break; - - case core::Message::RCon: // RCon message - msg_channel.assign("rcon"); - break; - - default: - con_warn << "message on unknown channel " << channel << "!" << std::endl; - return; - break; - } - - NetClient *client = server_network->find_client(player); - if (client) { - server_network->send_message(client, msg_channel.c_str(), message); - } - } - } -} // broadcast a message on a specified channel to all players -void GameServer::broadcast_message(Message::Channel const channel, std::string const message, Player *ignore_player) +void GameServer::broadcast(const Message::Channel channel, const std::string text, Player *ignore_player) { - if (!message.size()) + if (!text.size()) return; - // send to application - if (ignore_player != game()->localplayer()) - application()->notify_message(channel, message); - - // broadcast to remote clients - if (server_network) { - std::string msg_channel; - switch(channel) { - case core::Message::Info: // Info message - msg_channel.assign("info"); - break; - - case core::Message::Local: // Chat message in the local zone - msg_channel.assign("local"); - break; - - case core::Message::RCon: // RCon message - msg_channel.assign("rcon"); - break; - - case core::Message::Public: // Public chat message - msg_channel.assign("public"); - break; - - default: - con_warn << "message on unknown channel " << channel << "!" << std::endl; - return; - break; + for (Players::iterator it = players().begin(); it != players().end(); it++) { + Player *player = (*it); + if (player != ignore_player) { + Player *player = (*it); + player->message(channel, text); } - - server_network->broadcast_message(msg_channel.c_str(), message); } } // broadcast a sound event to all players -void GameServer::broadcast_sound(std::string const sound, Player *ignore_player) +void GameServer::broadcast_sound(const std::string name, Player *ignore_player) { - if (!sound.size()) + if (!name.size()) return; - // send to application - if (ignore_player != game()->localplayer()) { - application()->notify_sound(sound.c_str()); - } - - // broadcast to remote clients - if (server_network) { - server_network->broadcast_message("snd", sound, ignore_player); - } -} - -// send a sound event to a single player -void GameServer::send_sound(Player *player, std::string const sound) -{ - if (!sound.size()) - return; - - // send to application - if (player == localplayer()) { - application()->notify_sound(sound.c_str()); - return; - } - - // send to remote client - if (server_network) { - NetClient *client = server_network->find_client(player); - if (client) { - server_network->send_message(client, "snd", sound); + for (Players::iterator it = players().begin(); it != players().end(); it++) { + Player *player = (*it); + if (player != ignore_player) { + Player *player = (*it); + player->sound(name); } } } @@ -507,7 +399,7 @@ void GameServer::exec(Player *player, std::string const & cmdline) function->exec(args); while(console()->rconbuf().size()) { - send(player, (*console()->rconbuf().begin())); + player->message(Message::RCon, (*console()->rconbuf().begin())); console()->rconbuf().pop_front(); } @@ -520,7 +412,7 @@ void GameServer::exec(Player *player, std::string const & cmdline) std::string message("Unknown command '"); message.append(command); message.append("^N'"); - send(player, message); + player->send(message); } void GameServer::player_connect(Player *player) |