]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge remote branch 'origin/master' into samual/balancesamual
authorSamual <samual@xonotic.org>
Tue, 1 Feb 2011 16:48:55 +0000 (11:48 -0500)
committerSamual <samual@xonotic.org>
Tue, 1 Feb 2011 16:48:55 +0000 (11:48 -0500)
qcsrc/server/playerstats.qc
qcsrc/server/playerstats.qh
qcsrc/server/scores.qc

index 6b04eea9d6a06e648420feb83de200e4316fd529..58f251c9e97d706ea9aa2986bea9371b60d94226 100644 (file)
@@ -65,6 +65,29 @@ void PlayerStats_AddPlayer(entity e)
        }
 }
 
+void PlayerStats_AddTeam(float t)
+{
+       if(playerstats_db < 0)
+               return;
+
+       string key;
+       key = sprintf("team#%d:*", t);
+       
+       string p;
+       p = db_get(playerstats_db, key);
+       if(p == "")
+       {
+               if(playerstats_last)
+               {
+                       db_put(playerstats_db, key, playerstats_last);
+                       strunzone(playerstats_last);
+               }
+               else
+                       db_put(playerstats_db, key, "#");
+               playerstats_last = strzone(sprintf("team%d", t));
+       }
+}
+
 void PlayerStats_AddEvent(string event_id)
 {
        if(playerstats_db < 0)
@@ -101,12 +124,50 @@ void PlayerStats_Event(entity e, string event_id, float value)
        db_put(playerstats_db, key, ftos(val));
 }
 
+void PlayerStats_TeamScore(float t, string event_id, float value)
+{
+       string key;
+       float val;
+       key = sprintf("team#%d:%s", t, event_id);
+       val = stof(db_get(playerstats_db, key));
+       val += value;
+       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:
+
+       A collection of lines of the format <key> SPACE <value> NEWLINE, where
+       <key> is always a single character.
+
+       The following keys are defined:
+
+       V: format version (always 1)
+       T: time at which the game ended
+       G: game type
+       M: map name
+       S: "hostname" of the server
+       C: number of "unpure" cvar changes
+       P: player ID of an existing player; this also sets the owner for all following "n" and "e" lines (lower case!)
+       n: nickname of the player (optional)
+       e: followed by an event name, a space, and the event count/score
+               event names can be:
+                       alivetime: total playing time of the player
+                       wins: number of games won (can only be set if matches is set)
+                       matches: number of matches played to the end (not aborted by map switch)
+                       joins: number of matches joined (always 1 unless player never played during the match)
+                       scoreboardvalid: set to 1 if the player was there at the end of the match
+                       total-<scoreboardname>: total score of that scoreboard item
+                       scoreboard-<scoreboardname>: end-of-game score of that scoreboard item (can differ in non-team games)
+                       achievement-<achievementname>: achievement counters
+*/
+
 //#NO AUTOCVARS START
 void PlayerStats_Shutdown()
 {
index 2d004c1207b4580929de5325c5543341d42741b1..baaddcbb661ba9d6826a469cb4fd659d71a9d407 100644 (file)
@@ -28,12 +28,18 @@ void PlayerStats_Init();
 // add a new player
 void PlayerStats_AddPlayer(entity e);
 
+// add a new team
+void PlayerStats_AddTeam(float t);
+
 // add a new event
 void PlayerStats_AddEvent(string event_id);
 
 // call on each event to track, or at player disconnect OR match end for "global stuff"
 void PlayerStats_Event(entity e, string event_id, float value);
 
+// add a team score
+void PlayerStats_TeamScore(float t, string event_id, float value);
+
 // call at game over
 void PlayerStats_Shutdown(); // send stats to the server
 
index b2b0a138f1d964782c45731c157e7bda15e9a695..6c7a7dbc3350208546216979e4df167e2a1bf004 100644 (file)
@@ -88,6 +88,7 @@ void TeamScore_Spawn(float t, string name)
        Net_LinkEntity(ts, FALSE, 0, TeamScore_SendEntity);
        teamscorekeepers[t - 1] = ts;
        ++teamscores_entities_count;
+       PlayerStats_AddTeam(t);
 }
 
 float TeamScore_AddToTeam(float t, float scorefield, float score)
@@ -891,3 +892,19 @@ void PlayerScore_PlayerStats(entity p)
                        if(scores_label[i] != "")
                                PlayerStats_Event(s.owner, strcat(PLAYERSTATS_SCOREBOARD, scores_label[i]), s.(scores[i]));
 }
+
+void PlayerScore_TeamStats(void)
+{
+       entity sk;
+       float t, i;
+       for(t = 0; t < 16; ++t)
+       {
+               sk = teamscorekeepers[t];
+               if(!sk)
+                       continue;
+               for(i = 0; i < MAX_TEAMSCORE; ++i)
+                       if(sk.(teamscores[i]) != 0)
+                               if(teamscores_label[i] != "")
+                                       PlayerStats_TeamScore(t, strcat(PLAYERSTATS_SCOREBOARD, teamscores_label[i]), sk.(teamscores[i]));
+       }
+}