r4346 - in trunk/data: qcsrc/common qcsrc/server scripts

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Fri Sep 5 02:52:33 EDT 2008


Author: div0
Date: 2008-09-05 02:52:32 -0400 (Fri, 05 Sep 2008)
New Revision: 4346

Modified:
   trunk/data/qcsrc/common/constants.qh
   trunk/data/qcsrc/server/cl_client.qc
   trunk/data/qcsrc/server/cl_weapons.qc
   trunk/data/qcsrc/server/miscfunctions.qc
   trunk/data/qcsrc/server/race.qc
   trunk/data/qcsrc/server/t_items.qc
   trunk/data/qcsrc/server/w_crylink.qc
   trunk/data/qcsrc/server/w_electro.qc
   trunk/data/qcsrc/server/w_grenadelauncher.qc
   trunk/data/qcsrc/server/w_hagar.qc
   trunk/data/qcsrc/server/w_minstanex.qc
   trunk/data/qcsrc/server/w_nex.qc
   trunk/data/qcsrc/server/w_porto.qc
   trunk/data/qcsrc/server/w_rocketlauncher.qc
   trunk/data/qcsrc/server/w_shotgun.qc
   trunk/data/qcsrc/server/w_uzi.qc
   trunk/data/scripts/entities.def
Log:
trigger_items


Modified: trunk/data/qcsrc/common/constants.qh
===================================================================
--- trunk/data/qcsrc/common/constants.qh	2008-09-05 06:07:56 UTC (rev 4345)
+++ trunk/data/qcsrc/common/constants.qh	2008-09-05 06:52:32 UTC (rev 4346)
@@ -293,6 +293,8 @@
 float WEP_LAST				= 11; float WEPBIT_ALL              = 2047;
 float WEP_COUNT             = 12;
 
+float	IT_UNLIMITED_AMMO       = 1;
+// when this bit is set, using a weapon does not reduce ammo. Checkpoints can give this powerup.
 float	IT_SHELLS				= 256;
 float	IT_NAILS				= 512;
 float	IT_ROCKETS				= 1024;

Modified: trunk/data/qcsrc/server/cl_client.qc
===================================================================
--- trunk/data/qcsrc/server/cl_client.qc	2008-09-05 06:07:56 UTC (rev 4345)
+++ trunk/data/qcsrc/server/cl_client.qc	2008-09-05 06:52:32 UTC (rev 4346)
@@ -633,7 +633,7 @@
 		self.ammo_cells = start_ammo_cells;
 		self.health = start_health;
 		self.armorvalue = start_armorvalue;
-		self.items = 0;
+		self.items = start_items;
 		self.weapons = start_weapons;
 		self.switchweapon = start_switchweapon;
 		self.cnt = start_switchweapon;

Modified: trunk/data/qcsrc/server/cl_weapons.qc
===================================================================
--- trunk/data/qcsrc/server/cl_weapons.qc	2008-09-05 06:07:56 UTC (rev 4345)
+++ trunk/data/qcsrc/server/cl_weapons.qc	2008-09-05 06:52:32 UTC (rev 4346)
@@ -399,20 +399,20 @@
 		if(nixnex_nextchange != self.nixnex_lastchange_id) // this shall only be called once per round!
 		{
 			self.nixnex_lastchange_id = nixnex_nextchange;
-			if (cvar("g_use_ammunition"))
+			if (self.items & IT_UNLIMITED_AMMO)
 			{
+				self.ammo_shells = cvar("g_pickup_shells_max");
+				self.ammo_nails = cvar("g_pickup_nails_max");
+				self.ammo_rockets = cvar("g_pickup_rockets_max");
+				self.ammo_cells = cvar("g_pickup_cells_max");
+			}
+			else
+			{
 				self.ammo_shells = cvar("g_balance_nixnex_ammo_shells");
 				self.ammo_nails = cvar("g_balance_nixnex_ammo_nails");
 				self.ammo_rockets = cvar("g_balance_nixnex_ammo_rockets");
 				self.ammo_cells = cvar("g_balance_nixnex_ammo_cells");
 			}
-			else
-			{
-				self.ammo_shells = cvar("g_pickup_shells_max");
-				self.ammo_nails = cvar("g_pickup_nails_max");
-				self.ammo_rockets = cvar("g_pickup_rockets_max");
-				self.ammo_cells = cvar("g_pickup_cells_max");
-			}
 			self.nixnex_nextincr = time + cvar("g_balance_nixnex_incrtime");
 			if(dt >= 1 && dt <= 5)
 				self.nixnex_lastinfotime = -42;
@@ -426,7 +426,7 @@
 				centerprint(self, strcat("^3", ftos(dt), "^2 seconds until weapon change...\n\nNext weapon: ^3", W_Name(nixnex_nextweapon), "\n"));
 		}
 
