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 }
681 std::list<Creature*> triggers;
698 if (
Player* player = i->GetSource())
699 if (player->IsAlive() && !player->IsGameMaster() &&
IsInBoundary(player))
708 for (
uint8 i = 0; i < needSummon; ++i)
855 std::list<Creature*> triggers;
862 if (triggers.empty())
1029 return unitGuid != _akamaGUID && unitGuid != _maievGUID;
1278 undalo->DespawnOrUnsummon(
Seconds(7));
1283 olum->DespawnOrUnsummon(
Seconds(7));
1384 illidan->AI()->JustSummoned(
me);
1434 illidan->AI()->JustSummoned(
me);
1482 illidan->AI()->JustSummoned(
me);
1584 if (!target->IsAlive())
1588 me->InterruptNonMeleeSpells(false);
1589 DoCast(target, SPELL_CONSUME_SOUL, true);
1812 illidan->AI()->JustSummoned(
me);
1995 if (caster->GetDistance2d(target) > 25.0f)
2037 caster->DespawnOrUnsummon();
2056 if (targets.empty())
2061 targets.push_back(target);
2121 aura->SetDuration(4300);
2163 if (targets.empty())
2168 targets.push_back(target);
2177 caster->AI()->SetGUID(target->
GetGUID(), 0);
2194 target->DespawnOrUnsummon();
2211 if (!target || !caster)
2219 trap->UseDoorOrButton();
2298 target->DespawnOrUnsummon(
Seconds(1));
std::chrono::seconds Seconds
Seconds shorthand typedef.
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
std::chrono::minutes Minutes
Minutes 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)
@ TARGET_DEST_CASTER_RADIUS
@ TARGET_DEST_NEARBY_ENTRY
@ TARGET_UNIT_SRC_AREA_ENEMY
@ EMOTE_ONESHOT_EXCLAMATION
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_SCHOOL_DAMAGE
@ 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)
#define RegisterBlackTempleCreatureAI(ai_name)
@ DATA_ILLIDAN_MUSIC_CONTROLLER
@ DATA_AKAMA_ILLIDAN_INTRO
@ NPC_PARASITIC_SHADOWFIEND
@ NPC_GLAIVE_WORLD_TRIGGER
@ ACTION_ACTIVE_AKAMA_INTRO
Position const IllidanMiddlePoint
@ 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
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]
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
void Talk(uint8 id, WorldObject const *whisperTarget=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)
void CancelEventGroup(uint32 group)
void ScheduleEvent(uint32 eventId, Milliseconds time, uint32 group=0, uint8 phase=0)
bool IsInPhase(uint8 phase) const
void CancelEvent(uint32 eventId)
void SetPhase(uint8 phase)
Milliseconds GetTimeUntilEvent(uint32 eventId) const
void RescheduleEvent(uint32 eventId, Milliseconds time, uint32 group=0, uint8 phase=0)
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={})
void MoveCloserAndStop(uint32 id, Unit *target, float distance)
static Creature * ToCreature(Object *o)
static ObjectGuid GetGUID(Object const *o)
Unit * GetProcTarget() 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(std::chrono::duration< Rep, Period > duration)
TaskScheduler & Schedule(std::chrono::duration< Rep, Period > time, task_handler_t task)
TaskScheduler & Update(success_t const &callback=nullptr)
virtual void DoAction(int32)
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 SetFacingToObject(WorldObject const *object, bool force=true)
void RemoveNpcFlag(NPCFlags flags)
bool SetDisableGravity(bool disable, bool updateAnimTier=true)
void SetUninteractible(bool apply)
void SetSheath(SheathState sheathed)
void SetEmoteState(Emote emote)
uint32 GetDisplayId() const
uint32 GetNativeDisplayId() const
bool HealthBelowPct(int32 pct) const
void SetNpcFlag(NPCFlags flags)
void SetFacingTo(float const ori, bool force=true)
bool HasUnitState(const uint32 f) const
void SendPlaySpellVisualKit(uint32 id, uint32 type, uint32 duration) const
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)
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) -> typename std::add_const< decltype(*std::begin(container))>::type &
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