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