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;
1282 undalo->DespawnOrUnsummon(7s);
1287 olum->DespawnOrUnsummon(7s);
1391 illidan->AI()->JustSummoned(
me);
1444 illidan->AI()->JustSummoned(
me);
1493 illidan->AI()->JustSummoned(
me);
1599 if (!target->IsAlive())
1603 me->InterruptNonMeleeSpells(false);
1604 DoCast(target, SPELL_CONSUME_SOUL, true);
1835 illidan->AI()->JustSummoned(
me);
2034 if (caster->GetDistance2d(target) > 25.0f)
2080 caster->DespawnOrUnsummon();
2101 if (targets.empty())
2106 targets.push_back(target);
2170 aura->SetDuration(4300);
2216 if (targets.empty())
2221 targets.push_back(target);
2230 caster->AI()->SetGUID(target->
GetGUID(), 0);
2249 target->DespawnOrUnsummon();
2268 if (!target || !caster)
2276 trap->UseDoorOrButton();
2363 target->DespawnOrUnsummon(1s);
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
@ SPLINE_CHAIN_MOTION_TYPE
@ TEMPSUMMON_MANUAL_DESPAWN
@ TEMPSUMMON_CORPSE_TIMED_DESPAWN
uint32 urand(uint32 min, uint32 max)
bool roll_chance_i(int chance)
#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)
@ UNIT_FLAG_UNINTERACTIBLE
@ 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
void Remove(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Unit * GetUnitOwner() const
HookList< EffectApplyHandler > OnEffectApply
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
@ EVADE_REASON_NO_HOSTILES
void DoZoneInCombat(Creature *creature=nullptr)
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 MovePoint(uint32 id, Position const &pos, bool generatePath=true, Optional< float > finalOrient={})
void MoveAlongSplineChain(uint32 pointId, uint16 dbChainId, bool walk)
void MoveCloserAndStop(uint32 id, Unit *target, float distance)
static Creature * ToCreature(Object *o)
static ObjectGuid GetGUID(Object const *o)
Unit * GetActionTarget() const
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(std::chrono::duration< _Rep, _Period > const &duration)
TaskScheduler & Schedule(std::chrono::duration< _Rep, _Period > const &time, task_handler_t const &task)
TaskScheduler & Update(success_t const &callback=EmptyCallback)
virtual void DoAction(int32)
void DoMeleeAttackIfReady()
SpellCastResult DoCastSelf(uint32 spellId, CastSpellExtraArgs const &args={})
virtual bool CanAIAttack(Unit const *) const
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)
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
bool SetDisableGravity(bool disable, bool updateAnimTier=true)
virtual 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
bool HealthBelowPct(int32 pct) const
void SendPlaySpellVisualKit(uint32 id, uint32 type) const
void SetNpcFlag(NPCFlags flags)
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
bool HasUnitState(const uint32 f) const
void HandleEmoteCommand(Emote emoteId)
void SetFacingTo(float ori, bool force=true, uint32 movementId=EVENT_FACE)
void SetUnitFlag(UnitFlags flags)
void RemoveUnitFlag(UnitFlags flags)
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 PlayDirectSound(uint32 soundId, Player *target=nullptr)
void SummonCreatureGroup(uint8 group, std::list< TempSummon * > *list=nullptr)
virtual uint32 GetData(uint32) const
virtual void SetData(uint32, uint32)
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
void FilterTargets(std::list< WorldObject * > &targets)
bool Validate(SpellInfo const *) override
PrepareSpellScript(spell_illidan_agonizing_flames)
void HandleScript(SpellEffIndex)
void OnRemoveDummy(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_illidan_akama_door_channel)
PrepareSpellScript(spell_illidan_akama_teleport)
void SetDest(SpellDestination &dest)
void SetDest(SpellDestination &dest)
PrepareSpellScript(spell_illidan_cage_teleport)
PrepareSpellScript(spell_illidan_cage_trap)
void HandleScriptEffect(SpellEffIndex)
PrepareAuraScript(spell_illidan_caged)
void OnPeriodic(AuraEffect const *)
bool Validate(SpellInfo const *) override
PrepareSpellScript(spell_illidan_despawn_akama)
void HandleDummy(SpellEffIndex)
PrepareSpellScript(spell_illidan_draw_soul)
void HandleScriptEffect(SpellEffIndex effIndex)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_illidan_eye_blast)
void HandleEffectRemove(AuraEffect const *, AuraEffectHandleModes)
PrepareSpellScript(spell_illidan_find_target)
void FilterTargets(std::list< WorldObject * > &targets)
void HandleScript(SpellEffIndex)
bool Validate(SpellInfo const *) override
PrepareSpellScript(spell_illidan_flame_blast)
bool Validate(SpellInfo const *) override
void HandleBlaze(SpellEffIndex)
PrepareSpellScript(spell_illidan_flame_burst)
bool Validate(SpellInfo const *) override
void HandleScriptEffect(SpellEffIndex)
PrepareAuraScript(spell_illidan_parasitic_shadowfiend_proc)
bool CheckProc(ProcEventInfo &eventInfo)
bool Validate(SpellInfo const *) override
void HandleEffectRemove(AuraEffect const *, AuraEffectHandleModes)
PrepareAuraScript(spell_illidan_parasitic_shadowfiend)
bool Validate(SpellInfo const *) override
void HandleApply(AuraEffect const *, AuraEffectHandleModes)
PrepareAuraScript(spell_illidan_remove_parasitic_shadowfiend)
bool Validate(SpellInfo const *) override
void HandleScriptEffect(SpellEffIndex)
PrepareSpellScript(spell_illidan_return_glaives)
void OnPeriodic(AuraEffect const *)
bool Validate(SpellInfo const *) override
PrepareAuraScript(spell_illidan_tear_of_azzinoth_channel)
PrepareSpellScript(spell_illidan_throw_warglaive)
void HandleDummy(SpellEffIndex)
void HandleEffectRemove(AuraEffect const *, AuraEffectHandleModes)
void HandleEffectApply(AuraEffect const *, AuraEffectHandleModes)
PrepareAuraScript(spell_maiev_down)
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) -> typename std::add_const< decltype(*std::begin(container))>::type &
float GetPositionZ() const
float GetOrientation() const
float GetAbsoluteAngle(float x, float y) const
void SetOrientation(float orientation)
void Relocate(float x, float y)
void AttackStart(Unit *) override
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