TrinityCore
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
boss_four_horsemen::boss_four_horsemenAI Struct Reference

Public Member Functions

 boss_four_horsemenAI (Creature *creature)
 
void Initialize ()
 
void Reset () override
 
bool DoEncounteraction (Unit *who, bool attack, bool reset, bool checkAllDead)
 
void BeginFourHorsemenMovement ()
 
void MovementInform (uint32 type, uint32 point) override
 
void SelectNearestTarget (Unit *who)
 
void MoveInLineOfSight (Unit *who) override
 
void AttackStart (Unit *who) override
 
void KilledUnit (Unit *) override
 
void JustDied (Unit *) override
 
void EnterCombat (Unit *) override
 
void UpdateAI (uint32 diff) override
 
- Public Member Functions inherited from BossAI
 BossAI (Creature *creature, uint32 bossId)
 
virtual ~BossAI ()
 
void JustSummoned (Creature *summon) override
 
void SummonedCreatureDespawn (Creature *summon) override
 
virtual void ExecuteEvent (uint32)
 
virtual void ScheduleTasks ()
 
void JustReachedHome () override
 
bool CanAIAttack (Unit const *target) const override
 
- Public Member Functions inherited from ScriptedAI
 ScriptedAI (Creature *creature)
 
virtual ~ScriptedAI ()
 
void AttackStartNoMove (Unit *target)
 
void DamageTaken (Unit *, uint32 &) override
 
void SpellHit (Unit *, SpellInfo const *) override
 
void SpellHitTarget (Unit *, SpellInfo const *) override
 
void OnPossess (bool)
 
void DoStartMovement (Unit *target, float distance=0.0f, float angle=0.0f)
 
void DoStartNoMovement (Unit *target)
 
void DoStopAttack ()
 
void DoCastSpell (Unit *target, SpellInfo const *spellInfo, bool triggered=false)
 
void DoPlaySoundToSet (WorldObject *source, uint32 soundId)
 
void DoResetThreat ()
 
float DoGetThreat (Unit *unit)
 
void DoModifyThreatPercent (Unit *unit, int32 pct)
 
void DoTeleportTo (float x, float y, float z, uint32 time=0)
 
void DoTeleportTo (float const pos[4])
 
void DoTeleportPlayer (Unit *unit, float x, float y, float z, float o)
 
void DoTeleportAll (float x, float y, float z, float o)
 
UnitDoSelectLowestHpFriendly (float range, uint32 minHPDiff=1)
 
std::list< Creature * > DoFindFriendlyCC (float range)
 
std::list< Creature * > DoFindFriendlyMissingBuff (float range, uint32 spellId)
 
PlayerGetPlayerAtMinimumRange (float minRange)
 
CreatureDoSpawnCreature (uint32 entry, float offsetX, float offsetY, float offsetZ, float angle, uint32 type, uint32 despawntime)
 
bool HealthBelowPct (uint32 pct) const
 
bool HealthAbovePct (uint32 pct) const
 
SpellInfo constSelectSpell (Unit *target, uint32 school, uint32 mechanic, SelectTargetType targets, float rangeMin, float rangeMax, SelectEffect effect)
 
void SetEquipmentSlots (bool loadDefault, int32 mainHand=EQUIP_NO_CHANGE, int32 offHand=EQUIP_NO_CHANGE, int32 ranged=EQUIP_NO_CHANGE)
 
void SetCombatMovement (bool allowMovement)
 
bool IsCombatMovementAllowed () const
 
bool IsHeroic () const
 
Difficulty GetDifficulty () const
 
bool Is25ManRaid () const
 
template<class T >
const T & DUNGEON_MODE (const T &normal5, const T &heroic10) const
 
template<class T >
const T & RAID_MODE (const T &normal10, const T &normal25) const
 
template<class T >
const T & RAID_MODE (const T &normal10, const T &normal25, const T &heroic10, const T &heroic25) const
 
- Public Member Functions inherited from CreatureAI
void Talk (uint8 id, WorldObject const *whisperTarget=nullptr)
 
 CreatureAI (Creature *creature)
 
virtual ~CreatureAI ()
 
void MoveInLineOfSight_Safe (Unit *who)
 == Reactions At ================================= More...
 
void TriggerAlert (Unit const *who) const
 
virtual bool CanRespawn ()
 
virtual void EnterEvadeMode (EvadeReason why=EVADE_REASON_OTHER)
 
