]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/playerstats.qc
make multi URLs actually work
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / playerstats.qc
index 9f40a453ead2bfdad1a40fc0a4829e6051e8165b..c6e7701e0c0bfa6e4c3543e1eca7bcbafdc0ef2f 100644 (file)
@@ -17,7 +17,9 @@ void PlayerStats_Init()
        playerstats_db = db_create();
        if(playerstats_db >= 0)
                playerstats_waitforme = FALSE; // must wait for it at match end
-       
+
+       serverflags |= SERVERFLAG_PLAYERSTATS;  
+
        PlayerStats_AddEvent(PLAYERSTATS_ALIVETIME);
        PlayerStats_AddEvent(PLAYERSTATS_WINS);
        PlayerStats_AddEvent(PLAYERSTATS_MATCHES);
@@ -154,12 +156,6 @@ void PlayerStats_TeamScore(float t, string event_id, float value) // TODO: doesn
        db_put(playerstats_db, key, ftos(val));
 }
 
-void PlayerStats_Sent_URI_Get_Callback(float id, float status, string data)
-{
-       if(playerstats_requested)
-               playerstats_waitforme = TRUE;
-}
-
 /*
        format spec:
 
@@ -241,9 +237,7 @@ void PlayerStats_ready(entity fh, entity pass, float status)
                                }
                        }
                        url_fputs(fh, "\n");
-                       db_close(playerstats_db);
-                       playerstats_db = -1;
-                       url_fclose(fh, PlayerStats_ready, world);
+                       url_fclose(fh);
                        break;
                case URL_READY_CANREAD:
                        // url_fclose is processing, we got a response for writing the data
@@ -252,12 +246,14 @@ void PlayerStats_ready(entity fh, entity pass, float status)
                        while((s = url_fgets(fh)))
                                print("  ", s, "\n");
                        print("End of response.\n");
-                       url_fclose(fh, PlayerStats_ready, world);
+                       url_fclose(fh);
                        break;
                case URL_READY_CLOSED:
                        // url_fclose has finished
                        print("Player stats written\n");
                        playerstats_waitforme = TRUE;
+                       db_close(playerstats_db);
+                       playerstats_db = -1;
                        break;
                case URL_READY_ERROR:
                default:
@@ -283,8 +279,8 @@ void PlayerStats_Shutdown()
        uri = autocvar_g_playerstats_uri;
        if(uri != "")
        {
-               url_fopen(uri, FILE_APPEND, PlayerStats_ready, world);
                playerstats_waitforme = FALSE;
+               url_multi_fopen(uri, FILE_APPEND, PlayerStats_ready, world);
        }
        else
        {
@@ -295,6 +291,26 @@ void PlayerStats_Shutdown()
 }
 //#NO AUTOCVARS END
 
+void PlayerStats_Accuracy(entity p)
+{
+    entity a, w;
+    a = p.accuracy;
+    float i;
+
+    for(i = WEP_FIRST; i <= WEP_LAST; ++i)
+    {
+        w = get_weaponinfo(i);
+
+        PlayerStats_Event(p, strcat("acc-", w.netname, "-hit"), a.(accuracy_hit[i-1]));
+        PlayerStats_Event(p, strcat("acc-", w.netname, "-fired"), a.(accuracy_fired[i-1]));
+
+        PlayerStats_Event(p, strcat("acc-", w.netname, "-cnt-hit"), a.(accuracy_cnt_hit[i-1]));
+        PlayerStats_Event(p, strcat("acc-", w.netname, "-cnt-fired"), a.(accuracy_cnt_fired[i-1]));
+
+        PlayerStats_Event(p, strcat("acc-", w.netname, "-frags"), a.(accuracy_frags[i-1]));
+    }
+}
+
 void PlayerStats_AddGlobalInfo(entity p)
 {
        if(playerstats_db < 0)
@@ -321,30 +337,12 @@ void PlayerStats_AddGlobalInfo(entity p)
        if(stof(db_get(playerstats_db, sprintf("%d:%s", p.playerstats_id, PLAYERSTATS_ALIVETIME))) > 0)
                PlayerStats_Event(p, PLAYERSTATS_JOINS, 1);
 
+       PlayerStats_Accuracy(p);
+
        strunzone(p.playerstats_id);
        p.playerstats_id = string_null;
 }
 
-void PlayerStats_Accuracy(entity p)
-{
-    entity a, w;
-    a = p.accuracy;
-    float i;
-
-    for(i = WEP_FIRST; i <= WEP_LAST; ++i)
-    {
-        w = get_weaponinfo(i);
-
-        PlayerStats_Event(p, strcat("acc-", w.netname, "-hit"), a.accuracy_hit[i-1]);
-        PlayerStats_Event(p, strcat("acc-", w.netname, "-fired"), a.accuracy_fired[i-1]);
-
-        PlayerStats_Event(p, strcat("acc-", w.netname, "-cnt-hit"), a.accuracy_cnt_hit[i-1]);
-        PlayerStats_Event(p, strcat("acc-", w.netname, "-cnt-fired"), a.accuracy_cnt_fired[i-1]);
-
-        PlayerStats_Event(p, strcat("acc-", w.netname, "-frags"), a.accuracy_frags[i-1]);
-    }
-}
-
 void PlayerStats_EndMatch(float finished)
 {
        entity p, winner;