r1822 - in trunk/data: . qcsrc/common qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Thu Aug 17 09:36:47 EDT 2006


Author: div0
Date: 2006-08-17 09:36:46 -0400 (Thu, 17 Aug 2006)
New Revision: 1822

Modified:
   trunk/data/default.cfg
   trunk/data/qcsrc/common/util.qc
   trunk/data/qcsrc/server/centermsg.qh
   trunk/data/qcsrc/server/cl_impulse.qc
   trunk/data/qcsrc/server/cl_physics.qc
   trunk/data/qcsrc/server/cl_player.qc
   trunk/data/qcsrc/server/defs.qh
   trunk/data/qcsrc/server/miscfunctions.qc
Log:
Display player name when pointing to him. Removed impulse 18 since it became redundant. Configurable using cl_shownames.


Modified: trunk/data/default.cfg
===================================================================
--- trunk/data/default.cfg	2006-08-17 12:31:39 UTC (rev 1821)
+++ trunk/data/default.cfg	2006-08-17 13:36:46 UTC (rev 1822)
@@ -739,3 +739,5 @@
 seta sv_curl_defaulturl "http://www.nexuiz.com/contentdownload/getmap.php?file="
 
 set sv_motd ""
+
+set cl_shownames 1 // show player names pointed to

Modified: trunk/data/qcsrc/common/util.qc
===================================================================
--- trunk/data/qcsrc/common/util.qc	2006-08-17 12:31:39 UTC (rev 1821)
+++ trunk/data/qcsrc/common/util.qc	2006-08-17 13:36:46 UTC (rev 1822)
@@ -173,3 +173,13 @@
 */
 }
 
+float dist_point_line(vector p, vector l0, vector ldir)
+{
+	ldir = normalize(ldir);
+	
+	// remove the component in line direction
+	p = p - (p * ldir) * ldir;
+
+	// vlen of the remaining vector
+	return vlen(p);
+}

Modified: trunk/data/qcsrc/server/centermsg.qh
===================================================================
--- trunk/data/qcsrc/server/centermsg.qh	2006-08-17 12:31:39 UTC (rev 1821)
+++ trunk/data/qcsrc/server/centermsg.qh	2006-08-17 13:36:46 UTC (rev 1822)
@@ -1,5 +1,5 @@
 // centerprint locations
-#define MAXCENTERMSG 9
+#define MAXCENTERMSG 11
 #define CENTERMSG_VOTE 0
 #define CENTERMSG_GAMEMODE1 2
 #define CENTERMSG_GAMEMODE2 3
@@ -13,6 +13,7 @@
 #define CENTERMSG_KILL 8
 #define CENTERMSG_DEATH 8
 #define CENTERMSG_CAMP 8
+#define CENTERMSG_POINT 9
 #define CENTERMSG_TEAMSAY 10
 
 #define CENTERMSG_ARENACHAMP CENTERMSG_GAMEMODE1

Modified: trunk/data/qcsrc/server/cl_impulse.qc
===================================================================
--- trunk/data/qcsrc/server/cl_impulse.qc	2006-08-17 12:31:39 UTC (rev 1821)
+++ trunk/data/qcsrc/server/cl_impulse.qc	2006-08-17 13:36:46 UTC (rev 1822)
@@ -113,23 +113,6 @@
 			&& !cvar("g_rocketarena") && !cvar("g_lms") && cvar("g_pickup_items") && !cvar("g_nixnex"))
 			W_ThrowWeapon(self.velocity * 0.5 + v_forward * 750, '0 0 0', TRUE);
 	}
