r2801 - trunk/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Sat Sep 1 08:52:57 EDT 2007


Author: div0
Date: 2007-09-01 08:52:57 -0400 (Sat, 01 Sep 2007)
New Revision: 2801

Modified:
   trunk/data/qcsrc/server/cl_player.qc
   trunk/data/qcsrc/server/cl_weapons.qc
   trunk/data/qcsrc/server/cl_weaponsystem.qc
   trunk/data/qcsrc/server/defs.qh
   trunk/data/qcsrc/server/g_casings.qc
   trunk/data/qcsrc/server/t_plats.qc
   trunk/data/qcsrc/server/t_quake.qc
   trunk/data/qcsrc/server/w_rocketlauncher.qc
   trunk/data/qcsrc/server/w_uzi.qc
Log:
separate refire timers for each weapon; fixes "faster Nex refire by switching Laser/Nex"


Modified: trunk/data/qcsrc/server/cl_player.qc
===================================================================
--- trunk/data/qcsrc/server/cl_player.qc	2007-09-01 12:50:38 UTC (rev 2800)
+++ trunk/data/qcsrc/server/cl_player.qc	2007-09-01 12:52:57 UTC (rev 2801)
@@ -107,7 +107,7 @@
 	}
 	else if (self.pain_finished > time)
 		self.frame = self.pain_frame;
-	else if (self.attack_finished > time)
+	else if (ATTACK_FINISHED(self) > time)
 		self.frame = $shoot;
 	else
 		self.frame = $idle;

Modified: trunk/data/qcsrc/server/cl_weapons.qc
===================================================================
--- trunk/data/qcsrc/server/cl_weapons.qc	2007-09-01 12:50:38 UTC (rev 2800)
+++ trunk/data/qcsrc/server/cl_weapons.qc	2007-09-01 12:52:57 UTC (rev 2801)
@@ -248,6 +248,10 @@
 		}
 	}
 
+	// don't let attack_finished fall behind when not firing (must be after weapon_setup calls!)
+	if (ATTACK_FINISHED(self) < time)
+		ATTACK_FINISHED(self) = time;
+
 	// call the think code which may fire the weapon
 	// and do so multiple times to resolve framerate dependency issues if the
 	// server framerate is very low and the weapon fire rate very high
@@ -264,10 +268,6 @@
 		}
 	}
 
-	// don't let attack_finished fall behind when not firing
-	if (self.attack_finished < time)
-		self.attack_finished = time;
-
 	// update currentammo incase it has changed
 	if (self.items & IT_CELLS)
 		self.currentammo = self.ammo_cells;

Modified: trunk/data/qcsrc/server/cl_weaponsystem.qc
===================================================================
--- trunk/data/qcsrc/server/cl_weaponsystem.qc	2007-09-01 12:50:38 UTC (rev 2800)
+++ trunk/data/qcsrc/server/cl_weaponsystem.qc	2007-09-01 12:52:57 UTC (rev 2801)
@@ -356,9 +356,6 @@
 	// the two weapon entities will notice this has changed and update their models
 	self.weapon = windex;
 	self.weaponname = wname;
-
-	// might fire faster after switch
-	self.attack_finished = min(max(time, self.attack_finished_old + 1), self.attack_finished);
 };
 
 // perform weapon to attack (weaponstate and attack_finished check is here)
@@ -372,14 +369,13 @@
 		return FALSE;
 	}
 	// don't fire if previous attack is not finished
-	if (self.attack_finished > time)
+	if (ATTACK_FINISHED(self) > time)
 		return FALSE;
 	// don't fire while changing weapon
 	if (self.weaponentity.state != WS_READY)
 		return FALSE;
 	self.weaponentity.state = WS_INUSE;
-	self.attack_finished_old = self.attack_finished;
-	self.attack_finished = max(time, self.attack_finished + attacktime);
+	ATTACK_FINISHED(self) = max(time, ATTACK_FINISHED(self) + attacktime);
 	return TRUE;
 };
 

Modified: trunk/data/qcsrc/server/defs.qh
===================================================================
--- trunk/data/qcsrc/server/defs.qh	2007-09-01 12:50:38 UTC (rev 2800)
+++ trunk/data/qcsrc/server/defs.qh	2007-09-01 12:52:57 UTC (rev 2801)
@@ -43,8 +43,6 @@
 .vector	pos1, pos2;
 .vector	mangle;
 
