AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
boss_kaelthas::boss_kaelthasAI Struct Reference
Inheritance diagram for boss_kaelthas::boss_kaelthasAI:
BossAI ScriptedAI CreatureAI UnitAI

Public Member Functions

 boss_kaelthasAI (Creature *creature)
 
void PrepareAdvisors ()
 
void SetData (uint32 type, uint32 data) override
 
void SetRoomState (GOState state)
 
void Reset () override
 
void AttackStart (Unit *who) override
 
void MoveInLineOfSight (Unit *who) override
 
void JustEngagedWith (Unit *who) override
 Called for reaction when initially engaged.
 
void KilledUnit (Unit *victim) override
 
void JustSummoned (Creature *summon) override
 
void SummonedCreatureDies (Creature *summon, Unit *) override
 
void JustDied (Unit *killer) override
 
void MovementInform (uint32 type, uint32 point) override
 
void UpdateAI (uint32 diff) override
 
bool CheckEvadeIfOutOfCombatArea () const override
 
- Public Member Functions inherited from BossAI
 BossAI (Creature *creature, uint32 bossId)
 
 ~BossAI () override
 
bool CanRespawn () override
 
void DamageTaken (Unit *attacker, uint32 &damage, DamageEffectType damagetype, SpellSchoolMask damageSchoolMask) override
 
void JustSummoned (Creature *summon) override
 
void SummonedCreatureDespawn (Creature *summon) override
 
void SummonedCreatureDespawnAll () override
 
void UpdateAI (uint32 diff) override
 
void ScheduleHealthCheckEvent (uint32 healthPct, std::function< void()> exec)
 Executes a function once the creature reaches the defined health point percent.
 
virtual void ExecuteEvent (uint32)
 
virtual void ScheduleTasks ()
 
void Reset () override
 
void JustEngagedWith (Unit *) override
 Called for reaction when initially engaged.
 
void JustDied (Unit *) override
 
void JustReachedHome () override
 
- Public Member Functions inherited from ScriptedAI
 ScriptedAI (Creature *creature)
 
 ~ScriptedAI () override
 
void AttackStartNoMove (Unit *target)
 
void DamageTaken (Unit *, uint32 &, DamageEffectType, SpellSchoolMask) override
 
void UpdateAI (uint32 diff) override
 
void JustDied (Unit *) override
 
void KilledUnit (Unit *) override
 
void JustSummoned (Creature *) override
 
void SummonedCreatureDespawn (Creature *) override
 
void SpellHit (Unit *, SpellInfo const *) override
 
void SpellHitTarget (Unit *, SpellInfo const *) override
 
void MovementInform (uint32, uint32) override
 
void OnPossess (bool)
 
bool IsInRoom (const Position *pos, Axis axis, bool above)
 
void Reset () override
 
void JustEngagedWith (Unit *) override
 Called for reaction when initially engaged.
 
void AttackStart (Unit *) override
 
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 DoPlayMusic (uint32 soundId, bool zone)
 
void DoAddThreat (Unit *unit, float amount)
 
void DoModifyThreatByPercent (Unit *unit, int32 pct)
 
void DoResetThreat (Unit *unit)
 
void DoResetThreatList ()
 
