X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fplayerstats.qc;h=e83305886cee1522ddbb5b8db4c11388ee59e0e7;hb=859c0b0164823639d984cede988a0a5d25467ff1;hp=e648d29538ce507d0f524b780bc941b5e4e6f09f;hpb=1cce8f153ec4ca4bce79cfcea74c949b9395cd07;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/playerstats.qc b/qcsrc/common/playerstats.qc index e648d2953..e83305886 100644 --- a/qcsrc/common/playerstats.qc +++ b/qcsrc/common/playerstats.qc @@ -15,6 +15,17 @@ #include #endif + +#ifdef GAMEQC +REPLICATE(cvar_cl_allow_uid2name, int, "cl_allow_uid2name"); +REPLICATE(cvar_cl_allow_uidranking, bool, "cl_allow_uidranking"); +REPLICATE(cvar_cl_allow_uidtracking, int, "cl_allow_uidtracking"); +#endif + +#ifdef SVQC +REPLICATE_APPLYCHANGE("cl_allow_uidtracking", { PlayerStats_GameReport_AddPlayer(this); }); +#endif + #ifdef SVQC void PlayerStats_Prematch() { @@ -29,8 +40,10 @@ void PlayerStats_GameReport_Reset_All() strfree(PS_GR_OUT_EVL); if (PS_GR_OUT_DB >= 0) + { db_close(PS_GR_OUT_DB); - PlayerStats_GameReport_Init(); + PlayerStats_GameReport_Init(); + } if(PS_GR_OUT_DB < 0) return; @@ -42,8 +55,7 @@ void PlayerStats_GameReport_Reset_All() // usually only possible by reconnecting to the server strfree(it.playerstats_id); PlayerStats_GameReport_AddEvent(sprintf("kills-%d", it.playerid)); - if (IS_BOT_CLIENT(it) || CS_CVAR(it).cvar_cl_allow_uidtracking) - PlayerStats_GameReport_AddPlayer(it); + PlayerStats_GameReport_AddPlayer(it); }); FOREACH(Scores, true, { string label = scores_label(it); @@ -193,9 +205,15 @@ void PlayerStats_GameReport_FinalizePlayer(entity p) { if(CS(p).latency_cnt) { - float latency = (CS(p).latency_sum / CS(p).latency_cnt); + float latency = max(0, CS(p).latency_sum / CS(p).latency_cnt); if(latency) - PlayerStats_GameReport_Event_Player(p, PLAYERSTATS_AVGLATENCY, latency); + { + // if previous average latency exists (player disconnected and reconnected) + // make the average of previous and current average latency + float prev_latency = PlayerStats_GameReport_Event_Player(p, PLAYERSTATS_AVGLATENCY, 0); + float new_latency = !prev_latency ? latency : (prev_latency + latency) / 2; + PlayerStats_GameReport_Event_Player(p, PLAYERSTATS_AVGLATENCY, -prev_latency + new_latency); + } } db_put(PS_GR_OUT_DB, sprintf("%s:_ranked", p.playerstats_id), ftos(CS_CVAR(p).cvar_cl_allow_uidranking)); @@ -269,6 +287,10 @@ void PlayerStats_GameReport_Init() // initiated before InitGameplayMode so that PlayerStats_GameReport_DelayMapVote = true; serverflags |= SERVERFLAG_PLAYERSTATS; + if(autocvar_g_playerstats_gamereport_uri != cvar_defstring("g_playerstats_gamereport_uri")) + { + serverflags |= SERVERFLAG_PLAYERSTATS_CUSTOM; + } PlayerStats_GameReport_AddEvent(PLAYERSTATS_ALIVETIME); PlayerStats_GameReport_AddEvent(PLAYERSTATS_AVGLATENCY); @@ -350,6 +372,7 @@ void PlayerStats_GameReport_Handler(entity fh, entity pass, float status) * i: player index * n: nickname of the player (optional) * t: team ID + * r: player ranking enabled / disabled * e: followed by an event name, a space, and the event count/score * event names can be: * alivetime: total playing time of the player