X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fscores.qc;h=94bea2b44a662428e8259e36a0b08941f18e91d3;hp=59c76513d524c3be9cb991aa2f346fb439d2ef5e;hb=06ac66a5edaa645e19ed9a6482409e8656a65b1d;hpb=61bd69dc7a8e218b6beff349fd332eb7ac8a81ae diff --git a/qcsrc/server/scores.qc b/qcsrc/server/scores.qc index 59c76513d..94bea2b44 100644 --- a/qcsrc/server/scores.qc +++ b/qcsrc/server/scores.qc @@ -1,7 +1,7 @@ #include "scores.qh" #include "command/common.qh" -#include "mutators/all.qh" +#include "mutators/_mod.qh" #include "../common/playerstats.qh" #include "../common/teams.qh" @@ -61,7 +61,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 @@ -75,9 +75,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; @@ -185,7 +185,7 @@ bool ScoreInfo_SendEntity(entity this, entity to, int sf) { float i; WriteHeader(MSG_ENTITY, ENT_CLIENT_SCORES_INFO); - WriteInt24_t(MSG_ENTITY, MapInfo_LoadedGametype); + WriteRegistered(Gametypes, MSG_ENTITY, MapInfo_LoadedGametype); FOREACH(Scores, true, { WriteString(MSG_ENTITY, scores_label(it)); WriteByte(MSG_ENTITY, scores_flags(it)); @@ -198,7 +198,7 @@ bool ScoreInfo_SendEntity(entity this, entity to, int sf) return true; } -void ScoreInfo_Init(float teams) +void ScoreInfo_Init(int teams) { if(scores_initialized) { @@ -209,13 +209,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"); } @@ -226,12 +226,12 @@ void ScoreInfo_Init(float teams) bool PlayerScore_SendEntity(entity this, entity to, float sendflags) { WriteHeader(MSG_ENTITY, ENT_CLIENT_SCORES); - WriteByte(MSG_ENTITY, etof(self.owner)); + WriteByte(MSG_ENTITY, etof(this.owner)); int longflags = 0; FOREACH(Scores, true, { int p = 1 << (i % 16); - if (self.(scores(it)) > 127 || self.(scores(it)) <= -128) + if (this.(scores(it)) > 127 || this.(scores(it)) <= -128) longflags |= p; }); @@ -242,9 +242,9 @@ bool PlayerScore_SendEntity(entity this, entity to, float sendflags) if (sendflags & p) { if(longflags & p) - WriteInt24_t(MSG_ENTITY, self.(scores(it))); + WriteInt24_t(MSG_ENTITY, this.(scores(it))); else - WriteChar(MSG_ENTITY, self.(scores(it))); + WriteChar(MSG_ENTITY, this.(scores(it))); } }); @@ -314,14 +314,14 @@ void PlayerScore_Detach(entity player) { if(!player.scorekeeper) error("player has no scorekeeper"); - remove(player.scorekeeper); - player.scorekeeper = world; + delete(player.scorekeeper); + player.scorekeeper = NULL; } float PlayerScore_Add(entity player, PlayerScoreField 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) @@ -333,7 +333,7 @@ float PlayerScore_Add(entity player, PlayerScoreField 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) @@ -369,9 +369,8 @@ float PlayerScore_Compare(entity t1, entity t2, float strict) return result.x; } -void WinningConditionHelper() +void WinningConditionHelper(entity this) { - SELFPARAM(); float c; string s; float fullstatus; @@ -390,10 +389,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(self, 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) { @@ -406,8 +405,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]; @@ -439,15 +438,15 @@ 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; + 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); @@ -471,7 +470,7 @@ void WinningConditionHelper() 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; @@ -515,19 +514,15 @@ void WinningConditionHelper() { s = GetPlayerScoreString(it, 1); s = strcat(s, IS_REAL_CLIENT(it) ? ":human" : ":bot"); - ret_string = string_null; - if(!IS_PLAYER(it) && !MUTATOR_CALLHOOK(GetPlayerStatus, it, s)) + 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(it) || MUTATOR_CALLHOOK(GetPlayerStatus, it, s)) + if (IS_PLAYER(it) || MUTATOR_CALLHOOK(GetPlayerStatus, it)) s = GetPlayerScoreString(it, 2); else s = "-666"; - if (ret_string) s = strcat(s, ret_string); } if(it.clientstatus) @@ -690,7 +685,7 @@ 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)); @@ -705,12 +700,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); ) { @@ -722,11 +717,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))