X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fwaypointsprites.qc;h=a5817fa502addef565a946eaaa55a7bd544f60ff;hp=f78296a143aec71dc7fe05003ec8524af3f8c3a7;hb=39380aa9e45dbc545f5fe241c0002ce65a6f635e;hpb=3269042062ea093b89a0dcf097dfc9eb88cfaba5 diff --git a/qcsrc/server/waypointsprites.qc b/qcsrc/server/waypointsprites.qc index f78296a14..a5817fa50 100644 --- a/qcsrc/server/waypointsprites.qc +++ b/qcsrc/server/waypointsprites.qc @@ -127,9 +127,9 @@ void WaypointSprite_FadeOutIn(entity e, float t) void WaypointSprite_Init() { - waypointsprite_limitedrange = autocvar_g_waypointsprite_limitedrange; - waypointsprite_deployed_lifetime = autocvar_g_waypointsprite_deployed_lifetime; - waypointsprite_deadlifetime = autocvar_g_waypointsprite_deadlifetime; + waypointsprite_limitedrange = autocvar_sv_waypointsprite_limitedrange; + waypointsprite_deployed_lifetime = autocvar_sv_waypointsprite_deployed_lifetime; + waypointsprite_deadlifetime = autocvar_sv_waypointsprite_deadlifetime; } void WaypointSprite_InitClient(entity e) { @@ -197,39 +197,49 @@ float WaypointSprite_visible_for_player(entity e) { if(self.team != e.team) return FALSE; - if(e.classname != "player") + if not(IS_PLAYER(e)) return FALSE; } return TRUE; } +entity WaypointSprite_getviewentity(entity e) +{ + if(IS_SPEC(e)) + e = e.enemy; + /* TODO idea (check this breaks nothing) + else if(e.classname == "observer") + e = world; + */ + return e; +} + +float WaypointSprite_isteammate(entity e, entity e2) +{ + if(teamplay) + { + if(e2.team != e.team) + return FALSE; + } + else + { + if(e2 != e) + return FALSE; + } + return TRUE; +} + float WaypointSprite_Customize() { // this is not in SendEntity because it shall run every frame, not just every update // make spectators see what the player would see entity e; - e = other; - if(e.classname == "spectator") - e = e.enemy; + e = WaypointSprite_getviewentity(other); - // as a GENERAL rule: - // if you have the invisibility powerup, sprites ALWAYS are restricted to your team - // but only apply this to real players, not to spectators - if(g_minstagib && (self.owner.items & IT_STRENGTH) && (e == other)) - { - if(teamplay) - { - if(self.owner.team != e.team) - return FALSE; - } - else - { - if(self.owner != e) - return FALSE; - } - } + if(MUTATOR_CALLHOOK(CustomizeWaypoint)) + return FALSE; return self.waypointsprite_visible_for_player(e); } @@ -243,7 +253,7 @@ float WaypointSprite_SendEntity(entity to, float sendflags) sendflags = sendflags & 0x7F; if(g_nexball) - sendflags &~= 0x80; + sendflags &= ~0x80; else if(self.max_health || (self.pain_finished && (time < self.pain_finished + 0.25))) sendflags |= 0x80; @@ -307,12 +317,17 @@ float WaypointSprite_SendEntity(entity to, float sendflags) WriteByte(MSG_ENTITY, self.colormod_y * 255.0); WriteByte(MSG_ENTITY, self.colormod_z * 255.0); - dt = (self.waypointsprite_helpmetime - time) / 0.1; - if(dt < 0 || (teamplay && self.owner && self.owner.team != to.team)) // don't tell enemies about "HELP ME" (FIXME clean this up to handle spectating/observing well too) - dt = 0; - if(dt > 255) - dt = 255; - WriteByte(MSG_ENTITY, dt); + if(WaypointSprite_isteammate(self.owner, WaypointSprite_getviewentity(to))) + { + dt = (self.waypointsprite_helpmetime - time) / 0.1; + if(dt < 0) + dt = 0; + if(dt > 255) + dt = 255; + WriteByte(MSG_ENTITY, dt); + } + else + WriteByte(MSG_ENTITY, 0); } return TRUE;