X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fplayerstats.qc;h=2d9398ad7ede56de2b00681aa9fa5fd65c62ad2a;hb=f1a87492d9fed27a64d0e99c068705aba5509f26;hp=65516a4ea15c67d4b4751f9f25ab2a1067199ea3;hpb=d129d13fa870211ae06297eed89862b61e036f8e;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/playerstats.qc b/qcsrc/common/playerstats.qc index 65516a4ea..2d9398ad7 100644 --- a/qcsrc/common/playerstats.qc +++ b/qcsrc/common/playerstats.qc @@ -1,5 +1,17 @@ +#if defined(CSQC) +#elif defined(MENUQC) +#elif defined(SVQC) + #include "constants.qh" + #include "util.qh" + #include "weapons/all.qh" + #include "../server/weapons/accuracy.qh" + #include "../server/defs.qh" + #include "playerstats.qh" + #include "../server/scores.qh" +#endif + #ifdef SVQC -void PlayerStats_Prematch(void) +void PlayerStats_Prematch() { //foobar } @@ -94,24 +106,16 @@ float PlayerStats_GameReport_Event(string prefix, string event_id, float value) void PlayerStats_GameReport_Accuracy(entity p) { - entity w; - float i; - - for(i = WEP_FIRST; i <= WEP_LAST; ++i) - { - w = get_weaponinfo(i); - - #define ACCMAC(suffix,field) \ - PS_GR_P_ADDVAL(p, sprintf("acc-%s-%s", w.netname, suffix), p.accuracy.(field[i-1])); - + #define ACCMAC(suffix, field) \ + PS_GR_P_ADDVAL(p, sprintf("acc-%s-%s", it.netname, suffix), p.accuracy.(field[i-1])); + FOREACH(Weapons, it != WEP_Null, LAMBDA( ACCMAC("hit", accuracy_hit) ACCMAC("fired", accuracy_fired) ACCMAC("cnt-hit", accuracy_cnt_hit) ACCMAC("cnt-fired", accuracy_cnt_fired) ACCMAC("frags", accuracy_frags) - - #undef ACCMAC - } + )); + #undef ACCMAC } void PlayerStats_GameReport_FinalizePlayer(entity p) @@ -191,7 +195,7 @@ void PlayerStats_GameReport(float finished) if(autocvar_g_playerstats_gamereport_uri != "") { - PlayerStats_GameReport_DelayMapVote = TRUE; + PlayerStats_GameReport_DelayMapVote = true; url_multi_fopen( autocvar_g_playerstats_gamereport_uri, FILE_APPEND, @@ -201,7 +205,7 @@ void PlayerStats_GameReport(float finished) } else { - PlayerStats_GameReport_DelayMapVote = FALSE; + PlayerStats_GameReport_DelayMapVote = false; db_close(PS_GR_OUT_DB); PS_GR_OUT_DB = -1; } @@ -215,7 +219,7 @@ void PlayerStats_GameReport_Init() // initiated before InitGameplayMode so that if(PS_GR_OUT_DB >= 0) { - PlayerStats_GameReport_DelayMapVote = TRUE; + PlayerStats_GameReport_DelayMapVote = true; serverflags |= SERVERFLAG_PLAYERSTATS; @@ -229,17 +233,13 @@ void PlayerStats_GameReport_Init() // initiated before InitGameplayMode so that PlayerStats_GameReport_AddEvent(PLAYERSTATS_RANK); // accuracy stats - entity w; - float i; - for(i = WEP_FIRST; i <= WEP_LAST; ++i) - { - w = get_weaponinfo(i); - PlayerStats_GameReport_AddEvent(strcat("acc-", w.netname, "-hit")); - PlayerStats_GameReport_AddEvent(strcat("acc-", w.netname, "-fired")); - PlayerStats_GameReport_AddEvent(strcat("acc-", w.netname, "-cnt-hit")); - PlayerStats_GameReport_AddEvent(strcat("acc-", w.netname, "-cnt-fired")); - PlayerStats_GameReport_AddEvent(strcat("acc-", w.netname, "-frags")); - } + FOREACH(Weapons, it != WEP_Null, LAMBDA( + PlayerStats_GameReport_AddEvent(strcat("acc-", it.netname, "-hit")); + PlayerStats_GameReport_AddEvent(strcat("acc-", it.netname, "-fired")); + PlayerStats_GameReport_AddEvent(strcat("acc-", it.netname, "-cnt-hit")); + PlayerStats_GameReport_AddEvent(strcat("acc-", it.netname, "-cnt-fired")); + PlayerStats_GameReport_AddEvent(strcat("acc-", it.netname, "-frags")); + )); PlayerStats_GameReport_AddEvent(PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_3); PlayerStats_GameReport_AddEvent(PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_5); @@ -252,7 +252,7 @@ void PlayerStats_GameReport_Init() // initiated before InitGameplayMode so that PlayerStats_GameReport_AddEvent(PLAYERSTATS_ACHIEVEMENT_FIRSTBLOOD); PlayerStats_GameReport_AddEvent(PLAYERSTATS_ACHIEVEMENT_FIRSTVICTIM); } - else { PlayerStats_GameReport_DelayMapVote = FALSE; } + else { PlayerStats_GameReport_DelayMapVote = false; } } void PlayerStats_GameReport_Handler(entity fh, entity pass, float status) @@ -381,9 +381,9 @@ void PlayerStats_GameReport_Handler(entity fh, entity pass, float status) { // url_fclose is processing, we got a response for writing the data // this must come from HTTP - dprint("Got response from player stats server:\n"); - while((s = url_fgets(fh))) { dprint(" ", s, "\n"); } - dprint("End of response.\n"); + LOG_TRACE("Got response from player stats server:\n"); + while((s = url_fgets(fh))) { LOG_TRACE(" ", s, "\n"); } + LOG_TRACE("End of response.\n"); url_fclose(fh); break; } @@ -391,8 +391,8 @@ void PlayerStats_GameReport_Handler(entity fh, entity pass, float status) case URL_READY_CLOSED: { // url_fclose has finished - dprint("Player stats written\n"); - PlayerStats_GameReport_DelayMapVote = FALSE; + LOG_TRACE("Player stats written\n"); + PlayerStats_GameReport_DelayMapVote = false; if(PS_GR_OUT_DB >= 0) { db_close(PS_GR_OUT_DB); @@ -404,8 +404,8 @@ void PlayerStats_GameReport_Handler(entity fh, entity pass, float status) case URL_READY_ERROR: default: { - print("Player stats writing failed: ", ftos(status), "\n"); - PlayerStats_GameReport_DelayMapVote = FALSE; + LOG_INFO("Player stats writing failed: ", ftos(status), "\n"); + PlayerStats_GameReport_DelayMapVote = false; if(PS_GR_OUT_DB >= 0) { db_close(PS_GR_OUT_DB); @@ -430,7 +430,7 @@ void PlayerStats_PlayerBasic(entity joiningplayer, float newrequest) // now request the information uri = strcat(uri, "/player/", uri_escape(uri_escape(joiningplayer.crypto_idfp)), "/elo.txt"); - dprint("Retrieving playerstats from URL: ", uri, "\n"); + LOG_TRACE("Retrieving playerstats from URL: ", uri, "\n"); url_single_fopen( uri, FILE_APPEND, @@ -471,7 +471,7 @@ void PlayerStats_PlayerBasic_CheckUpdate(entity joiningplayer) // determine whether we should retrieve playerbasic information again #if 0 - printf("PlayerStats_PlayerBasic_CheckUpdate('%s'): %f\n", + LOG_INFOF("PlayerStats_PlayerBasic_CheckUpdate('%s'): %f\n", joiningplayer.netname, time ); @@ -495,7 +495,7 @@ void PlayerStats_PlayerBasic_Handler(entity fh, entity p, float status) { case URL_READY_CANWRITE: { - dprint("-- Sending data to player stats server\n"); + LOG_TRACE("-- Sending data to player stats server\n"); /*url_fputs(fh, "V 1\n"); #ifdef WATERMARK url_fputs(fh, sprintf("R %s\n", WATERMARK)); @@ -513,11 +513,11 @@ void PlayerStats_PlayerBasic_Handler(entity fh, entity p, float status) case URL_READY_CANREAD: { string s = ""; - dprint("-- Got response from player stats server:\n"); + LOG_TRACE("-- Got response from player stats server:\n"); //string gametype = string_null; while((s = url_fgets(fh))) { - dprint(" ", s, "\n"); + LOG_TRACE(" ", s, "\n"); /* string key = "", value = "", data = ""; @@ -568,21 +568,21 @@ void PlayerStats_PlayerBasic_Handler(entity fh, entity p, float status) continue; */ } - dprint("-- End of response.\n"); + LOG_TRACE("-- End of response.\n"); url_fclose(fh); break; } case URL_READY_CLOSED: { // url_fclose has finished - print("Player stats synchronized with server\n"); + LOG_INFO("Player stats synchronized with server\n"); break; } case URL_READY_ERROR: default: { - print("Receiving player stats failed: ", ftos(status), "\n"); + LOG_INFO("Receiving player stats failed: ", ftos(status), "\n"); break; } } @@ -597,7 +597,7 @@ void PlayerStats_PlayerBasic_Handler(entity fh, entity p, float status) float i = 0; for(e = PS_D_IN_EVL; (en = db_get(PS_D_IN_DB, e)) != ""; e = en) { - print(sprintf("%d:%s:%s\n", i, e, db_get(PS_D_IN_DB, sprintf("#%s", e)))); + LOG_INFO(sprintf("%d:%s:%s\n", i, e, db_get(PS_D_IN_DB, sprintf("#%s", e)))); ++i; } #endif @@ -621,10 +621,10 @@ void PlayerStats_PlayerDetail_AddItem(string event, string data) // now actually set the event data db_put(PS_D_IN_DB, sprintf("#%s", event), data); - dprint("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\n"); } -void PlayerStats_PlayerDetail(void) +void PlayerStats_PlayerDetail() { // http://stats.xonotic.org/player/me if((autocvar_g_playerstats_playerdetail_uri != "") && (crypto_getmyidstatus(0) > 0)) @@ -634,7 +634,7 @@ void PlayerStats_PlayerDetail(void) PS_D_IN_DB = db_create(); //uri = strcat(uri, "/player/", uri_escape(crypto_getmyidfp(0))); - dprint("Retrieving playerstats from URL: ", autocvar_g_playerstats_playerdetail_uri, "\n"); + LOG_TRACE("Retrieving playerstats from URL: ", autocvar_g_playerstats_playerdetail_uri, "\n"); url_single_fopen( autocvar_g_playerstats_playerdetail_uri, FILE_APPEND, @@ -657,13 +657,13 @@ void PlayerStats_PlayerDetail(void) } } -void PlayerStats_PlayerDetail_CheckUpdate(void) +void PlayerStats_PlayerDetail_CheckUpdate() { // determine whether we should retrieve playerdetail information again float gamecount = cvar("cl_matchcount"); #if 0 - printf("PlayerStats_PlayerDetail_CheckUpdate(): %f >= %f, %d > %d\n", + LOG_INFOF("PlayerStats_PlayerDetail_CheckUpdate(): %f >= %f, %d > %d\n", time, PS_D_NEXTUPDATETIME, PS_D_LASTGAMECOUNT, @@ -689,7 +689,7 @@ void PlayerStats_PlayerDetail_Handler(entity fh, entity unused, float status) { case URL_READY_CANWRITE: { - dprint("PlayerStats_PlayerDetail_Handler(): Sending data to player stats server...\n"); + LOG_TRACE("PlayerStats_PlayerDetail_Handler(): Sending data to player stats server...\n"); url_fputs(fh, "V 1\n"); #ifdef WATERMARK url_fputs(fh, sprintf("R %s\n", WATERMARK)); @@ -762,7 +762,7 @@ void PlayerStats_PlayerDetail_Handler(entity fh, entity unused, float status) default: { - printf( + LOG_INFOF( "PlayerStats_PlayerDetail_Handler(): ERROR: " "Key went unhandled? Is our version outdated?\n" "PlayerStats_PlayerDetail_Handler(): " @@ -776,7 +776,7 @@ void PlayerStats_PlayerDetail_Handler(entity fh, entity unused, float status) } #if 0 - print(sprintf( + LOG_INFO(sprintf( "PlayerStats_PlayerDetail_Handler(): " "Key '%s', Event '%s', Data '%s'\n", key, @@ -795,14 +795,14 @@ void PlayerStats_PlayerDetail_Handler(entity fh, entity unused, float status) case URL_READY_CLOSED: { // url_fclose has finished - print("PlayerStats_PlayerDetail_Handler(): Player stats synchronized with server.\n"); + LOG_INFO("PlayerStats_PlayerDetail_Handler(): Player stats synchronized with server.\n"); break; } case URL_READY_ERROR: default: { - print("PlayerStats_PlayerDetail_Handler(): Receiving player stats failed: ", ftos(status), "\n"); + LOG_INFO("PlayerStats_PlayerDetail_Handler(): Receiving player stats failed: ", ftos(status), "\n"); PlayerStats_PlayerDetail_Status = PS_D_STATUS_ERROR; if(PS_D_IN_DB >= 0) { @@ -1023,8 +1023,7 @@ void PlayerInfo_Details() #endif #ifdef CSQC -/* - * FIXME - crypto_* builtin functions missing in CSQC (csprogsdefs.qc:885) +// FIXME - crypto_* builtin functions missing in CSQC (csprogsdefs.qh:885) void PlayerInfo_Details() { print("-- Getting detailed PlayerInfo for local player (CSQC)\n");