}
}
-void PlayerStats_PlayerBasic()
+void PlayerStats_PlayerBasic(entity joiningplayer, float newrequest)
{
+ // http://stats.xonotic.org/player/GgXRw6piDtFIbMArMuiAi8JG4tiin8VLjZgsKB60Uds=/elo.txt
if(autocvar_g_playerstats_playerbasic_uri != "")
{
- entity player;
-
- // create the database if it doesn't already exist
- if(PS_B_IN_DB < 0)
+ string uri = autocvar_g_playerstats_playerbasic_uri;
+ if(joiningplayer.crypto_idfp != "")
{
- PS_B_IN_DB = -1;
- PS_B_IN_DB = db_create();
- }
-
- FOR_EACH_REALCLIENT(player)
- {
- string uri = autocvar_g_playerstats_playerbasic_uri;
- if((uri != "") && (player.crypto_idfp != ""))
+ // create the database if it doesn't already exist
+ if(PS_B_IN_DB < 0)
{
- uri = strcat(uri, "/player/", uri_escape(uri_escape(player.crypto_idfp)), "/elo.txt");
- print("Retrieving playerstats from URL: ", uri, "\n");
- url_single_fopen(
- uri,
- FILE_APPEND,
- PlayerStats_PlayerBasic_Handler,
- player
- );
+ PS_B_IN_DB = -1;
+ PS_B_IN_DB = db_create();
}
- /*p.crypto_idfp != "")
+ // now request the information
+ uri = strcat(uri, "/player/", uri_escape(uri_escape(joiningplayer.crypto_idfp)), "/elo.txt");
+ print("Retrieving playerstats from URL: ", uri, "\n");
+ url_single_fopen(
+ uri,
+ FILE_APPEND,
+ PlayerStats_PlayerBasic_Handler,
+ joiningplayer
+ );
+
+ // set status appropriately // todo: check whether the player info exists in the database previously
+ if(newrequest)
{
- uri = strcat(uri, "/elo/", uri_escape(p.crypto_idfp));
- print("Retrieving playerstats from URL: ", uri, "\n");
- url_single_fopen(uri, FILE_READ, PlayerInfo_ready, p);
- }*/
- }
-
- if(PlayerStats_PlayerBasic_Status == PS_B_STATUS_RECEIVED)
- {
- // database still contains useful information, so don't clear it of a useful status
- PlayerStats_PlayerBasic_Status = PS_B_STATUS_UPDATING;
- }
- else
- {
- // database was previously empty or never hit received status for some reason
- PlayerStats_PlayerBasic_Status = PS_B_STATUS_WAITING;
+ // database still contains useful information, so don't clear it of a useful status
+ joiningplayer.playerstats_basicstatus = PS_B_STATUS_WAITING;
+ }
+ else
+ {
+ // database was previously empty or never hit received status for some reason
+ joiningplayer.playerstats_basicstatus = PS_B_STATUS_UPDATING;
+ }
}
}
else
{
- // player has this disabled, kill the DB and set status to idle
+ // server has this disabled, kill the DB and set status to idle
if(PS_B_IN_DB >= 0)
{
+ entity player;
+
db_close(PS_B_IN_DB);
PS_B_IN_DB = -1;
+
+ FOR_EACH_REALCLIENT(player) { player.playerstats_basicstatus = PS_B_STATUS_IDLE; }
}
+ }
+}
+
+void PlayerStats_PlayerBasic_CheckUpdate(entity joiningplayer)
+{
+ // determine whether we should retrieve playerbasic information again
- PlayerStats_PlayerBasic_Status = PS_B_STATUS_IDLE;
+ #if 0
+ printf("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
+ // although maybe we should just submit another request ANYWAY?
+ if(!joiningplayer.playerstats_basicstatus)
+ {
+ PlayerStats_PlayerBasic(
+ joiningplayer,
+ (joiningplayer.playerstats_basicstatus == PS_B_STATUS_RECEIVED)
+ );
}
}
void PlayerStats_PlayerDetail(void)
{
+ // http://stats.xonotic.org/player/me
if((autocvar_g_playerstats_playerdetail_uri != "") && (crypto_getmyidstatus(0) > 0))
{
// create the database if it doesn't already exist
float PS_GR_OUT_DB; // playerstats_gamereport_out_db // db of info SENT at the end of a match
//float PS_GR_IN_DB; // playerstats_gamereport_in_db // db for info COLLECTED at the end of a match
float PS_B_IN_DB; // playerstats_playerbasic_in_db // db for info COLLECTED for basic player info (ELO)
-// http://stats.xonotic.org/player/GgXRw6piDtFIbMArMuiAi8JG4tiin8VLjZgsKB60Uds=/elo.txt -- this works,
-// http://stats.xonotic.org/player/ENkUjf83vKMVZcNm%2F6Ao1EmXEj1apQ6XvdQTxwELvmA%3D/elo.txt -- but this doesn't?!?
-// ENkUjf83vKMVZcNm/6Ao1EmXEj1apQ6XvdQTxwELvmA=
#endif
#ifdef MENUQC
float PS_D_IN_DB; // playerstats_playerdetail_in_db // db for info COLLECTED for detailed player profile display
-// http://stats.xonotic.org/player/me
#endif
#ifdef SVQC
#define PS_B_STATUS_WAITING 0
#define PS_B_STATUS_RECEIVED 1
#define PS_B_STATUS_UPDATING 2
-var float PlayerStats_PlayerBasic_Status = PS_B_STATUS_IDLE;
+.float playerstats_basicstatus;
var string autocvar_g_playerstats_playerbasic_uri = "http://stats.xonotic.org";
-void PlayerStats_PlayerBasic();
+void PlayerStats_PlayerBasic(entity joiningplayer, float newrequest);
+void PlayerStats_PlayerBasic_CheckUpdate(entity joiningplayer);
void PlayerStats_PlayerBasic_Handler(entity fh, entity p, float status);
#endif //SVQC
#ifdef MENUQC