-		if(cvar("g_use_ammunition") && time > self.nixnex_nextincr)
+		if(!(self.items & IT_UNLIMITED_AMMO) && time > self.nixnex_nextincr)
 		{
 			self.ammo_shells = self.ammo_shells + cvar("g_balance_nixnex_ammoincr_shells");
 			self.ammo_nails = self.ammo_nails + cvar("g_balance_nixnex_ammoincr_nails");

Modified: trunk/data/qcsrc/server/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/server/miscfunctions.qc	2008-09-05 06:07:56 UTC (rev 4345)
+++ trunk/data/qcsrc/server/miscfunctions.qc	2008-09-05 06:52:32 UTC (rev 4346)
@@ -701,6 +701,7 @@
 float g_pickup_healthmega_max;
 
 float start_weapons;
+float start_items;
 float start_switchweapon;
 float start_ammo_shells;
 float start_ammo_nails;
@@ -770,6 +771,7 @@
 
 	// initialize starting values for players
 	start_weapons = 0;
+	start_items = 0;
 	start_switchweapon = 0;
 	start_ammo_shells = 0;
 	start_ammo_nails = 0;
@@ -784,6 +786,7 @@
 		start_switchweapon = WEP_ROCKET_LAUNCHER;
 		weapon_action(start_switchweapon, WR_PRECACHE);
 		start_ammo_rockets = 999;
+		start_items |= IT_UNLIMITED_AMMO;
 	}
 	else if(g_nixnex)
 	{
@@ -829,6 +832,7 @@
 			start_ammo_nails = cvar("g_pickup_nails_max");
 			start_ammo_rockets = cvar("g_pickup_rockets_max");
 			start_ammo_cells = cvar("g_pickup_cells_max");
+			start_items |= IT_UNLIMITED_AMMO;
 		}
 
 		for(i = WEP_FIRST; i <= WEP_LAST; ++i)

Modified: trunk/data/qcsrc/server/race.qc
===================================================================
--- trunk/data/qcsrc/server/race.qc	2008-09-05 06:07:56 UTC (rev 4345)
+++ trunk/data/qcsrc/server/race.qc	2008-09-05 06:52:32 UTC (rev 4346)
@@ -301,9 +301,29 @@
 
 void checkpoint_touch()
 {
+	if(other.classname == "porto")
+	{
+		// do not allow portalling through checkpoints
+		trace_plane_normal = normalize(-1 * other.velocity);
+		self = other;
+		W_Porto_Fail();
+		return;
+	}
+
 	if(other.classname != "player")
 		return;
 
+	/*
+	 * Remove unauthorized equipment
+	 */
+	Portal_ClearAll(other);
+
+	/*
+	 * Trigger targets
+	 */
+	activator = other;
+	SUB_UseTargets();
+
 	EXACTTRIGGER_TOUCH;
 
 	if(other.race_checkpoint == -1 || other.race_checkpoint == self.race_checkpoint)

Modified: trunk/data/qcsrc/server/t_items.qc
===================================================================
--- trunk/data/qcsrc/server/t_items.qc	2008-09-05 06:07:56 UTC (rev 4345)
+++ trunk/data/qcsrc/server/t_items.qc	2008-09-05 06:52:32 UTC (rev 4346)
@@ -24,6 +24,7 @@
 		case IT_NAILS:       return "nails";
 		case IT_ROCKETS:     return "rockets";
 		case IT_CELLS:       return "cells";
+
 		// add more things here (health, armor)
 		default:             error("requested item has no counter field name");
 	}
