r1783 - branches/nexuiz-2.0/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Fri Jul 28 07:23:57 EDT 2006


Author: div0
Date: 2006-07-28 07:23:57 -0400 (Fri, 28 Jul 2006)
New Revision: 1783

Modified:
   branches/nexuiz-2.0/data/qcsrc/server/cl_impulse.qc
   branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc
   branches/nexuiz-2.0/data/qcsrc/server/cl_weapons.qc
Log:
weapon throw code on death and on pressing THROW merged; fixes "double weapon throw" bug


Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_impulse.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_impulse.qc	2006-07-28 11:22:05 UTC (rev 1782)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_impulse.qc	2006-07-28 11:23:57 UTC (rev 1783)
@@ -111,7 +111,7 @@
 		if (self.weapon != WEP_LASER
 			&& !cvar("g_minstagib") && !cvar("g_instagib")
 			&& !cvar("g_rocketarena") && !cvar("g_lms") && cvar("g_pickup_items") && !cvar("g_nixnex"))
-			W_ThrowWeapon();
+			W_ThrowWeapon(self.velocity * 0.5 + v_forward * 750, '0 0 0', TRUE);
 	}
 	else
 	{

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc	2006-07-28 11:22:05 UTC (rev 1782)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_player.qc	2006-07-28 11:23:57 UTC (rev 1783)
@@ -122,45 +122,15 @@
 
 void SpawnThrownWeapon (vector org, float w)
 {
-	local entity oldself;
-
 	if (!cvar("g_pickup_items"))
 	if (!cvar("g_minstagib"))
 		return;
+	if (!w)
+		return;
 	if (w == IT_LASER)
 		return;
 
-	oldself = self;
-	self = spawn();
-	// this will cause it to be removed later
-	self.classname = "droppedweapon";
-
-	setorigin(self, org);
-	self.velocity = randomvec() * 100 + '0 0 200';
-	SUB_SetFade(self, time + 20, 1);
-
-	if (w == WEP_UZI)
-		weapon_uzi ();
-	else if (w == WEP_SHOTGUN)
-		weapon_shotgun ();
-	else if (w == WEP_GRENADE_LAUNCHER)
-		weapon_grenadelauncher ();
-	else if (w == WEP_ELECTRO)
-		weapon_electro ();
-	else if (w == WEP_CRYLINK)
-		weapon_crylink ();
-	else if (w == WEP_NEX)
-		weapon_nex ();
-	else if (w == WEP_HAGAR)
-		weapon_hagar ();
-	else if (w == WEP_ROCKET_LAUNCHER)
-		weapon_rocketlauncher ();
-
-	// making absolutely sure...
-	self.classname = "droppedweapon";
-	self.colormap = oldself.colormap;
-
-	self = oldself;
+	W_ThrowWeapon(randomvec() * 100 + '0 0 200', org - self.origin, FALSE);
 }
 
 void PlayerCorpseDamage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
@@ -321,7 +291,7 @@
 		// become fully visible
 		self.alpha = 1;
 		// throw a weapon
-		SpawnThrownWeapon (self.origin + (self.mins + self.maxs) * 0.5, self.weapon);
+		SpawnThrownWeapon (self.origin + (self.mins + self.maxs) * 0.5, self.switchweapon);
 		// print an obituary message
 		Obituary (attacker, self, deathtype);
 		DropAllRunes(self);

Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_weapons.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_weapons.qc	2006-07-28 11:22:05 UTC (rev 1782)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_weapons.qc	2006-07-28 11:23:57 UTC (rev 1783)
@@ -34,7 +34,7 @@
 };
 
 // toss current weapon
-void() W_ThrowWeapon
+void(vector velo, vector delta, float doreduce) W_ThrowWeapon
 {
 	local float w, ammo;
 	local entity wep, e;
@@ -43,10 +43,10 @@
 	wep = spawn();
 	self = wep;
 	w = e.weapon;
-	setorigin(wep, e.origin);
+	setorigin(wep, e.origin + delta);
 	makevectors(e.angles);
 	wep.classname = "droppedweapon";
-	wep.velocity = e.velocity * 0.5 + v_forward * 750;
+	wep.velocity = velo; // e.velocity * 0.5 + v_forward * 750;
 	SUB_SetFade(wep, time + 20, 1);
 
 	if(w == WEP_SHOTGUN)
@@ -58,9 +58,12 @@
 			return;
 		}
 		weapon_shotgun();
