aboutsummaryrefslogtreecommitdiff
path: root/src/game/CreatureAI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/CreatureAI.cpp')
-rw-r--r--src/game/CreatureAI.cpp26
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);
}
}