X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fwaypointsprites.qc;h=736cc564cc4c81bffaae6096cddc11b46c8ac867;hb=e0ac5f9f14e169a1e19d0e36b85cab061a74ed93;hp=b5b6a0beb377bf3b26922c8431c02e5af172ac5d;hpb=e272bb5918f084daadf92e7f90f0cab46e4bda31;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/waypointsprites.qc b/qcsrc/server/waypointsprites.qc index b5b6a0beb..736cc564c 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) { @@ -189,47 +189,57 @@ float WaypointSprite_visible_for_player(entity e) { // personal waypoints if(self.enemy) - if(self.enemy != other) + if(self.enemy != e) return FALSE; // team waypoints if(self.team && self.rule == SPRITERULE_DEFAULT) { - if(self.team != other.team) + if(self.team != e.team) return FALSE; - if(other.classname != "player") + if (!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); } @@ -241,9 +251,9 @@ float WaypointSprite_SendEntity(entity to, float sendflags) WriteByte(MSG_ENTITY, ENT_CLIENT_WAYPOINT); 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) - 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; @@ -447,8 +462,8 @@ entity WaypointSprite_AttachCarrier( e = WaypointSprite_Spawn(spr, 0, 0, carrier, '0 0 64', world, carrier.team, carrier, waypointsprite_attachedforcarrier, FALSE, icon, rgb); if(e) { - WaypointSprite_UpdateMaxHealth(e, '1 0 0' * healtharmor_maxdamage(start_health, start_armorvalue, autocvar_g_balance_armor_blockpercent) * 2); - WaypointSprite_UpdateHealth(e, '1 0 0' * healtharmor_maxdamage(carrier.health, carrier.armorvalue, autocvar_g_balance_armor_blockpercent)); + WaypointSprite_UpdateMaxHealth(e, '1 0 0' * healtharmor_maxdamage(start_health, start_armorvalue, autocvar_g_balance_armor_blockpercent, DEATH_WEAPON) * 2); + WaypointSprite_UpdateHealth(e, '1 0 0' * healtharmor_maxdamage(carrier.health, carrier.armorvalue, autocvar_g_balance_armor_blockpercent, DEATH_WEAPON)); } return e; }