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