X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fscores.qc;h=e6264b8693b4b360b7e8ad7c4a3b8f6c61a67e6c;hb=cf1512beec5b1ebac151fdcf9f44ff4830b37187;hp=1a51c803d5244b86207982ad712cf17ad53ebbfb;hpb=0a980f57412cf2253cfd73c8c01a26fb04c87189;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/scores.qc b/qcsrc/server/scores.qc index 1a51c803d..e6264b869 100644 --- a/qcsrc/server/scores.qc +++ b/qcsrc/server/scores.qc @@ -1,16 +1,13 @@ #include "scores.qh" #include "command/common.qh" -#include "mutators/all.qh" +#include "mutators/_mod.qh" +#include #include "../common/playerstats.qh" #include "../common/teams.qh" .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; @@ -65,7 +62,7 @@ bool TeamScore_SendEntity(entity this, entity to, float sendflags) longflags = 0; for(i = 0, p = 1; i < MAX_TEAMSCORE; ++i, p *= 2) - if(this.(teamscores[i]) > 127 || this.(teamscores[i]) <= -128) + if(this.(teamscores(i)) > 127 || this.(teamscores(i)) <= -128) longflags |= p; #if MAX_TEAMSCORE <= 8 @@ -79,9 +76,9 @@ bool TeamScore_SendEntity(entity this, entity to, float sendflags) if(sendflags & p) { if(longflags & p) - WriteInt24_t(MSG_ENTITY, this.(teamscores[i])); + WriteInt24_t(MSG_ENTITY, this.(teamscores(i))); else - WriteChar(MSG_ENTITY, this.(teamscores[i])); + WriteChar(MSG_ENTITY, this.(teamscores(i))); } return true; @@ -120,9 +117,9 @@ float TeamScore_AddToTeam(float t, float scorefield, float score) error("Adding score to unknown team!"); } if(score) - if(teamscores_label[scorefield] != "") + if(teamscores_label(scorefield) != "") s.SendFlags |= pow(2, scorefield); - return (s.(teamscores[scorefield]) += score); + return (s.(teamscores(scorefield)) += score); } float TeamScore_Add(entity player, float scorefield, float score) @@ -139,8 +136,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 +150,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 +168,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 +186,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 +226,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,7 +255,6 @@ bool PlayerScore_SendEntity(entity this, entity to, float sendflags) float PlayerScore_Clear(entity player) { entity sk; - float i; if(teamscores_entities_count) return 0; @@ -270,13 +262,12 @@ float PlayerScore_Clear(entity player) 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; - } + FOREACH(Scores, true, { + if(sk.(scores(it)) != 0) + if(scores_label(it) != "") + sk.SendFlags |= pow(2, i % 16); + sk.(scores(it)) = 0; + }); return 1; } @@ -285,18 +276,15 @@ void Score_ClearAll() { entity sk; float t; - FOREACH_CLIENTSLOT(true, - { + 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; - } + if (!sk) continue; + FOREACH(Scores, true, { + if(sk.(scores(it)) != 0) + if(scores_label(it) != "") + sk.SendFlags |= pow(2, i % 16); + sk.(scores(it)) = 0; + }); }); for(t = 0; t < 16; ++t) { @@ -305,10 +293,10 @@ void Score_ClearAll() continue; for(int j = 0; j < MAX_TEAMSCORE; ++j) { - if(sk.(teamscores[j]) != 0) - if(teamscores_label[j] != "") + if(sk.(teamscores(j)) != 0) + if(teamscores_label(j) != "") sk.SendFlags |= pow(2, j); - sk.(teamscores[j]) = 0; + sk.(teamscores(j)) = 0; } } } @@ -331,7 +319,7 @@ void PlayerScore_Detach(entity player) 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); @@ -346,18 +334,18 @@ float PlayerScore_Add(entity player, float scorefield, float score) { if(gameover) 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(scores_label(scorefield) != "") + s.SendFlags |= pow(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 +359,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); @@ -562,53 +547,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)) { - 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 +617,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 +645,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; @@ -799,10 +790,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 +802,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); } @@ -845,13 +837,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); } @@ -870,13 +863,13 @@ void Score_NicePrint_Spectator(entity to, entity p) 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); @@ -905,14 +898,12 @@ void Score_NicePrint(entity to) 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 = 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 +916,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))); } }