about summary refs log tree commit diff
path: root/src/game/server/gamecontext.cpp
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2008-10-06 18:05:01 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2008-10-06 18:05:01 +0000
commit12472ef7f405f5e8eb620059cbf95926a458538a (patch)
tree712cc453e491ff46c96b48785a94093b1d17cb1f /src/game/server/gamecontext.cpp
parentd1b55351ccc2252917ad494b74bb6ad562df34ce (diff)
downloadzcatch-12472ef7f405f5e8eb620059cbf95926a458538a.tar.gz
zcatch-12472ef7f405f5e8eb620059cbf95926a458538a.zip
major update. continued on ban support. added demo recording (client and server side). added demo player. added demo menu. demos have some quirks and file size optimizations havn't been done yet. some interface tweaks
Diffstat (limited to 'src/game/server/gamecontext.cpp')
-rw-r--r--src/game/server/gamecontext.cpp26
1 files changed, 23 insertions, 3 deletions
diff --git a/src/game/server/gamecontext.cpp b/src/game/server/gamecontext.cpp
index fb426ad6..0cdd4227 100644
--- a/src/game/server/gamecontext.cpp
+++ b/src/game/server/gamecontext.cpp
@@ -171,7 +171,7 @@ void GAMECONTEXT::send_chat(int chatter_cid, int team, const char *text)
 }
 
 
-void GAMECONTEXT::send_info(int who, int to_who)
+void GAMECONTEXT::send_info(int who, int to_who, bool recordonly)
 {
 	NETMSG_SV_SETINFO msg;
 	msg.cid = who;
@@ -180,9 +180,17 @@ void GAMECONTEXT::send_info(int who, int to_who)
 	msg.use_custom_color = players[who]->use_custom_color;
 	msg.color_body = players[who]->color_body;
 	msg.color_feet = players[who]->color_feet;
-	msg.pack(MSGFLAG_VITAL);
 	
-	server_send_msg(to_who);
+	if(recordonly)
+	{
+		msg.pack(MSGFLAG_NOSEND);
+		server_send_msg(to_who);
+	}
+	else
+	{
+		msg.pack(MSGFLAG_VITAL);
+		server_send_msg(to_who);
+	}
 }
 
 void GAMECONTEXT::send_emoticon(int cid, int emoticon)
@@ -333,6 +341,18 @@ void GAMECONTEXT::tick()
 
 void GAMECONTEXT::snap(int client_id)
 {
+	// check if we are recording a demo
+	if(client_id == -1)
+	{
+		// we are recording, make sure that we set
+		// the info for all players all the time
+		for(int i = 0; i < MAX_CLIENTS; i++)
+		{
+			if(game.players[i])
+				send_info(i, -1, true);
+		}
+	}
+	
 	world.snap(client_id);
 	controller->snap(client_id);
 	events.snap(client_id);