@@ -881,3 +882,141 @@
 	self.use = func_wall_use;
 }
 
+void trigger_items_use (void)
+{
+	if(activator.classname != "player")
+		return;
+	if(activator.deadflag != DEAD_NO)
+		return;
+	EXACTTRIGGER_TOUCH;
+
+	float _switchweapon;
+	_switchweapon = FALSE;
+	if (activator.autoswitch)
+		if (activator.switchweapon == w_getbestweapon(activator))
+			_switchweapon = TRUE;
+
+	if(self.spawnflags == 0) // SET
+	{
+		activator.ammo_shells = self.ammo_shells;
+		activator.ammo_nails = self.ammo_nails;
+		activator.ammo_rockets = self.ammo_rockets;
+		activator.ammo_cells = self.ammo_cells;
+		activator.health = self.health;
+		activator.armorvalue = self.armorvalue;
+		activator.weapons = self.weapons;
+		activator.items = self.items;
+
+		if(self.weapons)
+			sound (activator, CHAN_AUTO, "weapons/weaponpickup.wav", VOL_BASE, ATTN_NORM);
+		if(self.items)
+			sound (activator, CHAN_AUTO, "misc/itempickup.wav", VOL_BASE, ATTN_NORM);
+		if(self.health)
+			sound (activator, CHAN_AUTO, "misc/megahealth.wav", VOL_BASE, ATTN_NORM);
+		if(self.armorvalue)
+			sound (activator, CHAN_AUTO, "misc/armor25.wav", VOL_BASE, ATTN_NORM);
+		if(self.items & IT_STRENGTH)
+		{
+			sound (activator, CHAN_AUTO, "misc/powerup.wav", VOL_BASE, ATTN_NORM);
+			activator.strength_finished = max(activator.strength_finished, time + self.strength_finished);
+		}
+		if(self.items & IT_INVINCIBLE)
+		{
+			sound (activator, CHAN_AUTO, "misc/powerup_shield.wav", VOL_BASE, ATTN_NORM);
+			activator.invincible_finished = max(activator.invincible_finished, time + self.invincible_finished);
+		}
+	}
+	else if(self.spawnflags == 1) // AND/MIN
+	{
+		activator.ammo_shells = min(activator.ammo_shells, self.ammo_shells);
+		activator.ammo_nails = min(activator.ammo_nails, self.ammo_nails);
+		activator.ammo_rockets = min(activator.ammo_rockets, self.ammo_rockets);
+		activator.ammo_cells = min(activator.ammo_cells, self.ammo_cells);
+		activator.health = min(activator.health, self.health);
+		activator.armorvalue = min(activator.armorvalue, self.armorvalue);
+		activator.weapons = activator.weapons & self.weapons;
+		activator.items = activator.items & self.items;
+
+		if not(self.items & IT_STRENGTH)
+			activator.strength_finished = 0;
+		if not(self.items & IT_INVINCIBLE)
+			activator.invincible_finished = 0;
+	}
+	else if(self.spawnflags == 2) // OR/MAX
+	{
+		activator.ammo_shells = max(activator.ammo_shells, self.ammo_shells);
+		activator.ammo_nails = max(activator.ammo_nails, self.ammo_nails);
+		activator.ammo_rockets = max(activator.ammo_rockets, self.ammo_rockets);
+		activator.ammo_cells = max(activator.ammo_cells, self.ammo_cells);
+		activator.health = max(activator.health, self.health);
+		activator.armorvalue = max(activator.armorvalue, self.armorvalue);
+		activator.weapons |= self.weapons;
+		activator.items |= self.items;
+
+		if(self.weapons)
+			sound (activator, CHAN_AUTO, "weapons/weaponpickup.wav", VOL_BASE, ATTN_NORM);
+		if(self.items)
+			sound (activator, CHAN_AUTO, "misc/itempickup.wav", VOL_BASE, ATTN_NORM);
+		if(self.health)
+			sound (activator, CHAN_AUTO, "misc/megahealth.wav", VOL_BASE, ATTN_NORM);
+		if(self.armorvalue)
+			sound (activator, CHAN_AUTO, "misc/armor25.wav", VOL_BASE, ATTN_NORM);
+		if(self.items & IT_STRENGTH)
+		{
+			sound (activator, CHAN_AUTO, "misc/powerup.wav", VOL_BASE, ATTN_NORM);
+			activator.strength_finished = max(activator.strength_finished, time + self.strength_finished);
+		}
+		if(self.items & IT_INVINCIBLE)
+		{
+			sound (activator, CHAN_AUTO, "misc/powerup_shield.wav", VOL_BASE, ATTN_NORM);
+			activator.invincible_finished = max(activator.invincible_finished, time + self.invincible_finished);
+		}
+	}
+	else if(self.spawnflags == 4) // ANDNOT/MIN
+	{
+		activator.ammo_shells = min(activator.ammo_shells, self.ammo_shells);
+		activator.ammo_nails = min(activator.ammo_nails, self.ammo_nails);
+		activator.ammo_rockets = min(activator.ammo_rockets, self.ammo_rockets);
+		activator.ammo_cells = min(activator.ammo_cells, self.ammo_cells);
+		activator.health = min(activator.health, self.health);
+		activator.armorvalue = min(activator.armorvalue, self.armorvalue);
+		activator.weapons -= activator.weapons & self.weapons;
+		activator.items -= activator.items & self.items;
+
+		if(self.items & IT_STRENGTH)
+			activator.strength_finished = 0;
+		if(self.items & IT_INVINCIBLE)
+			activator.invincible_finished = 0;
+	}
+
+	if not(activator.weapons & W_WeaponBit(activator.switchweapon))
+		_switchweapon = TRUE;
+	if(_switchweapon)
+		W_SwitchWeapon_Force(activator, w_getbestweapon(activator));
+}
+
+void spawnfunc_trigger_items (void)
+{
+	float n, i, j;
+	entity e;
+	EXACTTRIGGER_INIT;
+	self.use = trigger_items_use;
+	if(!self.strength_finished)
+		self.strength_finished = cvar("g_balance_powerup_strength_time");
+	if(!self.invincible_finished)
+		self.invincible_finished = cvar("g_balance_powerup_invincible_time");
+	
+	n = tokenize(self.message);
+	for(i = 0; i < n; ++i)
+	{
+		if(argv(i) == "unlimited_ammo") self.items |= IT_UNLIMITED_AMMO;
+		if(argv(i) == "strength")       self.items |= IT_STRENGTH;
+		if(argv(i) == "shield")         self.items |= IT_INVINCIBLE;
+		for(j = WEP_FIRST; j <= WEP_LAST; ++j)
+		{
+			e = get_weaponinfo(j);
+			if(argv(i) == e.netname)
+				self.weapons |= e.weapons;
+		}
+	}
+}