virtual void IsSummonedBy (Unit *)
 
virtual void SummonedCreatureDies (Creature *, Unit *)
 
virtual void AttackedBy (Unit *)
 
virtual bool IsEscorted () const
 
virtual void JustRespawned ()
 
void OnCharmed (bool apply) override
 
void DoZoneInCombat (Creature *creature=NULL, float maxRangeToNearestTarget=50.0f)
 
virtual void ReceiveEmote (Player *, uint32)
 
virtual void OwnerAttackedBy (Unit *)
 
virtual void OwnerAttacked (Unit *)
 
virtual void CorpseRemoved (uint32 &)
 == Triggered Actions Requested ================== More...
 
virtual void PassengerBoarded (Unit *, int8, bool)
 == Fields ======================================= More...
 
virtual void OnSpellClick (Unit *, bool &)
 
virtual bool CanSeeAlways (WorldObject const *)
 
int32 VisualizeBoundary (uint32 duration, Unit *owner=nullptr, bool fill=false) const
 
virtual bool CheckInRoom ()
 
CreatureBoundary constGetBoundary () const
 
- Public Member Functions inherited from UnitAI
 UnitAI (Unit *unit)
 
virtual ~UnitAI ()
 
virtual void InitializeAI ()
 
virtual void DoAction (int32)
 
virtual uint32 GetData (uint32) const
 
virtual void SetData (uint32, uint32)
 
virtual void SetGUID (ObjectGuid, int32=0)
 
virtual ObjectGuid GetGUID (int32=0) const
 
UnitSelectTarget (SelectAggroTarget targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, int32 aura=0)
 
template<class PREDICATE >
UnitSelectTarget (SelectAggroTarget targetType, uint32 position, PREDICATE const &predicate)
 
void SelectTargetList (std::list< Unit * > &targetList, uint32 num, SelectAggroTarget targetType, float dist=0.0f, bool playerOnly=false, int32 aura=0)
 
template<class PREDICATE >
void SelectTargetList (std::list< Unit * > &targetList, PREDICATE const &predicate, uint32 maxTargets, SelectAggroTarget targetType)
 
virtual void DamageDealt (Unit *, uint32 &, DamageEffectType)
 
virtual void HealReceived (Unit *, uint32 &)
 
virtual void HealDone (Unit *, uint32 &)
 
virtual void SpellInterrupted (uint32, uint32)
 
void AttackStartCaster (Unit *victim, float dist)
 
void DoCast (uint32 spellId)
 
void DoCast (Unit *victim, uint32 spellId, bool triggered=false)
 
void DoCastVictim (uint32 spellId, bool triggered=false)
 
void DoCastAOE (uint32 spellId, bool triggered=false)
 
void DoMeleeAttackIfReady ()
 
bool DoSpellAttackIfReady (uint32 spellId)
 
virtual void sGossipHello (Player *)
 
virtual void sGossipSelect (Player *, uint32, uint32)
 
virtual void sGossipSelectCode (Player *, uint32, uint32, char const *)
 
virtual void sQuestAccept (Player *, Quest const *)
 
virtual void sQuestSelect (Player *, Quest const *)
 
virtual void sQuestReward (Player *, Quest const *, uint32)
 
virtual bool sOnDummyEffect (Unit *, uint32, SpellEffIndex)
 
virtual void sOnGameEvent (bool, uint16)
 

Public Attributes

Horsemen id
 
ObjectGuid uiEventStarterGUID
 
uint8 nextWP
 
uint32 punishTimer
 
bool caster
 
bool nextMovementStarted
 
bool movementCompleted
 
bool movementStarted
 
bool encounterActionAttack
 
bool encounterActionReset
 
bool doDelayPunish
 
- Public Attributes inherited from BossAI
InstanceScript *const instance
 
- Public Attributes inherited from ScriptedAI
bool IsFleeing
 

Additional Inherited Members

- Public Types inherited from CreatureAI
enum  EvadeReason { EVADE_REASON_NO_HOSTILES, EVADE_REASON_BOUNDARY, EVADE_REASON_SEQUENCE_BREAK, EVADE_REASON_OTHER }
 
- Static Public Member Functions inherited from UnitAI
static void FillAISpellInfo ()
 
- Static Public Attributes inherited from UnitAI
static AISpellInfoTypeAISpellInfo
 
- Protected Member Functions inherited from BossAI
void _Reset ()
 
void _EnterCombat ()
 
