X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fscores.qc;h=3a8b830d74c04e82063566368b0c949bc7f52878;hb=04ab0ff7c3c5fcfe9780eadccfd5abd03d25b181;hp=1d62a7084254e750e14c04136c37ca49e83245c3;hpb=33e2709cb7e724bcddd442aad479d15a39c16156;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/scores.qc b/qcsrc/server/scores.qc index 1d62a7084..3a8b830d7 100644 --- a/qcsrc/server/scores.qc +++ b/qcsrc/server/scores.qc @@ -14,7 +14,7 @@ vector ScoreField_Compare(entity t1, entity t2, .float field, float fieldflags, { if(!strict && !(fieldflags & SFL_SORT_PRIO_MASK)) // column does not sort return previous; - if(fieldflags & SFL_SORT_PRIO_MASK < previous_y) + if((fieldflags & SFL_SORT_PRIO_MASK) < previous_y) return previous; if(t1.field == t2.field) return previous; @@ -150,7 +150,7 @@ void ScoreInfo_SetLabel_PlayerScore(float i, string label, float scoreflags) { scores_label[i] = label; scores_flags[i] = scoreflags; - if(scoreflags & SFL_SORT_PRIO_MASK == SFL_SORT_PRIO_PRIMARY) + if((scoreflags & SFL_SORT_PRIO_MASK) == SFL_SORT_PRIO_PRIMARY) { scores_primary = scores[i]; scores_flags_primary = scoreflags; @@ -166,11 +166,16 @@ void ScoreInfo_SetLabel_TeamScore(float i, string label, float scoreflags) { teamscores_label[i] = label; teamscores_flags[i] = scoreflags; - if(scoreflags & SFL_SORT_PRIO_MASK == SFL_SORT_PRIO_PRIMARY) + if((scoreflags & SFL_SORT_PRIO_MASK) == SFL_SORT_PRIO_PRIMARY) { teamscores_primary = teamscores[i]; teamscores_flags_primary = scoreflags; } + if(label != "") + { + PlayerStats_AddEvent(strcat(PLAYERSTATS_TOTAL, label)); + PlayerStats_AddEvent(strcat(PLAYERSTATS_SCOREBOARD, label)); + } } float ScoreInfo_SendEntity(entity to, float sf) @@ -204,13 +209,13 @@ void ScoreInfo_Init(float teams) Net_LinkEntity(scores_initialized, FALSE, 0, ScoreInfo_SendEntity); } if(teams >= 1) - TeamScore_Spawn(FL_TEAM_1, "Red"); + TeamScore_Spawn(NUM_TEAM_1, "Red"); if(teams >= 2) - TeamScore_Spawn(FL_TEAM_2, "Blue"); + TeamScore_Spawn(NUM_TEAM_2, "Blue"); if(teams >= 3) - TeamScore_Spawn(FL_TEAM_3, "Yellow"); + TeamScore_Spawn(NUM_TEAM_3, "Yellow"); if(teams >= 4) - TeamScore_Spawn(FL_TEAM_4, "Pink"); + TeamScore_Spawn(NUM_TEAM_4, "Pink"); } /* @@ -256,8 +261,8 @@ float PlayerScore_Clear(entity player) if(teamscores_entities_count) return 0; - if(g_lms) return 0; - if(g_arena || g_ca) return 0; + if(MUTATOR_CALLHOOK(ForbidPlayerScore_Clear)) return 0; + if(g_cts) return 0; // in CTS, you don't lose score by observing if(g_race && g_race_qualifying) return 0; // in qualifying, you don't lose score by observing @@ -329,7 +334,7 @@ float PlayerScore_Add(entity player, float scorefield, float score) entity s; if(gameover) - if not(g_lms && scorefield == SP_LMS_RANK) // allow writing to this field in intermission as it is needed for newly joining players + if(!(g_lms && scorefield == SP_LMS_RANK)) // allow writing to this field in intermission as it is needed for newly joining players score = 0; if(!scores_initialized) return 0; // FIXME remove this when everything uses this system @@ -344,7 +349,7 @@ float PlayerScore_Add(entity player, float scorefield, float score) if(score) if(scores_label[scorefield] != "") s.SendFlags |= pow(2, scorefield); - if(!inWarmupStage) + if(!warmup_stage) PlayerStats_Event(s.owner, strcat(PLAYERSTATS_TOTAL, scores_label[scorefield]), score); return (s.(scores[scorefield]) += score); } @@ -393,15 +398,15 @@ void WinningConditionHelper() // so to match pure, match for :P0: // to match full, match for :S0: + fullstatus = autocvar_g_full_getstatus_responses; + 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, ":F", ftos(serverflags)); s = strcat(s, ":M", modname); - s = strcat(s, "::", GetPlayerScoreString(world, 1)); // make this 1 once we can, note: this doesn't contain any : - - fullstatus = autocvar_g_full_getstatus_responses; + s = strcat(s, "::", GetPlayerScoreString(world, (fullstatus ? 1 : 2))); if(teamscores_entities_count) { @@ -523,16 +528,16 @@ void WinningConditionHelper() if(fullstatus) { s = GetPlayerScoreString(p, 1); - if(clienttype(p) == CLIENTTYPE_REAL) + if(IS_REAL_CLIENT(p)) s = strcat(s, ":human"); else s = strcat(s, ":bot"); - if(p.classname != "player" && !g_arena && !g_ca && !g_lms) + if(!IS_PLAYER(p) && p.caplayer != 1 && !g_lms) s = strcat(s, ":spectator"); } else { - if(p.classname == "player" || g_arena || g_ca || g_lms) + if(IS_PLAYER(p) || p.caplayer == 1 || g_lms) s = GetPlayerScoreString(p, 2); else s = "-666"; @@ -548,9 +553,9 @@ string GetScoreLogLabel(string label, float fl) { if(fl & SFL_LOWER_IS_BETTER) label = strcat(label, "<"); - if(fl & SFL_SORT_PRIO_MASK == SFL_SORT_PRIO_PRIMARY) + if((fl & SFL_SORT_PRIO_MASK) == SFL_SORT_PRIO_PRIMARY) label = strcat(label, "!!"); - else if(fl & SFL_SORT_PRIO_MASK == SFL_SORT_PRIO_SECONDARY) + else if((fl & SFL_SORT_PRIO_MASK) == SFL_SORT_PRIO_SECONDARY) label = strcat(label, "!"); return label; } @@ -567,7 +572,7 @@ string GetPlayerScoreString(entity pl, float shortString) { // label 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_PRIMARY) { f = scores_flags[i]; l = scores_label[i]; @@ -575,7 +580,7 @@ string GetPlayerScoreString(entity pl, float shortString) } if(shortString < 2) for(i = 0; i < MAX_SCORE; ++i) - if(scores_flags[i] & SFL_SORT_PRIO_MASK == SFL_SORT_PRIO_SECONDARY) + if((scores_flags[i] & SFL_SORT_PRIO_MASK) == SFL_SORT_PRIO_SECONDARY) { f = scores_flags[i]; l = scores_label[i]; @@ -583,8 +588,8 @@ string GetPlayerScoreString(entity pl, float shortString) } 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) + if((scores_flags[i] & SFL_SORT_PRIO_MASK) != SFL_SORT_PRIO_PRIMARY) + if((scores_flags[i] & SFL_SORT_PRIO_MASK) != SFL_SORT_PRIO_SECONDARY) { f = scores_flags[i]; l = scores_label[i]; @@ -595,16 +600,16 @@ string GetPlayerScoreString(entity pl, float shortString) else if((sk = pl.scorekeeper)) { 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_PRIMARY) out = strcat(out, ftos(sk.(scores[i])), ","); if(shortString < 2) for(i = 0; i < MAX_SCORE; ++i) - if(scores_flags[i] & SFL_SORT_PRIO_MASK == SFL_SORT_PRIO_SECONDARY) + if((scores_flags[i] & SFL_SORT_PRIO_MASK) == SFL_SORT_PRIO_SECONDARY) out = strcat(out, ftos(sk.(scores[i])), ","); 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) + 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])), ","); out = substring(out, 0, strlen(out) - 1); } @@ -622,25 +627,25 @@ string GetTeamScoreString(float tm, float shortString) if(tm == 0) { // label - for(i = 0; i < MAX_SCORE; ++i) - if(teamscores_flags[i] & SFL_SORT_PRIO_MASK == SFL_SORT_PRIO_PRIMARY) + for(i = 0; i < MAX_TEAMSCORE; ++i) + if((teamscores_flags[i] & SFL_SORT_PRIO_MASK) == SFL_SORT_PRIO_PRIMARY) { f = teamscores_flags[i]; l = teamscores_label[i]; out = strcat(out, GetScoreLogLabel(l, f), ","); } if(shortString < 2) - for(i = 0; i < MAX_SCORE; ++i) - if(teamscores_flags[i] & SFL_SORT_PRIO_MASK == SFL_SORT_PRIO_SECONDARY) + for(i = 0; i < MAX_TEAMSCORE; ++i) + if((teamscores_flags[i] & SFL_SORT_PRIO_MASK) == SFL_SORT_PRIO_SECONDARY) { f = teamscores_flags[i]; l = teamscores_label[i]; out = strcat(out, GetScoreLogLabel(l, f), ","); } if(shortString < 1) - for(i = 0; i < MAX_SCORE; ++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) + 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) { f = teamscores_flags[i]; l = teamscores_label[i]; @@ -651,16 +656,16 @@ 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) + 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) + 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) + 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); } @@ -683,7 +688,7 @@ float PlayerTeamScore_Compare(entity p1, entity p2, float teams, float strict) if(teams < 0) return 0; } - + return PlayerScore_Compare(p1.scorekeeper, p2.scorekeeper, strict); } @@ -707,7 +712,7 @@ entity PlayerScore_Sort(.float field, float teams, float strict, float nospectat plist = p; } // Now plist points to the whole list. - + pfirst = plast = world; i = j = 0; @@ -737,7 +742,7 @@ entity PlayerScore_Sort(.float field, float teams, float strict, float nospectat pbest.field = j; - if not(pfirst) + if (!pfirst) pfirst = pbest; if(plast) plast.chain = pbest; @@ -760,7 +765,7 @@ float TeamScore_GetCompareValue(float t) } sk = teamscorekeepers[t - 1]; - if not(sk) + if (!sk) return -999999999; s = sk.teamscores_primary; if(teamscores_flags_primary & SFL_ZERO_IS_WORST) @@ -808,7 +813,7 @@ void Score_NicePrint_Team(entity to, float t, float w) s = "Scores:"; s = strcat(s, strpad(max(0, NAMEWIDTH - strlennocol(s)), "")); - + for(i = 0; i < MAX_SCORE; ++i) if(scores_label[i] != "") { @@ -842,7 +847,7 @@ void Score_NicePrint_Player(entity to, entity p, float w) break; } } - + for(i = 0; i < MAX_SCORE; ++i) if(scores_label[i] != "") { @@ -891,12 +896,12 @@ void Score_NicePrint(entity to) t = p.team; p = p.chain; } - + t = 0; FOR_EACH_CLIENT(p) - if(p.classname != "player") + if (!IS_PLAYER(p)) { - if not(t) + if (!t) Score_NicePrint_Spectators(to); Score_NicePrint_Spectator(to, p); t = 1; @@ -927,6 +932,7 @@ void PlayerScore_TeamStats(void) for(i = 0; i < MAX_TEAMSCORE; ++i) if(sk.(teamscores[i]) != 0) if(teamscores_label[i] != "") - PlayerStats_TeamScore(t, strcat(PLAYERSTATS_SCOREBOARD, teamscores_label[i]), sk.(teamscores[i])); + // the +1 is important here! + PlayerStats_TeamScore(t+1, strcat(PLAYERSTATS_SCOREBOARD, teamscores_label[i]), sk.(teamscores[i])); } }