+#include "scores.qh"
+
+#include "command/common.qh"
+#include "mutators/all.qh"
+#include "../common/playerstats.qh"
+#include "../common/teams.qh"
+
.entity scorekeeper;
entity teamscorekeepers[16];
string scores_label[MAX_SCORE];
{
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)
+ if (t1.(field) == t2.(field))
return previous;
- previous_y = fieldflags & SFL_SORT_PRIO_MASK;
+ previous.y = fieldflags & SFL_SORT_PRIO_MASK;
if(fieldflags & SFL_ZERO_IS_WORST)
{
- if(t1.field == 0)
+ if (t1.(field) == 0)
{
- previous_x = -1;
+ previous.x = -1;
return previous;
}
- else if(t2.field == 0)
+ else if (t2.(field) == 0)
{
- previous_x = +1;
+ previous.x = +1;
return previous;
}
}
- if(fieldflags & SFL_LOWER_IS_BETTER)
- previous_x = (t2.field - t1.field);
+ if (fieldflags & SFL_LOWER_IS_BETTER)
+ previous.x = (t2.(field) - t1.(field));
else
- previous_x = (t1.field - t2.field);
+ previous.x = (t1.(field) - t2.(field));
return previous;
}
* teamscore entities
*/
-float TeamScore_SendEntity(entity to, float sendflags)
+bool TeamScore_SendEntity(entity this, entity to, float sendflags)
{
float i, p, longflags;
- WriteByte(MSG_ENTITY, ENT_CLIENT_TEAMSCORES);
+ WriteHeader(MSG_ENTITY, ENT_CLIENT_TEAMSCORES);
WriteByte(MSG_ENTITY, self.team - 1);
longflags = 0;
WriteChar(MSG_ENTITY, self.(teamscores[i]));
}
- return TRUE;
+ return true;
}
void TeamScore_Spawn(float t, string name)
{
- entity ts;
- ts = spawn();
- ts.classname = "csqc_score_team";
+ entity ts = new(csqc_score_team);
+ make_pure(ts);
ts.netname = name; // not used yet, FIXME
ts.team = t;
- Net_LinkEntity(ts, FALSE, 0, TeamScore_SendEntity);
+ Net_LinkEntity(ts, false, 0, TeamScore_SendEntity);
teamscorekeepers[t - 1] = ts;
++teamscores_entities_count;
PlayerStats_GameReport_AddTeam(t);
result = ScoreField_Compare(t1, t2, f, teamscores_flags[i], result, strict);
}
- if (result_x == 0 && strict)
- result_x = t1.team - t2.team;
+ if (result.x == 0 && strict)
+ result.x = t1.team - t2.team;
- return result_x;
+ return result.x;
}
/*
}
}
-float ScoreInfo_SendEntity(entity to, float sf)
+bool ScoreInfo_SendEntity(entity this, entity to, int sf)
{
float i;
- WriteByte(MSG_ENTITY, ENT_CLIENT_SCORES_INFO);
+ WriteHeader(MSG_ENTITY, ENT_CLIENT_SCORES_INFO);
WriteInt24_t(MSG_ENTITY, MapInfo_LoadedGametype);
for(i = 0; i < MAX_SCORE; ++i)
{
WriteString(MSG_ENTITY, teamscores_label[i]);
WriteByte(MSG_ENTITY, teamscores_flags[i]);
}
- return TRUE;
+ return true;
}
void ScoreInfo_Init(float teams)
}
else
{
- scores_initialized = spawn();
- scores_initialized.classname = "ent_client_scoreinfo";
- Net_LinkEntity(scores_initialized, FALSE, 0, ScoreInfo_SendEntity);
+ scores_initialized = new(ent_client_scoreinfo);
+ make_pure(scores_initialized);
+ Net_LinkEntity(scores_initialized, false, 0, ScoreInfo_SendEntity);
}
if(teams >= 1)
TeamScore_Spawn(NUM_TEAM_1, "Red");
* per-player score entities
*/
-float PlayerScore_SendEntity(entity to, float sendflags)
+bool PlayerScore_SendEntity(entity this, entity to, float sendflags)
{
float i, p, longflags;
- WriteByte(MSG_ENTITY, ENT_CLIENT_SCORES);
+ WriteHeader(MSG_ENTITY, ENT_CLIENT_SCORES);
WriteByte(MSG_ENTITY, num_for_edict(self.owner));
longflags = 0;
WriteChar(MSG_ENTITY, self.(scores[i]));
}
- return TRUE;
+ return true;
}
float PlayerScore_Clear(entity player)
void PlayerScore_Attach(entity player)
{
- entity sk;
if(player.scorekeeper)
error("player already has a scorekeeper");
- sk = spawn();
+ entity sk = new(scorekeeper);
+ make_pure(sk);
sk.owner = player;
- Net_LinkEntity(sk, FALSE, 0, PlayerScore_SendEntity);
+ Net_LinkEntity(sk, false, 0, PlayerScore_SendEntity);
player.scorekeeper = sk;
}
float PlayerScore_Add(entity player, float scorefield, float score)
{
- entity s;
+ bool mutator_returnvalue = MUTATOR_CALLHOOK(AddPlayerScore, scorefield, score);
+ score = ret_float;
if(gameover)
- if(!(g_lms && scorefield == SP_LMS_RANK)) // allow writing to this field in intermission as it is needed for newly joining players
+ if(!mutator_returnvalue)
score = 0;
if(!scores_initialized) return 0; // FIXME remove this when everything uses this system
- s = player.scorekeeper;
+ entity s = player.scorekeeper;
if(!s)
{
if(gameover)
result = ScoreField_Compare(t1, t2, f, scores_flags[i], result, strict);
}
- if (result_x == 0 && strict)
- result_x = num_for_edict(t1.owner) - num_for_edict(t2.owner);
+ if (result.x == 0 && strict)
+ result.x = num_for_edict(t1.owner) - num_for_edict(t2.owner);
- return result_x;
+ return result.x;
}
void WinningConditionHelper()
s = strcat(s, ":human");
else
s = strcat(s, ":bot");
- if(!IS_PLAYER(p) && p.caplayer != 1 && !g_lms)
+ if(!IS_PLAYER(p) && !MUTATOR_CALLHOOK(GetPlayerStatus, p, s))
s = strcat(s, ":spectator");
+ s = strcat(s, ret_string);
}
else
{
- if(IS_PLAYER(p) || p.caplayer == 1 || g_lms)
+ if(IS_PLAYER(p) || MUTATOR_CALLHOOK(GetPlayerStatus, p, s))
s = GetPlayerScoreString(p, 2);
else
s = "-666";
+ s = strcat(s, ret_string);
}
if(p.clientstatus)
plist = world;
FOR_EACH_CLIENT(p)
- p.field = 0;
+ p.(field) = 0;
FOR_EACH_CLIENT(p) if(p.scorekeeper)
{
if(!plast || PlayerTeamScore_Compare(plast, pbest, teams, 0))
j = i;
- pbest.field = j;
+ pbest.(field) = j;
if (!pfirst)
pfirst = pbest;
sk = p.scorekeeper;
s = strcat(s, p.netname);
- for(;;)
+ for (;;)
{
i = strlennocol(s) - NAMEWIDTH;
if(i > 0)