]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
freezetag: add a "revivals" scoreboard column; calculate "score"
authorRudolf Polzer <divverent@alientrap.org>
Thu, 30 Dec 2010 20:14:12 +0000 (21:14 +0100)
committerRudolf Polzer <divverent@alientrap.org>
Thu, 30 Dec 2010 20:16:15 +0000 (21:16 +0100)
qcsrc/client/scoreboard.qc
qcsrc/server/mutators/gamemode_freezetag.qc
qcsrc/server/scores_rules.qc

index 14f80db9978aabd5c6eecaa7f885a5b0fc0338f2..da84694f9a4d1add6d47f7d23b5fcd75123d03f0 100644 (file)
@@ -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");
 }
 
index 5fd7425ab2e86716203fa39e24a97a18e1f95e6a..27b06ec73656d50537cebc888d42d30ce5342c46 100644 (file)
@@ -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;
index a4c993d83f1cd1fc4117f2517aa29b388205fa88..92ea0366b8a67c634c2e1bf880bd77032c433450 100644 (file)
@@ -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();
+}