From 8620cba39e5bebe8df95da6fac324bb5cfb9692a Mon Sep 17 00:00:00 2001 From: div0 Date: Mon, 29 Sep 2008 06:13:44 +0000 Subject: [PATCH] implement CTF suggestion by [-z-] as comments git-svn-id: svn://svn.icculus.org/nexuiz/trunk@4546 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/defaultNexuiz.cfg | 86 ++++++++++++++++++----------- data/qcsrc/server/arena.qc | 2 +- data/qcsrc/server/cl_client.qc | 4 +- data/qcsrc/server/cl_player.qc | 6 +- data/qcsrc/server/clientcommands.qc | 2 +- data/qcsrc/server/ctf.qc | 20 ++++--- data/qcsrc/server/defs.qh | 2 +- data/qcsrc/server/portals.qc | 2 +- 8 files changed, 77 insertions(+), 47 deletions(-) diff --git a/data/defaultNexuiz.cfg b/data/defaultNexuiz.cfg index b807e2e5a..4df36a61b 100644 --- a/data/defaultNexuiz.cfg +++ b/data/defaultNexuiz.cfg @@ -387,40 +387,64 @@ set g_dm 1 set gamecfg 1 // deathmatch // ctf -set g_ctf 0 -set g_ctf_flag_returntime 30 +set g_ctf 0 +set g_ctf_flag_returntime 30 -set g_ctf_flagscore_pickup 1 -set g_ctf_flagscore_capture 20 -set g_ctf_flagscore_kill 1 -set g_ctf_flagpenalty_drop 0 -set g_ctf_flagpenalty_suicidedrop 1 -set g_ctf_flagscore_return 5 -set g_ctf_flagscore_return_rogue 10 -set g_ctf_flagscore_return_by_killer 5 -set g_ctf_flagscore_return_rogue_by_killer 10 -// succeeded capture (pickup capture) 21 (0 for enemy) -// failed capture (pickup kill drop return) 1 (6 for enemy) -// capture retry (kill drop pickup) 1 (1 for enemy) -// suicide, then retake (suicidedrop pickup) 0 (0 for enemy) +set g_ctf_flagscore_pickup_base 1 +set g_ctf_flagscore_pickup_dropped_early 1 +set g_ctf_flagscore_pickup_dropped_late 5 +set g_ctf_flagscore_capture 20 +set g_ctf_flagscore_kill 1 +set g_ctf_flagpenalty_drop 0 +set g_ctf_flagpenalty_suicidedrop 1 +set g_ctf_flagscore_return 5 +set g_ctf_flagscore_return_rogue 10 +set g_ctf_flagscore_return_by_killer 5 +set g_ctf_flagscore_return_rogue_by_killer 10 +// succeeded capture (pickup capture) 21 (0 for enemy) +// failed capture (pickup kill drop return) 1 (6 for enemy) +// failed (shot into void) (pickup kill drop) 1 (1 for enemy) +// capture retry (kill drop pickup) 1 (1 for enemy) +// suicide, then retake (suicidedrop pickup) 0 (0 for enemy) // Suggestion by Alien: -// set g_ctf_flagscore_pickup 1 -// set g_ctf_flagscore_capture 30 -// set g_ctf_flagscore_kill 1 -// set g_ctf_flagpenalty_drop -2 -// set g_ctf_flagpenalty_suicidedrop -2 -// set g_ctf_flagscore_return 5 -// set g_ctf_flagscore_return_rogue 10 -// set g_ctf_flagscore_return_by_killer 6 -// set g_ctf_flagscore_return_rogue_by_killer 11 -// // succeeded capture (pickup capture) 31 (0 for enemy) -// // failed capture (pickup kill drop return) -1 (6 or 7 for enemy) -// // capture retry (kill drop pickup) -1 (1 for enemy) -// // suicide, then retake (suicidedrop pickup) -1 (0 for enemy) - -set g_ctf_flagcarrier_selfdamage 1 -set g_ctf_flagcarrier_selfforce 0.7 +// set g_ctf_flagscore_pickup_base 1 +// set g_ctf_flagscore_pickup_dropped_early 1 +// set g_ctf_flagscore_pickup_dropped_late 1 +// set g_ctf_flagscore_capture 30 +// set g_ctf_flagscore_kill 1 +// set g_ctf_flagpenalty_drop -2 +// set g_ctf_flagpenalty_suicidedrop -2 +// set g_ctf_flagscore_return 5 +// set g_ctf_flagscore_return_rogue 10 +// set g_ctf_flagscore_return_by_killer 6 +// set g_ctf_flagscore_return_rogue_by_killer 11 +// // succeeded capture (pickup capture) 31 (0 for enemy) +// // failed capture (pickup kill drop return) -1 (6 or 7 for enemy) +// // failed (shot into void) (pickup kill drop) 1 (1 for enemy) +// // capture retry (kill drop pickup) -1 (1 for enemy) +// // suicide, then retake (suicidedrop pickup) -1 (0 for enemy) + +// Suggestion by [-z-] +// set g_ctf_flagscore_pickup_base -5 +// set g_ctf_flagscore_pickup_dropped_early 1 +// set g_ctf_flagscore_pickup_dropped_late 5 +// set g_ctf_flagscore_capture 30 +// set g_ctf_flagscore_kill 5 +// set g_ctf_flagpenalty_drop -5 +// set g_ctf_flagpenalty_suicidedrop -5 +// set g_ctf_flagscore_return 3 +// set g_ctf_flagscore_return_rogue 10 +// set g_ctf_flagscore_return_by_killer 3 +// set g_ctf_flagscore_return_rogue_by_killer 10 +// // succeeded capture (pickup capture) 25 (0 for enemy) +// // failed capture (pickup kill drop return) -10 (8 for enemy) +// // failed (shot into void) (pickup kill drop) -10 (5 for enemy) +// // capture retry (kill drop pickup) -1..-4 (5 for enemy) +// // suicide, then retake (suicidedrop pickup) -1..-4 (0 for enemy) + +set g_ctf_flagcarrier_selfdamage 1 +set g_ctf_flagcarrier_selfforce 1 // runematch set g_runematch 0 diff --git a/data/qcsrc/server/arena.qc b/data/qcsrc/server/arena.qc index 76f3ef005..792bbc25b 100644 --- a/data/qcsrc/server/arena.qc +++ b/data/qcsrc/server/arena.qc @@ -54,7 +54,7 @@ void reset_map() } else if(self.items & (IT_KEY1 | IT_KEY2)) { - DropFlag(self, world); + DropFlag(self, world, world); ReturnFlag(self); } else if(self.classname == "rune") diff --git a/data/qcsrc/server/cl_client.qc b/data/qcsrc/server/cl_client.qc index 2c5906436..b378b1d47 100644 --- a/data/qcsrc/server/cl_client.qc +++ b/data/qcsrc/server/cl_client.qc @@ -417,7 +417,7 @@ void PutObserverInServer (void) Portal_ClearAll(self); if(self.flagcarried) - DropFlag(self.flagcarried, world); + DropFlag(self.flagcarried, world, world); WaypointSprite_PlayerDead(); @@ -1313,7 +1313,7 @@ void ClientDisconnect (void) Portal_ClearAll(self); if(self.flagcarried) - DropFlag(self.flagcarried, world); + DropFlag(self.flagcarried, world, world); save = self.flags; self.flags = self.flags - (self.flags & FL_CLIENT); diff --git a/data/qcsrc/server/cl_player.qc b/data/qcsrc/server/cl_player.qc index c99d7627a..19746670c 100644 --- a/data/qcsrc/server/cl_player.qc +++ b/data/qcsrc/server/cl_player.qc @@ -508,11 +508,11 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht if(self.flagcarried) { if(attacker.classname != "player" && attacker.classname != "gib") - DropFlag(self.flagcarried, self); // penalty for flag loss by suicide + DropFlag(self.flagcarried, self, attacker); // penalty for flag loss by suicide else if(attacker.team == self.team) - DropFlag(self.flagcarried, attacker); // penalty for flag loss by suicide/teamkill + DropFlag(self.flagcarried, attacker, attacker); // penalty for flag loss by suicide/teamkill else - DropFlag(self.flagcarried, world); + DropFlag(self.flagcarried, world, attacker); } Portal_ClearAllLater(self); // clear waypoints diff --git a/data/qcsrc/server/clientcommands.qc b/data/qcsrc/server/clientcommands.qc index 53d2d2514..beb21904a 100644 --- a/data/qcsrc/server/clientcommands.qc +++ b/data/qcsrc/server/clientcommands.qc @@ -270,7 +270,7 @@ void SV_ParseClientCommand(string s) { 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, world); + DropFlag(self.flagcarried, world, world); kh_Key_DropAll(self, TRUE); WaypointSprite_PlayerDead(); self.classname = "observer"; diff --git a/data/qcsrc/server/ctf.qc b/data/qcsrc/server/ctf.qc index 5bb609542..38b15e15f 100644 --- a/data/qcsrc/server/ctf.qc +++ b/data/qcsrc/server/ctf.qc @@ -106,7 +106,7 @@ void ReturnFlag(entity e) RegenFlag(e); }; -void DropFlag(entity e, entity penalty_receiver) +void DropFlag(entity e, entity penalty_receiver, entity attacker) { local entity p; @@ -134,9 +134,8 @@ void DropFlag(entity e, entity penalty_receiver) else UpdateFrags(p, -cvar("g_ctf_flagpenalty_drop")); PlayerScore_Add(p, SP_CTF_DROPS, +1); + e.playerid = attacker.playerid; - //if(e.enemy && e.enemy != e) - //UpdateFrags(e.enemy, cvar("g_ctf_flagscore_kill")); WaypointSprite_DetachCarrier(p); LogCTF("dropped", p.team, p); @@ -227,7 +226,7 @@ void FlagThink() if (e.classname != "player" || (e.deadflag) || (e.flagcarried != self)) { dprint("CANNOT HAPPEN - player dead and STILL had a flag!\n"); - DropFlag(self, world); + DropFlag(self, world, world); return; } }; @@ -319,7 +318,7 @@ void FlagTouch() self.cnt = FLAG_CARRY; self.angles = '0 0 0'; bprint(other.netname, "^7 got the ", self.netname, "\n"); - UpdateFrags(other, cvar("g_ctf_flagscore_pickup")); + UpdateFrags(other, cvar("g_ctf_flagscore_pickup_base")); PlayerScore_Add(other, SP_CTF_PICKUPS, 1); LogCTF("steal", self.team, other); sound (other, CHAN_AUTO, self.noise, VOL_BASE, ATTN_NONE); @@ -343,7 +342,7 @@ void FlagTouch() { // return flag bprint(other.netname, "^7 returned the ", self.netname, "\n"); - if(other == self.enemy) + if(other.playerid == self.playerid) // is this the guy who killed the FC last? { if (other.team == COLOR_TEAM1 || other.team == COLOR_TEAM2) UpdateFrags(other, cvar("g_ctf_flagscore_return_by_killer")); @@ -371,7 +370,14 @@ void FlagTouch() other.flagcarried = self; self.cnt = FLAG_CARRY; bprint(other.netname, "^7 picked up the ", self.netname, "\n"); - UpdateFrags(other, cvar("g_ctf_flagscore_pickup")); + + float f; + f = (time - self.pain_finished) / cvar("g_ctf_flag_returntime"); + f = cvar("g_ctf_flagscore_pickup_dropped_late") * (1-f) + + cvar("g_ctf_flagscore_pickup_dropped_early") * f; + f = floor(f + 0.5); + + UpdateFrags(other, f); PlayerScore_Add(other, SP_CTF_PICKUPS, 1); LogCTF("pickup", self.team, other); sound (other, CHAN_AUTO, self.noise, VOL_BASE, ATTN_NONE); diff --git a/data/qcsrc/server/defs.qh b/data/qcsrc/server/defs.qh index 8b75ea281..1d37054c3 100644 --- a/data/qcsrc/server/defs.qh +++ b/data/qcsrc/server/defs.qh @@ -359,7 +359,7 @@ float teams_matter; float startitem_failed; -void DropFlag(entity flag, entity penalty_receiver); +void DropFlag(entity flag, entity penalty_receiver, entity attacker); void DropAllRunes(entity pl); diff --git a/data/qcsrc/server/portals.qc b/data/qcsrc/server/portals.qc index 519dde023..9f477207d 100644 --- a/data/qcsrc/server/portals.qc +++ b/data/qcsrc/server/portals.qc @@ -193,7 +193,7 @@ float Portal_TeleportPlayer(entity teleporter, entity player) player.right_vector = -1 * Portal_Transform_Apply(transform, player.right_vector); if(player.flagcarried) - DropFlag(player.flagcarried, player); + DropFlag(player.flagcarried, player, world); TeleportPlayer(teleporter, player, to, ang, newvel, teleporter.enemy.absmin, teleporter.enemy.absmax); // reset fade counter -- 2.39.2