about summary refs log tree commit diff
diff options
context:
space:
mode:
authorscosu <scosu@gmx.de>2008-10-22 14:31:46 +0000
committerscosu <scosu@gmx.de>2008-10-22 14:31:46 +0000
commit6d86d949fdfec590e9bed0ff126271ebab81796a (patch)
tree3415429ed77a92786ce63134d54eb9593efa7e97
parent2e3b6f5c7aa8c55a6380fb9b0440f6476fda88ec (diff)
downloadzcatch-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.cpp14
-rw-r--r--src/game/server/gamecontroller.hpp3
-rw-r--r--src/game/server/hooks.cpp8
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);