X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fscores.qc;h=11bc60238252bb071cbade6518384a3ac8cbb47c;hp=8be145b0166ba2c9887c11d1e6c4e9a0c77a956c;hb=678127044857fb9b89f06faf7a3313bdeb43205c;hpb=df2fe9b28cb6210b671bec6d5ae834ff4eb2e2db diff --git a/qcsrc/server/scores.qc b/qcsrc/server/scores.qc index 8be145b01..11bc60238 100644 --- a/qcsrc/server/scores.qc +++ b/qcsrc/server/scores.qc @@ -1,16 +1,14 @@ #include "scores.qh" #include "command/common.qh" -#include "mutators/all.qh" +#include "mutators/_mod.qh" +#include #include "../common/playerstats.qh" #include "../common/teams.qh" +#include .entity scorekeeper; entity teamscorekeepers[16]; -string scores_label[MAX_SCORE]; -float scores_flags[MAX_SCORE]; -string teamscores_label[MAX_TEAMSCORE]; -float teamscores_flags[MAX_TEAMSCORE]; float teamscores_entities_count; var .float scores_primary; var .float teamscores_primary; @@ -56,7 +54,7 @@ vector ScoreField_Compare(entity t1, entity t2, .float field, float fieldflags, bool TeamScore_SendEntity(entity this, entity to, float sendflags) { - float i, p, longflags; + float i, longflags; WriteHeader(MSG_ENTITY, ENT_CLIENT_TEAMSCORES); int t = this.team - 1; @@ -64,9 +62,9 @@ bool TeamScore_SendEntity(entity this, entity to, float sendflags) WriteByte(MSG_ENTITY, t); longflags = 0; - for(i = 0, p = 1; i < MAX_TEAMSCORE; ++i, p *= 2) - if(this.(teamscores[i]) > 127 || this.(teamscores[i]) <= -128) - longflags |= p; + for(i = 0; i < MAX_TEAMSCORE; ++i) + if(this.(teamscores(i)) > 127 || this.(teamscores(i)) <= -128) + longflags |= BIT(i); #if MAX_TEAMSCORE <= 8 WriteByte(MSG_ENTITY, sendflags); @@ -75,13 +73,13 @@ bool TeamScore_SendEntity(entity this, entity to, float sendflags) WriteShort(MSG_ENTITY, sendflags); WriteShort(MSG_ENTITY, longflags); #endif - for(i = 0, p = 1; i < MAX_TEAMSCORE; ++i, p *= 2) - if(sendflags & p) + for(i = 0; i < MAX_TEAMSCORE; ++i) + if(sendflags & BIT(i)) { - if(longflags & p) - WriteInt24_t(MSG_ENTITY, this.(teamscores[i])); + if(longflags & BIT(i)) + WriteInt24_t(MSG_ENTITY, this.(teamscores(i))); else - WriteChar(MSG_ENTITY, this.(teamscores[i])); + WriteChar(MSG_ENTITY, this.(teamscores(i))); } return true; @@ -102,27 +100,27 @@ float TeamScore_AddToTeam(float t, float scorefield, float score) { entity s; - if(gameover) + if(game_stopped) score = 0; if(!scores_initialized) return 0; // FIXME remove this when everything uses this system if(t <= 0 || t >= 16) { - if(gameover) + if(game_stopped) return 0; error("Adding score to invalid team!"); } s = teamscorekeepers[t - 1]; if(!s) { - if(gameover) + if(game_stopped) return 0; error("Adding score to unknown team!"); } if(score) - if(teamscores_label[scorefield] != "") - s.SendFlags |= pow(2, scorefield); - return (s.(teamscores[scorefield]) += score); + if(teamscores_label(scorefield) != "") + s.SendFlags |= (2 ** scorefield); + return (s.(teamscores(scorefield)) += score); } float TeamScore_Add(entity player, float scorefield, float score) @@ -139,8 +137,8 @@ float TeamScore_Compare(entity t1, entity t2, float strict) for(i = 0; i < MAX_TEAMSCORE; ++i) { var .float f; - f = teamscores[i]; - result = ScoreField_Compare(t1, t2, f, teamscores_flags[i], result, strict); + f = teamscores(i); + result = ScoreField_Compare(t1, t2, f, teamscores_flags(i), result, strict); } if (result.x == 0 && strict) @@ -153,13 +151,13 @@ float TeamScore_Compare(entity t1, entity t2, float strict) * the scoreinfo entity */ -void ScoreInfo_SetLabel_PlayerScore(float i, string label, float scoreflags) +void ScoreInfo_SetLabel_PlayerScore(PlayerScoreField i, string label, float scoreflags) { - scores_label[i] = label; - scores_flags[i] = scoreflags; + scores_label(i) = label; + scores_flags(i) = scoreflags; if((scoreflags & SFL_SORT_PRIO_MASK) == SFL_SORT_PRIO_PRIMARY) { - scores_primary = scores[i]; + scores_primary = scores(i); scores_flags_primary = scoreflags; } if(label != "") @@ -171,11 +169,11 @@ void ScoreInfo_SetLabel_PlayerScore(float i, string label, float scoreflags) void ScoreInfo_SetLabel_TeamScore(float i, string label, float scoreflags) { - teamscores_label[i] = label; - teamscores_flags[i] = scoreflags; + teamscores_label(i) = label; + teamscores_flags(i) = scoreflags; if((scoreflags & SFL_SORT_PRIO_MASK) == SFL_SORT_PRIO_PRIMARY) { - teamscores_primary = teamscores[i]; + teamscores_primary = teamscores(i); teamscores_flags_primary = scoreflags; } if(label != "") @@ -189,21 +187,20 @@ bool ScoreInfo_SendEntity(entity this, entity to, int sf) { float i; WriteHeader(MSG_ENTITY, ENT_CLIENT_SCORES_INFO); - WriteInt24_t(MSG_ENTITY, MapInfo_LoadedGametype); - for(i = 0; i < MAX_SCORE; ++i) - { - WriteString(MSG_ENTITY, scores_label[i]); - WriteByte(MSG_ENTITY, scores_flags[i]); - } + WriteRegistered(Gametypes, MSG_ENTITY, MapInfo_LoadedGametype); + FOREACH(Scores, true, { + WriteString(MSG_ENTITY, scores_label(it)); + WriteByte(MSG_ENTITY, scores_flags(it)); + }); for(i = 0; i < MAX_TEAMSCORE; ++i) { - WriteString(MSG_ENTITY, teamscores_label[i]); - WriteByte(MSG_ENTITY, teamscores_flags[i]); + WriteString(MSG_ENTITY, teamscores_label(i)); + WriteByte(MSG_ENTITY, teamscores_flags(i)); } return true; } -void ScoreInfo_Init(float teams) +void ScoreInfo_Init(int teams) { if(scores_initialized) { @@ -214,13 +211,13 @@ void ScoreInfo_Init(float teams) scores_initialized = new_pure(ent_client_scoreinfo); Net_LinkEntity(scores_initialized, false, 0, ScoreInfo_SendEntity); } - if(teams >= 1) + if(teams & BIT(0)) TeamScore_Spawn(NUM_TEAM_1, "Red"); - if(teams >= 2) + if(teams & BIT(1)) TeamScore_Spawn(NUM_TEAM_2, "Blue"); - if(teams >= 3) + if(teams & BIT(2)) TeamScore_Spawn(NUM_TEAM_3, "Yellow"); - if(teams >= 4) + if(teams & BIT(3)) TeamScore_Spawn(NUM_TEAM_4, "Pink"); } @@ -230,31 +227,28 @@ void ScoreInfo_Init(float teams) bool PlayerScore_SendEntity(entity this, entity to, float sendflags) { - float i, p, longflags; - WriteHeader(MSG_ENTITY, ENT_CLIENT_SCORES); WriteByte(MSG_ENTITY, etof(this.owner)); - longflags = 0; - for(i = 0, p = 1; i < MAX_SCORE; ++i, p *= 2) - if(this.(scores[i]) > 127 || this.(scores[i]) <= -128) + int longflags = 0; + FOREACH(Scores, true, { + int p = 1 << (i % 16); + if (this.(scores(it)) > 127 || this.(scores(it)) <= -128) longflags |= p; + }); -#if MAX_SCORE <= 8 - WriteByte(MSG_ENTITY, sendflags); - WriteByte(MSG_ENTITY, longflags); -#else WriteShort(MSG_ENTITY, sendflags); WriteShort(MSG_ENTITY, longflags); -#endif - for(i = 0, p = 1; i < MAX_SCORE; ++i, p *= 2) - if(sendflags & p) + FOREACH(Scores, true, { + int p = 1 << (i % 16); + if (sendflags & p) { if(longflags & p) - WriteInt24_t(MSG_ENTITY, this.(scores[i])); + WriteInt24_t(MSG_ENTITY, this.(scores(it))); else - WriteChar(MSG_ENTITY, this.(scores[i])); + WriteChar(MSG_ENTITY, this.(scores(it))); } + }); return true; } @@ -262,21 +256,20 @@ bool PlayerScore_SendEntity(entity this, entity to, float sendflags) float PlayerScore_Clear(entity player) { entity sk; - float i; if(teamscores_entities_count) return 0; if(MUTATOR_CALLHOOK(ForbidPlayerScore_Clear)) return 0; - sk = player.scorekeeper; - for(i = 0; i < MAX_SCORE; ++i) - { - if(sk.(scores[i]) != 0) - if(scores_label[i] != "") - sk.SendFlags |= pow(2, i); - sk.(scores[i]) = 0; - } + sk = CS(player).scorekeeper; + FOREACH(Scores, true, { + if(sk.(scores(it)) != 0) + if(scores_label(it) != "") + sk.SendFlags |= (2 ** (i % 16)); + if(i != SP_ELO.m_id) + sk.(scores(it)) = 0; + }); return 1; } @@ -285,18 +278,16 @@ void Score_ClearAll() { entity sk; float t; - FOREACH_CLIENTSLOT(true, - { - sk = it.scorekeeper; - if(!sk) - continue; - for(int j = 0; j < MAX_SCORE; ++j) - { - if(sk.(scores[j]) != 0) - if(scores_label[j] != "") - sk.SendFlags |= pow(2, j); - sk.(scores[j]) = 0; - } + FOREACH_CLIENTSLOT(true, { + sk = CS(it).scorekeeper; + if (!sk) continue; + FOREACH(Scores, true, { + if(sk.(scores(it)) != 0) + if(scores_label(it) != "") + sk.SendFlags |= (2 ** (i % 16)); + if(i != SP_ELO.m_id) + sk.(scores(it)) = 0; + }); }); for(t = 0; t < 16; ++t) { @@ -305,59 +296,62 @@ void Score_ClearAll() continue; for(int j = 0; j < MAX_TEAMSCORE; ++j) { - if(sk.(teamscores[j]) != 0) - if(teamscores_label[j] != "") - sk.SendFlags |= pow(2, j); - sk.(teamscores[j]) = 0; + if(sk.(teamscores(j)) != 0) + if(teamscores_label(j) != "") + sk.SendFlags |= (2 ** j); + sk.(teamscores(j)) = 0; } } } void PlayerScore_Attach(entity player) { - if(player.scorekeeper) + if(CS(player).scorekeeper) error("player already has a scorekeeper"); entity sk = new_pure(scorekeeper); sk.owner = player; Net_LinkEntity(sk, false, 0, PlayerScore_SendEntity); - player.scorekeeper = sk; + CS(player).scorekeeper = sk; } void PlayerScore_Detach(entity player) { - if(!player.scorekeeper) + if(!CS(player).scorekeeper) error("player has no scorekeeper"); - remove(player.scorekeeper); - player.scorekeeper = world; + delete(CS(player).scorekeeper); + CS(player).scorekeeper = NULL; } -float PlayerScore_Add(entity player, float scorefield, float score) +float PlayerScore_Add(entity player, PlayerScoreField scorefield, float score) { bool mutator_returnvalue = MUTATOR_CALLHOOK(AddPlayerScore, scorefield, score, player); score = M_ARGV(1, float); - if(gameover) + if(game_stopped) if(!mutator_returnvalue) score = 0; if(!scores_initialized) return 0; // FIXME remove this when everything uses this system - entity s = player.scorekeeper; + entity s = CS(player).scorekeeper; if(!s) { - if(gameover) + if(game_stopped) return 0; - LOG_WARNING("Adding score to unknown player!"); + LOG_WARN("Adding score to unknown player!"); return 0; } - if(score) - if(scores_label[scorefield] != "") - s.SendFlags |= pow(2, scorefield); + if(!score) + { + return s.(scores(scorefield)); + } + if(scores_label(scorefield) != "") + s.SendFlags |= (2 ** (scorefield.m_id % 16)); if(!warmup_stage) - PS_GR_P_ADDVAL(s.owner, strcat(PLAYERSTATS_TOTAL, scores_label[scorefield]), score); - return (s.(scores[scorefield]) += score); + PS_GR_P_ADDVAL(s.owner, strcat(PLAYERSTATS_TOTAL, scores_label(scorefield)), score); + return (s.(scores(scorefield)) += score); } -float PlayerTeamScore_Add(entity player, float pscorefield, float tscorefield, float score) +float PlayerTeamScore_Add(entity player, PlayerScoreField pscorefield, float tscorefield, float score) { float r; r = PlayerScore_Add(player, pscorefield, score); @@ -371,13 +365,10 @@ float PlayerScore_Compare(entity t1, entity t2, float strict) if(!t1 || !t2) return (!t2) - !t1; vector result = '0 0 0'; - float i; - for(i = 0; i < MAX_SCORE; ++i) - { - var .float f; - f = scores[i]; - result = ScoreField_Compare(t1, t2, f, scores_flags[i], result, strict); - } + FOREACH(Scores, true, { + var .float f = scores(it); + result = ScoreField_Compare(t1, t2, f, scores_flags(it), result, strict); + }); if (result.x == 0 && strict) result.x = etof(t1.owner) - etof(t2.owner); @@ -405,10 +396,10 @@ void WinningConditionHelper(entity this) s = GetGametype(); s = strcat(s, ":", autocvar_g_xonoticversion); s = strcat(s, ":P", ftos(cvar_purechanges_count)); - s = strcat(s, ":S", ftos(nJoinAllowed(this, 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) { @@ -421,8 +412,8 @@ void WinningConditionHelper(entity this) WinningConditionHelper_winnerteam = -1; WinningConditionHelper_secondteam = -1; - winnerscorekeeper = world; - secondscorekeeper = world; + winnerscorekeeper = NULL; + secondscorekeeper = NULL; for(t = 0; t < 16; ++t) { sk = teamscorekeepers[t]; @@ -454,17 +445,17 @@ void WinningConditionHelper(entity this) 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; - FOREACH_CLIENT(IS_PLAYER(it), LAMBDA( - sk = it.scorekeeper; + WinningConditionHelper_winner = NULL; + WinningConditionHelper_second = NULL; + winnerscorekeeper = NULL; + secondscorekeeper = NULL; + FOREACH_CLIENT(IS_PLAYER(it), { + sk = CS(it).scorekeeper; c = PlayerScore_Compare(winnerscorekeeper, sk, 1); if(c < 0) { @@ -482,11 +473,11 @@ void WinningConditionHelper(entity this) 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; @@ -524,7 +515,7 @@ void WinningConditionHelper(entity this) strunzone(worldstatus); worldstatus = strzone(s); - FOREACH_CLIENT(true, LAMBDA( + FOREACH_CLIENT(true, { string s = ""; if(fullstatus) { @@ -544,7 +535,7 @@ void WinningConditionHelper(entity this) if(it.clientstatus) strunzone(it.clientstatus); it.clientstatus = strzone(s); - )); + }); } string GetScoreLogLabel(string label, float fl) @@ -562,53 +553,59 @@ string GetPlayerScoreString(entity pl, float shortString) { string out; entity sk; - float i, f; + float f; string l; out = ""; if(!pl) { // label - for(i = 0; i < MAX_SCORE; ++i) - if((scores_flags[i] & SFL_SORT_PRIO_MASK) == SFL_SORT_PRIO_PRIMARY) + FOREACH(Scores, true, { + if ((scores_flags(it) & SFL_SORT_PRIO_MASK) == SFL_SORT_PRIO_PRIMARY) { - f = scores_flags[i]; - l = scores_label[i]; + f = scores_flags(it); + l = scores_label(it); out = strcat(out, GetScoreLogLabel(l, f), ","); } + }); if(shortString < 2) - for(i = 0; i < MAX_SCORE; ++i) - if((scores_flags[i] & SFL_SORT_PRIO_MASK) == SFL_SORT_PRIO_SECONDARY) + FOREACH(Scores, true, { + if((scores_flags(it) & SFL_SORT_PRIO_MASK) == SFL_SORT_PRIO_SECONDARY) { - f = scores_flags[i]; - l = scores_label[i]; + f = scores_flags(it); + l = scores_label(it); out = strcat(out, GetScoreLogLabel(l, f), ","); } + }); if(shortString < 1) - for(i = 0; i < MAX_SCORE; ++i) - if((scores_flags[i] & SFL_SORT_PRIO_MASK) != SFL_SORT_PRIO_PRIMARY) - if((scores_flags[i] & SFL_SORT_PRIO_MASK) != SFL_SORT_PRIO_SECONDARY) + FOREACH(Scores, true, { + if((scores_flags(it) & SFL_SORT_PRIO_MASK) != SFL_SORT_PRIO_PRIMARY) + if((scores_flags(it) & SFL_SORT_PRIO_MASK) != SFL_SORT_PRIO_SECONDARY) { - f = scores_flags[i]; - l = scores_label[i]; + f = scores_flags(it); + l = scores_label(it); out = strcat(out, GetScoreLogLabel(l, f), ","); } + }); out = substring(out, 0, strlen(out) - 1); } - else if((sk = pl.scorekeeper)) + else if((sk = CS(pl).scorekeeper)) { - for(i = 0; i < MAX_SCORE; ++i) - if((scores_flags[i] & SFL_SORT_PRIO_MASK) == SFL_SORT_PRIO_PRIMARY) - out = strcat(out, ftos(sk.(scores[i])), ","); + FOREACH(Scores, true, { + if ((scores_flags(it) & SFL_SORT_PRIO_MASK) == SFL_SORT_PRIO_PRIMARY) + out = strcat(out, ftos(sk.(scores(it))), ","); + }); if(shortString < 2) - for(i = 0; i < MAX_SCORE; ++i) - if((scores_flags[i] & SFL_SORT_PRIO_MASK) == SFL_SORT_PRIO_SECONDARY) - out = strcat(out, ftos(sk.(scores[i])), ","); + FOREACH(Scores, true, { + if ((scores_flags(it) & SFL_SORT_PRIO_MASK) == SFL_SORT_PRIO_SECONDARY) + out = strcat(out, ftos(sk.(scores(it))), ","); + }); if(shortString < 1) - for(i = 0; i < MAX_SCORE; ++i) - if((scores_flags[i] & SFL_SORT_PRIO_MASK) != SFL_SORT_PRIO_PRIMARY) - if((scores_flags[i] & SFL_SORT_PRIO_MASK) != SFL_SORT_PRIO_SECONDARY) - out = strcat(out, ftos(sk.(scores[i])), ","); + FOREACH(Scores, true, { + if((scores_flags(it) & SFL_SORT_PRIO_MASK) != SFL_SORT_PRIO_PRIMARY) + if((scores_flags(it) & SFL_SORT_PRIO_MASK) != SFL_SORT_PRIO_SECONDARY) + out = strcat(out, ftos(sk.(scores(it))), ","); + }); out = substring(out, 0, strlen(out) - 1); } return out; @@ -626,27 +623,27 @@ string GetTeamScoreString(float tm, float shortString) { // label for(i = 0; i < MAX_TEAMSCORE; ++i) - if((teamscores_flags[i] & SFL_SORT_PRIO_MASK) == SFL_SORT_PRIO_PRIMARY) + if((teamscores_flags(i) & SFL_SORT_PRIO_MASK) == SFL_SORT_PRIO_PRIMARY) { - f = teamscores_flags[i]; - l = teamscores_label[i]; + f = teamscores_flags(i); + l = teamscores_label(i); out = strcat(out, GetScoreLogLabel(l, f), ","); } if(shortString < 2) for(i = 0; i < MAX_TEAMSCORE; ++i) - if((teamscores_flags[i] & SFL_SORT_PRIO_MASK) == SFL_SORT_PRIO_SECONDARY) + if((teamscores_flags(i) & SFL_SORT_PRIO_MASK) == SFL_SORT_PRIO_SECONDARY) { - f = teamscores_flags[i]; - l = teamscores_label[i]; + f = teamscores_flags(i); + l = teamscores_label(i); out = strcat(out, GetScoreLogLabel(l, f), ","); } if(shortString < 1) for(i = 0; i < MAX_TEAMSCORE; ++i) - if((teamscores_flags[i] & SFL_SORT_PRIO_MASK) != SFL_SORT_PRIO_PRIMARY) - if((teamscores_flags[i] & SFL_SORT_PRIO_MASK) != SFL_SORT_PRIO_SECONDARY) + if((teamscores_flags(i) & SFL_SORT_PRIO_MASK) != SFL_SORT_PRIO_PRIMARY) + if((teamscores_flags(i) & SFL_SORT_PRIO_MASK) != SFL_SORT_PRIO_SECONDARY) { - f = teamscores_flags[i]; - l = teamscores_label[i]; + f = teamscores_flags(i); + l = teamscores_label(i); out = strcat(out, GetScoreLogLabel(l, f), ","); } out = substring(out, 0, strlen(out) - 1); @@ -654,17 +651,17 @@ string GetTeamScoreString(float tm, float shortString) else if((sk = teamscorekeepers[tm - 1])) { for(i = 0; i < MAX_TEAMSCORE; ++i) - if((teamscores_flags[i] & SFL_SORT_PRIO_MASK) == SFL_SORT_PRIO_PRIMARY) - out = strcat(out, ftos(sk.(teamscores[i])), ","); + if((teamscores_flags(i) & SFL_SORT_PRIO_MASK) == SFL_SORT_PRIO_PRIMARY) + out = strcat(out, ftos(sk.(teamscores(i))), ","); if(shortString < 2) for(i = 0; i < MAX_TEAMSCORE; ++i) - if((teamscores_flags[i] & SFL_SORT_PRIO_MASK) == SFL_SORT_PRIO_SECONDARY) - out = strcat(out, ftos(sk.(teamscores[i])), ","); + if((teamscores_flags(i) & SFL_SORT_PRIO_MASK) == SFL_SORT_PRIO_SECONDARY) + out = strcat(out, ftos(sk.(teamscores(i))), ","); if(shortString < 1) for(i = 0; i < MAX_TEAMSCORE; ++i) - if((teamscores_flags[i] & SFL_SORT_PRIO_MASK) != SFL_SORT_PRIO_PRIMARY) - if((teamscores_flags[i] & SFL_SORT_PRIO_MASK) != SFL_SORT_PRIO_SECONDARY) - out = strcat(out, ftos(sk.(teamscores[i])), ","); + if((teamscores_flags(i) & SFL_SORT_PRIO_MASK) != SFL_SORT_PRIO_PRIMARY) + if((teamscores_flags(i) & SFL_SORT_PRIO_MASK) != SFL_SORT_PRIO_SECONDARY) + out = strcat(out, ftos(sk.(teamscores(i))), ","); out = substring(out, 0, strlen(out) - 1); } return out; @@ -687,7 +684,7 @@ float PlayerTeamScore_Compare(entity p1, entity p2, float teams, float strict) return 0; } - return PlayerScore_Compare(p1.scorekeeper, p2.scorekeeper, strict); + return PlayerScore_Compare(CS(p1).scorekeeper, CS(p2).scorekeeper, strict); } entity PlayerScore_Sort(.float field, float teams, float strict, float nospectators) @@ -695,11 +692,11 @@ 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; - FOREACH_CLIENT(true, LAMBDA(it.(field) = 0)); + FOREACH_CLIENT(true, { it.(field) = 0; }); - FOREACH_CLIENT(it.scorekeeper, + FOREACH_CLIENT(CS(it).scorekeeper, { if(nospectators) if(it.frags == FRAGS_SPECTATOR) @@ -710,12 +707,12 @@ entity PlayerScore_Sort(.float field, float teams, float strict, float nospectat }); // 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); ) { @@ -727,11 +724,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)) @@ -756,7 +753,7 @@ float TeamScore_GetCompareValue(float t) if(t <= 0 || t >= 16) { - if(gameover) + if(game_stopped) return 0; error("Reading score of invalid team!"); } @@ -799,10 +796,10 @@ void Score_NicePrint_Team(entity to, float t, float w) { s = strcat(s, Team_ColoredFullName(t)); for(i = 0; i < MAX_TEAMSCORE; ++i) - if(teamscores_label[i] != "") + if(teamscores_label(i) != "") { - fl = teamscores_flags[i]; - sc = sk.(teamscores[i]); + fl = teamscores_flags(i); + sc = sk.(teamscores(i)); s = strcat(s, " ", Score_NicePrint_ItemColor(fl), ScoreString(fl, sc)); } } @@ -811,13 +808,14 @@ void Score_NicePrint_Team(entity to, float t, float w) s = strcat(s, strpad(max(0, NAMEWIDTH - strlennocol(s)), "")); - for(i = 0; i < MAX_SCORE; ++i) - if(scores_label[i] != "") + FOREACH(Scores, true, { + if(scores_label(it) != "") { - fl = scores_flags[i]; - s2 = scores_label[i]; + fl = scores_flags(it); + s2 = scores_label(it); s = strcat(s, " ", Score_NicePrint_ItemColor(fl), strpad(-w, substring(s2, 0, w))); } + }); print_to(to, s); } @@ -830,9 +828,9 @@ void Score_NicePrint_Player(entity to, entity p, float w) float fl, sc; s = " "; - sk = p.scorekeeper; + sk = CS(p).scorekeeper; - s = strcat(s, p.netname); + s = strcat(s, playername(p, false)); for (;;) { i = strlennocol(s) - NAMEWIDTH; @@ -845,13 +843,14 @@ void Score_NicePrint_Player(entity to, entity p, float w) } } - for(i = 0; i < MAX_SCORE; ++i) - if(scores_label[i] != "") + FOREACH(Scores, true, { + if(scores_label(it) != "") { - fl = scores_flags[i]; - sc = sk.(scores[i]); + fl = scores_flags(it); + sc = sk.(scores(it)); s = strcat(s, " ", Score_NicePrint_ItemColor(fl), strpad(-w, ScoreString(fl, sc))); } + }); print_to(to, s); } @@ -863,20 +862,20 @@ void Score_NicePrint_Spectators(entity to) void Score_NicePrint_Spectator(entity to, entity p) { - print_to(to, strcat(" ", p.netname)); + print_to(to, strcat(" ", playername(p, false))); } .float score_dummyfield; void Score_NicePrint(entity to) { entity p; - float i; float w; int t = 0; - for(i = 0; i < MAX_SCORE; ++i) - if(scores_label[i] != "") + FOREACH(Scores, true, { + if(scores_label(it) != "") ++t; + }); w = bound(6, floor(SCORESWIDTH / t - 1), 9); p = PlayerScore_Sort(score_dummyfield, 1, 1, 0); @@ -895,24 +894,22 @@ void Score_NicePrint(entity to) } t = 0; - FOREACH_CLIENT(!IS_PLAYER(it), LAMBDA( + FOREACH_CLIENT(!IS_PLAYER(it), { if (!t) Score_NicePrint_Spectators(to); Score_NicePrint_Spectator(to, it); t = 1; - )); + }); } void PlayerScore_PlayerStats(entity p) { - entity s; - float i; - s = p.scorekeeper; - - for(i = 0; i < MAX_SCORE; ++i) - if(s.(scores[i]) != 0) - if(scores_label[i] != "") - PS_GR_P_ADDVAL(s.owner, strcat(PLAYERSTATS_SCOREBOARD, scores_label[i]), s.(scores[i])); + entity s = CS(p).scorekeeper; + FOREACH(Scores, true, { + if(s.(scores(it)) != 0) + if(scores_label(it) != "") + PS_GR_P_ADDVAL(s.owner, strcat(PLAYERSTATS_SCOREBOARD, scores_label(it)), s.(scores(it))); + }); } void PlayerScore_TeamStats() @@ -925,9 +922,9 @@ void PlayerScore_TeamStats() if(!sk) continue; for(i = 0; i < MAX_TEAMSCORE; ++i) - if(sk.(teamscores[i]) != 0) - if(teamscores_label[i] != "") + if(sk.(teamscores(i)) != 0) + if(teamscores_label(i) != "") // the +1 is important here! - PS_GR_T_ADDVAL(t+1, strcat(PLAYERSTATS_SCOREBOARD, teamscores_label[i]), sk.(teamscores[i])); + PS_GR_T_ADDVAL(t+1, strcat(PLAYERSTATS_SCOREBOARD, teamscores_label(i)), sk.(teamscores(i))); } }