]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/scores.qc
Remove .move_* fields and MOVETYPE_PUSH logic (doesn't work)
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / scores.qc
index 8b740ef88b66e3c3ed88628f93acb07140159200..aa108dd985d9622e167a3db2649d08fec0dfc0d4 100644 (file)
@@ -65,7 +65,7 @@ bool TeamScore_SendEntity(entity this, entity to, float sendflags)
 
        longflags = 0;
        for(i = 0, p = 1; i < MAX_TEAMSCORE; ++i, p *= 2)
-               if(self.(teamscores[i]) > 127 || self.(teamscores[i]) <= -128)
+               if(this.(teamscores[i]) > 127 || this.(teamscores[i]) <= -128)
                        longflags |= p;
 
 #if MAX_TEAMSCORE <= 8
@@ -79,9 +79,9 @@ bool TeamScore_SendEntity(entity this, entity to, float sendflags)
                if(sendflags & p)
                {
                        if(longflags & p)
-                               WriteInt24_t(MSG_ENTITY, self.(teamscores[i]));
+                               WriteInt24_t(MSG_ENTITY, this.(teamscores[i]));
                        else
-                               WriteChar(MSG_ENTITY, self.(teamscores[i]));
+                               WriteChar(MSG_ENTITY, this.(teamscores[i]));
                }
 
        return true;
@@ -89,8 +89,7 @@ bool TeamScore_SendEntity(entity this, entity to, float sendflags)
 
 void TeamScore_Spawn(float t, string name)
 {
-       entity ts = new(csqc_score_team);
-       make_pure(ts);
+       entity ts = new_pure(csqc_score_team);
        ts.netname = name; // not used yet, FIXME
        ts.team = t;
        Net_LinkEntity(ts, false, 0, TeamScore_SendEntity);
@@ -212,8 +211,7 @@ void ScoreInfo_Init(float teams)
        }
        else
        {
-               scores_initialized = new(ent_client_scoreinfo);
-               make_pure(scores_initialized);
+               scores_initialized = new_pure(ent_client_scoreinfo);
                Net_LinkEntity(scores_initialized, false, 0, ScoreInfo_SendEntity);
        }
        if(teams >= 1)
@@ -235,11 +233,11 @@ bool PlayerScore_SendEntity(entity this, entity to, float sendflags)
        float i, p, longflags;
 
        WriteHeader(MSG_ENTITY, ENT_CLIENT_SCORES);
-       WriteByte(MSG_ENTITY, num_for_edict(self.owner));
+       WriteByte(MSG_ENTITY, etof(this.owner));
 
        longflags = 0;
        for(i = 0, p = 1; i < MAX_SCORE; ++i, p *= 2)
-               if(self.(scores[i]) > 127 || self.(scores[i]) <= -128)
+               if(this.(scores[i]) > 127 || this.(scores[i]) <= -128)
                        longflags |= p;
 
 #if MAX_SCORE <= 8
@@ -253,9 +251,9 @@ bool PlayerScore_SendEntity(entity this, entity to, float sendflags)
                if(sendflags & p)
                {
                        if(longflags & p)
-                               WriteInt24_t(MSG_ENTITY, self.(scores[i]));
+                               WriteInt24_t(MSG_ENTITY, this.(scores[i]));
                        else
-                               WriteChar(MSG_ENTITY, self.(scores[i]));
+                               WriteChar(MSG_ENTITY, this.(scores[i]));
                }
 
        return true;
@@ -285,32 +283,32 @@ float PlayerScore_Clear(entity player)
 
 void Score_ClearAll()
 {
-       entity p, sk;
-       float i, t;
-       FOR_EACH_CLIENTSLOT(p)
+       entity sk;
+       float t;
+       FOREACH_CLIENTSLOT(true,
        {
-               sk = p.scorekeeper;
+               sk = it.scorekeeper;
                if(!sk)
                        continue;
-               for(i = 0; i < MAX_SCORE; ++i)
+               for(int j = 0; j < MAX_SCORE; ++j)
                {
-                       if(sk.(scores[i]) != 0)
-                               if(scores_label[i] != "")
-                                       sk.SendFlags |= pow(2, i);
-                       sk.(scores[i]) = 0;
+                       if(sk.(scores[j]) != 0)
+                               if(scores_label[j] != "")
+                                       sk.SendFlags |= pow(2, j);
+                       sk.(scores[j]) = 0;
                }
-       }
+       });
        for(t = 0; t < 16; ++t)
        {
                sk = teamscorekeepers[t];
                if(!sk)
                        continue;
-               for(i = 0; i < MAX_TEAMSCORE; ++i)
+               for(int j = 0; j < MAX_TEAMSCORE; ++j)
                {
-                       if(sk.(teamscores[i]) != 0)
-                               if(teamscores_label[i] != "")
-                                       sk.SendFlags |= pow(2, i);
-                       sk.(teamscores[i]) = 0;
+                       if(sk.(teamscores[j]) != 0)
+                               if(teamscores_label[j] != "")
+                                       sk.SendFlags |= pow(2, j);
+                       sk.(teamscores[j]) = 0;
                }
        }
 }
