377 { 609.7720f, 308.4560f, 271.826f },
378 { 752.2771f, 369.9401f, 353.1584f }
383 { 745.2552f, 322.1574f, 310.4596f, 6.038839f },
384 { 747.0576f, 326.4268f, 309.0688f, 0.0f },
385 { 743.9686f, 289.6447f, 311.1807f, 6.056293f },
386 { 748.8422f, 288.0620f, 310.9782f, 1.884956f },
387 { 751.0878f, 327.6505f, 309.4576f, 6.178465f },
388 { 750.0472f, 282.3274f, 309.4353f, 3.071779f },
389 { 754.0332f, 325.8136f, 310.3195f, 2.9147f },
390 { 753.8425f, 286.562f, 310.9353f, 1.029744f },
391 { 745.3237f, 283.986f, 309.2765f, 0.6283185f },
392 { 750.0322f, 323.6064f, 310.2757f, 5.497787f }
397 { 705.921997f, 337.145996f, 370.083008f, 3.961900f },
398 { 706.226990f, 273.264008f, 370.083008f, 2.251072f },
399 { 658.830017f, 265.098999f, 370.083008f, 0.850345f },
400 { 656.859009f, 344.071991f, 370.083008f, 5.235990f }
407 { 710.8815f, 306.4028f, 353.5962f, 2.391101f },
408 { 652.105f, 259.5127f, 353.0794f, 0.122173f },
409 { 642.7164f, 305.2436f, 353.5596f, 3.438299f },
410 { 710.8815f, 306.4028f, 353.5962f, 2.391101f }
415 { 660.3492f, 345.5749f, 353.2961f },
416 { 701.6755f, 297.3358f, 354.041f },
417 { 706.7507f, 269.4593f, 353.2778f },
418 { 660.3492f, 345.5749f, 353.2961f }
423 { 676.226013f, 325.230988f },
424 { 678.059998f, 285.220001f }
682 std::list<Creature*> triggers;
699 if (
Player* player = i->GetSource())
700 if (player->IsAlive() && !player->IsGameMaster() &&
IsInBoundary(player))
709 for (
uint8 i = 0; i < needSummon; ++i)
856 std::list<Creature*> triggers;
863 if (triggers.empty())
1030 return unitGuid != _akamaGUID && unitGuid != _maievGUID;
1280 undalo->DespawnOrUnsummon(7s);
1285 olum->DespawnOrUnsummon(7s);
1387 illidan->AI()->JustSummoned(
me);
1438 illidan->AI()->JustSummoned(
me);
1487 illidan->AI()->JustSummoned(
me);
1591 if (!target->IsAlive())
1595 me->InterruptNonMeleeSpells(false);
1596 DoCast(target, SPELL_CONSUME_SOUL, true);
1825 illidan->AI()->JustSummoned(
me);
2008 if (caster->GetDistance2d(target) > 25.0f)
2050 caster->DespawnOrUnsummon();
2069 if (targets.empty())
2074 targets.push_back(target);
2134 aura->SetDuration(4300);
2176 if (targets.empty())
2181 targets.push_back(target);
2190 caster->AI()->SetGUID(target->
GetGUID(), 0);
2207 target->DespawnOrUnsummon();
2224 if (!target || !caster)
2232 trap->UseDoorOrButton();
2311 target->DespawnOrUnsummon(1s);
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
@ SPLINE_CHAIN_MOTION_TYPE
@ TEMPSUMMON_MANUAL_DESPAWN
@ TEMPSUMMON_CORPSE_TIMED_DESPAWN
bool roll_chance(float chance, PseudoRandomDistributionState &state)
uint32 urand(uint32 min, uint32 max)
#define RegisterSpellScript(spell_script)
void GetCreatureListWithEntryInGrid(Container &container, WorldObject *source, uint32 entry, float maxSearchRange)
void CloseGossipMenuFor(Player *player)
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_SCHOOL_DAMAGE
@ TARGET_DEST_CASTER_RADIUS
@ TARGET_DEST_NEARBY_ENTRY
@ TARGET_UNIT_SRC_AREA_ENEMY
@ EMOTE_ONESHOT_EXCLAMATION
@ AURA_EFFECT_HANDLE_REAL
@ SPELL_AURA_PERIODIC_DAMAGE
@ SPELL_AURA_PERIODIC_TRIGGER_SPELL
#define SpellEffectFn(F, I, N)
#define SpellObjectAreaTargetSelectFn(F, I, N)
#define AuraEffectPeriodicFn(F, I, N)
#define SpellDestinationTargetSelectFn(F, I, N)
#define AuraEffectApplyFn(F, I, N, M)
#define AuraCheckProcFn(F)
#define AuraEffectRemoveFn(F, I, N, M)
@ ACTION_ACTIVE_AKAMA_INTRO
#define RegisterBlackTempleCreatureAI(ai_name)
@ DATA_ILLIDAN_MUSIC_CONTROLLER
@ DATA_AKAMA_ILLIDAN_INTRO
@ NPC_PARASITIC_SHADOWFIEND
@ NPC_GLAIVE_WORLD_TRIGGER
Position const IllidanMiddlePoint
Position const BladesPositions[2]
Position const MinionsSpawnPositions[10]
@ ACTION_FINALIZE_AIR_PHASE
@ ACTION_START_MINIONS_WEAVE
@ DATA_AKAMA_TELEPORT_POSITION
@ SPELL_GLAIVE_VISUAL_KIT
uint32 const SummonCageTrapSpells[8]
@ SPLINE_ILLIDARI_COUNCIL
Position const IllidanPhase2Positions[4]
void AddSC_boss_illidan()
@ EVENT_MOVE_TO_ILLIDARI_ROOM
@ EVENT_MAIEV_FAREWELL_TEXT
@ EVENT_CONFRONT_MAIEV_TEXT
@ EVENT_AKAMA_MINIONS_MOVE_2
@ EVENT_PARASITIC_SHADOWFIEND
@ EVENT_AKAMA_MINIONS_EMOTE
@ EVENT_THROW_WARGLAIVE_2
@ EVENT_RESUME_COMBAT_PHASE_4
@ EVENT_SHADOW_PRISON_TEXT
@ EVENT_MAIEV_JUSTICE_TEXT
@ EVENT_CHANGE_ORIENTATION
@ EVENT_MAIEV_EXCLAMATION
@ EVENT_SCHEDULE_DEMON_SPELLS
@ EVENT_RUN_FROM_ILLIDAN_ROOM
@ EVENT_AKAMA_DOOR_SUCCESS
@ EVENT_AKAMA_MINIONS_MOVE
@ EVENT_CANCEL_DEMON_FORM
@ EVENT_MOVE_TO_WARGLAIVE_POINT
@ EVENT_RESUME_COMBAT_DEMON
@ EVENT_MAIEV_TELEPORT_DESPAWN
@ EVENT_FLY_TO_RANDOM_PILLAR
@ EVENT_AKAMA_START_SOUND
@ EVENT_AKAMA_MOVE_TO_ILLIDAN
Position const IllidanDBTargetSpawnPositions[4]
@ SPELL_CLEAR_ALL_DEBUFFS
@ SPELL_EMOTE_TALK_QUESTION
@ SPELL_CAGE_TRAP_PERIODIC
@ SPELL_SUMMON_CAGE_TRAP_6
@ SPELL_SUMMON_CAGE_TRAP_1
@ SPELL_SUMMON_CAGE_TRAP_7
@ SPELL_FLAME_BURST_EFFECT
@ SPELL_PARASITIC_SHADOWFIEND_2
@ SPELL_SUMMON_CAGE_TRAP_8
@ SPELL_DEATHSWORN_DOOR_CHANNEL
@ SPELL_AKAMA_DOOR_CHANNEL
@ SPELL_SUMMON_PARASITIC_SHADOWFIENDS
@ SPELL_AGONIZING_FLAMES_SELECTOR
@ SPELL_FLAME_CRASH_GROUND
@ SPELL_SUMMON_CAGE_TRAP_4
@ SPELL_SHADOW_DEMON_PASSIVE
@ SPELL_DEMON_TRANSFORM_1
@ SPELL_REMOVE_PARASITIC_SHADOWFIEND
@ SPELL_DEMON_TRANSFORM_2
@ SPELL_SUMMON_CAGE_TRAP_2
@ SPELL_SUMMON_CAGE_TRAP_3
@ SPELL_EYE_BLAST_TRIGGER
@ SPELL_PARASITIC_SHADOWFIEND
@ SPELL_FLAME_TEAR_OF_AZZINOTH
@ SPELL_CAGED_TRAP_TELEPORT
@ SPELL_SUMMON_CAGE_TRAP_5
@ SPELL_SUMMON_TEAR_OF_AZZINOTH
@ SPELL_SUMMON_SHADOWDEMON
@ SPELL_DEMON_TRANSFORM_3
Position const IllidanDBTargetPoints[4]
Position const AkamaTeleportPositions[2]
@ SAY_MAIEV_SHADOWSONG_FAREWELL
@ EVENT_BT_SUMMIT_WALK_SOUND_ID
@ SAY_AKAMA_TIME_HAS_COME
@ ILLIDAN_WARGLAIVE_SOUND_ID
@ SAY_ILLIDAN_UNCONVINCED
@ EVENT_BT_STORM_WALK_UNI_3_SOUND_ID
@ EVENT_BT_STORM_WALK_HERO_2_SOUND_ID
@ SAY_MAIEV_SHADOWSONG_TRAP
@ SAY_ILLIDAN_CONFRONT_MAIEV
@ SAY_MAIEV_SHADOWSONG_OUTRO
@ EVENT_BT_SUMMIT_WALK_3_SOUND_ID
@ SAY_ILLIDAN_SUMMONFLAMES
@ ILLIDAN_TAKEOFF_SOUND_ID
@ SAY_MAIEV_SHADOWSONG_FINISHED
@ WARGLAIVE_SPAWN_SOUND_ID
@ SAY_ILLIDAN_SHADOW_PRISON
@ SAY_MAIEV_SHADOWSONG_DOWN
@ SAY_MAIEV_SHADOWSONG_APPEAR
@ SAY_MAIEV_SHADOWSONG_TAUNT
@ SAY_MAIEV_SHADOWSONG_JUSTICE
@ EVENT_BT_ARRIVAL_WALK_HERO_1_SOUND_ID
AuraRemoveMode GetRemoveMode() const
uint32 GetTickNumber() const
void PreventDefaultAction()
AuraApplication const * GetTargetApplication() const
HookList< EffectApplyHandler > AfterEffectRemove
HookList< EffectPeriodicHandler > OnEffectPeriodic
HookList< EffectApplyHandler > AfterEffectApply
HookList< CheckProcHandler > DoCheckProc
Unit * GetUnitOwner() const
HookList< EffectApplyHandler > OnEffectApply
ObjectGuid const & GetGUID() const
InstanceScript *const instance
void JustEngagedWith(Unit *who) override
void JustSummoned(Creature *summon) override
void _DespawnAtEvade(Seconds delayToRespawn=30s, Creature *who=nullptr)
bool operator()(Unit *unit) const
bool IsInBoundary(Position const *who=nullptr) const
void SetBoundary(CreatureBoundary const *boundary, bool negativeBoundaries=false)
void LoadEquipment(int8 id=1, bool force=false)
void SetReactState(ReactStates st)
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
void SetImmuneToNPC(bool apply) override
void SetImmuneToAll(bool apply) override
void SetCanDualWield(bool value) override
void Repeat(Milliseconds time)
Milliseconds GetTimeUntilEvent(EventId eventId) const
bool IsInPhase(PhaseIndex phase) const
void RescheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)
void CancelEvent(EventId eventId)
void SetPhase(PhaseIndex phase)
void CancelEventGroup(GroupIndex group)
void ScheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)
void AddEvent(BasicEvent *event, Milliseconds e_time, bool set_addtime=true)
Milliseconds CalculateTime(Milliseconds t_offset) const
virtual bool SetBossState(uint32 id, EncounterState state)
Creature * GetCreature(uint32 type)
virtual ObjectGuid GetGuidData(uint32 type) const override
CreatureBoundary const * GetBossBoundary(uint32 id) const
EncounterState GetBossState(uint32 id) const
GameObject * GetGameObject(uint32 type)
PlayerList const & GetPlayers() const
void MoveChase(Unit *target, Optional< ChaseRange > dist={}, Optional< ChaseAngle > angle={})
void MoveAlongSplineChain(uint32 pointId, uint16 dbChainId, bool walk)
void MovePoint(uint32 id, Position const &pos, bool generatePath=true, Optional< float > finalOrient={}, Optional< float > speed={}, MovementWalkRunSpeedSelectionMode speedSelectionMode=MovementWalkRunSpeedSelectionMode::Default, Optional< float > closeEnoughDistance={}, Optional< MovementFadeObject > fadeObject={}, Scripting::v2::ActionResultSetter< MovementStopReason > &&scriptResult={})
void MoveCloserAndStop(uint32 id, Unit *target, float distance)
Unit * GetActionTarget() const
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
Creature * GetHitCreature() const
HookList< DestinationTargetSelectHandler > OnDestinationTargetSelect
void PreventHitDefaultEffect(SpellEffIndex effIndex)
Unit * GetHitUnit() const
HookList< EffectHandler > OnEffectHitTarget
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
void DespawnEntry(uint32 entry)
void DespawnIf(T const &predicate)
void Summon(Creature const *summon)
void DoAction(int32 info, Predicate &&predicate, uint16 max=0)
SummonWarglaiveEvent(Unit *owner)
bool Execute(uint64, uint32) override
TaskContext & Repeat(TaskScheduler::duration_t duration)
TaskScheduler & Schedule(duration_t time, task_handler_t task)
TaskScheduler & Update()
Update the scheduler to the current time.
SpellCastResult DoCastSelf(uint32 spellId, CastSpellExtraArgs const &args={})
virtual bool CanAIAttack(Unit const *) const
virtual void DoAction(int32 param)
SpellCastResult DoCastVictim(uint32 spellId, CastSpellExtraArgs const &args={})
Unit * SelectTarget(SelectTargetMethod targetType, uint32 offset=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
SpellCastResult DoCastAOE(uint32 spellId, CastSpellExtraArgs const &args={})
SpellCastResult DoCast(uint32 spellId)
bool IsWithinMeleeRange(Unit const *obj) const
void SetControlled(bool apply, UnitState state)
void InterruptNonMeleeSpells(bool withDelayed, uint32 spellid=0, bool withInstant=true)
MotionMaster * GetMotionMaster()
void RemoveNpcFlag(NPCFlags flags)
void SetUninteractible(bool apply)
void SetSheath(SheathState sheathed)
void SetFacingToObject(WorldObject const *object, bool force=true, uint32 movementId=EVENT_FACE)
void SetEmoteState(Emote emote)
uint32 GetDisplayId() const
uint32 GetNativeDisplayId() const
void SetNpcFlag(NPCFlags flags)
bool HealthBelowPct(float pct) const
bool HasUnitState(const uint32 f) const
void SendPlaySpellVisualKit(uint32 id, uint32 type, uint32 duration) const
void SetFacingTo(float ori, bool force=true, uint32 movementId=EVENT_FACE)
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
void HandleEmoteCommand(Emote emoteId, Player *target=nullptr, Trinity::IteratorPair< int32 const * > spellVisualKitIds={}, int32 sequenceVariation=0)
bool SetDisableGravity(bool disable, bool updateAnimTier=true, bool updatePlayHoverAnim=true)
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
void PlayDirectSound(uint32 soundId, Player const *target=nullptr, uint32 broadcastTextId=0) const
GameObject * FindNearestGameObject(uint32 entry, float range, bool spawnedOnly=true) const
InstanceScript * GetInstanceScript() const
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
TempSummon * SummonCreature(uint32 entry, Position const &pos, TempSummonType despawnType=TEMPSUMMON_MANUAL_DESPAWN, Milliseconds despawnTime=0s, uint32 vehId=0, uint32 spellId=0, ObjectGuid privateObjectOwner=ObjectGuid::Empty)
float GetDistance2d(WorldObject const *obj) const
void SummonCreatureGroup(uint8 group, std::list< TempSummon * > *list=nullptr)
virtual uint32 GetData(uint32) const
virtual void SetData(uint32, uint32)
void FilterTargets(std::list< WorldObject * > &targets)
bool Validate(SpellInfo const *) override
void HandleScript(SpellEffIndex)
void OnRemoveDummy(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
void SetDest(SpellDestination &dest)
void SetDest(SpellDestination &dest)
void HandleScriptEffect(SpellEffIndex)
void OnPeriodic(AuraEffect const *)
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex)
void HandleScriptEffect(SpellEffIndex effIndex)
bool Validate(SpellInfo const *) override
void HandleEffectRemove(AuraEffect const *, AuraEffectHandleModes)
void FilterTargets(std::list< WorldObject * > &targets)
void HandleScript(SpellEffIndex)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleBlaze(SpellEffIndex)
bool Validate(SpellInfo const *) override
void HandleScriptEffect(SpellEffIndex)
bool CheckProc(ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
void HandleEffectRemove(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
void HandleApply(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
void HandleScriptEffect(SpellEffIndex)
void OnPeriodic(AuraEffect const *)
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex)
void HandleEffectRemove(AuraEffect const *, AuraEffectHandleModes)
void HandleEffectApply(AuraEffect const *, AuraEffectHandleModes)
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
auto SelectRandomContainerElement(C const &container) -> std::add_const_t< decltype(*std::ranges::begin(container))> &
constexpr void SetOrientation(float orientation)
float GetAbsoluteAngle(float x, float y) const
constexpr void Relocate(float x, float y)
constexpr float GetOrientation() const
constexpr float GetPositionZ() const
void AttackStart(Unit *) override
== Triggered Actions Requested ==================
void SetCombatMovement(bool allowMovement)
void ResetThreatList(Unit *who=nullptr)
void DoPlaySoundToSet(WorldObject *source, uint32 soundId)
void AddThreat(Unit *victim, float amount, Unit *who=nullptr)
void RelocateOffset(Position const &offset)
void Relocate(Position const &pos)
void KilledUnit(Unit *victim) override
void SummonedCreatureDies(Creature *summon, Unit *) override
void JustSummoned(Creature *summon) override
void ChangeOrientation(float orientation)
void DamageTaken(Unit *who, uint32 &damage, DamageEffectType, SpellInfo const *) override
void EnterEvadeModeIfNeeded()
boss_illidan_stormrage(Creature *creature)
void JustDied(Unit *) override
void JustEngagedWith(Unit *who) override
void ExecuteSpecialEvents()
void EnterEvadeMode(EvadeReason) override
void MovementInform(uint32 type, uint32 pointId) override
void UpdateAI(uint32 diff) override
void DoAction(int32 actionId) override
void ScheduleEvents(uint8 phase, uint8 group)
void DoAction(int32 actionId) override
void UpdateAI(uint32 diff) override
bool OnGossipSelect(Player *player, uint32, uint32 gossipListId) override
void MovementInform(uint32 type, uint32 pointId) override
void JustSummoned(Creature *summon) override
void EnterEvadeMode(EvadeReason) override
ObjectGuid _spiritOfOlumGUID
uint32 GetData(uint32) const override
bool CanAIAttack(Unit const *who) const override
void DamageTaken(Unit *, uint32 &damage, DamageEffectType, SpellInfo const *) override
ObjectGuid _spiritOfUdaloGUID
bool _isTeleportToMinions
InstanceScript * _instance
void ChangeOrientation(float orientation)
npc_akama_illidan(Creature *creature)
void JustSummoned(Creature *summon) override
npc_blade_of_azzinoth(Creature *creature)
InstanceScript * _instance
void UpdateAI(uint32 diff) override
void UpdateAI(uint32 diff) override
npc_cage_trap_trigger(Creature *creature)
InstanceScript * _instance
void UpdateAI(uint32 diff) override
void JustDied(Unit *) override
npc_flame_of_azzinoth(Creature *creature)
npc_illidan_db_target(Creature *creature)
void JustSummoned(Creature *summon) override
void MovementInform(uint32 type, uint32 pointId) override
npc_illidan_generic_fire(Creature *creature)
void UpdateAI(uint32) override
InstanceScript * _instance
InstanceScript * _instance
npc_illidari_elite(Creature *creature)
bool CanAIAttack(Unit const *who) const override
npc_maiev(Creature *creature)
void DamageTaken(Unit *, uint32 &damage, DamageEffectType, SpellInfo const *) override
void DoAction(int32 actionId) override
void JustAppeared() override
InstanceScript * _instance
void JustEngagedWith(Unit *) override
void UpdateAI(uint32 diff) override
npc_parasitic_shadowfiend(Creature *creature)
void UpdateAI(uint32 diff) override
void DoAction(int32 action) override
InstanceScript * _instance
void SetGUID(ObjectGuid const &guid, int32) override
npc_shadow_demon(Creature *creature)
void UpdateAI(uint32 diff) override
InstanceScript * _instance