float DoGetThreat (Unit *unit)
 
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 const * SelectSpell (Unit *target, uint32 school, uint32 mechanic, SelectTargetType targets, uint32 powerCostMin, uint32 powerCostMax, 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
 
virtual bool CheckEvadeIfOutOfCombatArea () 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
 
PlayerSelectTargetFromPlayerList (float maxdist, uint32 excludeAura=0, bool mustBeInLOS=false) const
 
- Public Member Functions inherited from CreatureAI
void Talk (uint8 id, WorldObject const *whisperTarget=nullptr, Milliseconds delay=0s)
 Causes the creature to talk/say the text assigned to their entry in the creature_text database table.
 
void Talk (uint8 id, Milliseconds delay)
 
 CreatureAI (Creature *creature)
 
 ~CreatureAI () override
 
void MoveCircleChecks ()
 
void MoveBackwardsChecks ()
 
void MoveInLineOfSight_Safe (Unit *who)
 == Reactions At =================================
 
void TriggerAlert (Unit const *who) const
 
virtual bool CanRespawn ()
 
virtual void EnterEvadeMode (EvadeReason why=EVADE_REASON_OTHER)
 
virtual void JustEngagedWith (Unit *)
 Called for reaction when initially engaged.
 
virtual void JustDied (Unit *)
 
virtual void KilledUnit (Unit *)
 
virtual void JustSummoned (Creature *)
 
virtual void IsSummonedBy (WorldObject *)
 
virtual void SummonedCreatureDespawn (Creature *)
 
virtual void SummonedCreatureDies (Creature *, Unit *)
 
virtual void SummonedCreatureDespawnAll ()
 
virtual void SpellHit (Unit *, SpellInfo const *)
 
virtual void SpellHitTarget (Unit *, SpellInfo const *)
 
virtual void AttackedBy (Unit *)
 
virtual bool IsEscorted ()
 
virtual void JustRespawned ()
 
virtual void MovementInform (uint32, uint32)
 
virtual void PathEndReached (uint32)
 
void OnCharmed (bool apply) override
 
virtual void JustReachedHome ()
 
void DoZoneInCombat (Creature *creature=nullptr, float maxRangeToNearestTarget=250.0f)
 
virtual void ReceiveEmote (Player *, uint32)
 
virtual void OwnerAttackedBy (Unit *)
 
virtual void OwnerAttacked (Unit *)
 
virtual void CorpseRemoved (uint32 &)
 == Triggered Actions Requested ==================
 
virtual void PassengerBoarded (Unit *, int8, bool)
 == Fields =======================================
 
virtual bool BeforeSpellClick (Unit *)
 
virtual void OnSpellClick (Unit *, bool &)
 
virtual bool CanSeeAlways (WorldObject const *)
 
virtual bool CanBeSeen (Player const *)
 
virtual bool CanAlwaysBeDetectable (WorldObject const *)
 
virtual void PetStopAttack ()
 
virtual bool CheckInRoom ()
 
CreatureBoundary const * GetBoundary () const
 
void SetBoundary (CreatureBoundary const *boundary, bool negativeBoundaries=false)
 
bool IsInBoundary (Position const *who=nullptr) const
 
virtual void CalculateThreat (Unit *, float &, SpellInfo const *)
 
virtual bool OnTeleportUnreacheablePlayer (Player *)
 
- Public Member Functions inherited from UnitAI
 UnitAI (Unit *unit)
 
virtual ~UnitAI ()
 
virtual bool CanAIAttack (Unit const *) const
 
virtual void AttackStart (Unit *)
 
virtual void UpdateAI (uint32)=0
 
virtual void InitializeAI ()
 
virtual void Reset ()
 
virtual void OnCharmed (bool apply)=0
 
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 (SelectTargetMethod targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
 
template<class PREDICATE >
UnitSelectTarget (SelectTargetMethod targetType, uint32 position, PREDICATE const &predicate)
 
void SelectTargetList (std::list< Unit * > &targetList, uint32 num, SelectTargetMethod targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
 
template<class PREDICATE >
void SelectTargetList (std::list< Unit * > &targetList, uint32 num, SelectTargetMethod targetType, uint32 position, PREDICATE const &predicate)
 
virtual void JustEnteredCombat (Unit *)
 Called when the unit enters combat (NOTE: Creature engage logic should NOT be here, but in JustEngagedWith, which happens once threat is established!)
 
virtual void JustExitedCombat ()
 Called when the unit leaves combat.
 
virtual void DamageDealt (Unit *, uint32 &, DamageEffectType)
 
virtual void DamageTaken (Unit *, uint32 &, DamageEffectType, SpellSchoolMask)
 
virtual void HealReceived (Unit *, uint32 &)
 
virtual void HealDone (Unit *, uint32 &)
 
void AttackStartCaster (Unit *victim, float dist)
 
SpellCastResult DoAddAuraToAllHostilePlayers (uint32 spellid)
 
SpellCastResult DoCast (uint32 spellId)
 
SpellCastResult DoCast (Unit *victim, uint32 spellId, bool triggered=false)
 
SpellCastResult DoCastSelf (uint32 spellId, bool triggered=false)
 
SpellCastResult DoCastToAllHostilePlayers (uint32 spellid, bool triggered=false)
 
SpellCastResult DoCastVictim (uint32 spellId, bool triggered=false)
 
SpellCastResult DoCastAOE (uint32 spellId, bool triggered=false)
 
SpellCastResult DoCastRandomTarget (uint32 spellId, uint32 threatTablePosition=0, float dist=0.0f, bool playerOnly=true, bool triggered=false)
 
SpellCastResult DoCastMaxThreat (uint32 spellId, uint32 threatTablePosition=0, float dist=0.0f, bool playerOnly=true, bool triggered=false)
 Cast spell on the max threat target, which may not always be the current victim.
 
float DoGetSpellMaxRange (uint32 spellId, bool positive=false)
 
void DoMeleeAttackIfReady ()
 
bool DoSpellAttackIfReady (uint32 spell)
 
void DoSpellAttackToRandomTargetIfReady (uint32 spell, uint32 threatTablePosition=0, float dist=0.f, bool playerOnly=true)
 
virtual void SummonMovementInform (Creature *, uint32, uint32)
 
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 sQuestComplete (Player *, Quest const *)
 
virtual void sQuestReward (Player *, Quest const *, uint32)
 
virtual void sOnGameEvent (bool, uint16)
 
virtual std::string GetDebugInfo () const
 

Public Attributes

uint8 phase
 
EventMap events2
 
- Public Attributes inherited from BossAI
InstanceScript *const instance
 
- Public Attributes inherited from ScriptedAI
Creatureme
 
bool IsFleeing
 

Additional Inherited Members

- Public Types inherited from ScriptedAI
enum class  Axis {
  AXIS_X ,
  AXIS_Y
}
 
- Public Types inherited from CreatureAI
enum  EvadeReason {
  EVADE_REASON_NO_HOSTILES ,
  EVADE_REASON_BOUNDARY ,
  EVADE_REASON_SEQUENCE_BREAK ,
  EVADE_REASON_NO_PATH ,
  EVADE_REASON_OTHER
}
 
- Static Public Member Functions inherited from CreatureAI
static bool IsInBounds (CreatureBoundary const &boundary, Position const *who)
 
- 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 _JustEngagedWith ()
 
void _JustDied ()
 
void _JustReachedHome ()
 
bool _ProccessHealthCheckEvent (uint8 healthPct, uint32 damage, std::function< void()> exec) const
 
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)
 
virtual void MoveInLineOfSight (Unit *)
 
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
 
EventMap events
 
CreatureBoundary const * _boundary
 
bool _negateBoundary
 
- Protected Attributes inherited from UnitAI
Unit *const me
 

Detailed Description

Constructor & Destructor Documentation

◆ boss_kaelthasAI()

boss_kaelthas::boss_kaelthasAI::boss_kaelthasAI ( Creature creature)
inline
190: BossAI(creature, DATA_KAELTHAS) { }
@ DATA_KAELTHAS
Definition: the_eye.h:36
Definition: ScriptedCreature.h:456

Member Function Documentation

◆ AttackStart()

void boss_kaelthas::boss_kaelthasAI::AttackStart ( Unit who)
inlineoverridevirtual

Reimplemented from ScriptedAI.

249 {
250 if (phase == PHASE_FINAL && events.GetNextEventTime(EVENT_GRAVITY_LAPSE_END) == 0)
252 }
events
Definition: boss_sartura.cpp:43
phase
Definition: boss_skadi.cpp:102
@ EVENT_GRAVITY_LAPSE_END
Definition: boss_kaelthas.cpp:150
@ PHASE_FINAL
Definition: boss_kaelthas.cpp:121
virtual void AttackStart(Unit *)
Definition: UnitAI.cpp:28

References UnitAI::AttackStart(), EVENT_GRAVITY_LAPSE_END, and PHASE_FINAL.

Referenced by MovementInform(), and UpdateAI().

◆ CheckEvadeIfOutOfCombatArea()

bool boss_kaelthas::boss_kaelthasAI::CheckEvadeIfOutOfCombatArea ( ) const
inlineoverridevirtual

Reimplemented from ScriptedAI.

713 {
714 return me->GetHomePosition().GetExactDist2d(me) > 165.0f || !SelectTargetFromPlayerList(165.0f);
715 }
Creature * me
Definition: ScriptedCreature.h:282
Player * SelectTargetFromPlayerList(float maxdist, uint32 excludeAura=0, bool mustBeInLOS=false) const
Definition: ScriptedCreature.cpp:526
void GetHomePosition(float &x, float &y, float &z, float &ori) const
Definition: Creature.h:330

References Creature::GetHomePosition(), ScriptedAI::me, and ScriptedAI::SelectTargetFromPlayerList().

◆ JustDied()

void boss_kaelthas::boss_kaelthasAI::JustDied ( Unit killer)
inlineoverridevirtual

Reimplemented from BossAI.

323 {
325
327 BossAI::JustDied(killer);
328 }
@ UNIT_FLAG_NON_ATTACKABLE
Definition: Unit.h:449
@ UNIT_FLAG_NOT_SELECTABLE
Definition: Unit.h:473
Talk
Definition: boss_fathomlord_karathress.cpp:23
@ SAY_DEATH
Definition: boss_kaelthas.cpp:40
void JustDied(Unit *) override
Definition: ScriptedCreature.h:484
void RemoveUnitFlag(UnitFlags flags)
Definition: Unit.h:1482

References BossAI::JustDied(), ScriptedAI::me, Unit::RemoveUnitFlag(), SAY_DEATH, UNIT_FLAG_NON_ATTACKABLE, and UNIT_FLAG_NOT_SELECTABLE.

◆ JustEngagedWith()

void boss_kaelthas::boss_kaelthasAI::JustEngagedWith ( Unit )
inlineoverridevirtual

Called for reaction when initially engaged.

Reimplemented from BossAI.

267 {
269 }
void JustEngagedWith(Unit *) override
Called for reaction when initially engaged.
Definition: ScriptedCreature.h:483

References BossAI::JustEngagedWith().

◆ JustSummoned()

void boss_kaelthas::boss_kaelthasAI::JustSummoned ( Creature summon)
inlineoverridevirtual

Reimplemented from BossAI.

278 {
279 summons.Summon(summon);
280 if (summon->GetEntry() == NPC_NETHER_VAPOR)
281 summon->GetMotionMaster()->MoveRandom(20.0f);
282 }
@ NPC_NETHER_VAPOR
Definition: boss_kaelthas.cpp:115
void Summon(Creature const *summon)
Definition: ScriptedCreature.h:90
SummonList summons
Definition: ScriptedCreature.h:497
uint32 GetEntry() const
Definition: Object.h:109
MotionMaster * GetMotionMaster()
Definition: Unit.h:2262
void MoveRandom(float wanderDistance=0.0f)
Definition: MotionMaster.cpp:238

References Object::GetEntry(), Unit::GetMotionMaster(), MotionMaster::MoveRandom(), NPC_NETHER_VAPOR, SummonList::Summon(), and BossAI::summons.

◆ KilledUnit()

void boss_kaelthas::boss_kaelthasAI::KilledUnit ( Unit victim)
inlineoverridevirtual

Reimplemented from ScriptedAI.

272 {
273 if (victim->GetTypeId() == TYPEID_PLAYER)
274 Talk(SAY_SLAY);
275 }
@ TYPEID_PLAYER
Definition: ObjectGuid.h:38
@ SAY_SLAY
Definition: boss_kaelthas.cpp:36
TypeID GetTypeId() const
Definition: Object.h:121

References Object::GetTypeId(), SAY_SLAY, and TYPEID_PLAYER.

◆ MoveInLineOfSight()

void boss_kaelthas::boss_kaelthasAI::MoveInLineOfSight ( Unit who)
inlineoverridevirtual

Reimplemented from CreatureAI.

255 {
256 if (phase == PHASE_NONE && who->GetTypeId() == TYPEID_PLAYER && me->IsValidAttackTarget(who))
257 {
263 }
264 }
@ EVENT_PREFIGHT_PHASE11
Definition: boss_kaelthas.cpp:123
@ PHASE_NONE
Definition: boss_kaelthas.cpp:117
@ PHASE_SINGLE_ADVISOR
Definition: boss_kaelthas.cpp:118
@ EVENT_PREFIGHT_PHASE12
Definition: boss_kaelthas.cpp:124
@ SAY_INTRO
Definition: boss_kaelthas.cpp:27
void ScheduleEvent(uint32 eventId, uint32 time, uint32 group=0, uint32 phase=0)
Definition: EventMap.cpp:56
void SetInCombatWithZone()
Definition: Creature.cpp:2723
bool IsValidAttackTarget(Unit const *target, SpellInfo const *bySpell=nullptr) const
Definition: Unit.cpp:13776
EventMap events2
Definition: boss_kaelthas.cpp:193

References EVENT_PREFIGHT_PHASE11, EVENT_PREFIGHT_PHASE12, events2, Object::GetTypeId(), Unit::IsValidAttackTarget(), ScriptedAI::me, PHASE_NONE, PHASE_SINGLE_ADVISOR, SAY_INTRO, EventMap::ScheduleEvent(), Creature::SetInCombatWithZone(), and TYPEID_PLAYER.

◆ MovementInform()

void boss_kaelthas::boss_kaelthasAI::MovementInform ( uint32  type,
uint32  point 
)
inlineoverridevirtual

Reimplemented from ScriptedAI.

331 {
332 if (type != POINT_MOTION_TYPE)
333 return;
334
335 if (point == POINT_MIDDLE)
336 {
345 events2.ScheduleEvent(EVENT_SCENE_9, 22000); // two first lightnings + aura
346 events2.ScheduleEvent(EVENT_SCENE_10, 22800); // two
347 events2.ScheduleEvent(EVENT_SCENE_11, 23600); // two
348 events2.ScheduleEvent(EVENT_SCENE_12, 24500); // two
349 events2.ScheduleEvent(EVENT_SCENE_13, 24800); // two
350 events2.ScheduleEvent(EVENT_SCENE_14, 25300); // two
351 events2.ScheduleEvent(EVENT_SCENE_15, 32000); // full power
352 events2.ScheduleEvent(EVENT_SCENE_16, 36000); // remove lightnings + aura, move down
353 }
354 else if (point == POINT_START_LAST_PHASE)
355 {
356 me->SetDisableGravity(false);
357 me->SetWalk(false);
361 events.SetTimer(60000);
362 events.ScheduleEvent(EVENT_SPELL_FIREBALL, 0);
363 events.ScheduleEvent(EVENT_SPELL_FLAMESTRIKE, 10000);
364 events.ScheduleEvent(EVENT_SPELL_SUMMON_PHOENIX, 20000);
365 events.ScheduleEvent(EVENT_SPELL_GRAVITY_LAPSE, 5000);
366 if (me->GetVictim())
367 {
370 }
371 }
372 }
@ REACT_AGGRESSIVE
Definition: Unit.h:1025
@ POINT_MOTION_TYPE
Definition: MotionMaster.h:46
@ EVENT_SCENE_15
Definition: boss_kaelthas.cpp:169
@ EVENT_SPELL_SUMMON_PHOENIX
Definition: boss_kaelthas.cpp:147
@ EVENT_SPELL_FLAMESTRIKE
Definition: boss_kaelthas.cpp:144
@ EVENT_SPELL_FIREBALL
Definition: boss_kaelthas.cpp:142
@ EVENT_SCENE_11
Definition: boss_kaelthas.cpp:165
@ EVENT_SCENE_1
Definition: boss_kaelthas.cpp:155
@ EVENT_SCENE_5
Definition: boss_kaelthas.cpp:159
@ EVENT_SCENE_4
Definition: boss_kaelthas.cpp:158
@ EVENT_SPELL_GRAVITY_LAPSE
Definition: boss_kaelthas.cpp:149
@ EVENT_SCENE_2
Definition: boss_kaelthas.cpp:156
@ EVENT_SCENE_13
Definition: boss_kaelthas.cpp:167
@ EVENT_SCENE_3
Definition: boss_kaelthas.cpp:157
@ EVENT_SCENE_7
Definition: boss_kaelthas.cpp:161
@ EVENT_SCENE_9
Definition: boss_kaelthas.cpp:163
@ POINT_START_LAST_PHASE
Definition: boss_kaelthas.cpp:112
@ EVENT_SCENE_12
Definition: boss_kaelthas.cpp:166
@ EVENT_SCENE_10
Definition: boss_kaelthas.cpp:164
@ EVENT_SCENE_16
Definition: boss_kaelthas.cpp:170
@ EVENT_SCENE_6
Definition: boss_kaelthas.cpp:160
@ EVENT_SCENE_8
Definition: boss_kaelthas.cpp:162
@ POINT_MIDDLE
Definition: boss_kaelthas.cpp:110
@ EVENT_SCENE_14
Definition: boss_kaelthas.cpp:168
@ SPELL_KAEL_FULL_POWER
Definition: boss_kaelthas.cpp:89
bool SetDisableGravity(bool disable, bool packetOnly=false, bool updateAnimationTier=true) override
Definition: Creature.cpp:3092
void SetTarget(ObjectGuid guid=ObjectGuid::Empty) override
Definition: Creature.cpp:3424
void SetReactState(ReactStates st)
Definition: Creature.h:89
bool SetWalk(bool enable) override
Definition: Creature.cpp:3081
static ObjectGuid GetGUID(Object const *o)
Definition: Object.h:106
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition: Unit.cpp:4835
Unit * GetVictim() const
Definition: Unit.h:1386
void AttackStart(Unit *who) override
Definition: boss_kaelthas.cpp:248

References AttackStart(), EVENT_SCENE_1, EVENT_SCENE_10, EVENT_SCENE_11, EVENT_SCENE_12, EVENT_SCENE_13, EVENT_SCENE_14, EVENT_SCENE_15, EVENT_SCENE_16, EVENT_SCENE_2, EVENT_SCENE_3, EVENT_SCENE_4, EVENT_SCENE_5, EVENT_SCENE_6, EVENT_SCENE_7, EVENT_SCENE_8, EVENT_SCENE_9, EVENT_SPELL_FIREBALL, EVENT_SPELL_FLAMESTRIKE, EVENT_SPELL_GRAVITY_LAPSE, EVENT_SPELL_SUMMON_PHOENIX, events2, Object::GetGUID(), Unit::GetVictim(), ScriptedAI::me, POINT_MIDDLE, POINT_MOTION_TYPE, POINT_START_LAST_PHASE, REACT_AGGRESSIVE, Unit::RemoveAurasDueToSpell(), Unit::RemoveUnitFlag(), EventMap::ScheduleEvent(), Creature::SetDisableGravity(), Creature::SetReactState(), Creature::SetTarget(), Creature::SetWalk(), SPELL_KAEL_FULL_POWER, UNIT_FLAG_NON_ATTACKABLE, and UNIT_FLAG_NOT_SELECTABLE.

◆ PrepareAdvisors()

void boss_kaelthas::boss_kaelthasAI::PrepareAdvisors ( )
inline
196 {
197 for (uint8 i = DATA_KAEL_ADVISOR1; i <= DATA_KAEL_ADVISOR4; ++i)
199 {
200 advisor->Respawn(true);
201 advisor->StopMovingOnCurrentPos();
202 advisor->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
203 advisor->SetReactState(REACT_PASSIVE);
204 summons.Summon(advisor);
205 }
206 }
std::uint8_t uint8
Definition: Define.h:110
@ REACT_PASSIVE
Definition: Unit.h:1023
@ DATA_KAEL_ADVISOR1
Definition: the_eye.h:39
@ DATA_KAEL_ADVISOR4
Definition: the_eye.h:42
Creature * GetCreature(WorldObject const &u, ObjectGuid const guid)
Definition: ObjectAccessor.cpp:215
InstanceScript *const instance
Definition: ScriptedCreature.h:461
Definition: Creature.h:46
ObjectGuid GetGuidData(uint32 type) const override
Definition: InstanceScript.cpp:94

References DATA_KAEL_ADVISOR1, DATA_KAEL_ADVISOR4, ObjectAccessor::GetCreature(), InstanceScript::GetGuidData(), BossAI::instance, ScriptedAI::me, REACT_PASSIVE, SummonList::Summon(), BossAI::summons, and UNIT_FLAG_NON_ATTACKABLE.

Referenced by UpdateAI().

◆ Reset()

void boss_kaelthas::boss_kaelthasAI::Reset ( )
inlineoverridevirtual

Reimplemented from BossAI.

234 {
236 events2.Reset();
239
244 me->SetDisableGravity(false);
245 me->SetWalk(false);
246 }
@ GO_STATE_READY
Definition: GameObjectData.h:691
@ UNIT_FLAG_DISABLE_MOVE
Definition: Unit.h:450
@ SPELL_AURA_HOVER
Definition: SpellAuraDefines.h:169
@ EVENT_GATHER_ADVISORS
Definition: boss_kaelthas.cpp:137
@ IMMUNITY_STATE
Definition: SharedDefines.h:1367
void Reset()
Definition: EventMap.cpp:21
void Reset() override
Definition: ScriptedCreature.h:482
void ApplySpellImmune(uint32 spellId, uint32 op, uint32 type, bool apply, SpellImmuneBlockType blockType=SPELL_BLOCK_TYPE_ALL)
Definition: Unit.cpp:13300
void SetUnitFlag(UnitFlags flags)
Definition: Unit.h:1481
void SetRoomState(GOState state)
Definition: boss_kaelthas.cpp:223

References Unit::ApplySpellImmune(), EVENT_GATHER_ADVISORS, events2, GO_STATE_READY, IMMUNITY_STATE, ScriptedAI::me, PHASE_NONE, Unit::RemoveUnitFlag(), EventMap::Reset(), BossAI::Reset(), EventMap::ScheduleEvent(), Creature::SetDisableGravity(), SetRoomState(), Unit::SetUnitFlag(), Creature::SetWalk(), SPELL_AURA_HOVER, UNIT_FLAG_DISABLE_MOVE, UNIT_FLAG_NON_ATTACKABLE, and UNIT_FLAG_NOT_SELECTABLE.

◆ SetData()

void boss_kaelthas::boss_kaelthasAI::SetData ( uint32  type,
uint32  data 
)
inlineoverridevirtual

Reimplemented from UnitAI.

209 {
210 if (type == DATA_RESURRECT_CAST && data == DATA_RESURRECT_CAST)
211 {
212 for (SummonList::const_iterator i = summons.begin(); i != summons.end(); ++i)
213 if (Creature* summon = ObjectAccessor::GetCreature(*me, *i))
214 if (summon->GetSpawnId())
215 {
216 summon->SetReactState(REACT_PASSIVE);
217 summon->setDeathState(JUST_RESPAWNED);
218 summon->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
219 }
220 }
221 }
@ JUST_RESPAWNED
Definition: Unit.h:320
@ DATA_RESURRECT_CAST
Definition: boss_kaelthas.cpp:113
iterator begin()
Definition: ScriptedCreature.h:50
StorageType::const_iterator const_iterator
Definition: ScriptedCreature.h:39
iterator end()
Definition: ScriptedCreature.h:60

References SummonList::begin(), DATA_RESURRECT_CAST, SummonList::end(), ObjectAccessor::GetCreature(), JUST_RESPAWNED, ScriptedAI::me, REACT_PASSIVE, BossAI::summons, and UNIT_FLAG_NOT_SELECTABLE.

◆ SetRoomState()

void boss_kaelthas::boss_kaelthasAI::SetRoomState ( GOState  state)
inline
224 {
226 window->SetGoState(state);
228 window->SetGoState(state);
230 window->SetGoState(state);
231 }
@ GO_KAEL_STATUE_LEFT
Definition: the_eye.h:59
@ GO_BRIDGE_WINDOW
Definition: the_eye.h:57
@ GO_KAEL_STATUE_RIGHT
Definition: the_eye.h:58
GameObject * GetGameObject(WorldObject const &u, ObjectGuid const guid)
Definition: ObjectAccessor.cpp:189
Definition: GameObject.h:122

References ObjectAccessor::GetGameObject(), InstanceScript::GetGuidData(), GO_BRIDGE_WINDOW, GO_KAEL_STATUE_LEFT, GO_KAEL_STATUE_RIGHT, BossAI::instance, and ScriptedAI::me.

Referenced by Reset(), and UpdateAI().

◆ SummonedCreatureDies()

void boss_kaelthas::boss_kaelthasAI::SummonedCreatureDies ( Creature summon,
Unit  
)
inlineoverridevirtual

Reimplemented from CreatureAI.

285 {
286 if (phase == PHASE_FINAL)
287 return;
288
289 if (summon->GetSpawnId() && phase == PHASE_ALL_ADVISORS)
290 {
291 for (SummonList::const_iterator i = summons.begin(); i != summons.end(); ++i)
292 if (Creature* summon = ObjectAccessor::GetCreature(*me, *i))
293 if (summon->GetSpawnId() && summon->IsAlive())
294 return;
295
297 return;
298 }
299
300 if (summon->GetEntry() == NPC_THALADRED)
301 {
304 }
305 else if (summon->GetEntry() == NPC_LORD_SANGUINAR)
306 {
309 }
310 else if (summon->GetEntry() == NPC_CAPERNIAN)
311 {
314 }
315 else if (summon->GetEntry() == NPC_TELONICUS)
316 {
319 }
320 }
@ EVENT_PREFIGHT_PHASE42
Definition: boss_kaelthas.cpp:130
@ EVENT_PREFIGHT_PHASE71
Definition: boss_kaelthas.cpp:136
@ EVENT_PREFIGHT_PHASE21
Definition: boss_kaelthas.cpp:125
@ EVENT_PREFIGHT_PHASE32
Definition: boss_kaelthas.cpp:128
@ EVENT_PREFIGHT_PHASE22
Definition: boss_kaelthas.cpp:126
@ EVENT_PREFIGHT_PHASE51
Definition: boss_kaelthas.cpp:131
@ EVENT_PREFIGHT_PHASE52
Definition: boss_kaelthas.cpp:132
@ EVENT_PREFIGHT_PHASE41
Definition: boss_kaelthas.cpp:129
@ PHASE_ALL_ADVISORS
Definition: boss_kaelthas.cpp:120
@ EVENT_PREFIGHT_PHASE31
Definition: boss_kaelthas.cpp:127
@ NPC_TELONICUS
Definition: the_eye.h:52
@ NPC_CAPERNIAN
Definition: the_eye.h:51
@ NPC_THALADRED
Definition: the_eye.h:49
@ NPC_LORD_SANGUINAR
Definition: the_eye.h:50
ObjectGuid::LowType GetSpawnId() const
Definition: Creature.h:67
bool IsAlive() const
Definition: Unit.h:1808

References SummonList::begin(), SummonList::end(), EVENT_PREFIGHT_PHASE21, EVENT_PREFIGHT_PHASE22, EVENT_PREFIGHT_PHASE31, EVENT_PREFIGHT_PHASE32, EVENT_PREFIGHT_PHASE41, EVENT_PREFIGHT_PHASE42, EVENT_PREFIGHT_PHASE51, EVENT_PREFIGHT_PHASE52, EVENT_PREFIGHT_PHASE71, events2, ObjectAccessor::GetCreature(), Object::GetEntry(), Creature::GetSpawnId(), Unit::IsAlive(), ScriptedAI::me, NPC_CAPERNIAN, NPC_LORD_SANGUINAR, NPC_TELONICUS, NPC_THALADRED, PHASE_ALL_ADVISORS, PHASE_FINAL, EventMap::ScheduleEvent(), and BossAI::summons.

◆ UpdateAI()

void boss_kaelthas::boss_kaelthasAI::UpdateAI ( uint32  diff)
inlineoverridevirtual

Reimplemented from BossAI.

375 {
376 events2.Update(diff);
377 switch (events2.ExecuteEvent())
378 {
381 break;
384 break;
387 {
388 advisor->SetReactState(REACT_AGGRESSIVE);
389 advisor->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
390 if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
391 advisor->AI()->AttackStart(target);
392 advisor->SetInCombatWithZone();
393 advisor->AI()->Talk(SAY_THALADRED_AGGRO);
394 }
395 break;
398 break;
401 {
402 advisor->SetReactState(REACT_AGGRESSIVE);
403 advisor->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
404 if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
405 advisor->AI()->AttackStart(target);
406 advisor->SetInCombatWithZone();
407 advisor->AI()->Talk(SAY_SANGUINAR_AGGRO);
408 }
409 break;
412 break;
415 {
416 advisor->SetReactState(REACT_AGGRESSIVE);
417 advisor->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
418 if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
419 advisor->AI()->AttackStart(target);
420 advisor->SetInCombatWithZone();
421 advisor->AI()->Talk(SAY_CAPERNIAN_AGGRO);
422 }
423 break;
426 break;
429 {
430 advisor->SetReactState(REACT_AGGRESSIVE);
431 advisor->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
432 if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
433 advisor->AI()->AttackStart(target);
434 advisor->SetInCombatWithZone();
435 advisor->AI()->Talk(SAY_TELONICUS_AGGRO);
436 }
437 break;
442 break;
444 for (SummonList::const_iterator i = summons.begin(); i != summons.end(); ++i)
445 {
446 if (Creature* summon = ObjectAccessor::GetCreature(*me, *i))
447 if (!summon->GetSpawnId())
448 {
449 summon->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE);
450 summon->SetInCombatWithZone();
451 if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
452 summon->AI()->AttackStart(target);
453 }
454 }
458 break;
462 break;
465 break;
467 for (SummonList::const_iterator i = summons.begin(); i != summons.end(); ++i)
468 if (Creature* summon = ObjectAccessor::GetCreature(*me, *i))
469 if (summon->GetSpawnId())
470 {
471 summon->SetReactState(REACT_AGGRESSIVE);
472 summon->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
473 summon->SetInCombatWithZone();
474 if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
475 summon->AI()->AttackStart(target);
476 }
478 break;
485 if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
486 AttackStart(target);
487
488 events2.Reset();
489 events.Reset();
490 events.ScheduleEvent(EVENT_SPELL_FIREBALL, 1000);
491 events.ScheduleEvent(EVENT_SPELL_FLAMESTRIKE, 15000);
492 events.ScheduleEvent(EVENT_SPELL_SUMMON_PHOENIX, 30000);
493 events.ScheduleEvent(EVENT_SPELL_SEQ_1, 20000);
494 events.ScheduleEvent(EVENT_SPELL_SEQ_2, 40000);
495 events.ScheduleEvent(EVENT_SPELL_SEQ_3, 60000);
496 events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000);
497 break;
498 case EVENT_SCENE_1:
499 me->SetTarget();
500 me->SetFacingTo(M_PI);
501 me->SetWalk(true);
503 break;
504 case EVENT_SCENE_2:
505 me->SetTarget();
508 me->SetDisableGravity(true);
509 break;
510 case EVENT_SCENE_3:
511 me->SetTarget();
512 for (uint8 i = 0; i < 2; ++i)
514 trigger->CastSpell(me, SPELL_NETHERBEAM1 + i, false);
515 me->GetMotionMaster()->MovePoint(POINT_AIR, me->GetPositionX(), me->GetPositionY(), 76.0f, false, true);
516 me->CastSpell(me, SPELL_GROW, true);
517 break;
518 case EVENT_SCENE_4:
519 me->SetTarget();
520 me->CastSpell(me, SPELL_GROW, true);
523 for (uint8 i = 0; i < 2; ++i)
525 trigger->CastSpell(me, SPELL_NETHERBEAM1 + i, false);
526 break;
527 case EVENT_SCENE_5:
528 me->SetTarget();
529 me->CastSpell(me, SPELL_GROW, true);
532 for (uint8 i = 0; i < 2; ++i)
534 trigger->CastSpell(me, SPELL_NETHERBEAM1 + i, false);
535 break;
536 case EVENT_SCENE_6:
537 me->CastSpell(me, SPELL_GROW, true);
540 break;
541 case EVENT_SCENE_7:
545 break;
546 case EVENT_SCENE_8:
553 //me->CastSpell(me, SPELL_KEAL_STUNNED, true);
554 break;
555 case EVENT_SCENE_9:
556 me->CastSpell(me, 52241, true); // WRONG VISUAL
557 me->CastSpell(me, 34807, true);
559 if (Creature* trigger = me->SummonCreature(WORLD_TRIGGER, me->GetPositionX() + 5, me->GetPositionY(), me->GetPositionZ() + 15.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 60000))
560 trigger->CastSpell(me, SPELL_PURE_NETHER_BEAM1, true);
561 if (Creature* trigger = me->SummonCreature(WORLD_TRIGGER, me->GetPositionX() - 5, me->GetPositionY(), me->GetPositionZ() + 15.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 60000))
562 trigger->CastSpell(me, SPELL_PURE_NETHER_BEAM2, true);
563 break;
564 case EVENT_SCENE_10:
565 if (Creature* trigger = me->SummonCreature(WORLD_TRIGGER, me->GetPositionX() - 5, me->GetPositionY() - 5, me->GetPositionZ() + 15.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 60000))
566 trigger->CastSpell(me, SPELL_PURE_NETHER_BEAM3, true);
567 if (Creature* trigger = me->SummonCreature(WORLD_TRIGGER, me->GetPositionX() + 5, me->GetPositionY() + 5, me->GetPositionZ() + 15.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 60000))
568 trigger->CastSpell(me, SPELL_PURE_NETHER_BEAM1, true);
569 break;
570 case EVENT_SCENE_11:
571 if (Creature* trigger = me->SummonCreature(WORLD_TRIGGER, me->GetPositionX(), me->GetPositionY() + 5, me->GetPositionZ() + 15.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 60000))
572 trigger->CastSpell(me, SPELL_PURE_NETHER_BEAM2, true);
573 break;
574 case EVENT_SCENE_12:
575 if (Creature* trigger = me->SummonCreature(WORLD_TRIGGER, me->GetPositionX(), me->GetPositionY() - 5, me->GetPositionZ() + 15.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 60000))
576 trigger->CastSpell(me, SPELL_PURE_NETHER_BEAM3, true);
577 if (Creature* trigger = me->SummonCreature(WORLD_TRIGGER, me->GetPositionX() + 5, me->GetPositionY() - 5, me->GetPositionZ() + 15.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 60000))
578 trigger->CastSpell(me, SPELL_PURE_NETHER_BEAM1, true);
579 break;
580 case EVENT_SCENE_13:
581 if (Creature* trigger = me->SummonCreature(WORLD_TRIGGER, me->GetPositionX() - 5, me->GetPositionY() + 5, me->GetPositionZ() + 15.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 60000))
582 trigger->CastSpell(me, SPELL_PURE_NETHER_BEAM2, true);
583 break;
584 case EVENT_SCENE_14:
585 //if (Creature* trigger = me->SummonCreature(WORLD_TRIGGER, me->GetPositionX()-5, me->GetPositionY()+5, me->GetPositionZ()+15.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 60000))
586 // trigger->CastSpell(me, SPELL_PURE_NETHER_BEAM3, true);
587 break;
588 case EVENT_SCENE_15:
592 me->CastSpell(me, 36709, true);
593 me->CastSpell(me, 36201, true);
594 me->CastSpell(me, 36290, true);
595 me->CastSpell(me, 36291, true);
598 break;
599 case EVENT_SCENE_16:
601 me->RemoveAurasDueToSpell(52241); // WRONG VISUAL
603 break;
604 }
605
606 if (!events2.Empty())
607 return;
608
609 if (!UpdateVictim())
610 return;
611
612 events.Update(diff);
614 return;
615
616 switch (events.ExecuteEvent())
617 {
619 events.ScheduleEvent(EVENT_SPELL_MIND_CONTROL, 0);
620 events.ScheduleEvent(EVENT_SPELL_ARCANE_DISRUPTION, 3000);
621 events.ScheduleEvent(EVENT_SPELL_SEQ_1, 50000);
622 break;
624 events.ScheduleEvent(EVENT_SPELL_MIND_CONTROL, 3000);
625 events.ScheduleEvent(EVENT_SPELL_ARCANE_DISRUPTION, 6000);
626 events.ScheduleEvent(EVENT_SPELL_SEQ_2, 50000);
627 break;
631 events.ScheduleEvent(EVENT_SPELL_SEQ_3, 50000);
632 events.DelayEvents(10000);
633 events.ScheduleEvent(EVENT_SPELL_PYROBLAST, 0);
634 events.ScheduleEvent(EVENT_SPELL_PYROBLAST, 4000);
635 events.ScheduleEvent(EVENT_SPELL_PYROBLAST, 8000);
636 break;
639 break;
642 events.ScheduleEvent(EVENT_SPELL_FIREBALL, roll_chance_i(70) ? 2000 : 4000);
643 break;
646 break;
648 if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true))
649 me->CastSpell(target, SPELL_FLAME_STRIKE, false);
650 events.ScheduleEvent(EVENT_SPELL_FLAMESTRIKE, 20000);
651 break;
654 break;
656 if (roll_chance_i(50))
659 break;
662 me->CastSpell(me, SPELL_PHOENIX, false);
663 events.ScheduleEvent(EVENT_SPELL_SUMMON_PHOENIX, 40000);
664 break;
666 if (me->HealthBelowPct(51))
667 {
668 events.Reset();
674 break;
675 }
676 events.ScheduleEvent(EVENT_CHECK_HEALTH, 1000);
677 break;
679 events.DelayEvents(30000);
681 events.ScheduleEvent(EVENT_SPELL_GRAVITY_LAPSE, 90000);
682 events.ScheduleEvent(EVENT_GRAVITY_LAPSE_END, 32000);
683 events.ScheduleEvent(EVENT_SPELL_SHOCK_BARRIER, 20000);
684 events.ScheduleEvent(EVENT_SPELL_SHOCK_BARRIER, 10000);
685 events.ScheduleEvent(EVENT_SPELL_NETHER_BEAM, 4000);
686 events.ScheduleEvent(EVENT_SPELL_NETHER_VAPOR, 0);
689 me->SetTarget();
691 me->StopMoving();
693 break;
696 break;
699 events.ScheduleEvent(EVENT_SPELL_NETHER_BEAM, 4000);
700 break;
703 events.CancelEvent(EVENT_SPELL_NETHER_BEAM);
706 break;
707 }
708
710 }
constexpr auto IN_MILLISECONDS
Definition: Common.h:62
constexpr auto MINUTE
Definition: Common.h:56
bool roll_chance_i(int chance)
Definition: Random.h:59
@ GO_STATE_ACTIVE
Definition: GameObjectData.h:690
@ TEMPSUMMON_TIMED_DESPAWN
Definition: Object.h:44
@ MOVEMENTFLAG_DISABLE_GRAVITY
Definition: Unit.h:562
@ MOVEMENTFLAG_HOVER
Definition: Unit.h:582
@ MOVEMENTFLAG_WALKING
Definition: Unit.h:560
#define WORLD_TRIGGER
Definition: Unit.h:36
@ BASE_ATTACK
Definition: Unit.h:396
@ UNIT_STATE_MELEE_ATTACKING
Definition: Unit.h:326
@ UNIT_STATE_CASTING
Definition: Unit.h:340
@ SPELLVALUE_MAX_TARGETS
Definition: SpellDefines.h:118
@ EVENT_PREFIGHT_PHASE61
Definition: boss_kaelthas.cpp:133
@ EVENT_SPELL_SEQ_1
Definition: boss_kaelthas.cpp:139
@ EVENT_SPELL_SEQ_2
Definition: boss_kaelthas.cpp:140
@ EVENT_SPELL_SEQ_3
Definition: boss_kaelthas.cpp:141
@ NPC_WORLD_TRIGGER
Definition: boss_kaelthas.cpp:114
@ EVENT_SPELL_ARCANE_DISRUPTION
Definition: boss_kaelthas.cpp:145
@ EVENT_CHECK_HEALTH
Definition: boss_kaelthas.cpp:148
@ POINT_AIR
Definition: boss_kaelthas.cpp:111
@ EVENT_SPELL_SHOCK_BARRIER
Definition: boss_kaelthas.cpp:151
@ PHASE_WEAPONS
Definition: boss_kaelthas.cpp:119
@ EVENT_SPELL_NETHER_BEAM
Definition: boss_kaelthas.cpp:152
@ EVENT_SPELL_NETHER_VAPOR
Definition: boss_kaelthas.cpp:153
@ EVENT_PREFIGHT_PHASE63
Definition: boss_kaelthas.cpp:135
@ EVENT_SPELL_MIND_CONTROL
Definition: boss_kaelthas.cpp:146
@ EVENT_SPELL_PYROBLAST
Definition: boss_kaelthas.cpp:143
@ EVENT_PREFIGHT_PHASE62
Definition: boss_kaelthas.cpp:134
@ SAY_SANGUINAR_AGGRO
Definition: boss_kaelthas.cpp:45
@ SAY_INTRO_SANGUINAR
Definition: boss_kaelthas.cpp:31
@ SAY_PHASE2_WEAPON
Definition: boss_kaelthas.cpp:32
@ SAY_GRAVITYLAPSE
Definition: boss_kaelthas.cpp:38
@ SAY_TELONICUS_AGGRO
Definition: boss_kaelthas.cpp:47
@ SAY_PHASE4_INTRO2
Definition: boss_kaelthas.cpp:34
@ SAY_PYROBLAST
Definition: boss_kaelthas.cpp:41
@ SAY_INTRO_TELONICUS
Definition: boss_kaelthas.cpp:29
@ SAY_CAPERNIAN_AGGRO
Definition: boss_kaelthas.cpp:46
@ SAY_THALADRED_AGGRO
Definition: boss_kaelthas.cpp:44
@ SAY_PHASE5_NUTS
Definition: boss_kaelthas.cpp:35
@ SAY_SUMMON_PHOENIX
Definition: boss_kaelthas.cpp:39
@ SAY_MINDCONTROL
Definition: boss_kaelthas.cpp:37
@ SAY_INTRO_THALADRED
Definition: boss_kaelthas.cpp:30
@ SAY_INTRO_CAPERNIAN
Definition: boss_kaelthas.cpp:28
@ SAY_PHASE3_ADVANCE
Definition: boss_kaelthas.cpp:33
@ SPELL_PURE_NETHER_BEAM3
Definition: boss_kaelthas.cpp:94
@ SPELL_PHOENIX
Definition: boss_kaelthas.cpp:68
@ SPELL_MIND_CONTROL
Definition: boss_kaelthas.cpp:69
@ SPELL_SHOCK_BARRIER
Definition: boss_kaelthas.cpp:70
@ SPELL_KAEL_EXPLODES1
Definition: boss_kaelthas.cpp:82
@ SPELL_RESURRECTION
Definition: boss_kaelthas.cpp:63
@ SPELL_SUMMON_NETHER_VAPOR
Definition: boss_kaelthas.cpp:101
@ SPELL_ARCANE_DISRUPTION
Definition: boss_kaelthas.cpp:67
@ SPELL_PURE_NETHER_BEAM1
Definition: boss_kaelthas.cpp:92
@ SPELL_SUMMON_WEAPONS
Definition: boss_kaelthas.cpp:53
@ SPELL_NETHER_BEAM
Definition: boss_kaelthas.cpp:102
@ SPELL_NETHERBEAM_AURA2
Definition: boss_kaelthas.cpp:77
@ SPELL_FIREBALL
Definition: boss_kaelthas.cpp:66
@ SPELL_GRAVITY_LAPSE
Definition: boss_kaelthas.cpp:97
@ SPELL_KEAL_STUNNED
Definition: boss_kaelthas.cpp:88
@ SPELL_NETHERBEAM_AURA3
Definition: boss_kaelthas.cpp:78
@ SPELL_KAEL_EXPLODES2
Definition: boss_kaelthas.cpp:83
@ SPELL_KAEL_EXPLODES3
Definition: boss_kaelthas.cpp:84
@ SPELL_PYROBLAST
Definition: boss_kaelthas.cpp:71
@ SPELL_FLAME_STRIKE
Definition: boss_kaelthas.cpp:72
@ SPELL_KAEL_EXPLODES5
Definition: boss_kaelthas.cpp:86
@ SPELL_GROW
Definition: boss_kaelthas.cpp:87
@ SPELL_KAEL_EXPLODES4
Definition: boss_kaelthas.cpp:85
@ SPELL_KAEL_GAINING_POWER
Definition: boss_kaelthas.cpp:81
@ SPELL_NETHERBEAM1
Definition: boss_kaelthas.cpp:79
@ SPELL_FLOATING_DROWNED
Definition: boss_kaelthas.cpp:90
@ SPELL_NETHERBEAM_AURA1
Definition: boss_kaelthas.cpp:76
@ SPELL_PURE_NETHER_BEAM2
Definition: boss_kaelthas.cpp:93
const Position triggersPos[6]
Definition: boss_kaelthas.cpp:173
uint32 ExecuteEvent()
Definition: EventMap.cpp:114
void Update(uint32 time)
Definition: EventMap.h:54
bool Empty() const
Definition: EventMap.h:96
void CancelEvent(uint32 eventId)
Definition: EventMap.cpp:190
void DoMeleeAttackIfReady()
Definition: UnitAI.cpp:40
Unit * SelectTarget(SelectTargetMethod targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
Definition: UnitAI.cpp:111
bool UpdateVictim()
Definition: CreatureAI.cpp:269
Creature * GetCreatureWithEntry(uint32 entry) const
Definition: ScriptedCreature.cpp:128
void DespawnEntry(uint32 entry)
Definition: ScriptedCreature.cpp:50
void DoResetThreatList()
Definition: ScriptedCreature.cpp:411
TempSummon * SummonCreature(uint32 id, const Position &pos, TempSummonType spwtype=TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, uint32 vehId=0, SummonPropertiesEntry const *properties=nullptr, bool visibleBySummonerOnly=false) const
Definition: Object.cpp:2318
float GetPositionZ() const
Definition: Position.h:119
float GetPositionX() const
Definition: Position.h:117
float GetPositionY() const
Definition: Position.h:118
Definition: Unit.h:1290
void ClearUnitState(uint32 f)
Definition: Unit.h:1399
void SetFacingTo(float ori)
Definition: Unit.cpp:20782
void setAttackTimer(WeaponAttackType type, int32 time)
Definition: Unit.h:1340
void SetUnitMovementFlags(uint32 f)
Definition: Unit.h:2276
SpellCastResult CastCustomSpell(Unit *victim, uint32 spellId, int32 const *bp0, int32 const *bp1, int32 const *bp2, bool triggered, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
Definition: Unit.cpp:1226
void StopMoving()
Definition: Unit.cpp:16824
bool HealthBelowPct(int32 pct) const
Definition: Unit.h:1444
void SendMovementFlagUpdate(bool self=false)
Definition: Unit.cpp:16878
SpellCastResult CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
Definition: Unit.cpp:1169
bool HasUnitState(const uint32 f) const
Definition: Unit.h:1398
void SendMeleeAttackStop(Unit *victim=nullptr)
Definition: Unit.cpp:3035
void MoveChase(Unit *target, std::optional< ChaseRange > dist={}, std::optional< ChaseAngle > angle={})
Definition: MotionMaster.cpp:299
void MovePoint(uint32 id, const Position &pos, bool generatePath=true, bool forceDestination=true)
Definition: MotionMaster.h:210
void Clear(bool reset=true)
Definition: MotionMaster.h:165
void PrepareAdvisors()
Definition: boss_kaelthas.cpp:195

References AttackStart(), BASE_ATTACK, SummonList::begin(), EventMap::CancelEvent(), Unit::CastCustomSpell(), Unit::CastSpell(), MotionMaster::Clear(), Unit::ClearUnitState(), SummonList::DespawnEntry(), UnitAI::DoMeleeAttackIfReady(), ScriptedAI::DoResetThreatList(), EventMap::Empty(), SummonList::end(), EVENT_CHECK_HEALTH, EVENT_GATHER_ADVISORS, EVENT_GRAVITY_LAPSE_END, EVENT_PREFIGHT_PHASE11, EVENT_PREFIGHT_PHASE12, EVENT_PREFIGHT_PHASE21, EVENT_PREFIGHT_PHASE22, EVENT_PREFIGHT_PHASE31, EVENT_PREFIGHT_PHASE32, EVENT_PREFIGHT_PHASE41, EVENT_PREFIGHT_PHASE42, EVENT_PREFIGHT_PHASE51, EVENT_PREFIGHT_PHASE52, EVENT_PREFIGHT_PHASE61, EVENT_PREFIGHT_PHASE62, EVENT_PREFIGHT_PHASE63, EVENT_PREFIGHT_PHASE71, EVENT_SCENE_1, EVENT_SCENE_10, EVENT_SCENE_11, EVENT_SCENE_12, EVENT_SCENE_13, EVENT_SCENE_14, EVENT_SCENE_15, EVENT_SCENE_16, EVENT_SCENE_2, EVENT_SCENE_3, EVENT_SCENE_4, EVENT_SCENE_5, EVENT_SCENE_6, EVENT_SCENE_7, EVENT_SCENE_8, EVENT_SCENE_9, EVENT_SPELL_ARCANE_DISRUPTION, EVENT_SPELL_FIREBALL, EVENT_SPELL_FLAMESTRIKE, EVENT_SPELL_GRAVITY_LAPSE, EVENT_SPELL_MIND_CONTROL, EVENT_SPELL_NETHER_BEAM, EVENT_SPELL_NETHER_VAPOR, EVENT_SPELL_PYROBLAST, EVENT_SPELL_SEQ_1, EVENT_SPELL_SEQ_2, EVENT_SPELL_SEQ_3, EVENT_SPELL_SHOCK_BARRIER, EVENT_SPELL_SUMMON_PHOENIX, events2, EventMap::ExecuteEvent(), ObjectAccessor::GetCreature(), SummonList::GetCreatureWithEntry(), Object::GetGUID(), Creature::GetHomePosition(), Unit::GetMotionMaster(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), Unit::GetVictim(), GO_STATE_ACTIVE, Unit::HasUnitState(), Unit::HealthBelowPct(), IN_MILLISECONDS, ScriptedAI::me, MINUTE, MotionMaster::MoveChase(), MOVEMENTFLAG_DISABLE_GRAVITY, MOVEMENTFLAG_HOVER, MOVEMENTFLAG_WALKING, MotionMaster::MovePoint(), NPC_CAPERNIAN, NPC_LORD_SANGUINAR, NPC_NETHER_VAPOR, NPC_TELONICUS, NPC_THALADRED, NPC_WORLD_TRIGGER, PHASE_ALL_ADVISORS, PHASE_FINAL, PHASE_WEAPONS, POINT_AIR, POINT_MIDDLE, POINT_START_LAST_PHASE, PrepareAdvisors(), REACT_AGGRESSIVE, REACT_PASSIVE, Unit::RemoveAurasDueToSpell(), Unit::RemoveUnitFlag(), EventMap::Reset(), roll_chance_i(), SAY_CAPERNIAN_AGGRO, SAY_GRAVITYLAPSE, SAY_INTRO_CAPERNIAN, SAY_INTRO_SANGUINAR, SAY_INTRO_TELONICUS, SAY_INTRO_THALADRED, SAY_MINDCONTROL, SAY_PHASE2_WEAPON, SAY_PHASE3_ADVANCE, SAY_PHASE4_INTRO2, SAY_PHASE5_NUTS, SAY_PYROBLAST, SAY_SANGUINAR_AGGRO, SAY_SUMMON_PHOENIX, SAY_TELONICUS_AGGRO, SAY_THALADRED_AGGRO, EventMap::ScheduleEvent(), UnitAI::SelectTarget(), Unit::SendMeleeAttackStop(), Unit::SendMovementFlagUpdate(), Unit::setAttackTimer(), Creature::SetDisableGravity(), Unit::SetFacingTo(), Creature::SetReactState(), SetRoomState(), Creature::SetTarget(), Unit::SetUnitFlag(), Unit::SetUnitMovementFlags(), Creature::SetWalk(), SPELL_ARCANE_DISRUPTION, SPELL_FIREBALL, SPELL_FLAME_STRIKE, SPELL_FLOATING_DROWNED, SPELL_GRAVITY_LAPSE, SPELL_GROW, SPELL_KAEL_EXPLODES1, SPELL_KAEL_EXPLODES2, SPELL_KAEL_EXPLODES3, SPELL_KAEL_EXPLODES4, SPELL_KAEL_EXPLODES5, SPELL_KAEL_FULL_POWER, SPELL_KAEL_GAINING_POWER, SPELL_KEAL_STUNNED, SPELL_MIND_CONTROL, SPELL_NETHER_BEAM, SPELL_NETHERBEAM1, SPELL_NETHERBEAM_AURA1, SPELL_NETHERBEAM_AURA2, SPELL_NETHERBEAM_AURA3, SPELL_PHOENIX, SPELL_PURE_NETHER_BEAM1, SPELL_PURE_NETHER_BEAM2, SPELL_PURE_NETHER_BEAM3, SPELL_PYROBLAST, SPELL_RESURRECTION, SPELL_SHOCK_BARRIER, SPELL_SUMMON_NETHER_VAPOR, SPELL_SUMMON_WEAPONS, SPELLVALUE_MAX_TARGETS, Unit::StopMoving(), WorldObject::SummonCreature(), BossAI::summons, TEMPSUMMON_TIMED_DESPAWN, triggersPos, UNIT_FLAG_DISABLE_MOVE, UNIT_FLAG_NON_ATTACKABLE, UNIT_FLAG_NOT_SELECTABLE, UNIT_STATE_CASTING, UNIT_STATE_MELEE_ATTACKING, EventMap::Update(), CreatureAI::UpdateVictim(), and WORLD_TRIGGER.

Member Data Documentation

◆ events2

EventMap boss_kaelthas::boss_kaelthasAI::events2

◆ phase

uint8 boss_kaelthas::boss_kaelthasAI::phase