-	else if (imp == 18)
-	{
-		if(self.last_trace_player)
-		{
-			string t;
-			string h;
-			t = "^3";
-			h = "";
-			if(teams_matter)
-			{
-				t = Team_ColorCode(self.last_trace_player.team);
-				if(self.team == self.last_trace_player.team)
-					h = strcat(" (", ftos(self.last_trace_player.health), "% health)");
-			}
-			centermsg_set(CENTERMSG_KILL, strcat(t, self.last_trace_player.netname, h));
-		}
-	}
 	else
 	{
 		if (cvar("sv_cheats"))

Modified: trunk/data/qcsrc/server/cl_physics.qc
===================================================================
--- trunk/data/qcsrc/server/cl_physics.qc	2006-08-17 12:31:39 UTC (rev 1821)
+++ trunk/data/qcsrc/server/cl_physics.qc	2006-08-17 13:36:46 UTC (rev 1822)
@@ -24,12 +24,6 @@
 	if (clienttype(self) == CLIENTTYPE_BOT)
 		bot_think();
 
-	// doing this HERE because this is called for every client input frame, and
-	// client input frames update this
-	if(self.cursor_trace_ent)
-		if(self.cursor_trace_ent.classname == "player")
-			self.last_trace_player = self.cursor_trace_ent;
-
 	if (self.movetype == MOVETYPE_NONE)
 		return;
 
@@ -100,6 +94,8 @@
 	if (self.deadflag)
 		return;
 
+	UpdateSelectedPlayer();
+
 	if (!self.fixangle)
 	{
 		self.angles_x = 0;

Modified: trunk/data/qcsrc/server/cl_player.qc
===================================================================
--- trunk/data/qcsrc/server/cl_player.qc	2006-08-17 12:31:39 UTC (rev 1821)
+++ trunk/data/qcsrc/server/cl_player.qc	2006-08-17 13:36:46 UTC (rev 1822)
@@ -353,3 +353,123 @@
 	}
 }
 
+float UpdateSelectedPlayer_countvalue(float v)
+{
+	return max(0, (v - 1.0) / 0.5);
+}
+
+void UpdateSelectedPlayer()
+{
+	entity selected;
+	float selected_score;
+	selected = world;
+	selected_score = 0;
+
+	if(clienttype(self) != CLIENTTYPE_REAL)
+		return;
+
+	if(!self.cvar_cl_shownames)
+		return;
+
+	// 1. cursor trace is always right
+	if(0) // self.cursor_trace_ent && self.cursor_trace_ent.classname == "player")
+	{
+		selected = self.cursor_trace_ent;
+	}
+	else
+	{
+		makevectors(self.v_angle); // sets v_forward
+
+		// 2. if we don't have a cursor trace, find the player which is least
+		//    mis-aimed at
+		entity p;
+		for(p = find(world, classname, "player"); p; p = find(p, classname, "player"))
+		{
+			float c;
+			vector d;
+			d = p.origin - self.origin;
+
+			if(p == self)
+				continue;
+
+			// behind?
+			if(d * v_forward < 0)
+				continue;
+			
+			// misaimed?
+			if(dist_point_line(d, '0 0 0', v_forward) > 200)
+				continue;
+
+			// now find the cos of the angle...
+			c = normalize(d) * v_forward;
+
+			if(c > selected_score)
+			{
+				// oh right... can we even see him?
+				traceline(self.origin, p.origin, MOVE_NOMONSTERS, self);
+				if(trace_fraction < 1)
+					continue;
+
+				selected = p;
+				selected_score = c;
+			}
+		}
+	}
+
+	if(selected)
+	{
+		self.selected_player_display_timeout = time + self.cvar_scr_centertime;
+	}
+	else
+	{
+		if(time < self.selected_player_display_timeout)
+			selected = self.selected_player;
+	}
+
+	if(selected)
+	{
+		if(selected == self.selected_player)
+		{
+			float save;
+			save = UpdateSelectedPlayer_countvalue(self.selected_player_count);
+			self.selected_player_count = self.selected_player_count + frametime;
+			if(save != UpdateSelectedPlayer_countvalue(self.selected_player_count))
+			{
+				string namestr, healthstr;
+				if(teams_matter)
+				{
+					namestr = decolorize(selected.netname);
+					healthstr = ftos(floor(selected.health));
+					if(self.team == selected.team)
+					{
+						namestr = strcat(Team_ColorCode(selected.team), namestr, " (", healthstr, "%)");
+						self.selected_player_display_needs_update = TRUE;
+					}
+					else
+						namestr = strcat(Team_ColorCode(selected.team), namestr);
+				}
+				else
+				{
+					namestr = selected.netname;
+				}
+				centermsg_set(CENTERMSG_POINT, namestr);
+			}
+		}
+		else
+		{
+			self.selected_player = selected;
+			self.selected_player_time = time;
+			self.selected_player_count = 0;
+			self.selected_player_display_needs_update = FALSE;
+			// dprint("Selected: ", selected.netname, "\n");
+		}
+	}
+	else
+	{
+		if(self.selected_player_display_needs_update)
+		{
+			centermsg_set(CENTERMSG_POINT, "");
+			self.selected_player_display_needs_update = FALSE;
+		}
+	}
+}

