]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Add checkupdate function, fix some things about the last commit
authorSamual Lenks <samual@xonotic.org>
Mon, 17 Feb 2014 03:19:37 +0000 (22:19 -0500)
committerSamual Lenks <samual@xonotic.org>
Mon, 17 Feb 2014 03:19:37 +0000 (22:19 -0500)
qcsrc/common/playerstats.qc
qcsrc/common/playerstats.qh
qcsrc/server/cl_client.qc

index fb28fd5563c42b14ddaa304d5de01da8f028d540..742dd118525e959a3252575ce3278102e1597e4a 100644 (file)
@@ -417,63 +417,79 @@ void PlayerStats_GameReport_Handler(entity fh, entity pass, float status)
        }
 }
 
-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)
+               );
        }
 }
 
@@ -614,6 +630,7 @@ void PlayerStats_PlayerDetail_AddItem(string event, string data)
 
 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
index bdbf75b2f16cf75d027e7ee37a30bafab43f1922..26a1efc28cfa68a4074dc08c58fa3ce0e7d10226 100644 (file)
@@ -3,14 +3,10 @@
 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
@@ -96,10 +92,11 @@ var string autocvar_g_playerstats_gamereport_uri = "http://stats.xonotic.org/sta
 #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
index 329d44deab177bdddfb42705e53f9f0b26734bba..4fb794aa778b6aeee824ae04dc1183886a84a95f 100644 (file)
@@ -1047,8 +1047,7 @@ void ClientConnect (void)
                player_count = 0;
        }
 
-       //PlayerInfo_Basic(self);
-       PlayerStats_PlayerBasic();
+       if(IS_REAL_CLIENT(self)) { PlayerStats_PlayerBasic_CheckUpdate(self); }
 
        PlayerScore_Attach(self);
        ClientData_Attach();