Modified: trunk/data/qcsrc/server/w_crylink.qc
===================================================================
--- trunk/data/qcsrc/server/w_crylink.qc	2008-09-05 06:07:56 UTC (rev 4345)
+++ trunk/data/qcsrc/server/w_crylink.qc	2008-09-05 06:52:32 UTC (rev 4346)
@@ -67,7 +67,7 @@
 	local entity proj;
 	local vector s;
 
-	if (cvar("g_use_ammunition"))
+	if not(self.items & IT_UNLIMITED_AMMO)
 		self.ammo_cells = self.ammo_cells - cvar("g_balance_crylink_primary_ammo");
 
 	W_SetupShot (self, '25 8 -8', FALSE, 2, "weapons/crylink_fire.wav");
@@ -131,7 +131,7 @@
 	local float counter, shots;
 	local entity proj;
 
-	if (cvar("g_use_ammunition"))
+	if not(self.items & IT_UNLIMITED_AMMO)
 		self.ammo_cells = self.ammo_cells - cvar("g_balance_crylink_secondary_ammo");
 
 	W_SetupShot (self, '25 8 -8', FALSE, 2, "weapons/crylink_fire.wav");
@@ -180,7 +180,7 @@
 // experimental lightning gun
 void W_Crylink_Attack3 (void)
 {
-	if (cvar("g_use_ammunition"))
+	if not(self.items & IT_UNLIMITED_AMMO)
 		self.ammo_cells = self.ammo_cells - cvar("g_balance_crylink_primary_ammo");
 	W_SetupShot (self, '25 8 -8', TRUE, 0, "weapons/crylink_fire.wav");
 

Modified: trunk/data/qcsrc/server/w_electro.qc
===================================================================
--- trunk/data/qcsrc/server/w_electro.qc	2008-09-05 06:07:56 UTC (rev 4345)
+++ trunk/data/qcsrc/server/w_electro.qc	2008-09-05 06:52:32 UTC (rev 4346)
@@ -109,7 +109,7 @@
 	proj.solid = SOLID_BBOX;
 	setorigin(proj, w_shotorg);
 
-	if (cvar("g_use_ammunition"))
+	if not(self.items & IT_UNLIMITED_AMMO)
 		self.ammo_cells = self.ammo_cells - cvar("g_balance_electro_primary_ammo");
 	proj.effects = EF_BRIGHTFIELD | EF_LOWPRECISION;
 	proj.movetype = MOVETYPE_FLY;
@@ -143,7 +143,7 @@
 	proj.solid = SOLID_BBOX;
 	setorigin(proj, w_shotorg);
 
-	if (cvar("g_use_ammunition"))
+	if not(self.items & IT_UNLIMITED_AMMO)
 		self.ammo_cells = self.ammo_cells - cvar("g_balance_electro_secondary_ammo");
 	proj.effects = EF_LOWPRECISION;
 	//proj.glow_size = 50;

Modified: trunk/data/qcsrc/server/w_grenadelauncher.qc
===================================================================
--- trunk/data/qcsrc/server/w_grenadelauncher.qc	2008-09-05 06:07:56 UTC (rev 4345)
+++ trunk/data/qcsrc/server/w_grenadelauncher.qc	2008-09-05 06:52:32 UTC (rev 4346)
@@ -76,7 +76,7 @@
 {
 	local entity gren;
 
-	if (cvar("g_use_ammunition"))
+	if not(self.items & IT_UNLIMITED_AMMO)
 		self.ammo_rockets = self.ammo_rockets - cvar("g_balance_grenadelauncher_primary_ammo");
 	W_SetupShot (self, '25 6 -8', FALSE, 4, "weapons/grenade_fire.wav");
 	//W_SetupShot (self, '25 8 -8', FALSE, 4, "weapons/grenade_fire.wav"); // TODO: move model to the right a little
@@ -111,7 +111,7 @@
 {
 	local entity gren;
 
-	if (cvar("g_use_ammunition"))
+	if not(self.items & IT_UNLIMITED_AMMO)
 		self.ammo_rockets = self.ammo_rockets - cvar("g_balance_grenadelauncher_secondary_ammo");
 	W_SetupShot (self, '25 6 -8', FALSE, 4, "weapons/grenade_fire.wav");
 	//W_SetupShot (self, '25 8 -8', FALSE, 4, "weapons/grenade_fire.wav"); // TODO: move model to the right a little

Modified: trunk/data/qcsrc/server/w_hagar.qc
===================================================================
--- trunk/data/qcsrc/server/w_hagar.qc	2008-09-05 06:07:56 UTC (rev 4345)
+++ trunk/data/qcsrc/server/w_hagar.qc	2008-09-05 06:52:32 UTC (rev 4346)
@@ -80,7 +80,7 @@
 {
 	local entity missile;
 
-	if (cvar("g_use_ammunition"))
+	if not(self.items & IT_UNLIMITED_AMMO)
 		self.ammo_rockets = self.ammo_rockets - cvar("g_balance_hagar_primary_ammo");
 	W_SetupShot (self, '25 5 -8', FALSE, 2, "weapons/hagar_fire.wav");
 	//W_SetupShot (self, '25 8 -8', FALSE, 2, "weapons/hagar_fire.wav"); // TODO: move model a little to the right
@@ -119,7 +119,7 @@
 {
 	local entity missile;
 
-	if (cvar("g_use_ammunition"))
+	if not(self.items & IT_UNLIMITED_AMMO)
 		self.ammo_rockets = self.ammo_rockets - cvar("g_balance_hagar_secondary_ammo");
 	W_SetupShot (self, '25 5 -8', FALSE, 2, "weapons/hagar_fire.wav");
 	//W_SetupShot (self, '25 8 -8', FALSE, 2, "weapons/hagar_fire.wav"); // TODO: move model a little to the right

Modified: trunk/data/qcsrc/server/w_minstanex.qc
===================================================================
--- trunk/data/qcsrc/server/w_minstanex.qc	2008-09-05 06:07:56 UTC (rev 4345)
+++ trunk/data/qcsrc/server/w_minstanex.qc	2008-09-05 06:52:32 UTC (rev 4346)
@@ -23,7 +23,7 @@
 	// play a sound
 	soundat (self, trace_endpos, CHAN_PROJECTILE, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM);
 
-	if (cvar("g_use_ammunition"))
+	if not(self.items & IT_UNLIMITED_AMMO)
 	{
 		if (g_minstagib)
 			self.ammo_cells = self.ammo_cells - 1;

Modified: trunk/data/qcsrc/server/w_nex.qc
===================================================================
--- trunk/data/qcsrc/server/w_nex.qc	2008-09-05 06:07:56 UTC (rev 4345)
+++ trunk/data/qcsrc/server/w_nex.qc	2008-09-05 06:52:32 UTC (rev 4346)
@@ -22,7 +22,7 @@
 	// play a sound
 	soundat (self, trace_endpos, CHAN_PROJECTILE, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM);
 
-	if (cvar("g_use_ammunition"))
+	if not(self.items & IT_UNLIMITED_AMMO)
 	{
 		self.ammo_cells = self.ammo_cells - cvar("g_balance_nex_ammo");
 	}

Modified: trunk/data/qcsrc/server/w_porto.qc
===================================================================
--- trunk/data/qcsrc/server/w_porto.qc	2008-09-05 06:07:56 UTC (rev 4345)
+++ trunk/data/qcsrc/server/w_porto.qc	2008-09-05 06:52:32 UTC (rev 4346)
@@ -98,7 +98,7 @@
 {
 	local entity gren;
 
-	if (cvar("g_use_ammunition"))
+	if not(self.items & IT_UNLIMITED_AMMO)
 		self.weapons = self.weapons - (self.weapons & WEPBIT_PORTO);
 	W_SetupShot (self, '0 0 0', FALSE, 4, "weapons/grenade_fire.wav");
 

Modified: trunk/data/qcsrc/server/w_rocketlauncher.qc
===================================================================
--- trunk/data/qcsrc/server/w_rocketlauncher.qc	2008-09-05 06:07:56 UTC (rev 4345)
+++ trunk/data/qcsrc/server/w_rocketlauncher.qc	2008-09-05 06:52:32 UTC (rev 4346)
@@ -213,7 +213,7 @@
 	local entity missile;
 	local entity flash, flash2;
 
-	if (cvar("g_use_ammunition") && !g_rocketarena)
+	if not(self.items & IT_UNLIMITED_AMMO)
 		self.ammo_rockets = self.ammo_rockets - cvar("g_balance_rocketlauncher_ammo");
 
 	W_SetupShot (self, '25 3 -4', FALSE, 5, "weapons/rocket_fire.wav");

Modified: trunk/data/qcsrc/server/w_shotgun.qc
===================================================================
--- trunk/data/qcsrc/server/w_shotgun.qc	2008-09-05 06:07:56 UTC (rev 4345)
+++ trunk/data/qcsrc/server/w_shotgun.qc	2008-09-05 06:52:32 UTC (rev 4346)
@@ -16,7 +16,7 @@
 	W_SetupShot (self, '25 8 -8', TRUE, 5, "weapons/shotgun_fire.wav");
 	for (sc = 0;sc < bullets;sc = sc + 1)
 		fireBullet (w_shotorg, w_shotdir, spread, d, f, WEP_SHOTGUN, sc < 3);
-	if (cvar("g_use_ammunition"))
+	if not(self.items & IT_UNLIMITED_AMMO)
 		self.ammo_shells = self.ammo_shells - cvar("g_balance_shotgun_primary_ammo");
 
 	pointparticles(particleeffectnum("shotgun_muzzleflash"), w_shotorg, w_shotdir * 1000, cvar("g_balance_shotgun_primary_ammo"));
@@ -59,7 +59,7 @@
 	W_SetupShot (self, '25 8 -8', TRUE, 5, "weapons/shotgun_fire.wav");
 	for (sc = 0;sc < bullets;sc = sc + 1)
 		fireBullet (w_shotorg, w_shotdir, spread, d, f, WEP_SHOTGUN, sc < 3);
-	if (cvar("g_use_ammunition"))
+	if not(self.items & IT_UNLIMITED_AMMO)
 		self.ammo_shells = self.ammo_shells - cvar("g_balance_shotgun_secondary_ammo");
 
 	pointparticles(particleeffectnum("shotgun_muzzleflash"), w_shotorg, w_shotdir * 1000, cvar("g_balance_shotgun_secondary_ammo"));

Modified: trunk/data/qcsrc/server/w_uzi.qc
===================================================================
--- trunk/data/qcsrc/server/w_uzi.qc	2008-09-05 06:07:56 UTC (rev 4345)
+++ trunk/data/qcsrc/server/w_uzi.qc	2008-09-05 06:52:32 UTC (rev 4346)
@@ -15,7 +15,7 @@
 {
 	local entity flash, flash2;
 
-	if (cvar("g_use_ammunition"))
+	if not(self.items & IT_UNLIMITED_AMMO)
 	{
 		if (self.uzi_bulletcounter == 1)
 			self.ammo_nails = self.ammo_nails - cvar("g_balance_uzi_first_ammo");

Modified: trunk/data/scripts/entities.def
===================================================================
--- trunk/data/scripts/entities.def	2008-09-05 06:07:56 UTC (rev 4345)
+++ trunk/data/scripts/entities.def	2008-09-05 06:52:32 UTC (rev 4346)
@@ -922,6 +922,7 @@
 cnt: Number of the checkpoint. 0 for finish line, and at least two other checkpoints have to exist. They MUST be touched in sequential order!
 message: Death message, when touching checkpoints in the wrong order.
 targetname: Name of the checkpoint. info_player_race can target this to assign a spawn to a checkpoint. Also used for triggering a checkpoint by an event.
+target: when the checkpoint is passed, these entities are triggered. Useful for forcing items in certain areas using trigger_items
 -------- SPAWNFLAGS --------
 NOTOUCH: the checkpoint will not become active when touched, it HAS to be targeted
 CRUSH: the checkpoint kills when used at the wrong time
@@ -1006,6 +1007,7 @@
 
 /*QUAKED weapon_porto (1 0 .5) (-30 -30 0) (30 30 32) FLOATING
 the Port-O-Launch. Only can be shot once.
+Portals cannot be made on noimpact surfaces, and the portal missile will bounce on slick surfaces.
 -------- KEYS --------
 respawntime: time till it respawns (default: 120)
 team: out of items with the same value here, only one (random one) will spawn. Useful to put multiple items on one spot.
@@ -1014,3 +1016,19 @@
 -------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
 model="models/weapons/g_porto.md3"
 */
+
+/*QUAKED trigger_items (0 0 1) (-8 -8 -8) (8 8 8) AND OR ANDNOT
+Sets the items of any player who triggers this.
+-------- KEYS --------
+message: space separated list of items (either weapon short names (like in g_start_weapon_* cvars), or item short names "unlimited_ammo", "shield" and "strength"
+ammo_shells: amount of shells
+ammo_nails: amount of bullets
+ammo_rockets: amount of rockets
+ammo_cells: amount of cells
+health: amount of health
+armorvalue: amount of armor
+-------- SPAWNFLAGS --------
+AND: any items not listed will get removed, and none will get added
+OR: the player may keep items not listed
+ANDNOT: the items listed will get removed from the player
+*/




More information about the nexuiz-commits mailing list