about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/game/client/game_client.cpp4
-rw-r--r--src/game/client/menu2.cpp54
-rw-r--r--src/game/server/game_server.cpp33
3 files changed, 61 insertions, 30 deletions
diff --git a/src/game/client/game_client.cpp b/src/game/client/game_client.cpp
index d9c2ba53..4d81c344 100644
--- a/src/game/client/game_client.cpp
+++ b/src/game/client/game_client.cpp
@@ -40,7 +40,7 @@ enum
 };
 
 static int chat_mode = CHATMODE_NONE;
-static bool menu_active = false;
+bool menu_active = false;
 static bool emoticon_selector_active = false;
 
 static vec2 mouse_pos;
@@ -48,7 +48,7 @@ static vec2 local_character_pos;
 static vec2 local_target_pos;
 static const obj_player_character *local_character = 0;
 static const obj_player_character *local_prev_character = 0;
-static const obj_player_info *local_info = 0;
+const obj_player_info *local_info = 0;
 static const obj_game *gameobj = 0;
 
 static struct client_data
diff --git a/src/game/client/menu2.cpp b/src/game/client/menu2.cpp
index 53d80235..d6014b87 100644
--- a/src/game/client/menu2.cpp
+++ b/src/game/client/menu2.cpp
@@ -27,6 +27,11 @@ extern "C" {
 
 extern data_container *data;
 
+// abit uglyness
+extern const obj_player_info *local_info;
+extern bool menu_active;
+
+
 //static vec4 gui_color(0.9f,0.78f,0.65f, 0.5f);
 //static vec4 gui_color(0.78f,0.9f,0.65f, 0.5f);
 static vec4 gui_color(0.65f,0.78f,0.9f, 0.5f);
@@ -1375,17 +1380,46 @@ static void menu2_render_game(RECT main_view)
 	if(ui2_do_button(&disconnect_button, "Disconnect", 0, &button, ui2_draw_menu_button, 0))
 		client_disconnect();
 
-	ui2_vsplit_l(&main_view, 120.0f, &button, &main_view);
-	static int spectate_button = 0;
-	if(ui2_do_button(&spectate_button, "Spectate", 0, &button, ui2_draw_menu_button, 0))
-		;
-		
-	ui2_vsplit_l(&main_view, 10.0f, &button, &main_view);
-	ui2_vsplit_l(&main_view, 120.0f, &button, &main_view);
-	static int change_team_button = 0;
-	if(ui2_do_button(&change_team_button, "Change Team", 0, &button, ui2_draw_menu_button, 0))
-		;
 
+
+	if(local_info)
+	{
+		if(local_info->team != -1)
+		{
+			ui2_vsplit_l(&main_view, 10.0f, &button, &main_view);
+			ui2_vsplit_l(&main_view, 120.0f, &button, &main_view);
+			static int spectate_button = 0;
+			if(ui2_do_button(&spectate_button, "Spectate", 0, &button, ui2_draw_menu_button, 0))
+			{
+				config.team = -1;
+				menu_active = false;
+			}
+		}
+
+		if(local_info->team != 0)
+		{
+			ui2_vsplit_l(&main_view, 10.0f, &button, &main_view);
+			ui2_vsplit_l(&main_view, 120.0f, &button, &main_view);
+			static int spectate_button = 0;
+			if(ui2_do_button(&spectate_button, "Join Red", 0, &button, ui2_draw_menu_button, 0))
+			{
+				config.team = 0;
+				menu_active = false;
+			}
+		}
+
+		if(local_info->team != 1)
+		{
+			ui2_vsplit_l(&main_view, 10.0f, &button, &main_view);
+			ui2_vsplit_l(&main_view, 120.0f, &button, &main_view);
+			static int spectate_button = 0;
+			if(ui2_do_button(&spectate_button, "Join Blue", 0, &button, ui2_draw_menu_button, 0))
+			{
+				config.team = 1;
+				menu_active = false;
+			}
+		}
+	}
 }
 
 int menu2_render()
diff --git a/src/game/server/game_server.cpp b/src/game/server/game_server.cpp
index 9a02a95d..241e3862 100644
--- a/src/game/server/game_server.cpp
+++ b/src/game/server/game_server.cpp
@@ -1590,6 +1590,14 @@ void mods_message(int msg, int client_id)
 	{
 		// Switch team on given client and kill/respawn him
 		players[client_id].set_team(msg_unpack_int());
+		gameobj->on_player_info_change(&players[client_id]);
+		
+		// send all info to this client
+		for(int i = 0; i < MAX_CLIENTS; i++)
+		{
+			if(players[i].client_id != -1)
+				send_info(i, -1);
+		}		
 	}
 	else if (msg == MSG_CHANGEINFO || msg == MSG_STARTINFO)
 	{
@@ -1735,25 +1743,14 @@ void mods_init()
 
 	if(config.dbg_bots)
 	{
-		/*
-		static int count = 0;
-		if(count >= 0)
+
+		for(int i = 0; i < config.dbg_bots ; i++)
 		{
-			count++;
-			if(count == 10)
-			{*/
-				for(int i = 0; i < config.dbg_bots ; i++)
-				{
-					mods_connected(MAX_CLIENTS-i-1);
-					mods_client_enter(MAX_CLIENTS-i-1);
-					//strcpy(players[MAX_CLIENTS-i-1].name, "(bot)");
-					if(gameobj->gametype != GAMETYPE_DM)
-						players[MAX_CLIENTS-i-1].team = i&1;
-				}
-				/*
-				count = -1;
-			}
-		}*/
+			mods_connected(MAX_CLIENTS-i-1);
+			mods_client_enter(MAX_CLIENTS-i-1);
+			if(gameobj->gametype != GAMETYPE_DM)
+				players[MAX_CLIENTS-i-1].team = i&1;
+		}
 	}
 }