r5628 - trunk/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Thu Jan 22 07:03:34 EST 2009


Author: div0
Date: 2009-01-22 07:03:34 -0500 (Thu, 22 Jan 2009)
New Revision: 5628

Modified:
   trunk/data/qcsrc/server/arena.qc
   trunk/data/qcsrc/server/g_triggers.qc
Log:
make all triggers properly self-reset; still missing important stuff: items, and plats


Modified: trunk/data/qcsrc/server/arena.qc
===================================================================
--- trunk/data/qcsrc/server/arena.qc	2009-01-22 11:27:26 UTC (rev 5627)
+++ trunk/data/qcsrc/server/arena.qc	2009-01-22 12:03:34 UTC (rev 5628)
@@ -51,14 +51,9 @@
 		if(self.team_saved)
 			self.team = self.team_saved;
 
-		if(self.use == SUB_DontUseTargets)
-			self.use = SUB_UseTargets;
-
 		if(self.classname == STR_ITEM_KH_KEY)
 		{
 			kh_Key_AssignTo(self, world);
-			//if(self.owner)
-			//	kh_Key_DropAll(self.owner, TRUE);
 			kh_Key_Remove(self);
 		}
 		else if(self.classname == "droppedweapon"		// cleanup

Modified: trunk/data/qcsrc/server/g_triggers.qc
===================================================================
--- trunk/data/qcsrc/server/g_triggers.qc	2009-01-22 11:27:26 UTC (rev 5627)
+++ trunk/data/qcsrc/server/g_triggers.qc	2009-01-22 12:03:34 UTC (rev 5628)
@@ -169,9 +169,6 @@
 	{	// we can't just remove (self) here, because this is a touch function
 		// called wheil C code is looping through area links...
 		self.touch = SUB_Null;
-
-		self.nextthink = time + 0.1;
-		self.think = SUB_Remove;
 	}
 };
 
@@ -219,6 +216,16 @@
 	}
 }
 
+void multi_reset()
+{
+	self.touch = multi_touch;
+	self.health = self.max_health;
+	self.takedamage = DAMAGE_YES;
+	self.solid = SOLID_BBOX;
+	self.think = SUB_Null;
+	self.team = self.team_saved;
+}
+
 /*QUAKED spawnfunc_trigger_multiple (.5 .5 .5) ? notouch
 Variable sized repeatable trigger.  Must be targeted at one or more entities.  If "health" is set, the trigger must be killed to activate each time.
 If "delay" is set, the trigger waits some time after activating before firing.
@@ -234,6 +241,7 @@
 */
 void spawnfunc_trigger_multiple()
 {
+	self.reset = multi_reset;
 	if (self.sounds == 1)
 	{
 		precache_sound ("misc/secret.wav");
@@ -306,6 +314,7 @@
 void spawnfunc_trigger_relay()
 {
 	self.use = SUB_UseTargets;
+	self.reset = spawnfunc_trigger_relay; // this spawnfunc resets fully
 };
 
 void delay_use()
@@ -314,12 +323,18 @@
     self.nextthink = self.wait;
 }
 
+void delay_reset()
+{
+	self.think = SUB_Null;
+}
+
 void spawnfunc_trigger_delay()
 {
     if(!self.wait)
         self.wait = 1;
 
     self.use = delay_use;
+    self.reset = delay_reset;
 }
 
 //=============================================================================
@@ -355,6 +370,12 @@
 	multi_trigger ();
 };
 
+void counter_reset()
+{
+	self.count = self.cnt;
+	multi_reset();
+}
+
 /*QUAKED spawnfunc_trigger_counter (.5 .5 .5) ? nomessage
 Acts as an intermediary for an action that takes multiple inputs.
 
@@ -367,8 +388,10 @@
 	self.wait = -1;
 	if (!self.count)
 		self.count = 2;
+	self.cnt = self.count;
 
 	self.use = counter_use;
+	self.reset = counter_reset;
 };
 
 .float triggerhurttime;
@@ -594,6 +617,14 @@
 	self.nextthink = time;
 }
 
+void pointparticles_reset()
+{
+	if(self.spawnflags & 1)
+		self.state = 1;
+	else
+		self.state = 0;
+}
+
 void spawnfunc_func_pointparticles()
 {
 	if(self.model != "")
@@ -617,10 +648,8 @@
 	IFTARGETED
 	{
 		self.use = pointparticles_use;
-		if(self.spawnflags & 1)
-			self.state = 1;
-		else
-			self.state = 0;
+		self.reset = pointparticles_reset;
+		self.reset();
 	}
 	else
 		self.state = 1;
@@ -946,6 +975,14 @@
 	misc_laser_aim();
 }
 
+void laser_reset()
+{
+	if(self.spawnflags & 1)
+		self.state = 1;
+	else
+		self.state = 0;
+}
+
 void spawnfunc_misc_laser()
 {
 	if(self.mdl)
@@ -992,11 +1029,9 @@
 
 	IFTARGETED
 	{
+		self.reset = laser_reset;
+		laser_reset();
 		self.use = laser_use;
-		if(self.spawnflags & 1)
-			self.state = 1;
-		else
-			self.state = 0;
 	}
 	else
 		self.state = 1;
@@ -1197,7 +1232,8 @@
 {
 	if(self.spawnflags & 1)
 		self.state = 1;
-    self.use = flipflop_use;
+	self.use = flipflop_use;
+	self.reset = spawnfunc_trigger_flipflop; // perfect resetter
 }
 
 /*QUAKED spawnfunc_trigger_monoflop (.5 .5 .5) (-8 -8 -8) (8 8 8)
@@ -1229,6 +1265,12 @@
 	SUB_UseTargets();
 }
 
+void monoflop_reset()
+{
+	self.state = 0;
+	self.nextthink = 0;
+}
+
 void spawnfunc_trigger_monoflop()
 {
 	if(!self.wait)
@@ -1239,6 +1281,7 @@
 		self.use = monoflop_use;
 	self.think = monoflop_think;
 	self.state = 0;
+	self.reset = monoflop_reset;
 }
 
 void multivibrator_send()
@@ -1278,6 +1321,14 @@
 	}
 }
 
+void multivibrator_reset()
+{
+	if(!(self.spawnflags & 1))
+		self.nextthink = 0; // wait for a trigger event
+	else
+		self.nextthink = max(1, time);
+}
+
 /*QUAKED trigger_multivibrator (.5 .5 .5) (-8 -8 -8) (8 8 8) START_ON
 "Multivibrator" trigger gate... repeatedly sends trigger events. When triggered, turns on or off.
 -------- KEYS --------
@@ -1302,12 +1353,7 @@
 	self.nextthink = time;
 
 	IFTARGETED
-	{
-		if(!(self.spawnflags & 1))
-			self.nextthink = 0; // wait for a trigger event
-	}
-	else
-		self.nextthink = time;
+		multivibrator_reset();
 }
 
 
@@ -1471,10 +1517,16 @@
 	}
 }
 
+void trigger_relay_teamcheck_reset()
+{
+	self.team = self.team_saved;
+}
+
 void spawnfunc_trigger_relay_teamcheck()
 {
 	self.team_saved = self.team;
 	self.use = trigger_relay_teamcheck_use;
+	self.reset = trigger_relay_teamcheck_reset;
 }
 
 




More information about the nexuiz-commits mailing list