X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fscores.qc;h=af2f4b574f43a57f0c098d19c47b5fe2754428ac;hb=e2206feb6fec163ffee9c87d50d8d9580393cd88;hp=1a51c803d5244b86207982ad712cf17ad53ebbfb;hpb=0a980f57412cf2253cfd73c8c01a26fb04c87189;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/scores.qc b/qcsrc/server/scores.qc index 1a51c803d..af2f4b574 100644 --- a/qcsrc/server/scores.qc +++ b/qcsrc/server/scores.qc @@ -1,16 +1,21 @@ #include "scores.qh" #include "command/common.qh" -#include "mutators/all.qh" +#include "defs.qh" +#include +#include +#include +#include #include "../common/playerstats.qh" #include "../common/teams.qh" +#include +#include +#include +#include +#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 +61,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 +69,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 +80,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; @@ -98,31 +103,31 @@ void TeamScore_Spawn(float t, string name) PlayerStats_GameReport_AddTeam(t); } -float TeamScore_AddToTeam(float t, float scorefield, float score) +float TeamScore_AddToTeam(int 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 +144,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 +158,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 +176,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,16 +194,15 @@ 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; } @@ -230,31 +234,28 @@ void ScoreInfo_Init(int 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 +263,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 +285,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 +303,86 @@ 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"); - delete(player.scorekeeper); - player.scorekeeper = NULL; + 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); + PlayerStats_GameReport_Event_Player(s.owner, strcat(PLAYERSTATS_TOTAL, scores_label(scorefield)), score); + s.(scores(scorefield)) += score; + MUTATOR_CALLHOOK(AddedPlayerScore, scorefield, score, player); + return s.(scores(scorefield)); } -float PlayerTeamScore_Add(entity player, float pscorefield, float tscorefield, float score) +float PlayerScore_Set(entity player, PlayerScoreField scorefield, float score) +{ + if(!scores_initialized) return 0; // FIXME remove this when everything uses this system + entity s = CS(player).scorekeeper; + if(!s) + { + if(game_stopped) + return 0; + LOG_WARN("Setting score of unknown player!"); + return 0; + } + + float oldscore = s.(scores(scorefield)); + if(oldscore == score) + return oldscore; + + if(scores_label(scorefield) != "") + s.SendFlags |= (2 ** (scorefield.m_id % 16)); + s.(scores(scorefield)) = score; + return s.(scores(scorefield)); +} + +float PlayerTeamScore_Add(entity player, PlayerScoreField pscorefield, float tscorefield, float score) { float r; r = PlayerScore_Add(player, pscorefield, score); @@ -371,16 +396,13 @@ 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); + result.x = t1.owner.playerid - t2.owner.playerid; return result.x; } @@ -463,8 +485,8 @@ void WinningConditionHelper(entity this) WinningConditionHelper_second = NULL; winnerscorekeeper = NULL; secondscorekeeper = NULL; - FOREACH_CLIENT(IS_PLAYER(it), LAMBDA( - sk = it.scorekeeper; + FOREACH_CLIENT(IS_PLAYER(it), { + sk = CS(it).scorekeeper; c = PlayerScore_Compare(winnerscorekeeper, sk, 1); if(c < 0) { @@ -482,7 +504,7 @@ void WinningConditionHelper(entity this) secondscorekeeper = sk; } } - )); + }); WinningConditionHelper_equality = (PlayerScore_Compare(winnerscorekeeper, secondscorekeeper, 0) == 0); if(WinningConditionHelper_equality) @@ -520,11 +542,9 @@ void WinningConditionHelper(entity this) } } - if(worldstatus) - strunzone(worldstatus); - worldstatus = strzone(s); + strcpy(worldstatus, s); - FOREACH_CLIENT(true, LAMBDA( + FOREACH_CLIENT(true, { string s = ""; if(fullstatus) { @@ -541,10 +561,8 @@ void WinningConditionHelper(entity this) s = "-666"; } - if(it.clientstatus) - strunzone(it.clientstatus); - it.clientstatus = strzone(s); - )); + strcpy(it.clientstatus, s); + }); } string GetScoreLogLabel(string label, float fl) @@ -562,53 +580,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 +650,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 +678,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 +711,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) @@ -697,9 +721,9 @@ entity PlayerScore_Sort(.float field, float teams, float strict, float nospectat 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) @@ -756,7 +780,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 +823,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 +835,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 +855,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 +870,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 +889,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 +921,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 && scores_label(it) != "") + PlayerStats_GameReport_Event_Player(s.owner, + strcat(PLAYERSTATS_SCOREBOARD, scores_label(it)), s.(scores(it))); + }); } void PlayerScore_TeamStats() @@ -925,9 +949,9 @@ void PlayerScore_TeamStats() if(!sk) continue; for(i = 0; i < MAX_TEAMSCORE; ++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])); + if(sk.(teamscores(i)) != 0 && teamscores_label(i) != "") + // the +1 is important here! + PlayerStats_GameReport_Event_Team(t+1, + strcat(PLAYERSTATS_SCOREBOARD, teamscores_label(i)), sk.(teamscores(i))); } }