void _JustDied ()
 
void _JustReachedHome ()
 
void _DespawnAtEvade ()
 
void TeleportCheaters ()
 
- Protected Member Functions inherited from CreatureAI
bool UpdateVictim ()
 
bool UpdateVictimWithGaze ()
 
void SetGazeOn (Unit *target)
 
CreatureDoSummon (uint32 entry, Position const &pos, uint32 despawnTime=30000, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
 
CreatureDoSummon (uint32 entry, WorldObject *obj, float radius=5.0f, uint32 despawnTime=30000, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
 
CreatureDoSummonFlyer (uint32 entry, WorldObject *obj, float flightZ, float radius=5.0f, uint32 despawnTime=30000, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
 
bool CheckBoundary (Position const *who=nullptr) const
 
void SetBoundary (CreatureBoundary const *boundary)
 
bool _EnterEvadeMode (EvadeReason why=EVADE_REASON_OTHER)
 
- Protected Attributes inherited from BossAI
EventMap events
 
SummonList summons
 
TaskScheduler scheduler
 
- Protected Attributes inherited from CreatureAI
Creature *const me
 
CreatureBoundary const_boundary
 
- Protected Attributes inherited from UnitAI
Unit *const me
 

Constructor & Destructor Documentation

boss_four_horsemen::boss_four_horsemenAI::boss_four_horsemenAI ( Creature creature)
inline
97  : BossAI(creature, BOSS_HORSEMEN)
98  {
99  Initialize();
100  id = Horsemen(0);
101  for (uint8 i = 0; i < 4; ++i)
102  if (me->GetEntry() == NPC_HORSEMEN[i])
103  id = Horsemen(i);
104  caster = (id == HORSEMEN_LADY || id == HORSEMEN_SIR);
105  }
Definition: boss_four_horsemen.cpp:27
Definition: boss_four_horsemen.cpp:29
const uint32 NPC_HORSEMEN[]
Definition: boss_four_horsemen.cpp:65
Definition: naxxramas.h:39
void Initialize()
Definition: boss_four_horsemen.cpp:107
Horsemen
Definition: boss_four_horsemen.cpp:24
Creature *const me
Definition: CreatureAI.h:71
bool caster
Definition: boss_four_horsemen.cpp:124
uint8_t uint8
Definition: Define.h:152
uint32 GetEntry() const
Definition: Object.h:107
BossAI(Creature *creature, uint32 bossId)
Definition: ScriptedCreature.cpp:444

+ Here is the call graph for this function:

Member Function Documentation

void boss_four_horsemen::boss_four_horsemenAI::AttackStart ( Unit who)
inlineoverridevirtual

Reimplemented from ScriptedAI.

276  {
278  {
279  uiEventStarterGUID = who->GetGUID();
281 
283  DoEncounteraction(who, true, false, false);
284  }
286  {
287  if (caster)
288  me->Attack(who, false);
289  else
290  BossAI::AttackStart(who);
291  }
292  }
bool movementCompleted
Definition: boss_four_horsemen.cpp:126
bool Attack(Unit *victim, bool meleeAttack)
Definition: Unit.cpp:7222
ObjectGuid uiEventStarterGUID
Definition: boss_four_horsemen.cpp:121
Creature *const me
Definition: CreatureAI.h:71
void BeginFourHorsemenMovement()
Definition: boss_four_horsemen.cpp:200
bool movementStarted
Definition: boss_four_horsemen.cpp:127
bool caster
Definition: boss_four_horsemen.cpp:124
bool encounterActionAttack
Definition: boss_four_horsemen.cpp:128
ObjectGuid const & GetGUID() const
Definition: Object.h:105
bool DoEncounteraction(Unit *who, bool attack, bool reset, bool checkAllDead)
Definition: boss_four_horsemen.cpp:144
void AttackStart(Unit *) override
Definition: ScriptedCreature.cpp:117

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void boss_four_horsemen::boss_four_horsemenAI::BeginFourHorsemenMovement ( )
inline
201  {
202  movementStarted = true;
204  me->SetWalk(false);
206 
207  switch (id)
208  {
209  case HORSEMEN_THANE:
211  break;
212  case HORSEMEN_LADY:
214  break;
215  case HORSEMEN_BARON:
217  break;
218  case HORSEMEN_SIR:
220  break;
221  }
222  }
Definition: boss_four_horsemen.cpp:27
Definition: boss_four_horsemen.cpp:29
Definition: Unit.h:1129
MotionMaster * GetMotionMaster()
Definition: Unit.h:2101
Definition: boss_four_horsemen.cpp:28
const Position WaypointPositions[12]
Definition: boss_four_horsemen.cpp:45
Creature *const me
Definition: CreatureAI.h:71
void MovePoint(uint32 id, Position const &pos, bool generatePath=true)
Definition: MotionMaster.h:172
bool movementStarted
Definition: boss_four_horsemen.cpp:127
Definition: Unit.h:600
Definition: boss_four_horsemen.cpp:26
bool SetWalk(bool enable)
Definition: Unit.cpp:15800
void SetSpeed(UnitMoveType mtype, float rate, bool forced=false)
Definition: Unit.cpp:10531
void SetReactState(ReactStates st)
Definition: Creature.h:502
float GetSpeedRate(UnitMoveType mtype) const
Definition: Unit.h:2087

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

bool boss_four_horsemen::boss_four_horsemenAI::DoEncounteraction ( Unit who,
bool  attack,
bool  reset,
bool  checkAllDead 
)
inline
145  {
150 
151  if (Thane && Lady && Baron && Sir)
152  {
153  if (attack && who)
154  {
159 
164  }
165 
166  if (reset)
167  {
169  {
170  if (!Thane->IsAlive())
171  Thane->Respawn();
172 
173  if (!Lady->IsAlive())
174  Lady->Respawn();
175 
176  if (!Baron->IsAlive())
177  Baron->Respawn();
178 
179  if (!Sir->IsAlive())
180  Sir->Respawn();
181 
186 
191  }
192  }
193 
194  if (checkAllDead)
195  return !Thane->IsAlive() && !Lady->IsAlive() && !Baron->IsAlive() && !Sir->IsAlive();
196  }
197  return false;
198  }
Definition: stratholme.h:35
Definition: naxxramas.h:39
virtual void EnterEvadeMode(EvadeReason why=EVADE_REASON_OTHER)
Definition: CreatureAI.cpp:168
Definition: Creature.h:467
void AttackStart(Unit *who) override
Definition: boss_four_horsemen.cpp:275
Definition: naxxramas.h:71
Creature *const me
Definition: CreatureAI.h:71
#define ENSURE_AI(a, b)
Definition: ScriptedCreature.h:29
virtual ObjectGuid GetGuidData(uint32 type) const override
Definition: InstanceScript.cpp:93
bool IsAlive() const
Definition: Unit.h:1692
Definition: InstanceScript.h:58
Definition: naxxramas.h:73
CreatureAI * AI() const
Definition: Creature.h:525
bool encounterActionAttack
Definition: boss_four_horsemen.cpp:128
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
Definition: ObjectAccessor.cpp:174
void Respawn(bool force=false)
Definition: Creature.cpp:1697
Definition: boss_four_horsemen.cpp:95
EncounterState GetBossState(uint32 id) const
Definition: InstanceScript.h:227
Definition: naxxramas.h:70
bool encounterActionReset
Definition: boss_four_horsemen.cpp:129
InstanceScript *const instance
Definition: ScriptedCreature.h:340

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void boss_four_horsemen::boss_four_horsemenAI::EnterCombat ( Unit )
inlineoverridevirtual

Reimplemented from BossAI.

321  {
322  _EnterCombat();
323  Talk(SAY_AGGRO);
324 
326  events.ScheduleEvent(EVENT_CAST, 20000 + rand32() % 5000);
327  events.ScheduleEvent(EVENT_BERSERK, 15*100*1000);
328  }
Definition: boss_four_horsemen.cpp:42
void _EnterCombat()
Definition: ScriptedCreature.cpp:480
Definition: boss_four_horsemen.cpp:40
Definition: boss_four_horsemen.cpp:41
Definition: boss_four_horsemen.cpp:78
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
Definition: CreatureAI.cpp:42
void ScheduleEvent(uint32 eventId, Milliseconds const &time, uint32 group=0, uint8 phase=0)
Definition: EventMap.h:123
uint32 rand32()
Definition: Random.cpp:64
EventMap events
Definition: ScriptedCreature.h:371

+ Here is the call graph for this function:

void boss_four_horsemen::boss_four_horsemenAI::Initialize ( void  )
inline
108  {
110  nextWP = 0;
111  punishTimer = 2000;
112  nextMovementStarted = false;
113  movementCompleted = false;
114  movementStarted = false;
115  encounterActionAttack = false;
116  encounterActionReset = false;
117  doDelayPunish = false;
118  }
bool movementCompleted
Definition: boss_four_horsemen.cpp:126
bool doDelayPunish
Definition: boss_four_horsemen.cpp:130
ObjectGuid uiEventStarterGUID
Definition: boss_four_horsemen.cpp:121
bool movementStarted
Definition: boss_four_horsemen.cpp:127
bool encounterActionAttack
Definition: boss_four_horsemen.cpp:128
uint32 punishTimer
Definition: boss_four_horsemen.cpp:123
void Clear()
Definition: ObjectGuid.h:215
bool nextMovementStarted
Definition: boss_four_horsemen.cpp:125
uint8 nextWP
Definition: boss_four_horsemen.cpp:122
bool encounterActionReset
Definition: boss_four_horsemen.cpp:129

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void boss_four_horsemen::boss_four_horsemenAI::JustDied ( Unit )
inlineoverridevirtual

Reimplemented from BossAI.

301  {
302  events.Reset();
304 
306 
307  if (DoEncounteraction(NULL, false, false, true))
308  {
310  instance->SaveToDB();
311 
312  // Achievements related to the 4-horsemen are given through spell 59450 which does not exist.
313  // There is thus no way it can be given by casting the spell on the players.
315  }
316 
317  Talk(SAY_DEATH);
318  }
void DespawnAll()
Definition: ScriptedCreature.cpp:66
void Reset()
Definition: EventMap.cpp:20
Definition: naxxramas.h:39
Definition: inflate.h:49
arena_t NULL
Definition: jemalloc_internal.h:624
Definition: naxxramas.h:53
void SaveToDB()
Definition: InstanceScript.cpp:39
virtual void SetData(uint32, uint32)
Definition: ZoneScript.h:52
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
Definition: CreatureAI.cpp:42
virtual bool SetBossState(uint32 id, EncounterState state)
Definition: InstanceScript.cpp:273
SummonList summons
Definition: ScriptedCreature.h:372
bool DoEncounteraction(Unit *who, bool attack, bool reset, bool checkAllDead)
Definition: boss_four_horsemen.cpp:144
EventMap events
Definition: ScriptedCreature.h:371
void DoUpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscValue1=0, uint32 miscValue2=0, Unit *unit=NULL)
Definition: InstanceScript.cpp:507
Definition: boss_four_horsemen.cpp:82
InstanceScript *const instance
Definition: ScriptedCreature.h:340

+ Here is the call graph for this function:

void boss_four_horsemen::boss_four_horsemenAI::KilledUnit ( Unit )
inlineoverridevirtual

Reimplemented from ScriptedAI.

295  {
296  if (!(rand32() % 5))
297  Talk(SAY_SLAY);
298  }
Definition: boss_four_horsemen.cpp:81
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
Definition: CreatureAI.cpp:42
uint32 rand32()
Definition: Random.cpp:64

+ Here is the call graph for this function:

void boss_four_horsemen::boss_four_horsemenAI::MoveInLineOfSight ( Unit who)
inlineoverridevirtual

Reimplemented from CreatureAI.

269  {
271  if (caster)
272  SelectNearestTarget(who);
273  }
void SelectNearestTarget(Unit *who)
Definition: boss_four_horsemen.cpp:258
bool caster
Definition: boss_four_horsemen.cpp:124
virtual void MoveInLineOfSight(Unit *)
Definition: CreatureAI.cpp:128

+ Here is the call graph for this function:

void boss_four_horsemen::boss_four_horsemenAI::MovementInform ( uint32  type,
uint32  point 
)
inlineoverridevirtual

Reimplemented from CreatureAI.

225  {
226  if (type != POINT_MOTION_TYPE)
227  return;
228 
229  if (point == 2 || point == 5 || point == 8 || point == 11)
230  {
231  movementCompleted = true;
233 
235 
236  if (eventStarter && me->IsValidAttackTarget(eventStarter))
237  AttackStart(eventStarter);
238  else if (!UpdateVictim())
239  {
240  EnterEvadeMode();
241  return;
242  }
243 
244  if (caster)
245  {
246  me->GetMotionMaster()->Clear();
248  }
249 
250  return;
251  }
252 
253  nextMovementStarted = false;
254  nextWP = point + 1;
255  }
bool movementCompleted
Definition: boss_four_horsemen.cpp:126
void MoveIdle()
Definition: MotionMaster.cpp:185
bool UpdateVictim()
Definition: CreatureAI.cpp:233
Definition: Unit.h:1131
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
Definition: ObjectAccessor.cpp:163
void Clear(bool reset=true)
Definition: MotionMaster.h:138
virtual void EnterEvadeMode(EvadeReason why=EVADE_REASON_OTHER)
Definition: CreatureAI.cpp:168
ObjectGuid uiEventStarterGUID
Definition: boss_four_horsemen.cpp:121
MotionMaster * GetMotionMaster()
Definition: Unit.h:2101
bool IsValidAttackTarget(Unit const *target) const
Definition: Unit.cpp:10002
void AttackStart(Unit *who) override
Definition: boss_four_horsemen.cpp:275
Creature *const me
Definition: CreatureAI.h:71
bool caster
Definition: boss_four_horsemen.cpp:124
bool nextMovementStarted
Definition: boss_four_horsemen.cpp:125
uint8 nextWP
Definition: boss_four_horsemen.cpp:122
Definition: Unit.h:1305
void SetReactState(ReactStates st)
Definition: Creature.h:502
Definition: MotionMaster.h:46

+ Here is the call graph for this function:

void boss_four_horsemen::boss_four_horsemenAI::Reset ( )
inlineoverridevirtual

Reimplemented from BossAI.

133  {
135  DoEncounteraction(NULL, false, true, false);
136 
138 
140  Initialize();
141  _Reset();
142  }
Definition: Unit.h:1131
void Initialize()
Definition: boss_four_horsemen.cpp:107
arena_t NULL
Definition: jemalloc_internal.h:624
Definition: naxxramas.h:53
Creature *const me
Definition: CreatureAI.h:71
virtual void SetData(uint32, uint32)
Definition: ZoneScript.h:52
Definition: InstanceScript.h:58
void _Reset()
Definition: ScriptedCreature.cpp:457
bool DoEncounteraction(Unit *who, bool attack, bool reset, bool checkAllDead)
Definition: boss_four_horsemen.cpp:144
void SetReactState(ReactStates st)
Definition: Creature.h:502
bool encounterActionReset
Definition: boss_four_horsemen.cpp:129
InstanceScript *const instance
Definition: ScriptedCreature.h:340

+ Here is the call graph for this function:

void boss_four_horsemen::boss_four_horsemenAI::SelectNearestTarget ( Unit who)
inline
259  {
260  if (me->GetVictim() && me->GetDistanceOrder(who, me->GetVictim()) && me->IsValidAttackTarget(who))
261  {
263  me->AddThreat(who, 1000000.0f);
264  }
265  }
void AddThreat(Unit *victim, float fThreat, SpellSchoolMask schoolMask=SPELL_SCHOOL_MASK_NORMAL, SpellInfo const *threatSpell=NULL)
Definition: Unit.cpp:10691
bool GetDistanceOrder(WorldObject const *obj1, WorldObject const *obj2, bool is3D=true) const
Definition: Object.cpp:1680
void modifyThreatPercent(Unit *victim, int32 percent)
Definition: ThreatManager.cpp:452
bool IsValidAttackTarget(Unit const *target) const
Definition: Unit.cpp:10002
Creature *const me
Definition: CreatureAI.h:71
Unit * GetVictim() const
Definition: Unit.h:1379
ThreatManager & getThreatManager()
Definition: Unit.h:1998

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void boss_four_horsemen::boss_four_horsemenAI::UpdateAI ( uint32  diff)
inlineoverridevirtual

Reimplemented from BossAI.

331  {
333  {
334  nextMovementStarted = true;
336  }
337 
338  if (!UpdateVictim() || !CheckInRoom() || !movementCompleted)
339  return;
340 
341  events.Update(diff);
342 
344  return;
345 
346  while (uint32 eventId = events.ExecuteEvent())
347  {
348  switch (eventId)
349  {
350  case EVENT_MARK:
351  if (!(rand32() % 5))
352  Talk(SAY_SPECIAL);
353  DoCastAOE(SPELL_MARK[id]);
355  break;
356  case EVENT_CAST:
357  if (!(rand32() % 5))
358  Talk(SAY_TAUNT);
359 
360  if (caster)
361  {
362  if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true))
363  DoCast(target, SPELL_PRIMARY(id));
364  }
365  else
367 
369  break;
370  case EVENT_BERSERK:
371  Talk(SAY_SPECIAL);
373  break;
374  }
375  }
376 
377  if (punishTimer <= diff)
378  {
379  if (doDelayPunish)
380  {
381  DoCastAOE(SPELL_PUNISH[id], true);
382  doDelayPunish = false;
383  }
384  punishTimer = 2000;
385  } else punishTimer -= diff;
386 
387  if (!caster)
390  doDelayPunish = true;
391  }
bool movementCompleted
Definition: boss_four_horsemen.cpp:126
const uint32 SPELL_PUNISH[]
Definition: boss_four_horsemen.cpp:73
void DoCastAOE(uint32 spellId, bool triggered=false)
Definition: UnitAI.cpp:167
Definition: boss_four_horsemen.cpp:42
const uint32 SPELL_MARK[]
Definition: boss_four_horsemen.cpp:66
bool UpdateVictim()
Definition: CreatureAI.cpp:233
bool doDelayPunish
Definition: boss_four_horsemen.cpp:130
Definition: Unit.h:565
bool IsWithinLOSInMap(WorldObject const *obj) const
Definition: Object.cpp:1584
Definition: boss_four_horsemen.cpp:40
bool DoSpellAttackIfReady(uint32 spellId)
Definition: UnitAI.cpp:73
MotionMaster * GetMotionMaster()
Definition: Unit.h:2101
Definition: boss_four_horsemen.cpp:41
Definition: boss_four_horsemen.cpp:79
const Position WaypointPositions[12]
Definition: boss_four_horsemen.cpp:45
Creature *const me
Definition: CreatureAI.h:71
void MovePoint(uint32 id, Position const &pos, bool generatePath=true)
Definition: MotionMaster.h:172
Definition: UnitAI.h:35
Unit * GetVictim() const
Definition: Unit.h:1379
Unit * SelectTarget(SelectAggroTarget targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, int32 aura=0)
Definition: UnitAI.cpp:91
uint32_t uint32
Definition: Define.h:150
bool movementStarted
Definition: boss_four_horsemen.cpp:127
bool caster
Definition: boss_four_horsemen.cpp:124
void DoCast(uint32 spellId)
Definition: UnitAI.cpp:101
virtual bool CheckInRoom()
Definition: CreatureAI.cpp:366
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
Definition: CreatureAI.cpp:42
uint32 punishTimer
Definition: boss_four_horsemen.cpp:123
void ScheduleEvent(uint32 eventId, Milliseconds const &time, uint32 group=0, uint8 phase=0)
Definition: EventMap.h:123
void Update(uint32 time)
Definition: EventMap.h:54
#define SPELL_SECONDARY(i)
Definition: boss_four_horsemen.cpp:70
bool nextMovementStarted
Definition: boss_four_horsemen.cpp:125
uint8 nextWP
Definition: boss_four_horsemen.cpp:122
uint32 ExecuteEvent()
Definition: EventMap.cpp:46
uint32 rand32()
Definition: Random.cpp:64
void DoMeleeAttackIfReady()
Definition: UnitAI.cpp:49
bool HasUnitState(const uint32 f) const
Definition: Unit.h:1395
Definition: boss_four_horsemen.cpp:80
EventMap events
Definition: ScriptedCreature.h:371
void DoCastVictim(uint32 spellId, bool triggered=false)
Definition: UnitAI.cpp:159
Definition: Unit.h:1305
#define SPELL_PRIMARY(i)
Definition: boss_four_horsemen.cpp:67

+ Here is the call graph for this function:

Member Data Documentation

bool boss_four_horsemen::boss_four_horsemenAI::caster
bool boss_four_horsemen::boss_four_horsemenAI::doDelayPunish
bool boss_four_horsemen::boss_four_horsemenAI::encounterActionAttack
bool boss_four_horsemen::boss_four_horsemenAI::encounterActionReset
Horsemen boss_four_horsemen::boss_four_horsemenAI::id
bool boss_four_horsemen::boss_four_horsemenAI::movementCompleted
bool boss_four_horsemen::boss_four_horsemenAI::movementStarted
bool boss_four_horsemen::boss_four_horsemenAI::nextMovementStarted
uint8 boss_four_horsemen::boss_four_horsemenAI::nextWP
uint32 boss_four_horsemen::boss_four_horsemenAI::punishTimer
ObjectGuid boss_four_horsemen::boss_four_horsemenAI::uiEventStarterGUID

The documentation for this struct was generated from the following file: