]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/waypointsprites.qc
Merge branch 'master' into Mario/ons_updates
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / waypointsprites.qc
index 5ba24b448e47985dcee506a13e63ec8adeb7c908..4a4d9864317dc8c643d0ce66804d638420333c07 100644 (file)
@@ -1,10 +1,19 @@
-..entity owned_by_field;
-.float rule;
-.string model1;
-.string model2;
-.string model3;
-
-.float(entity) waypointsprite_visible_for_player;
+#include "waypointsprites.qh"
+
+#if defined(CSQC)
+#elif defined(MENUQC)
+#elif defined(SVQC)
+    #include "../common/constants.qh"
+    #include "../common/util.qh"
+    #include "../common/buffs.qh"
+    #include "autocvars.qh"
+    #include "constants.qh"
+    #include "defs.qh"
+    #include "../common/deathtypes.qh"
+    #include "mutators/mutators_include.qh"
+    #include "../common/mapinfo.qh"
+    #include "miscfunctions.qh"
+#endif
 
 void WaypointSprite_UpdateSprites(entity e, string m1, string m2, string m3)
 {
@@ -81,8 +90,6 @@ void WaypointSprite_UpdateTeamRadar(entity e, float icon, vector col)
        e.SendFlags |= 32;
 }
 
-.float waypointsprite_pingtime;
-.float waypointsprite_helpmetime;
 void WaypointSprite_Ping(entity e)
 {
        // anti spam
@@ -94,8 +101,6 @@ void WaypointSprite_Ping(entity e)
        e.SendFlags |= 32;
 }
 
-float waypointsprite_limitedrange, waypointsprite_deployed_lifetime, waypointsprite_deadlifetime;
-
 void WaypointSprite_HelpMePing(entity e)
 {
        WaypointSprite_Ping(e);
@@ -131,6 +136,7 @@ void WaypointSprite_Init()
        waypointsprite_deployed_lifetime = autocvar_sv_waypointsprite_deployed_lifetime;
        waypointsprite_deadlifetime = autocvar_sv_waypointsprite_deadlifetime;
 }
+
 void WaypointSprite_InitClient(entity e)
 {
 }
@@ -193,7 +199,14 @@ float WaypointSprite_visible_for_player(entity e)
                        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;
@@ -235,10 +248,9 @@ 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 = 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);
@@ -301,12 +313,27 @@ float WaypointSprite_SendEntity(entity to, float sendflags)
                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);
        }
 
@@ -343,7 +370,7 @@ void WaypointSprite_Reset()
 
 entity WaypointSprite_Spawn(
        string spr, // sprite
-       float lifetime, float maxdistance, // lifetime, max distance
+       float _lifetime, float maxdistance, // lifetime, max distance
        entity ref, vector ofs, // position
        entity showto, float t, // show to whom? Use a flag to indicate a team
        entity own, .entity ownfield, // remove when own gets killed
@@ -354,8 +381,8 @@ entity WaypointSprite_Spawn(
        entity wp;
        wp = spawn();
        wp.classname = "sprite_waypoint";
-       wp.teleport_time = time + lifetime;
-       wp.fade_time = lifetime;
+       wp.teleport_time = time + _lifetime;
+       wp.fade_time = _lifetime;
        wp.exteriormodeltoclient = ref;
        if(ref)
        {
@@ -368,11 +395,11 @@ entity WaypointSprite_Spawn(
        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;
@@ -399,7 +426,6 @@ entity WaypointSprite_SpawnFixed(
        return WaypointSprite_Spawn(spr, 0, 0, world, ofs, world, 0, own, ownfield, true, icon, rgb);
 }
 
-.entity waypointsprite_deployed_fixed;
 entity WaypointSprite_DeployFixed(
        string spr,
        float limited_range,
@@ -419,7 +445,6 @@ entity WaypointSprite_DeployFixed(
        return WaypointSprite_Spawn(spr, waypointsprite_deployed_lifetime, maxdistance, world, ofs, world, t, self, waypointsprite_deployed_fixed, false, icon, rgb);
 }
 
-.entity waypointsprite_deployed_personal;
 entity WaypointSprite_DeployPersonal(
        string spr,
        vector ofs,
@@ -429,8 +454,6 @@ entity WaypointSprite_DeployPersonal(
        return WaypointSprite_Spawn(spr, 0, 0, world, ofs, world, 0, self, waypointsprite_deployed_personal, false, icon, rgb);
 }
 
-.entity waypointsprite_attached;
-.entity waypointsprite_attachedforcarrier;
 entity WaypointSprite_Attach(
        string spr,
        float limited_range,