r3737 - trunk/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Mon Jun 30 02:39:42 EDT 2008


Author: div0
Date: 2008-06-30 02:39:41 -0400 (Mon, 30 Jun 2008)
New Revision: 3737

Modified:
   trunk/data/qcsrc/server/cl_client.qc
   trunk/data/qcsrc/server/cl_physics.qc
   trunk/data/qcsrc/server/defs.qh
   trunk/data/qcsrc/server/miscfunctions.qc
Log:
sv_maxidle system; add #defines for buttons


Modified: trunk/data/qcsrc/server/cl_client.qc
===================================================================
--- trunk/data/qcsrc/server/cl_client.qc	2008-06-29 14:58:05 UTC (rev 3736)
+++ trunk/data/qcsrc/server/cl_client.qc	2008-06-30 06:39:41 UTC (rev 3737)
@@ -648,7 +648,7 @@
 		self.bot_attack = TRUE;
 
 		self.statdraintime = time + 5;
-		self.button0 = self.button1 = self.button2 = self.button3 = 0;
+		self.button0 = self.button2 = self.button3 = 0;
 
 		if(self.killcount == -666) {
 			self.killcount = 0;
@@ -700,7 +700,9 @@
 */
 void SetNewParms (void)
 {
-
+	// initialize parms for a new player
+	print("SetNewParms\n");
+	parm1 = -(86400 * 366);
 }
 
 /*
@@ -710,7 +712,23 @@
 */
 void SetChangeParms (void)
 {
+	// save parms for level change
+	print("SetChangeParms\n");
+	parm1 = self.parm_idlesince - time;
+}
 
+/*
+=============
+DecodeLevelParms
+=============
+*/
+void DecodeLevelParms (void)
+{
+	// load parms
+	print("DecodeLevelParms\n");
+	self.parm_idlesince = parm1;
+	if(self.parm_idlesince == -(86400 * 366))
+		self.parm_idlesince = time;
 }
 
 /*
@@ -917,6 +935,7 @@
 =============
 */
 string ColoredTeamName(float t);
+void DecodeLevelParms (void);
 //void dom_player_join_team(entity pl);
 void ClientConnect (void)
 {
@@ -931,6 +950,8 @@
 		return;
 	}
 
+	DecodeLevelParms();
+
 	self.classname = "player_joining";
 	self.flags = self.flags | FL_CLIENT;
 	self.version_nagtime = time + 10 + random() * 10;
@@ -2032,6 +2053,7 @@
 Called every frame for each client after the physics are run
 =============
 */
+.float idlekick_lasttimeleft;
 void PlayerPostThink (void)
 {
 	// Savage: Check for nameless players
@@ -2040,6 +2062,32 @@
 		stuffcmd(self, "seta _cl_name Player\n");
 	}
 
+	if(sv_maxidle)
+	{
+		float timeleft;
+		timeleft = ceil(sv_maxidle - (time - self.parm_idlesince));
+		if(timeleft <= 0)
+		{
+			bprint("^3", self.netname, "^3 was kicked for idling.\n");
+			play2(self, "announcer/robotic/terminated.ogg");
+			dropclient(self);
+			return;
+		}
+		else if(timeleft <= 10)
+		{
+			if(timeleft != self.idlekick_lasttimeleft)
+			{
+				centerprint_atprio(self, CENTERPRIO_IDLEKICK, strcat("^3Stop idling!\n^3Disconnecting in ", ftos(timeleft), "..."));
+				play2(self, strcat("announcer/robotic/", ftos(timeleft), ".ogg"));
+			}
+		}
+		else
+		{
+			centerprint_expire(self, CENTERPRIO_IDLEKICK);
+		}
+		self.idlekick_lasttimeleft = timeleft;
+	}
+
 	if(self.classname == "player") {
 		CheckRules_Player();
 		UpdateChatBubble();

Modified: trunk/data/qcsrc/server/cl_physics.qc
===================================================================
--- trunk/data/qcsrc/server/cl_physics.qc	2008-06-29 14:58:05 UTC (rev 3736)
+++ trunk/data/qcsrc/server/cl_physics.qc	2008-06-30 06:39:41 UTC (rev 3737)
@@ -110,14 +110,25 @@
 	}
 };
 
+.vector movement_old;
+.float buttons_old;
 
 void Nixnex_GiveCurrentWeapon();
 void SV_PlayerPhysics()
 {
 	local vector wishvel, wishdir, v;
-	local float wishspeed, f, maxspd_mod, spd, maxairspd, airaccel, swampspd_mod, shtest_score;
+	local float wishspeed, f, maxspd_mod, spd, maxairspd, airaccel, swampspd_mod, shtest_score, buttons;
 	string temps;
 
+	buttons = self.BUTTON_ATCK + 2 * self.BUTTON_JUMP + 4 * self.BUTTON_ATCK2 + 8 * self.BUTTON_ZOOM + 16 * self.BUTTON_CROUCH + 32 * self.BUTTON_HOOK + 64 * self.BUTTON_USE;
+	if(buttons != self.buttons_old)
+		self.parm_idlesince = time;
+	self.buttons_old = buttons;
+
+	if(self.movement != self.movement_old)
+		self.parm_idlesince = time;
+	self.movement_old = self.movement;
+
 	if(time > self.shtest_next)
 	{
 		if(self.shtest_next > 0)

Modified: trunk/data/qcsrc/server/defs.qh
===================================================================
--- trunk/data/qcsrc/server/defs.qh	2008-06-29 14:58:05 UTC (rev 3736)
+++ trunk/data/qcsrc/server/defs.qh	2008-06-30 06:39:41 UTC (rev 3737)
@@ -1,6 +1,16 @@
 #define MAPINFO
 float require_spawnfunc_prefix; // if this float exists, only functions with spawnfunc_ name prefix qualify as spawn functions
 
+#define BUTTON_ATCK   button0
+#define BUTTON_JUMP   button2
+#define BUTTON_ATCK2  button3
+#define BUTTON_ZOOM   button4
+#define BUTTON_CROUCH button5
+#define BUTTON_HOOK   button6
+#define BUTTON_INFO   button7
+#define BUTTON_CHAT   buttonchat
+#define BUTTON_USE    buttonuse
+
 // Globals
 
 float g_domination, g_ctf, g_tdm, g_keyhunt, g_onslaught, g_assault, g_arena, g_lms, g_runematch;
@@ -432,3 +442,6 @@
 void Damage (entity targ, entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force);
 
 float lockteams;
+
+.float parm_idlesince;
+float sv_maxidle;

Modified: trunk/data/qcsrc/server/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/server/miscfunctions.qc	2008-06-29 14:58:05 UTC (rev 3736)
+++ trunk/data/qcsrc/server/miscfunctions.qc	2008-06-30 06:39:41 UTC (rev 3737)
@@ -652,6 +652,7 @@
 #define CENTERPRIO_VOTE 4
 #define CENTERPRIO_NORMAL 5
 #define CENTERPRIO_MAPVOTE 9
+#define CENTERPRIO_IDLEKICK 50
 #define CENTERPRIO_ADMIN 99
 .float centerprint_priority;
 .float centerprint_expires;
@@ -766,6 +767,7 @@
 	g_rocketarena = cvar("g_rocketarena");
 	g_vampire = cvar("g_vampire");
 	g_tourney = cvar("g_tourney");
+	sv_maxidle = cvar("sv_maxidle");
 
 	g_pickup_shells                    = cvar("g_pickup_shells");
 	g_pickup_shells_max                = cvar("g_pickup_shells_max");




More information about the nexuiz-commits mailing list