]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/turrets/sv_turrets.qc
Merge branch 'master' into Mario/turrets
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / turrets / sv_turrets.qc
index 21ebc96fddee7f823c23c9429fcbf57a07f37e8d..91d427fd80342a82d4f0a8c32e8e78c03e7b14b0 100644 (file)
@@ -1,7 +1,5 @@
-// =========================
-//  SVQC Turret Properties
-// =========================
-
+#ifdef SVQC
+#include "../../server/autocvars.qh"
 
 // Generic aiming
 vector turret_aim_generic()
@@ -166,7 +164,6 @@ float turret_targetscore_generic(entity _turret, entity _target)
 }
 
 // Generic damage handling
-void() turret_respawn;
 void turret_hide()
 {
        self.effects   |= EF_NODRAW;
@@ -211,7 +208,7 @@ void turret_die()
 
 void turret_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector vforce)
 {
-       // Enougth allready!
+       // Enough already!
        if(self.deadflag == DEAD_DEAD)
                return;
 
@@ -219,13 +216,8 @@ void turret_damage (entity inflictor, entity attacker, float damage, float death
        if(!self.active)
                return;
 
-       if (teamplay)
-       if (self.team == attacker.team)
+       if(SAME_TEAM(self, attacker))
        {
-               // This does not happen anymore. Re-enable if you fix that.
-               if(IS_REAL_CLIENT(attacker))
-                       sprint(attacker, "\{1}Turret tells you: I'm on your team!\n");
-
                if(autocvar_g_friendlyfire)
                        damage = damage * autocvar_g_friendlyfire;
                else
@@ -363,7 +355,7 @@ float turret_send(entity to, float sf)
                        WriteByte(MSG_ENTITY, ceil((self.health / self.max_health) * 255));
        }
 
-       return TRUE;
+       return true;
 }
 
 void load_unit_settings(entity ent, string unitname, float is_reload)
@@ -437,11 +429,11 @@ void turret_projectile_explode()
        self.event_damage = func_null;
 #ifdef TURRET_DEBUG
        float d;
-       d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, self, self.owner.shot_force, self.totalfrags, world);
+       d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, self, world, self.owner.shot_force, self.totalfrags, world);
        self.owner.tur_debug_dmg_t_h = self.owner.tur_debug_dmg_t_h + d;
        self.owner.tur_debug_dmg_t_f = self.owner.tur_debug_dmg_t_f + self.owner.shot_dmg;
 #else
-       RadiusDamage (self, self.realowner, self.owner.shot_dmg, 0, self.owner.shot_radius, self, self.owner.shot_force, self.totalfrags, world);
+       RadiusDamage (self, self.realowner, self.owner.shot_dmg, 0, self.owner.shot_radius, self, world, self.owner.shot_force, self.totalfrags, world);
 #endif
        remove(self);
 }
@@ -471,7 +463,7 @@ entity turret_projectile(string _snd, float _size, float _health, float _death,
        setsize(proj, '-0.5 -0.5 -0.5' * _size, '0.5 0.5 0.5' * _size);
        proj.owner                = self;
        proj.realowner    = self;
-       proj.bot_dodge    = TRUE;
+       proj.bot_dodge    = true;
        proj.bot_dodgerating = self.shot_dmg;
        proj.think                = turret_projectile_explode;
        proj.touch                = turret_projectile_touch;
@@ -701,14 +693,17 @@ float turret_validate_target(entity e_turret, entity e_target, float validate_fl
        //if(!validate_flags & TFL_TARGETSELECT_NOBUILTIN)
        //      return -0.5;
 
+       if(!e_target)
+               return -2;
+
        if(e_target.owner == e_turret)
                return -0.5;
 
        if(!checkpvs(e_target.origin, e_turret))
                return -1;
 
-       if(!e_target)
-               return -2;
+       if(e_target.alpha <= 0.3)
+               return -1;
 
        if(g_onslaught)
                if (substring(e_target.classname, 0, 10) == "onslaught_") // don't attack onslaught targets, that's the player's job!
@@ -729,7 +724,7 @@ float turret_validate_target(entity e_turret, entity e_target, float validate_fl
        }
        else if (e_target.health <= 0)
                return -6;
-       else if(e_target.freezetag_frozen > 0)
+       else if(e_target.frozen > 0)
                return -6;
 
        // player
@@ -1195,7 +1190,7 @@ void turret_use()
 
 void turret_link()
 {
-       Net_LinkEntity(self, TRUE, 0, turret_send);
+       Net_LinkEntity(self, true, 0, turret_send);
        self.think       = turret_think;
        self.nextthink = time;
        self.tur_head.effects = EF_NODRAW;
@@ -1226,12 +1221,14 @@ void turrets_manager_think()
 float turret_initialize(float tur_id)
 {
        if(!autocvar_g_turrets)
-               return FALSE;
+               return false;
 
        entity e;
        entity tur = get_turretinfo(tur_id);
        if(tur.turretid == 0)
-               return FALSE; // invalid turret
+               return false; // invalid turret
+
+       if(!self.tur_head) { TUR_ACTION(tur_id, TR_PRECACHE); } // if tur_head exists, we can assume this turret re-spawned
 
        e = find(world, classname, "turret_manager");
        if(!e)
@@ -1340,7 +1337,7 @@ float turret_initialize(float tur_id)
        self.turret_firecheckfunc       = turret_firecheck;
        self.event_damage                       = turret_damage;
        self.use                                        = turret_use;
-       self.bot_attack                         = TRUE;
+       self.bot_attack                         = true;
        self.nextthink                          = time + 1;
        self.nextthink                     += turret_count * sys_frametime;
        
@@ -1390,7 +1387,8 @@ float turret_initialize(float tur_id)
        TUR_ACTION(tur_id, TR_SETUP);
        
        if(MUTATOR_CALLHOOK(TurretSpawn))
-               return FALSE;
+               return false;
 
-       return TRUE;
+       return true;
 }
+#endif