r4163 - in trunk/data: . qcsrc/client qcsrc/common qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Sat Aug 23 13:26:49 EDT 2008
Author: div0
Date: 2008-08-23 13:26:48 -0400 (Sat, 23 Aug 2008)
New Revision: 4163
Modified:
trunk/data/defaultNexuiz.cfg
trunk/data/qcsrc/client/sbar.qc
trunk/data/qcsrc/common/util.qc
trunk/data/qcsrc/common/util.qh
trunk/data/qcsrc/server/clientcommands.qc
trunk/data/qcsrc/server/gamecommand.qc
trunk/data/qcsrc/server/scores.qc
trunk/data/qcsrc/server/scores.qh
trunk/data/qcsrc/server/scores_rules.qc
Log:
make "teamstatus" work again
Modified: trunk/data/defaultNexuiz.cfg
===================================================================
--- trunk/data/defaultNexuiz.cfg 2008-08-23 15:42:16 UTC (rev 4162)
+++ trunk/data/defaultNexuiz.cfg 2008-08-23 17:26:48 UTC (rev 4163)
@@ -865,7 +865,7 @@
// command extension
alias qc_cmd "sv_cmd $*" // menu QC will override this to menu_cmd
alias adminmsg "sv_cmd adminmsg $*"
-alias teamstatus "sv_cmd teamstatus"
+alias teamstatus "cmd teamstatus; sv_cmd teamstatus" // yes, it is broken on listen servers that way, but well, who cares :P
alias printstats "sv_cmd printstats" // print status on demand
alias g_maplist_add "qc_cmd maplist add $*"
alias g_maplist_remove "qc_cmd maplist remove $*"
Modified: trunk/data/qcsrc/client/sbar.qc
===================================================================
--- trunk/data/qcsrc/client/sbar.qc 2008-08-23 15:42:16 UTC (rev 4162)
+++ trunk/data/qcsrc/client/sbar.qc 2008-08-23 17:26:48 UTC (rev 4163)
@@ -561,29 +561,7 @@
sbar_field_rgb = '0 1 1';
else
sbar_field_rgb = '1 1 1';
- if(!tmp)
- if(f & (SFL_HIDE_ZERO | SFL_RANK | SFL_TIME))
- return "";
- if(f & SFL_RANK)
- {
- str = ftos(floor(tmp + 0.5));
- num = strlen(str);
- if((num >= 2) && (substring(str, num - 2, 1) == "1"))
- return strcat(str, "th");
- else if(substring(str, num - 1, 1) == "1")
- return strcat(str, "st");
- else if(substring(str, num - 1, 1) == "2")
- return strcat(str, "nd");
- else if(substring(str, num - 1, 1) == "3")
- return strcat(str, "rd");
- else
- return strcat(str, "th");
- }
- else if(f & SFL_TIME)
- {
- return mmsss(tmp);
- }
- return ftos(tmp);
+ return ScoreString(f, tmp);
}
//return "error";
}
Modified: trunk/data/qcsrc/common/util.qc
===================================================================
--- trunk/data/qcsrc/common/util.qc 2008-08-23 15:42:16 UTC (rev 4162)
+++ trunk/data/qcsrc/common/util.qc 2008-08-23 17:26:48 UTC (rev 4163)
@@ -436,3 +436,35 @@
s = ftos(1000 + tenths);
return strcat(ftos(minutes), ":", substring(s, 1, 2), ".", substring(s, 3, 1));
}
+
+string ScoreString(float vflags, float value)
+{
+ string valstr;
+ float l;
+
+ value = floor(value + 0.5); // round
+
+ if((value == 0) && (vflags & (SFL_HIDE_ZERO | SFL_RANK | SFL_TIME)))
+ valstr = "";
+ else if(vflags & SFL_RANK)
+ {
+ valstr = ftos(value);
+ l = strlen(valstr);
+ if((l >= 2) && (substring(valstr, l - 2, 1) == "1"))
+ valstr = strcat(valstr, "th");
+ else if(substring(valstr, l - 1, 1) == "1")
+ valstr = strcat(valstr, "st");
+ else if(substring(valstr, l - 1, 1) == "2")
+ valstr = strcat(valstr, "nd");
+ else if(substring(valstr, l - 1, 1) == "3")
+ valstr = strcat(valstr, "rd");
+ else
+ valstr = strcat(valstr, "th");
+ }
+ else if(vflags & SFL_TIME)
+ valstr = mmsss(value);
+ else
+ valstr = ftos(value);
+
+ return valstr;
+}
Modified: trunk/data/qcsrc/common/util.qh
===================================================================
--- trunk/data/qcsrc/common/util.qh 2008-08-23 15:42:16 UTC (rev 4162)
+++ trunk/data/qcsrc/common/util.qh 2008-08-23 17:26:48 UTC (rev 4163)
@@ -58,3 +58,4 @@
string GametypeNameFromType(float g);
string mmsss(float t);
+string ScoreString(float vflags, float value);
Modified: trunk/data/qcsrc/server/clientcommands.qc
===================================================================
--- trunk/data/qcsrc/server/clientcommands.qc 2008-08-23 15:42:16 UTC (rev 4162)
+++ trunk/data/qcsrc/server/clientcommands.qc 2008-08-23 17:26:48 UTC (rev 4163)
@@ -347,6 +347,8 @@
if(cvar("sv_timeout")) {
evaluateResumeGame();
}
+ } else if(argv(0) == "teamstatus") {
+ Score_NicePrint(self);
} else {
//if(ctf_clientcommand())
// return;
Modified: trunk/data/qcsrc/server/gamecommand.qc
===================================================================
--- trunk/data/qcsrc/server/gamecommand.qc 2008-08-23 15:42:16 UTC (rev 4162)
+++ trunk/data/qcsrc/server/gamecommand.qc 2008-08-23 17:26:48 UTC (rev 4163)
@@ -202,13 +202,15 @@
print("Client not found\n");
return;
}
- if (argv(0) == "sdp")
+ if (argv(0) == "teamstatus")
{
- Score_DebugPrint();
+ Score_NicePrint(world);
+ return;
}
if (argv(0) == "allready")
{
ReadyRestart();
+ return;
}
print("Invalid command. For a list of supported commands, try sv_cmd help.\n");
Modified: trunk/data/qcsrc/server/scores.qc
===================================================================
--- trunk/data/qcsrc/server/scores.qc 2008-08-23 15:42:16 UTC (rev 4162)
+++ trunk/data/qcsrc/server/scores.qc 2008-08-23 17:26:48 UTC (rev 4163)
@@ -436,41 +436,6 @@
}
}
-void Score_DebugPrint()
-{
- entity p, sk;
- float i, t;
-
- print("netname");
- for(i = 0; i < MAX_SCORE; ++i)
- print(":", scores_label[i]);
- print("\n");
- FOR_EACH_PLAYER(p)
- {
- sk = p.scorekeeper;
- print(p.netname);
- for(i = 0; i < MAX_SCORE; ++i)
- print(":", ftos(sk.(scores[i])));
- print("\n");
- }
-
- print("teamname");
- for(i = 0; i < MAX_TEAMSCORE; ++i)
- print(":", teamscores_label[i]);
- print("\n");
- for(t = 0; t < 16; ++t)
- {
- sk = teamscorekeepers[t];
- if(sk)
- {
- print(ftos(t));
- for(i = 0; i < MAX_TEAMSCORE; ++i)
- print(":", ftos(sk.(teamscores[i])));
- print("\n");
- }
- }
-}
-
string GetScoreLogLabel(string label, float fl)
{
if(fl & SFL_LOWER_IS_BETTER)
@@ -600,17 +565,21 @@
if(p1.team != p2.team)
{
entity t1, t2;
- t1 = teamscorekeepers[p1.team];
- t2 = teamscorekeepers[p2.team];
- return TeamScore_Compare(t1, t2);
+ float r;
+ t1 = teamscorekeepers[p1.team - 1];
+ t2 = teamscorekeepers[p2.team - 1];
+ r = TeamScore_Compare(t1, t2);
+ if(r == 0) // ensure a deterministic order
+ r = p1.team - p2.team;
+ return r;
}
return PlayerScore_Compare(p1.scorekeeper, p2.scorekeeper);
}
-float PlayerScore_Sort(.float field)
+entity PlayerScore_Sort(.float field)
{
- entity p, plist, pprev, pbest, pbestprev;
+ entity p, plist, pprev, pbest, pbestprev, pfirst, plast;
float i;
plist = world;
@@ -623,6 +592,8 @@
plist = p;
}
// Now plist points to the whole list.
+
+ pfirst = plast = world;
i = 0;
while(plist)
@@ -646,9 +617,14 @@
pbest.chain = world;
pbest.field = ++i;
+ if not(pfirst)
+ pfirst = pbest;
+ if(plast)
+ plast.chain = pbest;
+ plast = pbest;
}
- return i;
+ return pfirst;
}
float TeamScore_GetCompareValue(float t)
@@ -670,3 +646,136 @@
s = -s;
return s;
}
+
+#define NAMEWIDTH 22
+#define SCORESWIDTH 58
+// TODO put this somewhere in common?
+string Score_NicePrint_ItemColor(float vflags)
+{
+ if(vflags & SFL_SORT_PRIO_PRIMARY)
+ return "^3";
+ else if(vflags & SFL_SORT_PRIO_SECONDARY)
+ return "^5";
+ else
+ return "^7";
+}
+
+void Score_NicePrint_Team(entity to, float t, float w)
+{
+ string s, s2;
+ float i;
+ entity sk;
+ float fl, sc;
+ s = "";
+
+ sk = teamscorekeepers[t - 1];
+ if(sk)
+ {
+ s = strcat(s, ColoredTeamName(t));
+ for(i = 0; i < MAX_TEAMSCORE; ++i)
+ if(teamscores_label[i] != "")
+ {
+ fl = teamscores_flags[i];
+ sc = sk.(teamscores[i]);
+ s = strcat(s, " ", Score_NicePrint_ItemColor(fl), ScoreString(fl, sc));
+ }
+ }
+ else
+ s = "Scores:";
+
+ s = strcat(s, strpad(max(0, NAMEWIDTH - strlennocol(s)), ""));
+
+ for(i = 0; i < MAX_SCORE; ++i)
+ if(scores_label[i] != "")
+ {
+ fl = scores_flags[i];
+ s2 = scores_label[i];
+ s = strcat(s, " ", Score_NicePrint_ItemColor(fl), strpad(-w, substring(s2, 0, w)));
+ }
+
+ print_to(to, s);
+}
+
+void Score_NicePrint_Player(entity to, entity p, float w)
+{
+ string s;
+ float i;
+ entity sk;
+ float fl, sc;
+ s = " ";
+
+ sk = p.scorekeeper;
+
+ s = strcat(s, p.netname);
+ for(;;)
+ {
+ i = strlennocol(s) - NAMEWIDTH;
+ if(i > 0)
+ s = substring(s, 0, strlen(s) - i);
+ else
+ {
+ s = strcat(s, strpad(i, ""));
+ break;
+ }
+ }
+
+ for(i = 0; i < MAX_SCORE; ++i)
+ if(scores_label[i] != "")
+ {
+ fl = scores_flags[i];
+ sc = sk.(scores[i]);
+ s = strcat(s, " ", Score_NicePrint_ItemColor(fl), strpad(-w, ScoreString(fl, sc)));
+ }
+
+ print_to(to, s);
+}
+
+void Score_NicePrint_Spectators(entity to)
+{
+ print_to(to, "Spectators:");
+}
+
+void Score_NicePrint_Spectator(entity to, entity p)
+{
+ print_to(to, strcat(" ", p.netname));
+}
+
+.float score_dummyfield;
+void Score_NicePrint(entity to)
+{
+ entity p;
+ float t, i;
+ float w;
+
+ t = 0;
+ for(i = 0; i < MAX_SCORE; ++i)
+ if(scores_label[i] != "")
+ ++t;
+ w = bound(6, floor(SCORESWIDTH / t - 1), 9);
+
+ p = PlayerScore_Sort(score_dummyfield);
+ t = -1;
+
+ if(!teamscores_entities_count)
+ Score_NicePrint_Team(to, t, w);
+ while(p)
+ {
+ if(teamscores_entities_count)
+ if(t != p.team)
+ Score_NicePrint_Team(to, p.team, w);
+ Score_NicePrint_Player(to, p, w);
+ t = p.team;
+ p = p.chain;
+ }
+
+ t = 0;
+ FOR_EACH_CLIENT(p)
+ if(p.classname != "player")
+ {
+ if not(t)
+ Score_NicePrint_Spectators(to);
+ Score_NicePrint_Spectator(to, p);
+ t = 1;
+ }
+}
+
Modified: trunk/data/qcsrc/server/scores.qh
===================================================================
--- trunk/data/qcsrc/server/scores.qh 2008-08-23 15:42:16 UTC (rev 4162)
+++ trunk/data/qcsrc/server/scores.qh 2008-08-23 17:26:48 UTC (rev 4163)
@@ -84,9 +84,9 @@
void Score_ClearAll();
/**
- * Prints the scores (ugly!) to the console.
+ * Prints the scores to the console of a player.
*/
-void Score_DebugPrint();
+void Score_NicePrint(entity to);
/**
* Sets the following results for the current scores entities.
@@ -117,5 +117,6 @@
/**
* Sorts the players and stores their place in the given field, starting with
* 1. Non-players get 0 written into that field.
+ * Returns the beginning of a sorted chain of the non-spectators.
*/
-float PlayerScore_Sort(.float field);
+entity PlayerScore_Sort(.float field);
Modified: trunk/data/qcsrc/server/scores_rules.qc
===================================================================
--- trunk/data/qcsrc/server/scores_rules.qc 2008-08-23 15:42:16 UTC (rev 4162)
+++ trunk/data/qcsrc/server/scores_rules.qc 2008-08-23 17:26:48 UTC (rev 4163)
@@ -149,8 +149,6 @@
}
else if(g_race_qualifying)
{
- ScoreInfo_SetLabel_TeamScore( ST_RACE_LAPS, "laps", 0);
- ScoreInfo_SetLabel_PlayerScore(SP_RACE_LAPS, "laps", 0);
ScoreInfo_SetLabel_PlayerScore(SP_RACE_FASTEST, "fastest", SFL_SORT_PRIO_PRIMARY | SFL_LOWER_IS_BETTER | SFL_TIME);
}
else
More information about the nexuiz-commits
mailing list