[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