Modified: trunk/data/qcsrc/server/defs.qh
===================================================================
--- trunk/data/qcsrc/server/defs.qh	2006-08-17 12:31:39 UTC (rev 1821)
+++ trunk/data/qcsrc/server/defs.qh	2006-08-17 13:36:46 UTC (rev 1822)
@@ -257,6 +257,7 @@
 .float cvar_cl_playerdetailreduction;
 .float cvar_cl_nogibs;
 .float cvar_scr_centertime;
+.float cvar_cl_shownames;
 
 #ifdef ALLOW_VARIABLE_LOD
 .float modelindex_lod0;
@@ -285,4 +286,9 @@
 float W_ItemCode(float wpn);
 string W_Name(float weaponid);
 
-.entity last_trace_player;
+void UpdateSelectedPlayer();
+.entity selected_player;
+.float selected_player_time; // when this player has been selected
+.float selected_player_count; // how long this player has been directly pointed to
+.float selected_player_display_needs_update; // are regular updates necessary? (health)
+.float selected_player_display_timeout; // when the selection will time out

Modified: trunk/data/qcsrc/server/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/server/miscfunctions.qc	2006-08-17 12:31:39 UTC (rev 1821)
+++ trunk/data/qcsrc/server/miscfunctions.qc	2006-08-17 13:36:46 UTC (rev 1822)
@@ -394,6 +394,7 @@
 	GetCvars_handleFloat(f, cvar_cl_playerdetailreduction, "cl_playerdetailreduction");
 	GetCvars_handleFloat(f, cvar_cl_nogibs, "cl_nogibs");
 	GetCvars_handleFloat(f, cvar_scr_centertime, "scr_centertime");
+	GetCvars_handleFloat(f, cvar_cl_shownames, "cl_shownames");
 }
 
 float fexists(string f)
@@ -488,3 +489,55 @@
 	else
 		return "^7";
 }
+
+string decolorize(string s)
+{
+	string out;
+	out = "";
+	while(s != "")
+	{
+		float n;
+		string ch1, ch2;
+		n = 1;
+		ch1 = substring(s, 0, 1);
+		ch2 = substring(s, 1, 2);
+		if(ch1 == "^")
+		{
+			n = 2;
+			if(ch2 == "^")
+				out = strcat(out, "^");
+			else if(ch2 == "0")
+				out = strcat(out);
+			else if(ch2 == "1")
+				out = strcat(out);
+			else if(ch2 == "2")
+				out = strcat(out);
+			else if(ch2 == "3")
+				out = strcat(out);
+			else if(ch2 == "4")
+				out = strcat(out);
+			else if(ch2 == "5")
+				out = strcat(out);
+			else if(ch2 == "6")
+				out = strcat(out);
+			else if(ch2 == "7")
+				out = strcat(out);
+			else if(ch2 == "8")
+				out = strcat(out);
+			else if(ch2 == "9")
+				out = strcat(out);
+			else
+			{
+				n = 1;
+				out = strcat(out, "^");
+			}
+			s = substring(s, n, strlen(s) - n);
+		}
+		else
+		{
+			s = substring(s, 1, strlen(s) - 1);
+			out = strcat(out, ch1);
+		}
+	}
+	return out;
+}




More information about the nexuiz-commits mailing list