diff options
| author | scosu <scosu@gmx.de> | 2008-10-22 14:31:46 +0000 |
|---|---|---|
| committer | scosu <scosu@gmx.de> | 2008-10-22 14:31:46 +0000 |
| commit | 6d86d949fdfec590e9bed0ff126271ebab81796a (patch) | |
| tree | 3415429ed77a92786ce63134d54eb9593efa7e97 | |
| parent | 2e3b6f5c7aa8c55a6380fb9b0440f6476fda88ec (diff) | |
| download | zcatch-6d86d949fdfec590e9bed0ff126271ebab81796a.tar.gz zcatch-6d86d949fdfec590e9bed0ff126271ebab81796a.zip | |
Introduces a command change_map to change maps or restart round with showing the scoreboard ticket:536
| -rw-r--r-- | src/game/server/gamecontroller.cpp | 14 | ||||
| -rw-r--r-- | src/game/server/gamecontroller.hpp | 3 | ||||
| -rw-r--r-- | src/game/server/hooks.cpp | 8 |
3 files changed, 24 insertions, 1 deletions
diff --git a/src/game/server/gamecontroller.cpp b/src/game/server/gamecontroller.cpp index ea76e897..44bb2893 100644 --- a/src/game/server/gamecontroller.cpp +++ b/src/game/server/gamecontroller.cpp @@ -25,6 +25,7 @@ GAMECONTROLLER::GAMECONTROLLER() game_flags = 0; teamscore[0] = 0; teamscore[1] = 0; + map_wish[0] = 0; unbalanced_tick = -1; force_balanced = false; @@ -200,8 +201,21 @@ void GAMECONTROLLER::startround() round_count++; } +void GAMECONTROLLER::change_map(const char *to_map) +{ + str_copy(map_wish, to_map, sizeof(map_wish)); + endround(); +} + void GAMECONTROLLER::cyclemap() { + if(map_wish[0] != 0) + { + dbg_msg("game", "rotating map to %s", map_wish); + str_copy(config.sv_map, map_wish, sizeof(config.sv_map)); + map_wish[0] = 0; + return; + } if(!strlen(config.sv_maprotation)) return; diff --git a/src/game/server/gamecontroller.hpp b/src/game/server/gamecontroller.hpp index e4596883..f3b64a3b 100644 --- a/src/game/server/gamecontroller.hpp +++ b/src/game/server/gamecontroller.hpp @@ -34,6 +34,8 @@ protected: void cyclemap(); void resetgame(); + + char map_wish[128]; const char *gametype; @@ -63,6 +65,7 @@ public: void startround(); void endround(); + void change_map(const char *to_map); bool is_friendly_fire(int cid1, int cid2); diff --git a/src/game/server/hooks.cpp b/src/game/server/hooks.cpp index bc264f70..f6bb3086 100644 --- a/src/game/server/hooks.cpp +++ b/src/game/server/hooks.cpp @@ -205,7 +205,7 @@ void mods_message(int msgtype, int client_id) str_format(chatmsg, sizeof(chatmsg), "Vote called to change map to '%s'", msg->value); str_format(desc, sizeof(desc), "Change map to '%s'", msg->value); - str_format(cmd, sizeof(cmd), "sv_map %s", msg->value); + str_format(cmd, sizeof(cmd), "change_map %s", msg->value); } else if(str_comp_nocase(msg->type, "kick") == 0) { @@ -389,6 +389,11 @@ static void con_tune_dump(void *result, void *user_data) } +static void con_change_map(void *result, void *user_data) +{ + game.controller->change_map(console_arg_string(result, 0)); +} + static void con_restart(void *result, void *user_data) { if(console_arg_num(result)) @@ -427,6 +432,7 @@ void mods_console_init() MACRO_REGISTER_COMMAND("tune_reset", "", con_tune_reset, 0); MACRO_REGISTER_COMMAND("tune_dump", "", con_tune_dump, 0); + MACRO_REGISTER_COMMAND("change_map", "r", con_change_map, 0); MACRO_REGISTER_COMMAND("restart", "?i", con_restart, 0); MACRO_REGISTER_COMMAND("broadcast", "r", con_broadcast, 0); MACRO_REGISTER_COMMAND("say", "r", con_say, 0); |