@@ -319,8 +317,7 @@ void PlayerScore_Attach(entity player)
 {
        if(player.scorekeeper)
                error("player already has a scorekeeper");
-       entity sk = new(scorekeeper);
-       make_pure(sk);
+       entity sk = new_pure(scorekeeper);
        sk.owner = player;
        Net_LinkEntity(sk, false, 0, PlayerScore_SendEntity);
        player.scorekeeper = sk;
@@ -331,13 +328,13 @@ void PlayerScore_Detach(entity player)
        if(!player.scorekeeper)
                error("player has no scorekeeper");
        remove(player.scorekeeper);
-       player.scorekeeper = world;
+       player.scorekeeper = NULL;
 }
 
 float PlayerScore_Add(entity player, float scorefield, float score)
 {
-       bool mutator_returnvalue = MUTATOR_CALLHOOK(AddPlayerScore, scorefield, score);
-       score = ret_float;
+       bool mutator_returnvalue = MUTATOR_CALLHOOK(AddPlayerScore, scorefield, score, player);
+       score = M_ARGV(1, float);
 
        if(gameover)
        if(!mutator_returnvalue)
@@ -349,7 +346,7 @@ float PlayerScore_Add(entity player, float scorefield, float score)
        {
                if(gameover)
                        return 0;
-               backtrace("Adding score to unknown player!");
+               LOG_WARNING("Adding score to unknown player!");
                return 0;
        }
        if(score)
@@ -383,16 +380,15 @@ float PlayerScore_Compare(entity t1, entity t2, float strict)
        }
 
        if (result.x == 0 && strict)
-               result.x = num_for_edict(t1.owner) - num_for_edict(t2.owner);
+               result.x = etof(t1.owner) - etof(t2.owner);
 
        return result.x;
 }
 
