]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/scores.qc
Impulses: migration pathway
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / scores.qc
index 57f5e95f8fd6878951ac9d42e5ce79c7ba1dcbd2..03f3dbba37208d2eed5c5c8cc26fd18e628d3f49 100644 (file)
@@ -1,8 +1,7 @@
 #include "scores.qh"
-#include "_all.qh"
 
 #include "command/common.qh"
-#include "mutators/mutators_include.qh"
+#include "mutators/all.qh"
 #include "../common/playerstats.qh"
 #include "../common/teams.qh"
 
@@ -55,11 +54,11 @@ vector ScoreField_Compare(entity t1, entity t2, .float field, float fieldflags,
  * teamscore entities
  */
 
-float TeamScore_SendEntity(entity to, float sendflags)
+bool TeamScore_SendEntity(entity this, entity to, float sendflags)
 {
        float i, p, longflags;
 
-       WriteByte(MSG_ENTITY, ENT_CLIENT_TEAMSCORES);
+       WriteHeader(MSG_ENTITY, ENT_CLIENT_TEAMSCORES);
        WriteByte(MSG_ENTITY, self.team - 1);
 
        longflags = 0;
@@ -88,9 +87,8 @@ float TeamScore_SendEntity(entity to, float sendflags)
 
 void TeamScore_Spawn(float t, string name)
 {
-       entity ts;
-       ts = spawn();
-       ts.classname = "csqc_score_team";
+       entity ts = new(csqc_score_team);
+       make_pure(ts);
        ts.netname = name; // not used yet, FIXME
        ts.team = t;
        Net_LinkEntity(ts, false, 0, TeamScore_SendEntity);
@@ -186,10 +184,10 @@ void ScoreInfo_SetLabel_TeamScore(float i, string label, float scoreflags)
        }
 }
 
-float ScoreInfo_SendEntity(entity to, int sf)
+bool ScoreInfo_SendEntity(entity this, entity to, int sf)
 {
        float i;
-       WriteByte(MSG_ENTITY, ENT_CLIENT_SCORES_INFO);
+       WriteHeader(MSG_ENTITY, ENT_CLIENT_SCORES_INFO);
        WriteInt24_t(MSG_ENTITY, MapInfo_LoadedGametype);
        for(i = 0; i < MAX_SCORE; ++i)
        {
@@ -212,8 +210,8 @@ void ScoreInfo_Init(float teams)
        }
        else
        {
-               scores_initialized = spawn();
-               scores_initialized.classname = "ent_client_scoreinfo";
+               scores_initialized = new(ent_client_scoreinfo);
+               make_pure(scores_initialized);
                Net_LinkEntity(scores_initialized, false, 0, ScoreInfo_SendEntity);
        }
        if(teams >= 1)
@@ -230,11 +228,11 @@ void ScoreInfo_Init(float teams)
  * per-player score entities
  */
 
-float PlayerScore_SendEntity(entity to, float sendflags)
+bool PlayerScore_SendEntity(entity this, entity to, float sendflags)
 {
        float i, p, longflags;
 
-       WriteByte(MSG_ENTITY, ENT_CLIENT_SCORES);
+       WriteHeader(MSG_ENTITY, ENT_CLIENT_SCORES);
        WriteByte(MSG_ENTITY, num_for_edict(self.owner));
 
        longflags = 0;
@@ -317,10 +315,10 @@ void Score_ClearAll()
 
 void PlayerScore_Attach(entity player)
 {
-       entity sk;
        if(player.scorekeeper)
                error("player already has a scorekeeper");
-       sk = spawn();
+       entity sk = new(scorekeeper);
+       make_pure(sk);
        sk.owner = player;
        Net_LinkEntity(sk, false, 0, PlayerScore_SendEntity);
        player.scorekeeper = sk;
@@ -336,14 +334,15 @@ void PlayerScore_Detach(entity player)
 
 float PlayerScore_Add(entity player, float scorefield, float score)
 {
-       entity s;
+       bool mutator_returnvalue = MUTATOR_CALLHOOK(AddPlayerScore, scorefield, score);
+       score = ret_float;
 
        if(gameover)
-       if(!(g_lms && scorefield == SP_LMS_RANK)) // allow writing to this field in intermission as it is needed for newly joining players
+       if(!mutator_returnvalue)
                score = 0;
 
        if(!scores_initialized) return 0; // FIXME remove this when everything uses this system
-       s = player.scorekeeper;
+       entity s = player.scorekeeper;
        if(!s)
        {
                if(gameover)
@@ -530,22 +529,24 @@ void WinningConditionHelper()
 
        FOR_EACH_CLIENT(p)
        {
+               string s = "";
                if(fullstatus)
                {
                        s = GetPlayerScoreString(p, 1);
-                       if(IS_REAL_CLIENT(p))
-                               s = strcat(s, ":human");
-                       else
-                               s = strcat(s, ":bot");
-                       if(!IS_PLAYER(p) && p.caplayer != 1 && !g_lms)
+                       s = strcat(s, IS_REAL_CLIENT(p) ? ":human" : ":bot");
+                       ret_string = string_null;
+                       if(!IS_PLAYER(p) && !MUTATOR_CALLHOOK(GetPlayerStatus, p, s))
                                s = strcat(s, ":spectator");
+                       if (ret_string) s = strcat(s, ret_string);
                }
                else
                {
-                       if(IS_PLAYER(p) || p.caplayer == 1 || g_lms)
+                       ret_string = string_null;
+                       if (IS_PLAYER(p) || MUTATOR_CALLHOOK(GetPlayerStatus, p, s))
                                s = GetPlayerScoreString(p, 2);
                        else
                                s = "-666";
+                       if (ret_string) s = strcat(s, ret_string);
                }
 
                if(p.clientstatus)
@@ -925,7 +926,7 @@ void PlayerScore_PlayerStats(entity p)
                                PS_GR_P_ADDVAL(s.owner, strcat(PLAYERSTATS_SCOREBOARD, scores_label[i]), s.(scores[i]));
 }
 
-void PlayerScore_TeamStats(void)
+void PlayerScore_TeamStats()
 {
        entity sk;
        float t, i;