+#include "playerstats.qh"
#if defined(CSQC)
#elif defined(MENUQC)
#elif defined(SVQC)
#include "constants.qh"
#include "util.qh"
- #include <common/weapons/all.qh>
- #include "../server/weapons/accuracy.qh"
+ #include <common/weapons/_all.qh>
+ #include "../server/anticheat.qh"
#include "../server/defs.qh"
- #include "playerstats.qh"
#include "../server/scores.qh"
+ #include "../server/weapons/accuracy.qh"
#endif
#ifdef SVQC
if((PS_GR_OUT_DB < 0) || (e.playerstats_id)) { return; }
// set up player identification
- string s = string_null;
+ string s = "";
if((e.crypto_idfp != "") && (e.cvar_cl_allow_uidtracking == 1))
{ s = e.crypto_idfp; }
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))
- db_put(PS_GR_OUT_DB, sprintf("%s:_netname", p.playerstats_id), p.netname);
+ 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));
PS_GR_P_ADDVAL(p, PLAYERSTATS_JOINS, 1);
PlayerStats_GameReport_Accuracy(p);
+ anticheat_report_to_playerstats(p);
if(IS_REAL_CLIENT(p))
{
PlayerStats_GameReport_AddEvent(PLAYERSTATS_ACHIEVEMENT_BOTLIKE);
PlayerStats_GameReport_AddEvent(PLAYERSTATS_ACHIEVEMENT_FIRSTBLOOD);
PlayerStats_GameReport_AddEvent(PLAYERSTATS_ACHIEVEMENT_FIRSTVICTIM);
+
+ anticheat_register_to_playerstats();
}
else { PlayerStats_GameReport_DelayMapVote = false; }
}
+// this... is a hack, a temporary one until we get a proper duel gametype
+string PlayerStats_GetGametype()
+{
+ return ((IS_GAMETYPE(DEATHMATCH) && autocvar_g_maxplayers == 2) ? "duel" : GetGametype());
+}
+
void PlayerStats_GameReport_Handler(entity fh, entity pass, float status)
{
string t, tn;
#ifdef WATERMARK
url_fputs(fh, sprintf("R %s\n", WATERMARK));
#endif
- url_fputs(fh, sprintf("G %s\n", GetGametype()));
+ url_fputs(fh, sprintf("G %s\n", PlayerStats_GetGametype()));
url_fputs(fh, sprintf("O %s\n", modname));
url_fputs(fh, sprintf("M %s\n", GetMapname()));
url_fputs(fh, sprintf("I %s\n", matchid));
{
// url_fclose is processing, we got a response for writing the data
// this must come from HTTP
- LOG_TRACE("Got response from player stats server:\n");
- while((s = url_fgets(fh))) { LOG_TRACE(" ", s, "\n"); }
- LOG_TRACE("End of response.\n");
+ LOG_TRACE("Got response from player stats server:");
+ while((s = url_fgets(fh))) { LOG_TRACE(" ", s); }
+ LOG_TRACE("End of response.");
url_fclose(fh);
break;
}
case URL_READY_CLOSED:
{
// url_fclose has finished
- LOG_TRACE("Player stats written\n");
+ LOG_TRACE("Player stats written");
PlayerStats_GameReport_DelayMapVote = false;
if(PS_GR_OUT_DB >= 0)
{
// now request the information
uri = strcat(uri, "/player/", uri_escape(uri_escape(uri_escape(joiningplayer.crypto_idfp))), "/elo.txt");
- LOG_TRACE("Retrieving playerstats from URL: ", uri, "\n");
+ LOG_TRACE("Retrieving playerstats from URL: ", uri);
url_single_fopen(
uri,
FILE_APPEND,
{
// determine whether we should retrieve playerbasic information again
- LOG_TRACEF("PlayerStats_PlayerBasic_CheckUpdate('%s'): %f\n",
+ LOG_TRACEF("PlayerStats_PlayerBasic_CheckUpdate('%s'): %f",
joiningplayer.netname,
time
);
{
case URL_READY_CANWRITE:
{
- LOG_TRACE("-- Sending data to player stats server\n");
+ LOG_TRACE("-- Sending data to player stats server");
/*url_fputs(fh, "V 1\n");
#ifdef WATERMARK
url_fputs(fh, sprintf("R %s\n", WATERMARK));
case "e":
LOG_TRACE("G: ", gt);
LOG_TRACE("e: ", data);
- if (gt == GetGametype()) {
+ if (gt == PlayerStats_GetGametype()) {
handled = true;
float e = stof(data);
PlayerScore_Add(p, SP_ELO, +1 + e);
// now actually set the event data
db_put(PS_D_IN_DB, sprintf("#%s", event), data);
- LOG_TRACE("Added item ", sprintf("#%s", event), "=", data, " to PS_D_IN_DB\n");
+ LOG_TRACE("Added item ", sprintf("#%s", event), "=", data, " to PS_D_IN_DB");
}
void PlayerStats_PlayerDetail()
PS_D_IN_DB = db_create();
//uri = strcat(uri, "/player/", uri_escape(crypto_getmyidfp(0)));
- LOG_TRACE("Retrieving playerstats from URL: ", autocvar_g_playerstats_playerdetail_uri, "\n");
+ LOG_TRACE("Retrieving playerstats from URL: ", autocvar_g_playerstats_playerdetail_uri);
url_single_fopen(
autocvar_g_playerstats_playerdetail_uri,
FILE_APPEND,
{
case URL_READY_CANWRITE:
{
- LOG_TRACE("PlayerStats_PlayerDetail_Handler(): Sending data to player stats server...\n");
+ LOG_TRACE("PlayerStats_PlayerDetail_Handler(): Sending data to player stats server...");
url_fputs(fh, "V 1\n");
#ifdef WATERMARK
url_fputs(fh, sprintf("R %s\n", WATERMARK));