diff options
| author | megamage <none@none> | 2009-01-28 20:16:11 -0600 |
|---|---|---|
| committer | megamage <none@none> | 2009-01-28 20:16:11 -0600 |
| commit | 30c5bff102bc089bcc18677352bf506ac0219111 (patch) | |
| tree | e06486f994a3b64ee6f971d495c5230e5b5ab6d4 /src/game/CreatureAI.cpp | |
| parent | 3a229014dca17012b623d5d4524ba8a5e069822f (diff) | |
*Fix critter AI.
*Some AI structure change.
--HG--
branch : trunk
Diffstat (limited to 'src/game/CreatureAI.cpp')
| -rw-r--r-- | src/game/CreatureAI.cpp | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/src/game/CreatureAI.cpp b/src/game/CreatureAI.cpp index 71046e2f154..66c9d5af0b0 100644 --- a/src/game/CreatureAI.cpp +++ b/src/game/CreatureAI.cpp @@ -27,37 +27,47 @@ CreatureAI::~CreatureAI() { } -SimpleCharmedAI::SimpleCharmedAI(Unit &u) : me(u) +void CreatureAI::EnterEvadeMode() { + if(!me) return; + + me->RemoveAllAuras(); + me->DeleteThreatList(); + me->CombatStop(); + me->LoadCreaturesAddon(); + me->SetLootRecipient(NULL); + + if(me->isAlive()) + me->GetMotionMaster()->MoveTargetedHome(); } void SimpleCharmedAI::UpdateAI(const uint32 /*diff*/) { - Creature *charmer = (Creature*)me.GetCharmer(); + 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); + 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); + charmer->Kill(me); return; } } if(!charmer->isInCombat()) - me.GetMotionMaster()->MoveFollow(charmer, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); + me->GetMotionMaster()->MoveFollow(charmer, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); - Unit *target = me.getVictim(); + Unit *target = me->getVictim(); if(!target || !charmer->canAttack(target)) { target = charmer->SelectNearestTarget(); if(!target) return; - me.GetMotionMaster()->MoveChase(target); - me.Attack(target, true); + me->GetMotionMaster()->MoveChase(target); + me->Attack(target, true); } } |
