X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Fplayerstats.qc;h=b00bdcf8d55c7ee5df9522fa69d3e03e689b4884;hp=ec2f7cad3ddf3d4fc9ca8ae568824b37d216854c;hb=81d3d953ba1e2b8ffba849b17bad98170216a754;hpb=b0423598270855d5f0a3206d46f0ebf43182b411 diff --git a/qcsrc/common/playerstats.qc b/qcsrc/common/playerstats.qc index ec2f7cad3..b00bdcf8d 100644 --- a/qcsrc/common/playerstats.qc +++ b/qcsrc/common/playerstats.qc @@ -28,7 +28,7 @@ void PlayerStats_GameReport_AddPlayer(entity e) else if(IS_BOT_CLIENT(e)) { s = sprintf("bot#%g#%s", skill, e.cleanname); } - if((s == "") || find(world, playerstats_id, s)) // already have one of the ID - next one can't be tracked then! + if((s == "") || find(NULL, playerstats_id, s)) // already have one of the ID - next one can't be tracked then! { if(IS_BOT_CLIENT(e)) { s = sprintf("bot#%d", e.playerid); } @@ -198,7 +198,7 @@ void PlayerStats_GameReport(float finished) autocvar_g_playerstats_gamereport_uri, FILE_APPEND, PlayerStats_GameReport_Handler, - world + NULL ); } else @@ -416,12 +416,14 @@ void PlayerStats_GameReport_Handler(entity fh, entity pass, float status) void PlayerStats_PlayerBasic(entity joiningplayer, float newrequest) { + PlayerScore_Add(joiningplayer, SP_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 != "") - { + if (joiningplayer.crypto_idfp == "") { + PlayerScore_Add(joiningplayer, SP_ELO, -1); + } else { // create the database if it doesn't already exist if(PS_B_IN_DB < 0) PS_B_IN_DB = db_create(); @@ -452,6 +454,7 @@ void PlayerStats_PlayerBasic(entity joiningplayer, float newrequest) else { // server has this disabled, kill the DB and set status to idle + PlayerScore_Add(joiningplayer, SP_ELO, -1); if(PS_B_IN_DB >= 0) { db_close(PS_B_IN_DB); @@ -466,12 +469,10 @@ void PlayerStats_PlayerBasic_CheckUpdate(entity joiningplayer) { // determine whether we should retrieve playerbasic information again - #if 0 - LOG_INFOF("PlayerStats_PlayerBasic_CheckUpdate('%s'): %f\n", + LOG_TRACEF("PlayerStats_PlayerBasic_CheckUpdate('%s'): %f\n", joiningplayer.netname, time ); - #endif // TODO: check to see if this playerid is inside the database already somehow... // for now we'll just check the field, but this won't work for players who disconnect and reconnect properly @@ -503,76 +504,76 @@ void PlayerStats_PlayerBasic_Handler(entity fh, entity p, float status) url_fputs(fh, sprintf("m %s %s\n", cvar_string("_cl_playermodel"), cvar_string("_cl_playerskin"))); // model/skin */url_fputs(fh, "\n"); url_fclose(fh); - break; + return; } case URL_READY_CANREAD: { - string s = ""; - LOG_TRACE("-- Got response from player stats server:\n"); - //string gametype = string_null; - while((s = url_fgets(fh))) - { - LOG_TRACE(" ", s, "\n"); - /* + bool handled = false; + string gt = string_null; + for (string s = ""; (s = url_fgets(fh)); ) { + int n = tokenizebyseparator(s, " "); // key value? data + if (n == 1) continue; string key = "", value = "", data = ""; - - n = tokenizebyseparator(s, " "); // key (value) data - if (n == 1) - continue; - else if (n == 2) - { - key = argv(0); - data = argv(1); - } - else if (n >= 3) - { - key = argv(0); - value = argv(1); - data = argv(2); - } - - if (data == "") - continue; - - if (key == "#") - continue; - else if (key == "V") - PlayerInfo_AddItem(p, "_version", data); - else if (key == "R") - PlayerInfo_AddItem(p, "_release", data); - else if (key == "T") - PlayerInfo_AddItem(p, "_time", data); - else if (key == "S") - PlayerInfo_AddItem(p, "_statsurl", data); - else if (key == "P") - PlayerInfo_AddItem(p, "_hashkey", data); - else if (key == "n") - PlayerInfo_AddItem(p, "_playernick", data); - else if (key == "i") - PlayerInfo_AddItem(p, "_playerid", data); - else if (key == "G") - gametype = data; - else if (key == "e" && value != "") - { - if (gametype == "") - PlayerInfo_AddItem(p, value, data); - else - PlayerInfo_AddItem(p, sprintf("%s/%s", gametype, value), data); + if (n == 2) { + key = argv(0); + data = argv(1); + } else if (n >= 3) { + key = argv(0); + value = argv(1); + data = argv(2); } - else - continue; - */ + switch (key) { + case "V": + // PlayerInfo_AddItem(p, "_version", data); + break; + case "R": + // PlayerInfo_AddItem(p, "_release", data); + break; + case "T": + // PlayerInfo_AddItem(p, "_time", data); + break; + case "S": + // PlayerInfo_AddItem(p, "_statsurl", data); + break; + case "P": + // PlayerInfo_AddItem(p, "_hashkey", data); + break; + case "n": + // PlayerInfo_AddItem(p, "_playernick", data); + break; + case "i": + // PlayerInfo_AddItem(p, "_playerid", data); + // p.xonstat_id = stof(data); + break; + case "G": + gt = data; + break; + case "e": + LOG_TRACE("G: ", gt); + LOG_TRACE("e: ", data); + if (gt == GetGametype()) { + handled = true; + float e = stof(data); + PlayerScore_Add(p, SP_ELO, +1 + e); + } + if (gt == "") { + // PlayerInfo_AddItem(p, value, data); + } else { + // PlayerInfo_AddItem(p, sprintf("%s/%s", gt, value), data); + } + break; + } } - LOG_TRACE("-- End of response.\n"); url_fclose(fh); + if (handled) return; break; } case URL_READY_CLOSED: { // url_fclose has finished LOG_INFO("Player stats synchronized with server\n"); - break; + return; } case URL_READY_ERROR: @@ -582,6 +583,7 @@ void PlayerStats_PlayerBasic_Handler(entity fh, entity p, float status) break; } } + PlayerScore_Add(p, SP_ELO, -1); } #endif // SVQC @@ -635,7 +637,7 @@ void PlayerStats_PlayerDetail() autocvar_g_playerstats_playerdetail_uri, FILE_APPEND, PlayerStats_PlayerDetail_Handler, - world + NULL ); PlayerStats_PlayerDetail_Status = PS_D_STATUS_WAITING; @@ -1013,7 +1015,7 @@ void PlayerInfo_Details() //uri = strcat(uri, "/player/", uri_escape(crypto_getmyidfp(0))); uri = strcat(uri, "/player/me"); print("Retrieving playerstats from URL: ", uri, "\n"); - url_single_fopen(uri, FILE_APPEND, PlayerInfo_ready, world); + url_single_fopen(uri, FILE_APPEND, PlayerInfo_ready, NULL); } } #endif