[nexuiz-commits] r7698 - trunk/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Tue Sep 8 15:24:10 EDT 2009


Author: div0
Date: 2009-09-08 15:24:10 -0400 (Tue, 08 Sep 2009)
New Revision: 7698

Modified:
   trunk/data/qcsrc/server/cl_client.qc
   trunk/data/qcsrc/server/g_damage.qc
   trunk/data/qcsrc/server/miscfunctions.qc
Log:
random weapon arena: try to ensure the weapon ALWAYS changes on frag


Modified: trunk/data/qcsrc/server/cl_client.qc
===================================================================
--- trunk/data/qcsrc/server/cl_client.qc	2009-09-08 16:10:52 UTC (rev 7697)
+++ trunk/data/qcsrc/server/cl_client.qc	2009-09-08 19:24:10 UTC (rev 7698)
@@ -850,7 +850,7 @@
 		}
 
 		if(g_weaponarena_random)
-			self.weapons = randombits(self.weapons, g_weaponarena_random);
+			self.weapons = randombits(self.weapons, g_weaponarena_random, FALSE);
 
 		self.items = start_items;
 		self.switchweapon = w_getbestweapon(self);

Modified: trunk/data/qcsrc/server/g_damage.qc
===================================================================
--- trunk/data/qcsrc/server/g_damage.qc	2009-09-08 16:10:52 UTC (rev 7697)
+++ trunk/data/qcsrc/server/g_damage.qc	2009-09-08 19:24:10 UTC (rev 7698)
@@ -95,6 +95,8 @@
 void W_SwitchWeapon_Force(entity e, float w);
 void GiveFrags (entity attacker, entity targ, float f)
 {
+	float w;
+
 	// TODO route through PlayerScores instead
 	if(gameover) return;
 
@@ -127,7 +129,18 @@
 	if(g_weaponarena_random)
 	{
 		// after a frag, choose another random weapon set
-		attacker.weapons = randombits((inWarmupStage ? warmup_start_weapons : start_weapons), g_weaponarena_random);
+		if(inWarmupStage)
+			w = warmup_start_weapons;
+		else
+			w = start_weapons;
+
+		attacker.weapons = randombits(w - (w & W_WeaponBit(attacker.weapon)), g_weaponarena_random, TRUE);
+		if(attacker.weapons < 0)
+		{
+			// error from randombits: no weapon available
+			// this means we can just give ALL weapons
+			attacker.weapons = w;
+		}
 		if not(attacker.weapons & W_WeaponBit(attacker.weapon))
 			W_SwitchWeapon_Force(attacker, w_getbestweapon(attacker));
 	}

Modified: trunk/data/qcsrc/server/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/server/miscfunctions.qc	2009-09-08 16:10:52 UTC (rev 7697)
+++ trunk/data/qcsrc/server/miscfunctions.qc	2009-09-08 19:24:10 UTC (rev 7698)
@@ -2586,7 +2586,7 @@
 	return b;
 }
 
-float randombits(float bits, float k)
+float randombits(float bits, float k, float error_return)
 {
 	float r;
 	r = 0;
@@ -2595,6 +2595,9 @@
 		r += randombit(bits - r);
 		--k;
 	}
+	if(error_return)
+		if(k > 0)
+			return -1; // all
 	return r;
 }
 



More information about the nexuiz-commits mailing list