[nexuiz-commits] r8301 - trunk/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Sat Nov 21 09:30:36 EST 2009


Author: div0
Date: 2009-11-21 09:30:36 -0500 (Sat, 21 Nov 2009)
New Revision: 8301

Modified:
   trunk/data/qcsrc/server/cl_client.qc
   trunk/data/qcsrc/server/cl_physics.qc
   trunk/data/qcsrc/server/gamecommand.qc
   trunk/data/qcsrc/server/progs.src
Log:
playerdemos - recording actions of a player and playing them back using bots, to fake multiplayer demos. Still incomplete, and only works correctly with cl_movement 0 (otherwise you get minor changes on playback).

Cvars and commands for this have not really been made yet, and will come later.


Modified: trunk/data/qcsrc/server/cl_client.qc
===================================================================
--- trunk/data/qcsrc/server/cl_client.qc	2009-11-21 14:28:03 UTC (rev 8300)
+++ trunk/data/qcsrc/server/cl_client.qc	2009-11-21 14:30:36 UTC (rev 8301)
@@ -1324,6 +1324,8 @@
 	ClientData_Attach();
 
 	bot_clientconnect();
+	
+	playerdemo_init();
 
 	race_PreSpawnObserver();
 
@@ -1514,6 +1516,8 @@
 		self.hitplotfh = -1;
 	}
 
+	playerdemo_shutdown();
+
 	bot_clientdisconnect();
 
 	if(self.entcs)
@@ -3003,4 +3007,6 @@
 
 	if(self.waypointsprite_attachedforcarrier)
 		WaypointSprite_UpdateHealth(self.waypointsprite_attachedforcarrier, '1 0 0' * healtharmor_maxdamage(self.health, self.armorvalue, cvar("g_balance_armor_blockpercent")));
+	
+	playerdemo_write();
 }

Modified: trunk/data/qcsrc/server/cl_physics.qc
===================================================================
--- trunk/data/qcsrc/server/cl_physics.qc	2009-11-21 14:28:03 UTC (rev 8300)
+++ trunk/data/qcsrc/server/cl_physics.qc	2009-11-21 14:30:36 UTC (rev 8301)
@@ -680,9 +680,31 @@
 	}
 	self.shtest_accumulator += frametime;
 
+	if (self.punchangle != '0 0 0')
+	{
+		f = vlen(self.punchangle) - 10 * frametime;
+		if (f > 0)
+			self.punchangle = normalize(self.punchangle) * f;
+		else
+			self.punchangle = '0 0 0';
+	}
+
+	if (self.punchvector != '0 0 0')
+	{
+		f = vlen(self.punchvector) - 30 * frametime;
+		if (f > 0)
+			self.punchvector = normalize(self.punchvector) * f;
+		else
+			self.punchvector = '0 0 0';
+	}
+
 	if (clienttype(self) == CLIENTTYPE_BOT)
+	{
+		if(playerdemo_read())
+			return;
 		bot_think();
-
+	}
+	
 	self.items &~= IT_USING_JETPACK;
 
 	if(self.classname == "player")
@@ -715,24 +737,6 @@
 	if (self.movetype == MOVETYPE_NONE)
 		return;
 
-	if (self.punchangle != '0 0 0')
-	{
-		f = vlen(self.punchangle) - 10 * frametime;
-		if (f > 0)
-			self.punchangle = normalize(self.punchangle) * f;
-		else
-			self.punchangle = '0 0 0';
-	}
-
-	if (self.punchvector != '0 0 0')
-	{
-		f = vlen(self.punchvector) - 30 * frametime;
-		if (f > 0)
-			self.punchvector = normalize(self.punchvector) * f;
-		else
-			self.punchvector = '0 0 0';
-	}
-
 	maxspd_mod = 1;
 
 	if(g_runematch)

Modified: trunk/data/qcsrc/server/gamecommand.qc
===================================================================
--- trunk/data/qcsrc/server/gamecommand.qc	2009-11-21 14:28:03 UTC (rev 8300)
+++ trunk/data/qcsrc/server/gamecommand.qc	2009-11-21 14:30:36 UTC (rev 8301)
@@ -1050,6 +1050,38 @@
 		return;
 	}
 
+	if(argv(0) == "playerdemo")
+	{
+		if(argv(1) == "load")
+		{
+			entno = stof(argv(2));
+			if((entno < 1) | (entno > maxclients)) {
+				print("Player ", argv(2), " doesn't exist\n");
+				return;
+			}
+			client = edict_num(entno);
+			if(clienttype(client) != CLIENTTYPE_BOT) {
+				print("Player ", client.netname, " is not a bot\n");
+				return;
+			}
+			self = client;
+			playerdemo_open_read(argv(3));
+			return;
+		}
+		else if(argv(1) == "write")
+		{
+			entno = stof(argv(2));
+			if((entno < 1) | (entno > maxclients)) {
+				print("Player ", argv(2), " doesn't exist\n");
+				return;
+			}
+			client = edict_num(entno);
+			self = client;
+			playerdemo_open_write(argv(3));
+			return;
+		}
+	}
+
 	print("Invalid command. For a list of supported commands, try sv_cmd help.\n");
 }
 

Modified: trunk/data/qcsrc/server/progs.src
===================================================================
--- trunk/data/qcsrc/server/progs.src	2009-11-21 14:28:03 UTC (rev 8300)
+++ trunk/data/qcsrc/server/progs.src	2009-11-21 14:30:36 UTC (rev 8301)
@@ -41,6 +41,8 @@
 
 vote.qh
 
+playerdemo.qh
+
 scores_rules.qc
 
 miscfunctions.qc
@@ -170,3 +172,5 @@
 csqcprojectile.qc
 
 ../common/mathlib.qc
+
+playerdemo.qc



More information about the nexuiz-commits mailing list