r4457 - trunk/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Fri Sep 12 08:14:50 EDT 2008


Author: div0
Date: 2008-09-12 08:14:50 -0400 (Fri, 12 Sep 2008)
New Revision: 4457

Modified:
   trunk/data/qcsrc/server/arena.qc
   trunk/data/qcsrc/server/cl_client.qc
   trunk/data/qcsrc/server/cl_player.qc
   trunk/data/qcsrc/server/clientcommands.qc
   trunk/data/qcsrc/server/ctf.qc
   trunk/data/qcsrc/server/defs.qh
   trunk/data/qcsrc/server/portals.qc
Log:
CTF: fix portal exploit by adding a flag drop penalty of the same score as pickup if you drop the flag when going through a portal or suiciding


Modified: trunk/data/qcsrc/server/arena.qc
===================================================================
--- trunk/data/qcsrc/server/arena.qc	2008-09-12 11:40:53 UTC (rev 4456)
+++ trunk/data/qcsrc/server/arena.qc	2008-09-12 12:14:50 UTC (rev 4457)
@@ -12,7 +12,6 @@
 
 void PutObserverInServer();
 void PutClientInServer();
-void(entity e) DropFlag;
 void(entity e) ReturnFlag;
 void(entity e) removedecor;
 void dom_controlpoint_setup();
@@ -55,7 +54,7 @@
 		}
 		else if(self.items & (IT_KEY1 | IT_KEY2))
 		{
-			DropFlag(self);
+			DropFlag(self, 0);
 			ReturnFlag(self);
 		}
 		else if(self.classname == "rune")

Modified: trunk/data/qcsrc/server/cl_client.qc
===================================================================
--- trunk/data/qcsrc/server/cl_client.qc	2008-09-12 11:40:53 UTC (rev 4456)
+++ trunk/data/qcsrc/server/cl_client.qc	2008-09-12 12:14:50 UTC (rev 4457)
@@ -406,7 +406,7 @@
 	Portal_ClearAll(self);
 
 	if(self.flagcarried)
-		DropFlag(self.flagcarried);
+		DropFlag(self.flagcarried, 0);
 
 	WaypointSprite_PlayerDead();
 	
@@ -1230,7 +1230,6 @@
 Called when a client disconnects from the server
 =============
 */
-void(entity e) DropFlag;
 .entity chatbubbleentity;
 .entity teambubbleentity;
 void ReadyCount();
@@ -1281,7 +1280,7 @@
 	Portal_ClearAll(self);
 
 	if(self.flagcarried)
-		DropFlag(self.flagcarried);
+		DropFlag(self.flagcarried, 0);
 
 	save = self.flags;
 	self.flags = self.flags - (self.flags & FL_CLIENT);

Modified: trunk/data/qcsrc/server/cl_player.qc
===================================================================
--- trunk/data/qcsrc/server/cl_player.qc	2008-09-12 11:40:53 UTC (rev 4456)
+++ trunk/data/qcsrc/server/cl_player.qc	2008-09-12 12:14:50 UTC (rev 4457)
@@ -505,7 +505,12 @@
 		else
 			kh_Key_DropAll(self, TRUE);
 		if(self.flagcarried)
-			DropFlag(self.flagcarried);
+		{
+			if(attacker.classname != "player" || attacker.team == self.team)
+				DropFlag(self.flagcarried, 1); // penalty for flag loss by suicide
+			else
+				DropFlag(self.flagcarried, 0);
+		}
 		Portal_ClearAllLater(self);
 		// clear waypoints
 		WaypointSprite_PlayerDead();

Modified: trunk/data/qcsrc/server/clientcommands.qc
===================================================================
--- trunk/data/qcsrc/server/clientcommands.qc	2008-09-12 11:40:53 UTC (rev 4456)
+++ trunk/data/qcsrc/server/clientcommands.qc	2008-09-12 12:14:50 UTC (rev 4457)
@@ -1,5 +1,4 @@
 void ReadyCount();
-void(entity e) DropFlag;
 string MapVote_Suggest(string m);
 
 .float floodcontrol_chat;
@@ -213,7 +212,7 @@
 			return; // don't allow spectating in lms, unless player runs out of lives
 		if(self.classname == "player" && cvar("sv_spectate") == 1) {
 			if(self.flagcarried)
-				DropFlag(self.flagcarried);
+				DropFlag(self.flagcarried, 0);
 			kh_Key_DropAll(self, TRUE);
 			WaypointSprite_PlayerDead();
 			self.classname = "observer";

Modified: trunk/data/qcsrc/server/ctf.qc
===================================================================
--- trunk/data/qcsrc/server/ctf.qc	2008-09-12 11:40:53 UTC (rev 4456)
+++ trunk/data/qcsrc/server/ctf.qc	2008-09-12 12:14:50 UTC (rev 4457)
@@ -107,7 +107,7 @@
 	RegenFlag(e);
 };
 
-void DropFlag(entity e)
+void DropFlag(entity e, float penalty)
 {
 	local entity p;
 
@@ -130,6 +130,12 @@
 	}
 	bprint(p.netname, "^7 lost the ", e.netname, "\n");
 
+	if(penalty)
+	{
+		UpdateFrags(p, -cvar("g_ctf_flagscore_pickup"));
+		PlayerScore_Add(p, SP_CTF_PICKUPS, -1);
+	}
+
 	if(cvar("g_ctf_flagpenalty_drop"))
 		UpdateFrags(p, -cvar("g_ctf_flagpenalty_drop"));
 	
@@ -225,7 +231,7 @@
 	if (e.classname != "player" || (e.deadflag) || (e.flagcarried != self))
 	{
 		dprint("CANNOT HAPPEN - player dead and STILL had a flag!\n");
-		DropFlag(self);
+		DropFlag(self, 0);
 		return;
 	}
 };

Modified: trunk/data/qcsrc/server/defs.qh
===================================================================
--- trunk/data/qcsrc/server/defs.qh	2008-09-12 11:40:53 UTC (rev 4456)
+++ trunk/data/qcsrc/server/defs.qh	2008-09-12 12:14:50 UTC (rev 4457)
@@ -362,7 +362,7 @@
 
 float startitem_failed;
 
-void DropFlag(entity flag);
+void DropFlag(entity flag, float penalty);
 void DropAllRunes(entity pl);
 
 

Modified: trunk/data/qcsrc/server/portals.qc
===================================================================
--- trunk/data/qcsrc/server/portals.qc	2008-09-12 11:40:53 UTC (rev 4456)
+++ trunk/data/qcsrc/server/portals.qc	2008-09-12 12:14:50 UTC (rev 4457)
@@ -189,7 +189,7 @@
 	player.right_vector = -1 * Portal_Transform_Apply(transform, player.right_vector);
 
 	if(player.flagcarried)
-		DropFlag(player.flagcarried);
+		DropFlag(player.flagcarried, 1);
 	TeleportPlayer(teleporter, player, to, ang, newvel, teleporter.enemy.absmin, teleporter.enemy.absmax);
 
 	// reset fade counter




More information about the nexuiz-commits mailing list