-void WinningConditionHelper()
+void WinningConditionHelper(entity this)
 {
        float c;
        string s;
-       entity p;
        float fullstatus;
        entity winnerscorekeeper;
        entity secondscorekeeper;
@@ -409,10 +405,10 @@ void WinningConditionHelper()
        s = GetGametype();
        s = strcat(s, ":", autocvar_g_xonoticversion);
        s = strcat(s, ":P", ftos(cvar_purechanges_count));
-       s = strcat(s, ":S", ftos(nJoinAllowed(world)));
+       s = strcat(s, ":S", ftos(nJoinAllowed(this, NULL)));
        s = strcat(s, ":F", ftos(serverflags));
        s = strcat(s, ":M", modname);
-       s = strcat(s, "::", GetPlayerScoreString(world, (fullstatus ? 1 : 2)));
+       s = strcat(s, "::", GetPlayerScoreString(NULL, (fullstatus ? 1 : 2)));
 
        if(teamscores_entities_count)
        {
@@ -425,8 +421,8 @@ void WinningConditionHelper()
 
                WinningConditionHelper_winnerteam = -1;
                WinningConditionHelper_secondteam = -1;
-               winnerscorekeeper = world;
-               secondscorekeeper = world;
+               winnerscorekeeper = NULL;
+               secondscorekeeper = NULL;
                for(t = 0; t < 16; ++t)
                {
                        sk = teamscorekeepers[t];
@@ -458,23 +454,22 @@ void WinningConditionHelper()
                WinningConditionHelper_lowerisbetter = (teamscores_flags_primary & SFL_LOWER_IS_BETTER);
                WinningConditionHelper_zeroisworst = (teamscores_flags_primary & SFL_ZERO_IS_WORST);
 
-               WinningConditionHelper_winner = world; // not supported in teamplay
-               WinningConditionHelper_second = world; // not supported in teamplay
+               WinningConditionHelper_winner = NULL; // not supported in teamplay
+               WinningConditionHelper_second = NULL; // not supported in teamplay
        }
        else
        {
-               WinningConditionHelper_winner = world;
-               WinningConditionHelper_second = world;
-               winnerscorekeeper = world;
-               secondscorekeeper = world;
-               FOR_EACH_PLAYER(p)
-               {
-                       sk = p.scorekeeper;
+               WinningConditionHelper_winner = NULL;
+               WinningConditionHelper_second = NULL;
+               winnerscorekeeper = NULL;
+               secondscorekeeper = NULL;
+               FOREACH_CLIENT(IS_PLAYER(it), LAMBDA(
+                       sk = it.scorekeeper;
                        c = PlayerScore_Compare(winnerscorekeeper, sk, 1);
                        if(c < 0)
                        {
                                WinningConditionHelper_second = WinningConditionHelper_winner;
-                               WinningConditionHelper_winner = p;
+                               WinningConditionHelper_winner = it;
                                secondscorekeeper = winnerscorekeeper;
                                winnerscorekeeper = sk;
                        }
@@ -483,15 +478,15 @@ void WinningConditionHelper()
                                c = PlayerScore_Compare(secondscorekeeper, sk, 1);
                                if(c < 0)
                                {
-                                       WinningConditionHelper_second = p;
+                                       WinningConditionHelper_second = it;
                                        secondscorekeeper = sk;
                                }
                        }
-               }
+               ));
 
                WinningConditionHelper_equality = (PlayerScore_Compare(winnerscorekeeper, secondscorekeeper, 0) == 0);
                if(WinningConditionHelper_equality)
-                       WinningConditionHelper_winner = WinningConditionHelper_second = world;
+                       WinningConditionHelper_winner = WinningConditionHelper_second = NULL;
 
                WinningConditionHelper_topscore = winnerscorekeeper.scores_primary;
                WinningConditionHelper_secondscore = secondscorekeeper.scores_primary;
@@ -529,32 +524,27 @@ void WinningConditionHelper()
                strunzone(worldstatus);
        worldstatus = strzone(s);
 
-       FOR_EACH_CLIENT(p)
-       {
+       FOREACH_CLIENT(true, LAMBDA(
                string s = "";
                if(fullstatus)
                {
-                       s = GetPlayerScoreString(p, 1);
-                       s = strcat(s, IS_REAL_CLIENT(p) ? ":human" : ":bot");
-                       ret_string = string_null;
-                       if(!IS_PLAYER(p) && !MUTATOR_CALLHOOK(GetPlayerStatus, p, s))
+                       s = GetPlayerScoreString(it, 1);
+                       s = strcat(s, IS_REAL_CLIENT(it) ? ":human" : ":bot");
+                       if(!IS_PLAYER(it) && !MUTATOR_CALLHOOK(GetPlayerStatus, it))
                                s = strcat(s, ":spectator");
-                       if (ret_string) s = strcat(s, ret_string);
                }
                else
                {
-                       ret_string = string_null;
-                       if (IS_PLAYER(p) || MUTATOR_CALLHOOK(GetPlayerStatus, p, s))
-                               s = GetPlayerScoreString(p, 2);
+                       if (IS_PLAYER(it) || MUTATOR_CALLHOOK(GetPlayerStatus, it))
+                               s = GetPlayerScoreString(it, 2);
                        else
                                s = "-666";
-                       if (ret_string) s = strcat(s, ret_string);
                }
 
-               if(p.clientstatus)
-                       strunzone(p.clientstatus);
-               p.clientstatus = strzone(s);
-       }
+               if(it.clientstatus)
+                       strunzone(it.clientstatus);
+               it.clientstatus = strzone(s);
+       ));
 }
 
 string GetScoreLogLabel(string label, float fl)
@@ -705,28 +695,27 @@ entity PlayerScore_Sort(.float field, float teams, float strict, float nospectat
        entity p, plist, pprev, pbest, pbestprev, pfirst, plast;
        float i, j;
 
-       plist = world;
+       plist = NULL;
 
-       FOR_EACH_CLIENT(p)
-               p.(field) = 0;
+       FOREACH_CLIENT(true, LAMBDA(it.(field) = 0));
 
-       FOR_EACH_CLIENT(p) if(p.scorekeeper)
+       FOREACH_CLIENT(it.scorekeeper,
        {
                if(nospectators)
-                       if(p.frags == FRAGS_SPECTATOR)
+                       if(it.frags == FRAGS_SPECTATOR)
                                continue;
 
-               p.chain = plist;
-               plist = p;
-       }
+               it.chain = plist;
+               plist = it;
+       });
        // Now plist points to the whole list.
 
-       pfirst = plast = world;
+       pfirst = plast = NULL;
 
        i = j = 0;
        while(plist)
        {
-               pprev = pbestprev = world;
+               pprev = pbestprev = NULL;
                pbest = plist;
                for(p = plist; (pprev = p), (p = p.chain); )
                {
@@ -738,11 +727,11 @@ entity PlayerScore_Sort(.float field, float teams, float strict, float nospectat
                }
 
                // remove pbest out of the chain
-               if(pbestprev == world)
+               if(pbestprev == NULL)
                        plist = pbest.chain;
                else
                        pbestprev.chain = pbest.chain;
-               pbest.chain = world;
+               pbest.chain = NULL;
 
                ++i;
                if(!plast || PlayerTeamScore_Compare(plast, pbest, teams, 0))
@@ -881,10 +870,10 @@ void Score_NicePrint_Spectator(entity to, entity p)
 void Score_NicePrint(entity to)
 {
        entity p;
-       float t, i;
+       float i;
        float w;
 
-       t = 0;
+       int t = 0;
        for(i = 0; i < MAX_SCORE; ++i)
                if(scores_label[i] != "")
                        ++t;
@@ -906,14 +895,12 @@ void Score_NicePrint(entity to)
        }
 
        t = 0;
-       FOR_EACH_CLIENT(p)
-       if (!IS_PLAYER(p))
-       {
+       FOREACH_CLIENT(!IS_PLAYER(it), LAMBDA(
                if (!t)
                        Score_NicePrint_Spectators(to);
-               Score_NicePrint_Spectator(to, p);
+               Score_NicePrint_Spectator(to, it);
                t = 1;
-       }
+       ));
 }
 
 void PlayerScore_PlayerStats(entity p)