From 0b03249a8c153fe25fbf34bd242942620c5ac426 Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Mon, 31 Jan 2011 16:02:34 +0100 Subject: [PATCH] player stats: also send team scoreboard --- qcsrc/server/playerstats.qc | 33 +++++++++++++++++++++++++++++++++ qcsrc/server/playerstats.qh | 6 ++++++ qcsrc/server/scores.qc | 17 +++++++++++++++++ 3 files changed, 56 insertions(+) diff --git a/qcsrc/server/playerstats.qc b/qcsrc/server/playerstats.qc index 6b04eea9d..4382fb5bf 100644 --- a/qcsrc/server/playerstats.qc +++ b/qcsrc/server/playerstats.qc @@ -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,6 +124,16 @@ 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) diff --git a/qcsrc/server/playerstats.qh b/qcsrc/server/playerstats.qh index 2d004c120..baaddcbb6 100644 --- a/qcsrc/server/playerstats.qh +++ b/qcsrc/server/playerstats.qh @@ -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 diff --git a/qcsrc/server/scores.qc b/qcsrc/server/scores.qc index b2b0a138f..6c7a7dbc3 100644 --- a/qcsrc/server/scores.qc +++ b/qcsrc/server/scores.qc @@ -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])); + } +} -- 2.39.2