X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fplayerstats.qc;h=2bb5540d6b26680cd4027bcf3739a12c90812dae;hb=c2ada41d4d1a6b626dcd056ed1e46fe23aa6b3e1;hp=6b04eea9d6a06e648420feb83de200e4316fd529;hpb=49a1b0a79699721877d9630fc598574bb0ac91b2;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/playerstats.qc b/qcsrc/server/playerstats.qc index 6b04eea9d..2bb5540d6 100644 --- a/qcsrc/server/playerstats.qc +++ b/qcsrc/server/playerstats.qc @@ -40,7 +40,7 @@ void PlayerStats_AddPlayer(entity e) if(playerstats_db < 0) return; - if(e.crypto_idfp != "") + if(e.crypto_idfp != "" && e.cvar_cl_allow_uidtracking == 1) e.playerstats_id = strzone(e.crypto_idfp); else if(clienttype(e) == CLIENTTYPE_BOT) e.playerstats_id = strzone(sprintf("bot#%d", e.playerid)); @@ -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,52 @@ 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 SPACE NEWLINE, where + is always a single character. + + The following keys are defined: + + V: format version (always 1) - this MUST be the first line! + #: comment (MUST be ignored by any parser) + R: release information on the server + 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-: total score of that scoreboard item + scoreboard-: end-of-game score of that scoreboard item (can differ in non-team games) + achievement-: achievement counters +*/ + //#NO AUTOCVARS START void PlayerStats_Shutdown() { @@ -129,6 +192,9 @@ void PlayerStats_Shutdown() db_dump(playerstats_db, "foo.db"); bufstr_set(b, i++, "V 1"); +#ifdef WATERMARK + bufstr_set(b, i++, sprintf("R %s", WATERMARK())); +#endif bufstr_set(b, i++, sprintf("T %s.%06d", strftime(FALSE, "%s"), floor(random() * 1000000))); bufstr_set(b, i++, sprintf("G %s", GetGametype())); bufstr_set(b, i++, sprintf("M %s", GetMapname()));