Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
GuardAI.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#include "CreatureAIImpl.h"
7#include "Errors.h"
8#include "GuardAI.h"
9#include "ObjectAccessor.h"
10#include "Player.h"
11#include "World.h"
12
13int GuardAI::Permissible(Creature const* creature)
14{
15 if (creature->IsGuard())
17
18 return PERMIT_BASE_NO;
19}
20
21GuardAI::GuardAI(Creature* creature) : ScriptedAI(creature) { }
22
24{
25 if (!obj->isType(TYPEMASK_UNIT))
26 return false;
27
28 ThreatContainer::StorageType threatList = me->getThreatManager().getThreatList();
29 for (ThreatContainer::StorageType::const_iterator itr = threatList.begin(); itr != threatList.end(); ++itr)
30 if ((*itr)->getUnitGuid() == obj->GetGUID())
31 return true;
32
33 return false;
34}
35
37{
38 if (!me->IsAlive())
39 {
40 me->GetMotionMaster()->MoveIdle();
41 me->CombatStop(true);
42 me->DeleteThreatList();
43 return;
44 }
45
46 SF_LOG_DEBUG("entities.unit", "Guard entry: %u enters evade mode.", me->GetEntry());
47
48 me->RemoveAllAuras();
49 me->DeleteThreatList();
50 me->CombatStop(true);
51
52 // Remove ChaseMovementGenerator from MotionMaster stack list, and add HomeMovementGenerator instead
53 if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE)
54 me->GetMotionMaster()->MoveTargetedHome();
55}
56
58{
59 if (Player* player = killer->GetCharmerOrOwnerPlayerOrPlayerItself())
60 me->SendZoneUnderAttackMessage(player);
61}
@ PERMIT_BASE_SPECIAL
Definition CreatureAI.h:185
@ PERMIT_BASE_NO
Definition CreatureAI.h:180
#define SF_LOG_DEBUG(filterType__,...)
Definition Log.h:134
@ CHASE_MOTION_TYPE
@ TYPEMASK_UNIT
Definition Object.h:40
bool IsGuard() const
Definition Creature.h:455
bool CanSeeAlways(WorldObject const *obj) OVERRIDE
Definition GuardAI.cpp:23
void JustDied(Unit *killer) OVERRIDE
Definition GuardAI.cpp:57
static int Permissible(Creature const *creature)
Definition GuardAI.cpp:13
GuardAI(Creature *creature)
Definition GuardAI.cpp:21
void EnterEvadeMode() OVERRIDE
Definition GuardAI.cpp:36
uint64 GetGUID() const
Definition Object.h:119
bool isType(uint16 mask) const
Definition Object.h:132
std::list< HostileReference * > StorageType
Definition Unit.h:1367
Player * GetCharmerOrOwnerPlayerOrPlayerItself() const
Definition Unit.cpp:2355
Creature * me
ScriptedAI(Creature *creature)