diff options
author | Spp <spp@jorge.gr> | 2013-01-02 14:20:20 +0100 |
---|---|---|
committer | Spp <spp@jorge.gr> | 2013-01-02 14:20:20 +0100 |
commit | 601fcc5612a3788b3f22f98c89809235d0b725a7 (patch) | |
tree | bcd069b5c670e209c1372595acd14c7e376cee7a /src/server/game/AI/CreatureAI.cpp | |
parent | ebd14b4f01cc64a2a488bdbb1046897cc4da8e9a (diff) |
Core/Misc: Removed odd code from CreatureAIImpl.h, it does not belong here
- Also some minor corrections from previous commit
Diffstat (limited to 'src/server/game/AI/CreatureAI.cpp')
-rw-r--r-- | src/server/game/AI/CreatureAI.cpp | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp index 8491a055516..427818fe571 100644 --- a/src/server/game/AI/CreatureAI.cpp +++ b/src/server/game/AI/CreatureAI.cpp @@ -174,3 +174,91 @@ void CreatureAI::EnterEvadeMode() if (!me->getVictim()) AttackStart(attacker); }*/ + +void CreatureAI::SetGazeOn(Unit* target) +{ + if (me->IsValidAttackTarget(target)) + { + AttackStart(target); + me->SetReactState(REACT_PASSIVE); + } +} + +bool CreatureAI::UpdateVictimWithGaze() +{ + if (!me->isInCombat()) + return false; + + if (me->HasReactState(REACT_PASSIVE)) + { + if (me->getVictim()) + return true; + else + me->SetReactState(REACT_AGGRESSIVE); + } + + if (Unit* victim = me->SelectVictim()) + AttackStart(victim); + return me->getVictim(); +} + +bool CreatureAI::UpdateVictim() +{ + if (!me->isInCombat()) + return false; + + if (!me->HasReactState(REACT_PASSIVE)) + { + if (Unit* victim = me->SelectVictim()) + AttackStart(victim); + return me->getVictim(); + } + else if (me->getThreatManager().isThreatListEmpty()) + { + EnterEvadeMode(); + return false; + } + + return true; +} + +bool CreatureAI::_EnterEvadeMode() +{ + if (!me->isAlive()) + return false; + + // dont remove vehicle auras, passengers arent supposed to drop off the vehicle + me->RemoveAllAurasExceptType(SPELL_AURA_CONTROL_VEHICLE); + + // sometimes bosses stuck in combat? + me->DeleteThreatList(); + me->CombatStop(true); + me->LoadCreaturesAddon(); + me->SetLootRecipient(NULL); + me->ResetPlayerDamageReq(); + + if (me->IsInEvadeMode()) + return false; + + return true; +} + +Creature* CreatureAI::DoSummon(uint32 entry, const Position& pos, uint32 despawnTime, TempSummonType summonType) +{ + return me->SummonCreature(entry, pos, summonType, despawnTime); +} + +Creature* CreatureAI::DoSummon(uint32 entry, WorldObject* obj, float radius, uint32 despawnTime, TempSummonType summonType) +{ + Position pos; + obj->GetRandomNearPosition(pos, radius); + return me->SummonCreature(entry, pos, summonType, despawnTime); +} + +Creature* CreatureAI::DoSummonFlyer(uint32 entry, WorldObject* obj, float flightZ, float radius, uint32 despawnTime, TempSummonType summonType) +{ + Position pos; + obj->GetRandomNearPosition(pos, radius); + pos.m_positionZ += flightZ; + return me->SummonCreature(entry, pos, summonType, despawnTime); +} |