-		ammo = min(e.ammo_shells, wep.ammo_shells);
-		wep.ammo_shells = ammo;
-		e.ammo_shells -= ammo;
+		if(doreduce)
+		{
+			ammo = min(e.ammo_shells, wep.ammo_shells);
+			wep.ammo_shells = ammo;
+			e.ammo_shells -= ammo;
+		}
 	}
 	else if(w == WEP_UZI)
 	{
@@ -71,9 +74,12 @@
 			return;
 		}
 		weapon_uzi();
-		ammo = min(e.ammo_nails, wep.ammo_nails);
-		wep.ammo_nails = ammo;
-		e.ammo_nails -= ammo;
+		if(doreduce)
+		{
+			ammo = min(e.ammo_nails, wep.ammo_nails);
+			wep.ammo_nails = ammo;
+			e.ammo_nails -= ammo;
+		}
 	}
 	else if(w == WEP_GRENADE_LAUNCHER)
 	{
@@ -84,9 +90,12 @@
 			return;
 		}
 		weapon_grenadelauncher();
-		ammo = min(e.ammo_rockets, wep.ammo_rockets);
-		wep.ammo_rockets = ammo;
-		e.ammo_rockets -= ammo;
+		if(doreduce)
+		{
+			ammo = min(e.ammo_rockets, wep.ammo_rockets);
+			wep.ammo_rockets = ammo;
+			e.ammo_rockets -= ammo;
+		}
 	}
 	else if(w == WEP_ELECTRO)
 	{
@@ -97,9 +106,12 @@
 			return;
 		}
 		weapon_electro();
-		ammo = min(e.ammo_cells, wep.ammo_cells);
-		wep.ammo_cells = ammo;
-		e.ammo_cells -= ammo;
+		if(doreduce)
+		{
+			ammo = min(e.ammo_cells, wep.ammo_cells);
+			wep.ammo_cells = ammo;
+			e.ammo_cells -= ammo;
+		}
 	}
 	else if(w == WEP_CRYLINK)
 	{
@@ -110,9 +122,12 @@
 			return;
 		}
 		weapon_crylink();
-		ammo = min(e.ammo_cells, wep.ammo_cells);
-		wep.ammo_cells = ammo;
-		e.ammo_cells -= ammo;
+		if(doreduce)
+		{
+			ammo = min(e.ammo_cells, wep.ammo_cells);
+			wep.ammo_cells = ammo;
+			e.ammo_cells -= ammo;
+		}
 	}
 	else if(w == WEP_NEX)
 	{
@@ -123,9 +138,12 @@
 			return;
 		}
 		weapon_nex();
-		ammo = min(e.ammo_cells, wep.ammo_cells);
-		wep.ammo_cells = ammo;
-		e.ammo_cells -= ammo;
+		if(doreduce)
+		{
+			ammo = min(e.ammo_cells, wep.ammo_cells);
+			wep.ammo_cells = ammo;
+			e.ammo_cells -= ammo;
+		}
 	}
 	else if(w == WEP_HAGAR)
 	{
@@ -136,9 +154,12 @@
 			return;
 		}
 		weapon_hagar();
-		ammo = min(e.ammo_rockets, wep.ammo_rockets);
-		wep.ammo_rockets = ammo;
-		e.ammo_rockets -= ammo;
+		if(doreduce)
+		{
+			ammo = min(e.ammo_rockets, wep.ammo_rockets);
+			wep.ammo_rockets = ammo;
+			e.ammo_rockets -= ammo;
+		}
 	}
 	else if(w == WEP_ROCKET_LAUNCHER)
 	{
@@ -149,9 +170,12 @@
 			return;
 		}
 		weapon_rocketlauncher();
-		ammo = min(e.ammo_rockets, wep.ammo_rockets);
-		wep.ammo_rockets = ammo;
-		e.ammo_rockets -= ammo;
+		if(doreduce)
+		{
+			ammo = min(e.ammo_rockets, wep.ammo_rockets);
+			wep.ammo_rockets = ammo;
+			e.ammo_rockets -= ammo;
+		}
 	}
 
 	if(e.items & w)




More information about the nexuiz-commits mailing list