diff options
author | megamage <none@none> | 2009-01-09 16:43:23 -0600 |
---|---|---|
committer | megamage <none@none> | 2009-01-09 16:43:23 -0600 |
commit | 1ffb1cef3344206dfea149cb78146c30449d51c2 (patch) | |
tree | 655ac591f6f5aaca3dc65d67f3940f589e2394db /src/game/CreatureAI.cpp | |
parent | 5c8f52d134899e10484dd47e91b612e2228842bf (diff) | |
parent | 90a82a81ad5d20d5e7188d6e9d660280f0b1eab4 (diff) |
*Merge.
--HG--
branch : trunk
Diffstat (limited to 'src/game/CreatureAI.cpp')
-rw-r--r-- | src/game/CreatureAI.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/game/CreatureAI.cpp b/src/game/CreatureAI.cpp index ad663d13b38..71046e2f154 100644 --- a/src/game/CreatureAI.cpp +++ b/src/game/CreatureAI.cpp @@ -19,7 +19,45 @@ */ #include "CreatureAI.h" +#include "Creature.h" +#include "Pet.h" +#include "SpellAuras.h" CreatureAI::~CreatureAI() { } + +SimpleCharmedAI::SimpleCharmedAI(Unit &u) : me(u) +{ +} + +void SimpleCharmedAI::UpdateAI(const uint32 /*diff*/) +{ + Creature *charmer = (Creature*)me.GetCharmer(); + + //kill self if charm aura has infinite duration + if(charmer->IsInEvadeMode()) + { + Unit::AuraList const& auras = me.GetAurasByType(SPELL_AURA_MOD_CHARM); + for(Unit::AuraList::const_iterator iter = auras.begin(); iter != auras.end(); ++iter) + if((*iter)->GetCasterGUID() == charmer->GetGUID() && (*iter)->IsPermanent()) + { + charmer->Kill(&me); + return; + } + } + + if(!charmer->isInCombat()) + me.GetMotionMaster()->MoveFollow(charmer, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); + + Unit *target = me.getVictim(); + if(!target || !charmer->canAttack(target)) + { + target = charmer->SelectNearestTarget(); + if(!target) + return; + + me.GetMotionMaster()->MoveChase(target); + me.Attack(target, true); + } +} |