-.float	attack_finished;
-.float	attack_finished_old;
 .float	pain_finished;			//Added by Supajoe
 .float	pain_frame;			//"
 .float	statdraintime;			// record the one-second intervals between draining health and armour when they're over 100
@@ -322,5 +320,9 @@
 
 float bot_waypoints_for_items;
 
+.float	attack_finished_for[WEP_LAST + 1];
+.float attack_finished_single;
+#define ATTACK_FINISHED(ent) ((ent).(attack_finished_for[(ent).weapon]))
+
 // assault game mode: Which team is attacking in this round?
 float assault_attacker_team;

Modified: trunk/data/qcsrc/server/g_casings.qc
===================================================================
--- trunk/data/qcsrc/server/g_casings.qc	2007-09-01 12:50:38 UTC (rev 2800)
+++ trunk/data/qcsrc/server/g_casings.qc	2007-09-01 12:52:57 UTC (rev 2801)
@@ -7,9 +7,9 @@
 	}
 	if (other.solid == SOLID_BSP)
 	if (vlen(self.velocity) >= 50)
-	if (time >= self.attack_finished)
+	if (time >= self.attack_finished_single)
 	sound (self, CHAN_IMPACT, "weapons/tink1.wav", 0.5, ATTN_NORM);
-	self.attack_finished = time + 0.2;
+	self.attack_finished_single = time + 0.2;
 	//self.touch = SUB_Null; // one tink is enough
 	//self.dest = self.origin - self.groundentity.origin;
 };

