return false;
// team waypoints
- if(self.team && self.rule == SPRITERULE_DEFAULT)
+ if(self.rule == SPRITERULE_SPECTATOR)
+ {
+ if(!autocvar_sv_itemstime)
+ return FALSE;
+ if(!warmup_stage && e.classname == "player")
+ return FALSE;
+ }
+ else if(self.team && self.rule == SPRITERULE_DEFAULT)
{
if(self.team != e.team)
return false;
// 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 = WaypointSprite_getviewentity(other);
+ entity e = WaypointSprite_getviewentity(other);
- if(MUTATOR_CALLHOOK(CustomizeWaypoint))
+ if(MUTATOR_CALLHOOK(CustomizeWaypoint, self, other))
return false;
return self.waypointsprite_visible_for_player(e);
WriteCoord(MSG_ENTITY, self.fade_time);
WriteCoord(MSG_ENTITY, self.teleport_time);
WriteShort(MSG_ENTITY, self.fade_rate); // maxdist
- float f;
- f = 0;
+ float f = 0;
if(self.currentammo)
f |= 1; // hideable
if(self.exteriormodeltoclient == to)
f |= 2; // my own
+ if(g_onslaught)
+ {
+ if(self.owner.classname == "onslaught_controlpoint")
+ {
+ entity wp_owner = self.owner;
+ entity e = WaypointSprite_getviewentity(to);
+ if(SAME_TEAM(e, wp_owner) && wp_owner.goalentity.health >= wp_owner.goalentity.max_health) { f |= 2; }
+ if(!ons_ControlPoint_Attackable(wp_owner, e.team)) { f |= 2; }
+ }
+ if(self.owner.classname == "onslaught_generator")
+ {
+ entity wp_owner = self.owner;
+ if(wp_owner.isshielded && wp_owner.health >= wp_owner.max_health) { f |= 2; }
+ if(wp_owner.health <= 0) { f |= 2; }
+ }
+ }
WriteByte(MSG_ENTITY, f);
}
wp.team = t;
wp.owner = own;
wp.currentammo = hideable;
- if(own)
+ if (own)
{
- if(own.ownfield)
- remove(own.ownfield);
- own.ownfield = wp;
+ if (own.(ownfield))
+ remove(own.(ownfield));
+ own.(ownfield) = wp;
wp.owned_by_field = ownfield;
}
wp.fade_rate = maxdistance;