C: number of "unpure" cvar changes
U: UDP port number of the server
D: duration of the match
+ L: "ladder" in which the server is participating in
P: player ID of an existing player; this also sets the owner for all following "n", "e" and "t" lines (lower case!)
Q: team number of an existing team (format: team#NN); this also sets the owner for all following "e" lines (lower case!)
n: nickname of the player (optional)
switch(status)
{
case URL_READY_CANWRITE:
- url_fputs(fh, "V 8\n");
+ url_fputs(fh, "V 9\n");
#ifdef WATERMARK
url_fputs(fh, sprintf("R %s\n", WATERMARK));
#endif
url_fputs(fh, sprintf("C %d\n", cvar_purechanges_count));
url_fputs(fh, sprintf("U %d\n", cvar("port")));
url_fputs(fh, sprintf("D %f\n", max(0, time - game_starttime)));
+ url_fputs(fh, sprintf("L %s\n", autocvar_g_playerstats_ladder));
if(teamplay)
- {
- for(t = teamstats_last; (tn = db_get(playerstats_db, sprintf("%d", stof(t)))) != ""; t = tn)
- {
- url_fputs(fh, sprintf("Q team#%s\n", t));
- for(e = events_last; (en = db_get(playerstats_db, sprintf("*:%s", e))) != ""; e = en)
- {
- float v;
- v = stof(db_get(playerstats_db, sprintf("team#%d:%s", stof(t), e)));
- if(v != 0)
- url_fputs(fh, sprintf("e %s %g\n", e, v));
- }
- }
- }
+ for(t = teamstats_last; (tn = db_get(playerstats_db, sprintf("%d", stof(t)))) != ""; t = tn)
+ {
+ url_fputs(fh, sprintf("Q team#%s\n", t));
+ for(e = events_last; (en = db_get(playerstats_db, sprintf("*:%s", e))) != ""; e = en)
+ {
+ float v;
+ v = stof(db_get(playerstats_db, sprintf("team#%d:%s", stof(t), e)));
+ if(v != 0)
+ url_fputs(fh, sprintf("e %s %g\n", e, v));
+ }
+ }
for(p = playerstats_last; (pn = db_get(playerstats_db, sprintf("%s:*", p))) != ""; p = pn)
{
url_fputs(fh, sprintf("P %s\n", p));
float n;
string s;
- PlayerInfo_AddPlayer(p);
+ PlayerInfo_AddPlayer(p);
switch(status)
{
{
print(" ", s, "\n");
- string key = string_null, value = string_null, data = string_null;
+ string key = "", value = "", data = "";
n = tokenizebyseparator(s, " "); // key (value) data
if (n == 1)
key = argv(0);
data = argv(1);
}
- else if (n == 3)
+ else if (n >= 3)
{
key = argv(0);
value = argv(1);
data = argv(2);
}
- else if (n == 4)
- {
- key = argv(0);
- value = argv(1);
- data = argv(2);
- }
- else
- continue;
if (data == "")
continue;
if (key == "#")
- // comment
continue;
else if (key == "V")
- // version
PlayerInfo_AddItem(p, "_version", data);
else if (key == "R")
- // watermark
PlayerInfo_AddItem(p, "_release", data);
else if (key == "T")
- // timestamp
PlayerInfo_AddItem(p, "_time", data);
else if (key == "S")
- // stats page URL
PlayerInfo_AddItem(p, "_statsurl", data);
else if (key == "P")
- // player hashkey
PlayerInfo_AddItem(p, "_hashkey", data);
else if (key == "n")
- // player nick
PlayerInfo_AddItem(p, "_playernick", data);
else if (key == "i")
- // xonstats id
PlayerInfo_AddItem(p, "_playerid", data);
else if (key == "G")
gametype = data;
uri = playerinfo_uri; // FIXME
if(uri != "" && crypto_getmyidstatus(0) > 0)
{
- uri = strcat(uri, "/player/", uri_escape(crypto_getmyidfp(0)));
+ //uri = strcat(uri, "/player/", uri_escape(crypto_getmyidfp(0)));
+ uri = strcat(uri, "/player/me");
print("Retrieving playerstats from URL: ", uri, "\n");
url_single_fopen(uri, FILE_APPEND, PlayerInfo_ready, world);
}
uri = playerinfo_uri; // FIXME
if(uri != "" && crypto_getmyidstatus(0) > 0)
{
- entity p = spawn();
- p.playerid = 0; // TODO: okay to use -1 for local player? or does local player already has an entity in MENUQC?
uri = strcat(uri, "/player/", uri_escape(crypto_getmyidfp(0)));
print("Retrieving playerstats from URL: ", uri, "\n");
url_single_fopen(uri, FILE_READ, PlayerInfo_ready, p);