[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