[nexuiz-commits] r8504 - in trunk/data: . qcsrc/client qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Sat Jan 16 07:14:21 EST 2010
Author: fruitiex
Date: 2010-01-16 07:14:20 -0500 (Sat, 16 Jan 2010)
New Revision: 8504
Modified:
trunk/data/defaultNexuiz.cfg
trunk/data/qcsrc/client/Main.qc
trunk/data/qcsrc/server/cl_client.qc
trunk/data/qcsrc/server/clientcommands.qc
trunk/data/qcsrc/server/race.qc
Log:
UID system with race/cts rankings support
Modified: trunk/data/defaultNexuiz.cfg
===================================================================
--- trunk/data/defaultNexuiz.cfg 2010-01-16 10:30:43 UTC (rev 8503)
+++ trunk/data/defaultNexuiz.cfg 2010-01-16 12:14:20 UTC (rev 8504)
@@ -1768,3 +1768,6 @@
// FIXME temporary
set menu_font_size_snapping_fix 1
+
+// player ID
+seta _cl_userid "" "player ID (e.g. for tournaments)"
Modified: trunk/data/qcsrc/client/Main.qc
===================================================================
--- trunk/data/qcsrc/client/Main.qc 2010-01-16 10:30:43 UTC (rev 8503)
+++ trunk/data/qcsrc/client/Main.qc 2010-01-16 12:14:20 UTC (rev 8504)
@@ -135,6 +135,23 @@
Announcer_Precache();
Tuba_Precache();
+#ifdef UID
+ {
+ // find the user ID
+ string uid;
+ registercvar("_cl_userid", "", CVAR_SAVE);
+ uid = cvar_string("_cl_userid");
+ if(strlen(uid) < 16)
+ {
+ uid = "";
+ for(i = 0; i < 4; ++i)
+ uid = strcat(uid, substring(ftos(floor(10000 + random() * 10000)), 1, -1));
+ }
+ cvar_set("_cl_userid", uid);
+ localcmd(strcat("\ncmd uid ", uid, "\n"));
+ }
+#endif
+
get_mi_min_max_texcoords(1); // try the CLEVER way first
minimapname = strcat("gfx/", mi_shortname, "_radar.tga");
shortmapname = mi_shortname;
Modified: trunk/data/qcsrc/server/cl_client.qc
===================================================================
--- trunk/data/qcsrc/server/cl_client.qc 2010-01-16 10:30:43 UTC (rev 8503)
+++ trunk/data/qcsrc/server/cl_client.qc 2010-01-16 12:14:20 UTC (rev 8504)
@@ -1312,6 +1312,10 @@
string ColoredTeamName(float t);
void DecodeLevelParms (void);
//void dom_player_join_team(entity pl);
+#ifdef UID
+.float uid_kicktime;
+.string uid;
+#endif
void ClientConnect (void)
{
float t;
@@ -1485,6 +1489,12 @@
else
self.hitplotfh = -1;
+#ifdef UID
+ if(clienttype(self) == CLIENTTYPE_REAL)
+ if not(self.uid)
+ self.uid_kicktime = time + 60;
+#endif
+
if(g_race || g_cts) {
string rr;
if(g_cts)
@@ -2937,6 +2947,15 @@
self.stat_count -= 1;
}
+#ifdef UID
+ if(self.uid_kicktime)
+ if(time > self.uid_kicktime)
+ {
+ bprint("^3", self.netname, "^3 was kicked for missing UID.\n");
+ dropclient(self);
+ return;
+ }
+#endif
if(sv_maxidle && frametime)
{
// WORKAROUND: only use dropclient in server frames (frametime set). Never use it in cl_movement frames (frametime zero).
Modified: trunk/data/qcsrc/server/clientcommands.qc
===================================================================
--- trunk/data/qcsrc/server/clientcommands.qc 2010-01-16 10:30:43 UTC (rev 8503)
+++ trunk/data/qcsrc/server/clientcommands.qc 2010-01-16 12:14:20 UTC (rev 8504)
@@ -221,6 +221,15 @@
tokens = tokenize_console(s);
}
GetCvars(1);
+#ifdef UID
+ } else if (cmd == "uid") {
+ if not(self.uid)
+ {
+ self.uid = strzone(argv(1));
+ self.uid_kicktime = 0;
+ print("Client ", etos(self), " has UID ", self.uid, "\n");
+ }
+#endif
} else if(cmd == "sentcvar") { // new system
if(tokens == 2) // undefined cvar: use the default value on the server then
{
Modified: trunk/data/qcsrc/server/race.qc
===================================================================
--- trunk/data/qcsrc/server/race.qc 2010-01-16 10:30:43 UTC (rev 8503)
+++ trunk/data/qcsrc/server/race.qc 2010-01-16 12:14:20 UTC (rev 8504)
@@ -101,6 +101,9 @@
string rr;
float grecordtime[RANKINGS_CNT];
string grecordholder[RANKINGS_CNT];
+#ifdef UID
+string grecorduid[RANKINGS_CNT];
+#endif
float worst_time; // last ranked time
float have_recs; // have we already read the records from the database before?
float race_GetTime(float pos) {
@@ -114,9 +117,15 @@
for(i=0;i<RANKINGS_CNT;++i) {
grecordtime[i] = stof(db_get(ServerProgsDB, strcat(GetMapname(), rr, "time", ftos(i))));
grecordholder[i] = strzone(db_get(ServerProgsDB, strcat(GetMapname(), rr, "netname", ftos(i))));
+#ifdef UID
+ grecorduid[i] = strzone(db_get(ServerProgsDB, strcat(GetMapname(), rr, "uid", ftos(i))));
+#endif
}
grecordtime[0] = stof(db_get(ServerProgsDB, strcat(GetMapname(), rr, "time")));
grecordholder[0] = strzone(db_get(ServerProgsDB, strcat(GetMapname(), rr, "netname")));
+#ifdef UID
+ grecorduid[0] = strzone(db_get(ServerProgsDB, strcat(GetMapname(), rr, "uid")));
+#endif
worst_time = stof(db_get(ServerProgsDB, strcat(GetMapname(), rr, strcat("time", ftos(RANKINGS_CNT-1)))));
have_recs = 1;
}
@@ -128,6 +137,19 @@
return grecordholder[pos-1];
}
+#ifdef UID
+float race_CheckUID(string uid, string netname) { // return existing UID or player name ranking pos, else 0
+ float i;
+ for (i=RANKINGS_CNT-1;i>=0;--i)
+ if(grecorduid[i] == uid)
+ return i+1;
+ for (i=RANKINGS_CNT-1;i>=0;--i)
+ if(grecordholder[i] == netname)
+ return i+1;
+ return 0;
+}
+#endif
+
float race_CheckName(string netname) { // Does the name already exist in rankings? In that case, where? (otherwise 0)
float i;
for (i=RANKINGS_CNT-1;i>=0;--i)
@@ -192,6 +214,9 @@
pos = race_GetPos(t);
float prevpos = race_CheckName(e.netname);
+#ifdef UID
+ float prevpos = race_CheckUID(e.uid, e.netname);
+#endif
if (prevpos && (prevpos < pos || !pos))
{
oldrec = race_GetTime(prevpos);
@@ -215,23 +240,41 @@
for (i=prevpos-1;i>pos-1;--i) {
db_put(ServerProgsDB, strcat(GetMapname(), rr, "time", ftos(i)), ftos(grecordtime[i-1]));
db_put(ServerProgsDB, strcat(GetMapname(), rr, "netname", ftos(i)), grecordholder[i-1]);
+#ifdef UID
+ db_put(ServerProgsDB, strcat(GetMapname(), rr, "uid", ftos(i)), grecorduid[i-1]);
+#endif
if(i == prevpos-1) {
oldrec = grecordtime[i];
oldname = grecordholder[i];
}
grecordtime[i] = grecordtime[i-1];
+
if (grecordholder[i])
strunzone(grecordholder[i]);
grecordholder[i] = strzone(grecordholder[i-1]);
+#ifdef UID
+ if (grecorduid[i])
+ strunzone(grecorduid[i]);
+ grecorduid[i] = strzone(grecorduid[i-1]);
+#endif
}
} else { // player has no ranked record yet
for (i=RANKINGS_CNT-1;i>pos-1;--i) {
db_put(ServerProgsDB, strcat(GetMapname(), rr, "time", ftos(i)), ftos(grecordtime[i-1]));
db_put(ServerProgsDB, strcat(GetMapname(), rr, "netname", ftos(i)), grecordholder[i-1]);
+#ifdef UID
+ db_put(ServerProgsDB, strcat(GetMapname(), rr, "uid", ftos(i)), grecorduid[i-1]);
+#endif
grecordtime[i] = grecordtime[i-1];
+
if (grecordholder[i])
strunzone(grecordholder[i]);
grecordholder[i] = strzone(grecordholder[i-1]);
+#ifdef UID
+ if (grecorduid[i])
+ strunzone(grecorduid[i]);
+ grecorduid[i] = strzone(grecorduid[i-1]);
+#endif
}
}
@@ -239,19 +282,39 @@
if (pos == 1) {
db_put(ServerProgsDB, strcat(GetMapname(), rr, "time"), ftos(t));
db_put(ServerProgsDB, strcat(GetMapname(), rr, "netname"), e.netname);
+#ifdef UID
+ db_put(ServerProgsDB, strcat(GetMapname(), rr, "uid"), e.uid);
+#endif
+
grecordtime[0] = t;
+
if (grecordholder[0])
strunzone(grecordholder[0]);
grecordholder[0] = strzone(e.netname);
+#ifdef UID
+ if (grecorduid[0])
+ strunzone(grecorduid[0]);
+ grecorduid[0] = strzone(e.uid);
+#endif
write_recordmarker(e, time - TIME_DECODE(t), TIME_DECODE(t));
race_send_recordtime(MSG_ALL);
} else {
db_put(ServerProgsDB, strcat(GetMapname(), rr, "time", ftos(pos-1)), ftos(t));
db_put(ServerProgsDB, strcat(GetMapname(), rr, "netname", ftos(pos-1)), e.netname);
+#ifdef UID
+ db_put(ServerProgsDB, strcat(GetMapname(), rr, "uid", ftos(pos-1)), e.uid);
+#endif
+
grecordtime[pos-1] = t;
+
if (grecordholder[pos-1])
strunzone(grecordholder[pos-1]);
grecordholder[pos-1] = strzone(e.netname);
+#ifdef UID
+ if (grecorduid[pos-1])
+ strunzone(grecorduid[pos-1]);
+ grecorduid[pos-1] = strzone(e.uid);
+#endif
}
if (pos == RANKINGS_CNT)
More information about the nexuiz-commits
mailing list