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