Modified: trunk/data/qcsrc/server/t_plats.qc
===================================================================
--- trunk/data/qcsrc/server/t_plats.qc	2007-09-01 12:50:38 UTC (rev 2800)
+++ trunk/data/qcsrc/server/t_plats.qc	2007-09-01 12:52:57 UTC (rev 2801)
@@ -229,9 +229,9 @@
 
 void() train_blocked =
 {
-	if (time < self.attack_finished)
+	if (time < self.attack_finished_single)
 		return;
-	self.attack_finished = time + 0.5;
+	self.attack_finished_single = time + 0.5;
 };
 void() train_use =
 {
@@ -869,9 +869,9 @@
 	if (other.health < 1)
 		return;
 
-	if (time < self.attack_finished)
+	if (time < self.attack_finished_single)
 		return;
-	self.attack_finished = time + 1;
+	self.attack_finished_single = time + 1;
 
 	activator = other;
 
@@ -907,10 +907,10 @@
 {
 	if (other.classname != "player")
 		return;
-	if (self.owner.attack_finished > time)
+	if (self.owner.attack_finished_single > time)
 		return;
 
-	self.owner.attack_finished = time + 2;
+	self.owner.attack_finished_single = time + 2;
 
 	if (self.owner.message != "")
 	{
@@ -1292,9 +1292,9 @@
 
 void () secret_blocked =
 {
-	if (time < self.attack_finished)
+	if (time < self.attack_finished_single)
 		return;
-	self.attack_finished = time + 0.5;
+	self.attack_finished_single = time + 0.5;
 	//T_Damage (other, self, self, self.dmg, self.dmg, self.deathtype, DT_IMPACT, (self.absmin + self.absmax) * 0.5, '0 0 0', Obituary_Generic);
 };
 
@@ -1309,10 +1309,10 @@
 {
 	if (activator.classname != "player")
 		return;
-	if (self.attack_finished > time)
+	if (self.attack_finished_single > time)
 		return;
 
-	self.attack_finished = time + 2;
+	self.attack_finished_single = time + 2;
 
 	if (self.message)
 	{

Modified: trunk/data/qcsrc/server/t_quake.qc
===================================================================
--- trunk/data/qcsrc/server/t_quake.qc	2007-09-01 12:50:38 UTC (rev 2800)
+++ trunk/data/qcsrc/server/t_quake.qc	2007-09-01 12:52:57 UTC (rev 2801)
@@ -46,6 +46,7 @@
 	self.contentstransition = SUB_Null;
 	self.dphitcontentsmask = 0;
 	self.modelflags = 0;
+	self.attack_finished_for = 0; // why is this even valid? Spiiiiiiiiiiiiiiiiiiiiike!
 	trace_dphittexturename = "";
 }
 

Modified: trunk/data/qcsrc/server/w_rocketlauncher.qc
===================================================================
--- trunk/data/qcsrc/server/w_rocketlauncher.qc	2007-09-01 12:50:38 UTC (rev 2800)
+++ trunk/data/qcsrc/server/w_rocketlauncher.qc	2007-09-01 12:52:57 UTC (rev 2801)
@@ -24,11 +24,11 @@
 		if(self.owner.ammo_rockets < cvar("g_balance_rocketlauncher_ammo"))
 		{
 			self.owner.cnt = WEP_ROCKET_LAUNCHER;
-			self.owner.attack_finished = time;
+			ATTACK_FINISHED(self.owner) = time;
 			self.owner.switchweapon = w_getbestweapon(self.owner);
 		}
 		if(cvar("g_laserguided_missile"))
-				  self.owner.attack_finished = time + cvar("g_balance_rocketlauncher_refire");
+			ATTACK_FINISHED(self.owner) = time + cvar("g_balance_rocketlauncher_refire");
 	}
 	remove (self);
 }
@@ -134,9 +134,9 @@
 			{
 				if(self.owner.laser_on)
 				{
-					if(self.attack_finished < time)
+					if(self.attack_finished_single < time)
 					{
-						self.attack_finished = time + 0.2 + random()*0.3;
+						self.attack_finished_single = time + 0.2 + random()*0.3;
 						self.enemy = FindLaserTarget(self, 0.7, 0.7);
 					}
 
@@ -160,7 +160,7 @@
 				self.velocity = newdir * velspeed;					// make me fly in the new direction at my flight speed
 				self.angles = vectoangles(self.velocity);			// turn model in the new flight direction
 
-				self.owner.attack_finished = time + 0.2;
+				ATTACK_FINISHED(self.owner) = time + 0.2;
 			}
 		}
 		else
@@ -379,9 +379,9 @@
 		}
 		if (self.button3)
 		if(cvar("g_laserguided_missile"))
-		if(self.exteriorweaponentity.attack_finished < time)
+		if(self.exteriorweaponentity.attack_finished_single < time)
 		{
-			self.exteriorweaponentity.attack_finished = time + 0.4;
+			self.exteriorweaponentity.attack_finished_single = time + 0.4;
 			self.laser_on = !self.laser_on;
 			sound (self, CHAN_AUTO, "weapons/tink1.wav", 1, ATTN_NORM);
 		}
@@ -405,7 +405,7 @@
 	else if (req == WR_CHECKAMMO1)
 	{
 		// don't switch while guiding a missile
-		if ((self.attack_finished <= time || self.weapon != WEP_ROCKET_LAUNCHER)
+		if ((ATTACK_FINISHED(self) <= time || self.weapon != WEP_ROCKET_LAUNCHER)
 			&& self.ammo_rockets < cvar("g_balance_rocketlauncher_ammo"))
 			return FALSE;
 	}

Modified: trunk/data/qcsrc/server/w_uzi.qc
===================================================================
--- trunk/data/qcsrc/server/w_uzi.qc	2007-09-01 12:50:38 UTC (rev 2800)
+++ trunk/data/qcsrc/server/w_uzi.qc	2007-09-01 12:52:57 UTC (rev 2801)
@@ -18,7 +18,7 @@
 	}
 
 	// this attack_finished just enforces a cooldown at the end of a burst
-	self.attack_finished = time + cvar("g_balance_uzi_first_refire");
+	ATTACK_FINISHED(self) = time + cvar("g_balance_uzi_first_refire");
 
 	if (self.uzi_bulletcounter == 1)
 		fireBullet (w_shotorg, w_shotdir, cvar("g_balance_uzi_first_spread"), cvar("g_balance_uzi_first_damage"), cvar("g_balance_uzi_first_force"), IT_UZI, TRUE);
@@ -71,7 +71,7 @@
 			w_ready();
 			return;
 		}
-		self.attack_finished = time + cvar("g_balance_uzi_refire");
+		ATTACK_FINISHED(self) = time + cvar("g_balance_uzi_refire");
 		self.uzi_bulletcounter = self.uzi_bulletcounter + 1;
 		W_Uzi_Attack();
 		weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_uzi_sustained_refire"), uzi_fire1_02);




More information about the nexuiz-commits mailing list