#include "scores.qh"
-#include "command/common.qh"
-#include "defs.qh"
-#include <server/g_world.qh>
-#include <server/miscfunctions.qh>
-#include <server/mutators/_mod.qh>
-#include <server/round_handler.qh>
-#include <common/net_linked.qh>
-#include "../common/playerstats.qh"
-#include "../common/teams.qh"
#include <common/mapinfo.qh>
#include <common/mutators/base.qh>
+#include <common/net_linked.qh>
+#include <common/playerstats.qh>
#include <common/scores.qh>
#include <common/state.qh>
#include <common/stats.qh>
+#include <common/teams.qh>
+#include <common/weapons/_all.qh>
+#include <server/client.qh>
+#include <server/command/common.qh>
+#include <server/intermission.qh>
+#include <server/mutators/_mod.qh>
+#include <server/round_handler.qh>
+#include <server/world.qh>
.entity scorekeeper;
entity teamscorekeepers[16];
float scores_flags_primary;
float teamscores_flags_primary;
-vector ScoreField_Compare(entity t1, entity t2, .float field, float fieldflags, vector previous, float strict) // returns: cmp value, best prio
+vector ScoreField_Compare(entity t1, entity t2, .float field, float fieldflags, vector previous, bool strict) // returns: cmp value, best prio
{
if(!strict && !(fieldflags & SFL_SORT_PRIO_MASK)) // column does not sort
return previous;
}
if(score)
if(teamscores_label(scorefield) != "")
- s.SendFlags |= (2 ** scorefield);
+ s.SendFlags |= BIT(scorefield);
return (s.(teamscores(scorefield)) += score);
}
return TeamScore_AddToTeam(player.team, scorefield, score);
}
-float TeamScore_Compare(entity t1, entity t2, float strict)
+float TeamScore_Compare(entity t1, entity t2, bool strict)
{
if(!t1 || !t2) return (!t2) - !t1;
FOREACH(Scores, true, {
if(sk.(scores(it)) != 0)
if(scores_label(it) != "")
- sk.SendFlags |= (2 ** (i % 16));
+ sk.SendFlags |= BIT(i % 16);
if(i != SP_ELO.m_id)
sk.(scores(it)) = 0;
});
FOREACH(Scores, true, {
if(sk.(scores(it)) != 0)
if(scores_label(it) != "")
- sk.SendFlags |= (2 ** (i % 16));
+ sk.SendFlags |= BIT(i % 16);
if(i != SP_ELO.m_id)
sk.(scores(it)) = 0;
});
{
if(sk.(teamscores(j)) != 0)
if(teamscores_label(j) != "")
- sk.SendFlags |= (2 ** j);
+ sk.SendFlags |= BIT(j);
sk.(teamscores(j)) = 0;
}
}
return s.(scores(scorefield));
}
if(scores_label(scorefield) != "")
- s.SendFlags |= (2 ** (scorefield.m_id % 16));
+ s.SendFlags |= BIT(scorefield.m_id % 16);
if(!warmup_stage)
PlayerStats_GameReport_Event_Player(s.owner, strcat(PLAYERSTATS_TOTAL, scores_label(scorefield)), score);
s.(scores(scorefield)) += score;
return oldscore;
if(scores_label(scorefield) != "")
- s.SendFlags |= (2 ** (scorefield.m_id % 16));
+ s.SendFlags |= BIT(scorefield.m_id % 16);
s.(scores(scorefield)) = score;
return s.(scores(scorefield));
}
return r;
}
-float PlayerScore_Compare(entity t1, entity t2, float strict)
+float PlayerScore_Compare(entity t1, entity t2, bool strict)
{
if(!t1 || !t2) return (!t2) - !t1;
s = strcat(s, ":P", ftos(cvar_purechanges_count));
s = strcat(s, ":S", ftos(nJoinAllowed(this, NULL)));
s = strcat(s, ":F", ftos(serverflags));
+ s = strcat(s, ":T", sv_termsofservice_url_escaped);
s = strcat(s, ":M", modname);
s = strcat(s, "::", GetPlayerScoreString(NULL, (fullstatus ? 1 : 2)));
secondscorekeeper = NULL;
FOREACH_CLIENT(IS_PLAYER(it), {
sk = CS(it).scorekeeper;
- c = PlayerScore_Compare(winnerscorekeeper, sk, 1);
+ c = PlayerScore_Compare(winnerscorekeeper, sk, true);
if(c < 0)
{
WinningConditionHelper_second = WinningConditionHelper_winner;
}
else
{
- c = PlayerScore_Compare(secondscorekeeper, sk, 1);
+ c = PlayerScore_Compare(secondscorekeeper, sk, true);
if(c < 0)
{
WinningConditionHelper_second = it;
}
});
- WinningConditionHelper_equality = (PlayerScore_Compare(winnerscorekeeper, secondscorekeeper, 0) == 0);
+ WinningConditionHelper_equality = (PlayerScore_Compare(winnerscorekeeper, secondscorekeeper, false) == 0);
if(WinningConditionHelper_equality)
WinningConditionHelper_winner = WinningConditionHelper_second = NULL;
else
WinningConditionHelper_topscore = -999999999;
}
- WinningConditionHelper_equality = 0;
+ if(player_count == 0) // special case: empty servers DO end the match at a 0:0 tie
+ WinningConditionHelper_equality = 0;
}
if(WinningConditionHelper_secondscore == 0)
{
s = GetPlayerScoreString(it, 1);
s = strcat(s, IS_REAL_CLIENT(it) ? ":human" : ":bot");
- if(!IS_PLAYER(it) && !MUTATOR_CALLHOOK(GetPlayerStatus, it))
+ if(!(IS_PLAYER(it) || INGAME_JOINED(it)))
s = strcat(s, ":spectator");
}
else
{
- if (IS_PLAYER(it) || MUTATOR_CALLHOOK(GetPlayerStatus, it))
+ if (IS_PLAYER(it) || INGAME_JOINED(it))
s = GetPlayerScoreString(it, 2);
else
s = "-666";
return out;
}
-float PlayerTeamScore_Compare(entity p1, entity p2, float teams, float strict)
+float PlayerTeamScore_Compare(entity p1, entity p2, float teams, bool strict)
{
if(teams && teamscores_entities_count)
{
return PlayerScore_Compare(CS(p1).scorekeeper, CS(p2).scorekeeper, strict);
}
-entity PlayerScore_Sort(.float field, float teams, float strict, float nospectators)
+entity PlayerScore_Sort(.float field, int teams, bool strict, bool nospectators)
{
entity p, plist, pprev, pbest, pbestprev, pfirst, plast;
float i, j;
pbest.chain = NULL;
++i;
- if(!plast || PlayerTeamScore_Compare(plast, pbest, teams, 0))
+ if(!plast || PlayerTeamScore_Compare(plast, pbest, teams, strict))
j = i;
pbest.(field) = j;
sk = CS(p).scorekeeper;
- s = strcat(s, playername(p, false));
+ s = strcat(s, playername(p.netname, p.team, false));
for (;;)
{
i = strlennocol(s) - NAMEWIDTH;
void Score_NicePrint_Spectator(entity to, entity p)
{
- print_to(to, strcat(" ", playername(p, false)));
+ print_to(to, strcat(" ", playername(p.netname, p.team, false)));
}
.float score_dummyfield;
});
w = bound(6, floor(SCORESWIDTH / t - 1), 9);
- p = PlayerScore_Sort(score_dummyfield, 1, 1, 0);
+ p = PlayerScore_Sort(score_dummyfield, 1, true, false);
t = -1;
if(!teamscores_entities_count)