From abfb4d12d62ae459ce19e8fc515892aaac617ced Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Thu, 30 Dec 2010 21:14:12 +0100 Subject: [PATCH] freezetag: add a "revivals" scoreboard column; calculate "score" --- qcsrc/client/scoreboard.qc | 4 +-- qcsrc/server/mutators/gamemode_freezetag.qc | 30 ++++++++++++++++++--- qcsrc/server/scores_rules.qc | 9 +++++++ 3 files changed, 37 insertions(+), 6 deletions(-) diff --git a/qcsrc/client/scoreboard.qc b/qcsrc/client/scoreboard.qc index 14f80db99..da84694f9 100644 --- a/qcsrc/client/scoreboard.qc +++ b/qcsrc/client/scoreboard.qc @@ -248,12 +248,12 @@ string HUD_DefaultColumnLayout() { return strcat( // fteqcc sucks "ping pl name | ", - "-teams,race,lms/kills -teams,lms/deaths -teams,lms,race,ka/suicides -race,dm,tdm,ka/frags ", // tdm already has this in "score" + "-teams,race,lms/kills +freezetag/kills -teams,lms/deaths +freezetag/deaths -teams,lms,race,ka/suicides +freezetag/suicides -race,dm,tdm,ka/frags ", // tdm already has this in "score" "+ctf/caps +ctf/pickups +ctf/fckills +ctf/returns ", "+lms/lives +lms/rank ", "+kh/caps +kh/pushes +kh/destroyed ", "?+race/laps ?+race/time ?+race/fastest ", - "+as/objectives +nexball/faults +nexball/goals +ka/drops +ka/pickups +ka/bckills ", + "+as/objectives +nexball/faults +nexball/goals +ka/drops +ka/pickups +ka/bckills +freezetag/revivals ", "-lms,race,nexball/score"); } diff --git a/qcsrc/server/mutators/gamemode_freezetag.qc b/qcsrc/server/mutators/gamemode_freezetag.qc index 5fd7425ab..27b06ec73 100644 --- a/qcsrc/server/mutators/gamemode_freezetag.qc +++ b/qcsrc/server/mutators/gamemode_freezetag.qc @@ -2,6 +2,7 @@ void freezetag_Initialize() { precache_model("models/ice/ice.md3"); warmup = time + autocvar_g_start_delay + autocvar_g_freezetag_warmup; + ScoreRules_freezetag(); } void freezetag_CheckWinner() @@ -61,7 +62,7 @@ void freezetag_Ice_Think() self.nextthink = time; } -void freezetag_Freeze() +void freezetag_Freeze(entity attacker) { self.freezetag_frozen = 1; @@ -86,12 +87,33 @@ void freezetag_Freeze() { WaypointSprite_UpdateTeamRadar(self.waypointsprite_attached, RADARICON_WAYPOINT, '0.25 0.90 1'); } + + if(attacker == self) + { + // you froze your own dumb self + // counted as "suicide" already + PlayerScore_Add(self, SP_SCORE, -1); + } + else if(attacker.classname == "player") + { + // got frozen by an enemy + // counted as "kill" and "death" already + PlayerScore_Add(self, SP_SCORE, -1); + PlayerScore_Add(attacker, SP_SCORE, +1); + } + else + { + // nothing - got frozen by the game type rules themselves + } } -void freezetag_Unfreeze() +void freezetag_Unfreeze(entity attacker) { self.freezetag_frozen = 0; + PlayerScore_Add(attacker, SP_FREEZETAG_REVIVAL, +1); + PlayerScore_Add(attacker, SP_SCORE, +1); + // remove the ice block entity ice; for(ice = world; (ice = find(ice, classname, "freezetag_ice")); ) if(ice.owner == self) @@ -142,7 +164,7 @@ MUTATOR_HOOKFUNCTION(freezetag_PlayerDies) --pinkalive; --totalalive; - freezetag_Freeze(); + freezetag_Freeze(frag_attacker); } if(frag_attacker.classname == STR_PLAYER) @@ -181,7 +203,7 @@ MUTATOR_HOOKFUNCTION(freezetag_PlayerSpawn) if(warmup && time > warmup) // spawn too late, freeze player { centerprint(self, "^1You spawned after the round started, you'll spawn as frozen.\n"); - freezetag_Freeze(); + freezetag_Freeze(world); } return 1; diff --git a/qcsrc/server/scores_rules.qc b/qcsrc/server/scores_rules.qc index a4c993d83..92ea0366b 100644 --- a/qcsrc/server/scores_rules.qc +++ b/qcsrc/server/scores_rules.qc @@ -202,3 +202,12 @@ void ScoreRules_keepaway() ScoreInfo_SetLabel_PlayerScore(SP_KEEPAWAY_DROPS, "drops", SFL_LOWER_IS_BETTER); ScoreRules_basics_end(); } + +// FreezeTag stuff +#define SP_FREEZETAG_REVIVALS 4 +void ScoreRules_freezetag() +{ + ScoreRules_basics(0, SFL_SORT_PRIO_PRIMARY, SFL_SORT_PRIO_PRIMARY, TRUE); // SFL_SORT_PRIO_PRIMARY + ScoreInfo_SetLabel_PlayerScore(SP_FREEZETAG_REVIVALS, "revivals", 0); + ScoreRules_basics_end(); +} -- 2.39.2