r2300 - trunk/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Wed Apr 11 13:39:28 EDT 2007


Author: div0
Date: 2007-04-11 13:39:28 -0400 (Wed, 11 Apr 2007)
New Revision: 2300

Modified:
   trunk/data/qcsrc/server/bots.qc
   trunk/data/qcsrc/server/cl_client.qc
   trunk/data/qcsrc/server/miscfunctions.qc
   trunk/data/qcsrc/server/t_teleporters.qc
Log:
no more tdeath


Modified: trunk/data/qcsrc/server/bots.qc
===================================================================
--- trunk/data/qcsrc/server/bots.qc	2007-04-11 16:16:16 UTC (rev 2299)
+++ trunk/data/qcsrc/server/bots.qc	2007-04-11 17:39:28 UTC (rev 2300)
@@ -1,7 +1,3 @@
-
-float(vector m1, vector m2, vector m3, vector m4) boxesoverlap = {return m2_x >= m3_x && m1_x <= m4_x && m2_y >= m3_y && m1_y <= m4_y && m2_z >= m3_z && m1_z <= m4_z;};
-float(vector smins, vector smaxs, vector bmins, vector bmaxs) boxinsidebox = {return smins_x >= bmins_x && smaxs_x <= bmaxs_x && smins_y >= bmins_y && smaxs_y <= bmaxs_y && smins_z >= bmins_z && smaxs_z <= bmaxs_z;};
-
 // rough simulation of walking from one point to another to test if a path
 // can be traveled, used by havocbot
 

Modified: trunk/data/qcsrc/server/cl_client.qc
===================================================================
--- trunk/data/qcsrc/server/cl_client.qc	2007-04-11 16:16:16 UTC (rev 2299)
+++ trunk/data/qcsrc/server/cl_client.qc	2007-04-11 17:39:28 UTC (rev 2300)
@@ -1307,6 +1307,13 @@
 			return;					// the think tics
 		}
 
+		if(time > self.teleport_time)
+		{
+			self.effects = self.effects - (self.effects & EF_NODRAW);
+			if(self.weaponentity)
+				self.weaponentity.flags = self.weaponentity.flags - (self.weaponentity.flags & EF_NODRAW);
+		}
+
 		Nixnex_GiveCurrentWeapon();
 		UpdateSelectedPlayer();
 

Modified: trunk/data/qcsrc/server/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/server/miscfunctions.qc	2007-04-11 16:16:16 UTC (rev 2299)
+++ trunk/data/qcsrc/server/miscfunctions.qc	2007-04-11 17:39:28 UTC (rev 2300)
@@ -552,3 +552,9 @@
 	else
 		return p.netname;
 }
+
+// requires that m2>m1 in all coordinates, and that m4>m3
+float(vector m1, vector m2, vector m3, vector m4) boxesoverlap = {return m2_x >= m3_x && m1_x <= m4_x && m2_y >= m3_y && m1_y <= m4_y && m2_z >= m3_z && m1_z <= m4_z;};
+
+// requires the same, but is a stronger condition
+float(vector smins, vector smaxs, vector bmins, vector bmaxs) boxinsidebox = {return smins_x >= bmins_x && smaxs_x <= bmaxs_x && smins_y >= bmins_y && smaxs_y <= bmaxs_y && smins_z >= bmins_z && smaxs_z <= bmaxs_z;};

Modified: trunk/data/qcsrc/server/t_teleporters.qc
===================================================================
--- trunk/data/qcsrc/server/t_teleporters.qc	2007-04-11 16:16:16 UTC (rev 2299)
+++ trunk/data/qcsrc/server/t_teleporters.qc	2007-04-11 17:39:28 UTC (rev 2300)
@@ -58,6 +58,8 @@
 
 void Teleport_Touch (void)
 {
+	entity head;
+
 	if (other.health < 1)
 		return;
 	if (!other.flags & FL_CLIENT)	// FIXME: Make missiles firable through the teleport too
@@ -72,17 +74,41 @@
 	makevectors (self.enemy.mangle);
 	te_teleport (self.enemy.origin + v_forward * 32);
 
-	spawn_tdeath(self.enemy.origin, other, other.origin);
-
 	// Relocate the player
-	//setorigin (other, self.enemy.origin);
 	setorigin (other, self.enemy.origin + '0 0 1' * (1 - other.mins_z - 24));
 	other.angles = self.enemy.mangle;
 	other.fixangle = TRUE;
-
-	// keep velocity but change movement direction
 	other.velocity = v_forward * vlen(other.velocity);
 
+	// Kill anyone else in the teleporter box (NO MORE TDEATH)
+	if(other.takedamage)
+	{
+		vector deathmin;
+		vector deathmax;
+		float deathradius;
+		deathmin = other.absmin;
+		deathmax = other.absmax;
+		deathradius = max(vlen(deathmin), vlen(deathmax));
+		for(head = findradius(other.origin, deathradius); head; head = head.chain)
+			if(head != other)
+				if(head.takedamage)
+					if(boxesoverlap(deathmin, deathmax, head.absmin, head.absmax))
+					{
+						if ((other.classname == "player") && (other.health >= 1))
+							Damage (head, self, other, 10000, DEATH_TELEFRAG, head.origin, '0 0 0');
+						else if (other.health < 1) // corpses gib
+							Damage (head, self, other, 10000, DEATH_TELEFRAG, head.origin, '0 0 0');
+						else // dead bodies and monsters gib themselves instead of telefragging
+							Damage (other, self, other, 10000, DEATH_TELEFRAG, other.origin, '0 0 0');
+					}
+	}
+	
+	// hide myself for 0.2 seconds
+	other.effects = other.effects | EF_NODRAW;
+	if (other.weaponentity) // misuse FL_FLY to avoid EF_NODRAW on viewmodel
+		other.weaponentity.flags = other.weaponentity.flags | FL_FLY;
+	other.teleport_time = time + 0.2;
+
 	other.flags = other.flags - (other.flags & FL_ONGROUND);
 	// reset tracking of oldvelocity for impact damage (sudden velocity changes)
 	other.oldvelocity = other.velocity;




More information about the nexuiz-commits mailing list