]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/server/monsters/lib/monsters.qc
Remove distance check in attack code (enemy is lost at that distance anyway)
[xonotic/xonotic-data.pk3dir.git] / qcsrc / server / monsters / lib / monsters.qc
index 9ce62c9c496ebcf5e0c421d00ad81da32bbf7aef..7e05788494ac3020372f0bb9f1c586516b398b37 100644 (file)
@@ -2,7 +2,7 @@
 
 void M_Item_Touch ()
 {
-       if(self && other.classname == STR_PLAYER && other.deadflag == DEAD_NO)
+       if(self && IS_PLAYER(other) && other.deadflag == DEAD_NO)
        {
                Item_Touch();
                self.think = SUB_Remove;
@@ -60,7 +60,7 @@ void Monster_DropItem (string itype, string itemsize)
        self = oldself;
 }
 
-float monster_isvalidtarget (entity targ, entity ent, float neutral)
+float monster_isvalidtarget (entity targ, entity ent)
 {
        if(!targ || !ent)
                return FALSE; // this check should fix a crash
@@ -79,16 +79,13 @@ float monster_isvalidtarget (entity targ, entity ent, float neutral)
        if(trace_ent != targ)
                return FALSE; // we can't see the enemy
                
-       if(neutral == TRUE)
-               return TRUE; // we come in peace!
-               
        if(targ.takedamage == DAMAGE_NO)
                return FALSE; // enemy can't be damaged
                
        if(targ.items & IT_INVISIBILITY)
                return FALSE; // enemy is invisible
        
-       if(targ.classname == STR_SPECTATOR || targ.classname == STR_OBSERVER)
+       if(IS_SPEC(targ) || IS_OBSERVER(targ))
                return FALSE; // enemy is a spectator
        
        if(targ.deadflag != DEAD_NO || ent.deadflag != DEAD_NO || targ.health <= 0 || ent.health <= 0)
@@ -143,7 +140,7 @@ entity FindTarget (entity ent)
        local entity e;
        for(e = world; (e = findflags(e, monster_attack, TRUE)); ) 
        {
-               if(monster_isvalidtarget(e, ent, FALSE))
+               if(monster_isvalidtarget(e, ent))
                {
                        return e;
                }
@@ -158,7 +155,7 @@ void MonsterTouch ()
                
        if(self.enemy != other)
        if not(other.flags & FL_MONSTER)
-       if(monster_isvalidtarget(other, self, FALSE))
+       if(monster_isvalidtarget(other, self))
                self.enemy = other;
 }
 
@@ -353,12 +350,9 @@ float GenericCheckAttack ()
        
        if (time < self.attack_finished_single)
                return FALSE;
-       
-       if (enemy_range() > 2000) // long traces are slow
-               return FALSE;   
                
        if(self.attack_melee)
-       if(enemy_range() <= 100 * self.scale)
+       if(vlen(self.enemy.origin - self.origin) <= 100 * self.scale)
        {
                monster_sound(self.msound_attack_melee, 0, FALSE); // no delay for attack sounds
                self.attack_melee(); // don't wait for nextthink - too slow
@@ -389,7 +383,7 @@ void monster_use ()
        if (self.health <= 0)
                return;
 
-       if(!monster_isvalidtarget(activator, self, -1))
+       if(!monster_isvalidtarget(activator, self))
                return;
 
        self.enemy = activator;
@@ -627,7 +621,7 @@ void monsters_damage (entity inflictor, entity attacker, float damage, float dea
                return;
                
        if((ignore_turrets && !(attacker.turrcaps_flags & TFL_TURRCAPS_ISTURRET)) || !ignore_turrets)
-       if(monster_isvalidtarget(attacker, self, FALSE))
+       if(monster_isvalidtarget(attacker, self))
                self.enemy = attacker;
        
        self.health -= damage;
@@ -693,7 +687,7 @@ void monster_hook_death()
        if(self.realowner.classname == "monster_spawner")
                self.realowner.spawner_monstercount -= 1;
                
-       if(self.realowner.flags & FL_CLIENT)
+       if(IS_CLIENT(self.realowner))
                self.realowner.monstercount -= 1;
                
        totalspawned -= 1;
@@ -757,7 +751,7 @@ float monster_initialize(string  net_name,
 
        if(self.netname == "")
        {
-               if(net_name != "" && self.realowner.classname == STR_PLAYER)
+               if(net_name != "" && IS_PLAYER(self.realowner))
                        net_name = strzone(strdecolorize(sprintf("%s's %s", self.realowner.netname, net_name)));
                self.netname = ((net_name == "") ? self.classname : net_name);
        }