// set up player identification
string s = "";
- if((e.crypto_idfp != "") && (e.cvar_cl_allow_uidtracking == 1))
+ if((e.crypto_idfp != "") && (CS(e).cvar_cl_allow_uidtracking == 1))
{ s = e.crypto_idfp; }
else if(IS_BOT_CLIENT(e))
{ s = sprintf("bot#%g#%s", skill, e.cleanname); }
}
}
-void PlayerStats_GameReport_AddTeam(float t)
+void PlayerStats_GameReport_AddTeam(int t)
{
if(PS_GR_OUT_DB < 0) { return; }
}
}
-// referred to by PS_GR_P_ADDVAL and PS_GR_T_ADDVAL
float PlayerStats_GameReport_Event(string prefix, string event_id, float value)
{
if((prefix == "") || PS_GR_OUT_DB < 0) { return 0; }
void PlayerStats_GameReport_Accuracy(entity p)
{
#define ACCMAC(suffix, field) \
- PS_GR_P_ADDVAL(p, sprintf("acc-%s-%s", it.netname, suffix), CS(p).accuracy.(field[i-1]));
+ PlayerStats_GameReport_Event_Player(p, \
+ sprintf("acc-%s-%s", it.netname, suffix), CS(p).accuracy.(field[i-1]));
FOREACH(Weapons, it != WEP_Null, {
ACCMAC("hit", accuracy_hit)
ACCMAC("fired", accuracy_fired)
// add global info!
if(p.alivetime)
{
- PS_GR_P_ADDVAL(p, PLAYERSTATS_ALIVETIME, time - p.alivetime);
+ PlayerStats_GameReport_Event_Player(p, PLAYERSTATS_ALIVETIME, time - p.alivetime);
p.alivetime = 0;
}
db_put(PS_GR_OUT_DB, sprintf("%s:_playerid", p.playerstats_id), ftos(p.playerid));
- if(p.cvar_cl_allow_uid2name == 1 || IS_BOT_CLIENT(p))
+ if(CS(p).cvar_cl_allow_uid2name == 1 || IS_BOT_CLIENT(p))
db_put(PS_GR_OUT_DB, sprintf("%s:_netname", p.playerstats_id), playername(p, false));
if(teamplay)
db_put(PS_GR_OUT_DB, sprintf("%s:_team", p.playerstats_id), ftos(p.team));
if(stof(db_get(PS_GR_OUT_DB, sprintf("%s:%s", p.playerstats_id, PLAYERSTATS_ALIVETIME))) > 0)
- PS_GR_P_ADDVAL(p, PLAYERSTATS_JOINS, 1);
+ PlayerStats_GameReport_Event_Player(p, PLAYERSTATS_JOINS, 1);
PlayerStats_GameReport_Accuracy(p);
anticheat_report_to_playerstats(p);
if(CS(p).latency_cnt)
{
float latency = (CS(p).latency_sum / CS(p).latency_cnt);
- if(latency) { PS_GR_P_ADDVAL(p, PLAYERSTATS_AVGLATENCY, latency); }
+ if(latency)
+ PlayerStats_GameReport_Event_Player(p, PLAYERSTATS_AVGLATENCY, latency);
}
}
- strunzone(p.playerstats_id);
- p.playerstats_id = string_null;
+ strfree(p.playerstats_id);
}
-void PlayerStats_GameReport(float finished)
+void PlayerStats_GameReport(bool finished)
{
if(PS_GR_OUT_DB < 0) { return; }
FOREACH_CLIENT(true, {
// add personal score rank
- PS_GR_P_ADDVAL(it, PLAYERSTATS_RANK, it.score_dummyfield);
+ PlayerStats_GameReport_Event_Player(it, PLAYERSTATS_RANK, it.score_dummyfield);
// scoreboard data
if(it.scoreboard_pos)
{
// scoreboard is valid!
- PS_GR_P_ADDVAL(it, PLAYERSTATS_SCOREBOARD_VALID, 1);
+ PlayerStats_GameReport_Event_Player(it, PLAYERSTATS_SCOREBOARD_VALID, 1);
// add scoreboard position
- PS_GR_P_ADDVAL(it, PLAYERSTATS_SCOREBOARD_POS, it.scoreboard_pos);
+ PlayerStats_GameReport_Event_Player(it, PLAYERSTATS_SCOREBOARD_POS, it.scoreboard_pos);
// add scoreboard data
PlayerScore_PlayerStats(it);
// if the match ended normally, add winning info
if(finished)
{
- PS_GR_P_ADDVAL(it, PLAYERSTATS_WINS, it.winning);
- PS_GR_P_ADDVAL(it, PLAYERSTATS_MATCHES, 1);
+ PlayerStats_GameReport_Event_Player(it, PLAYERSTATS_WINS, it.winning);
+ PlayerStats_GameReport_Event_Player(it, PLAYERSTATS_MATCHES, 1);
}
}
}
// this... is a hack, a temporary one until we get a proper duel gametype
+// TODO: remove duel hack after servers have migrated to the proper duel gametype!
string PlayerStats_GetGametype()
{
if(IS_GAMETYPE(DEATHMATCH) && autocvar_g_maxplayers == 2)
case URL_READY_ERROR:
default:
{
- LOG_INFO("Player stats writing failed: ", ftos(status), "\n");
+ LOG_INFO("Player stats writing failed: ", ftos(status));
PlayerStats_GameReport_DelayMapVote = false;
if(PS_GR_OUT_DB >= 0)
{
void PlayerStats_PlayerBasic(entity joiningplayer, float newrequest)
{
- PlayerScore_Add(joiningplayer, SP_ELO, -1);
+ GameRules_scoring_add(joiningplayer, ELO, -1);
// http://stats.xonotic.org/player/GgXRw6piDtFIbMArMuiAi8JG4tiin8VLjZgsKB60Uds=/elo.txt
if(autocvar_g_playerstats_playerbasic_uri != "")
{
string uri = autocvar_g_playerstats_playerbasic_uri;
if (joiningplayer.crypto_idfp == "") {
- PlayerScore_Add(joiningplayer, SP_ELO, -1);
+ GameRules_scoring_add(joiningplayer, ELO, -1);
} else {
// create the database if it doesn't already exist
if(PS_B_IN_DB < 0)
else
{
// server has this disabled, kill the DB and set status to idle
- PlayerScore_Add(joiningplayer, SP_ELO, -1);
+ GameRules_scoring_add(joiningplayer, ELO, -1);
if(PS_B_IN_DB >= 0)
{
db_close(PS_B_IN_DB);
if (gt == PlayerStats_GetGametype()) {
handled = true;
float e = stof(data);
- PlayerScore_Add(p, SP_ELO, +1 + e);
+ GameRules_scoring_add(p, ELO, +1 + e);
}
if (gt == "") {
// PlayerInfo_AddItem(p, value, data);
case URL_READY_CLOSED:
{
// url_fclose has finished
- LOG_INFO("Player stats synchronized with server\n");
+ LOG_INFO("Player stats synchronized with server");
return;
}
case URL_READY_ERROR:
default:
{
- LOG_INFO("Receiving player stats failed: ", ftos(status), "\n");
+ LOG_INFO("Receiving player stats failed: ", ftos(status));
break;
}
}
- PlayerScore_Add(p, SP_ELO, -1);
+ GameRules_scoring_add(p, ELO, -1);
}
#endif // SVQC
float i = 0;
for(e = PS_D_IN_EVL; (en = db_get(PS_D_IN_DB, e)) != ""; e = en)
{
- LOG_INFO(sprintf("%d:%s:%s\n", i, e, db_get(PS_D_IN_DB, sprintf("#%s", e))));
+ LOG_INFOF("%d:%s:%s", i, e, db_get(PS_D_IN_DB, sprintf("#%s", e)));
++i;
}
#endif
float gamecount = cvar("cl_matchcount");
#if 0
- LOG_INFOF("PlayerStats_PlayerDetail_CheckUpdate(): %f >= %f, %d > %d\n",
+ LOG_INFOF("PlayerStats_PlayerDetail_CheckUpdate(): %f >= %f, %d > %d",
time,
PS_D_NEXTUPDATETIME,
PS_D_LASTGAMECOUNT,
"PlayerStats_PlayerDetail_Handler(): ERROR: "
"Key went unhandled? Is our version outdated?\n"
"PlayerStats_PlayerDetail_Handler(): "
- "Key '%s', Event '%s', Data '%s'\n",
+ "Key '%s', Event '%s', Data '%s'",
key,
event,
data
}
#if 0
- LOG_INFO(sprintf(
+ LOG_INFOF(
"PlayerStats_PlayerDetail_Handler(): "
- "Key '%s', Event '%s', Data '%s'\n",
+ "Key '%s', Event '%s', Data '%s'",
key,
event,
data
- ));
+ );
#endif
}
//print("PlayerStats_PlayerDetail_Handler(): End of response.\n");
case URL_READY_CLOSED:
{
// url_fclose has finished
- LOG_INFO("PlayerStats_PlayerDetail_Handler(): Player stats synchronized with server.\n");
+ LOG_INFO("PlayerStats_PlayerDetail_Handler(): Player stats synchronized with server.");
break;
}
case URL_READY_ERROR:
default:
{
- LOG_INFO("PlayerStats_PlayerDetail_Handler(): Receiving player stats failed: ", ftos(status), "\n");
+ LOG_INFO("PlayerStats_PlayerDetail_Handler(): Receiving player stats failed: ", ftos(status));
PlayerStats_PlayerDetail_Status = PS_D_STATUS_ERROR;
if(PS_D_IN_DB >= 0)
{