]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/playerstats.qc
Updates to playerbasic, including status tracking and proper database init
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / playerstats.qc
index 6d327495dc56984d7a64db2b95d5cbb44a1dc4a9..fb28fd5563c42b14ddaa304d5de01da8f028d540 100644 (file)
@@ -419,33 +419,61 @@ void PlayerStats_GameReport_Handler(entity fh, entity pass, float status)
 
 void PlayerStats_PlayerBasic()
 {
-       entity player;
-       //PS_D_IN_DB = -1;
-       //PS_D_IN_DB = db_create();
+       if(autocvar_g_playerstats_playerbasic_uri != "")
+       {
+               entity player;
+               
+               // create the database if it doesn't already exist
+               if(PS_B_IN_DB < 0)
+               {
+                       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 != ""))
+                       {
+                               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
+                               );
+                       }
 
-       //if(PS_D_IN_DB < 0) { return; }
+                       /*p.crypto_idfp != "")
+                       {
+                               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);
+                       }*/
+               }
 
-       FOR_EACH_REALCLIENT(player)
+               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;
+               }
+       }
+       else
        {
-               string uri = autocvar_g_playerstats_playerbasic_uri;
-               if((uri != "") && (player.crypto_idfp != ""))
+               // player has this disabled, kill the DB and set status to idle
+               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
-                       );
+                       db_close(PS_B_IN_DB);
+                       PS_B_IN_DB = -1;
                }
 
-               /*p.crypto_idfp != "")
-               {
-                       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);
-               }*/
+               PlayerStats_PlayerBasic_Status = PS_B_STATUS_IDLE;
        }
 }
 
@@ -616,7 +644,32 @@ void PlayerStats_PlayerDetail(void)
                }
 
                PlayerStats_PlayerDetail_Status = PS_D_STATUS_IDLE;
-               
+       }
+}
+
+void PlayerStats_PlayerDetail_CheckUpdate(void)
+{
+       // determine whether we should retrieve playerdetail information again
+       float gamecount = cvar("cl_matchcount");
+
+       #if 0
+       printf("PlayerStats_PlayerDetail_CheckUpdate(): %f >= %f, %d > %d\n",
+               time,
+               PS_D_NEXTUPDATETIME,
+               PS_D_LASTGAMECOUNT,
+               gamecount
+       );
+       #endif
+
+       if(
+               (time >= PS_D_NEXTUPDATETIME)
+               ||
+               (gamecount > PS_D_LASTGAMECOUNT)
+       )
+       {
+               PlayerStats_PlayerDetail();
+               PS_D_NEXTUPDATETIME = (time + autocvar_g_playerstats_playerdetail_autoupdatetime);
+               PS_D_LASTGAMECOUNT = gamecount;
        }
 }
 
@@ -632,8 +685,8 @@ void PlayerStats_PlayerDetail_Handler(entity fh, entity unused, float status)
                        url_fputs(fh, sprintf("R %s\n", WATERMARK));
                        #endif
                        url_fputs(fh, sprintf("l %s\n", cvar_string("_menu_prvm_language"))); // language
-                       url_fputs(fh, sprintf("c %s\n", cvar_string("_menu_prvm_country"))); // country
-                       url_fputs(fh, sprintf("g %s\n", cvar_string("_menu_prvm_gender"))); // gender
+                       //url_fputs(fh, sprintf("c %s\n", cvar_string("_cl_country"))); // country
+                       //url_fputs(fh, sprintf("g %s\n", cvar_string("_cl_gender"))); // gender
                        url_fputs(fh, sprintf("n %s\n", cvar_string("_cl_name"))); // name
                        url_fputs(fh, sprintf("m %s %s\n", cvar_string("_cl_playermodel"), cvar_string("_cl_playerskin"))); // model/skin
                        url_fputs(fh, "\n");
@@ -699,17 +752,23 @@ void PlayerStats_PlayerDetail_Handler(entity fh, entity unused, float status)
                                        
                                        default:
                                        {
-                                               print(
+                                               print(sprintf(
                                                        "PlayerStats_PlayerDetail_Handler(): ERROR: "
                                                        "Key went unhandled? Is our version outdated?\n"
-                                               );
+                                                       "PlayerStats_PlayerDetail_Handler(): "
+                                                       "Key '%s', Event '%s', Data '%s'\n",
+                                                       key,
+                                                       event,
+                                                       data
+                                               ));
                                                break;
                                        }
                                }
 
                                #if 0
                                print(sprintf(
-                                       "PlayerStats_PlayerDetail_Handler(): Key '%s', Event '%s', Data '%s'\n",
+                                       "PlayerStats_PlayerDetail_Handler(): "
+                                       "Key '%s', Event '%s', Data '%s'\n",
                                        key,
                                        event,
                                        data