From bc64a7cd9f253f0831cf1f6d4223a8e6981ec611 Mon Sep 17 00:00:00 2001 From: Mario Date: Sat, 2 Mar 2013 03:50:28 +1100 Subject: [PATCH] Remove need to define FindTarget in monster defs file --- qcsrc/server/monsters/lib/defs.qh | 2 - qcsrc/server/monsters/lib/monsters.qc | 94 ++++++++++++--------------- 2 files changed, 41 insertions(+), 55 deletions(-) diff --git a/qcsrc/server/monsters/lib/defs.qh b/qcsrc/server/monsters/lib/defs.qh index ea72ad9ae..a795bab7d 100644 --- a/qcsrc/server/monsters/lib/defs.qh +++ b/qcsrc/server/monsters/lib/defs.qh @@ -4,8 +4,6 @@ .float() attack_ranged; .float() checkattack; -entity(entity ent) FindTarget; - .float spawner_monstercount; .float monster_respawned; // used to make sure we're not recounting respawned monster stats diff --git a/qcsrc/server/monsters/lib/monsters.qc b/qcsrc/server/monsters/lib/monsters.qc index 5a24762b3..330349eb6 100644 --- a/qcsrc/server/monsters/lib/monsters.qc +++ b/qcsrc/server/monsters/lib/monsters.qc @@ -110,6 +110,47 @@ float monster_isvalidtarget (entity targ, entity ent, float neutral) return TRUE; } +float enemy_stillvalidtarget(entity targ, entity e) +{ + if(targ.health < 1 || targ.deadflag) + return FALSE; // let's not keep hurting a corpse + + if not(autocvar_g_monsters_typefrag) + if(targ.BUTTON_CHAT) + return FALSE; // no typefrags! + + if(vlen(targ.origin - e.origin) > e.target_range) + return FALSE; // out of our reach + + if not(targ.takedamage) + return FALSE; // can't hurt it + + if(targ.flags & FL_NOTARGET) + return FALSE; // can't target it + + if(targ.items & IT_INVISIBILITY) + return FALSE; // currently not used + + if(!IsDifferentTeam(targ, e)) + return FALSE; + + return TRUE; // all is good, keep going! +} + +entity FindTarget (entity ent) +{ + if(MUTATOR_CALLHOOK(MonsterFindTarget)) { return ent.enemy; } // Handled by a mutator + local entity e; + for(e = world; (e = findflags(e, monster_attack, TRUE)); ) + { + if(monster_isvalidtarget(e, ent, FALSE)) + { + return e; + } + } + return world; +} + void MonsterTouch () { if(other == world) @@ -135,9 +176,6 @@ void monster_melee (entity targ, float damg, float er, float deathtype) bigdmg = rdmg * self.scale; - if(random() < 0.01) // critical hit ftw - bigdmg = 200; - Damage(targ, self, self, bigdmg * monster_skill, deathtype, targ.origin, normalize(targ.origin - self.origin)); } @@ -339,33 +377,6 @@ float trace_path(vector from, vector to) return ((trace1 < trace_fraction) ? trace1 : trace_fraction); } -float enemy_stillvalidtarget(entity targ, entity e) -{ - if(targ.health < 1 || targ.deadflag) - return FALSE; // let's not keep hurting a corpse - - if not(autocvar_g_monsters_typefrag) - if(targ.BUTTON_CHAT) - return FALSE; // no typefrags! - - if(vlen(targ.origin - e.origin) > e.target_range) - return FALSE; // out of our reach - - if not(targ.takedamage) - return FALSE; // can't hurt it - - if(targ.flags & FL_NOTARGET) - return FALSE; // can't target it - - if(targ.items & IT_INVISIBILITY) - return FALSE; // currently not used - - if(!IsDifferentTeam(targ, e)) - return FALSE; - - return TRUE; // all is good, keep going! -} - vector monster_pickmovetarget(entity targ) { // enemy is always preferred target @@ -557,15 +568,6 @@ void monsters_setstatus() self.stat_monsters_killed = monsters_killed; } - -/* -=================== - -Monster spawn code - -=================== -*/ - void Monster_Appear () { self.enemy = activator; @@ -573,20 +575,6 @@ void Monster_Appear () self.monster_spawnfunc(); } -entity FindTarget (entity ent) -{ - if(MUTATOR_CALLHOOK(MonsterFindTarget)) { return ent.enemy; } // Handled by a mutator - local entity e; - for(e = world; (e = findflags(e, monster_attack, TRUE)); ) - { - if(monster_isvalidtarget(e, ent, FALSE)) - { - return e; - } - } - return world; -} - void monsters_damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force) { if(self.frozen) -- 2.39.2