25#include "G3DPosition.hpp"
403 { -3826.9548f, -2626.2761f, 78.9296f, 4.644121f },
404 { -3831.6807f, -2626.2761f, 78.9296f, 5.460620f },
405 { -3818.7300f, -2626.2800f, 78.9296f, 4.558697f },
417 { -3828.472f, -2688.191f, 91.2652f, 1.9153f },
418 { -3819.519f, -2687.170f, 91.2652f, 2.1812f },
419 { -3824.960f, -2692.550f, 91.2652f, 1.5733f },
428 { -3852.638916f, -2687.373291f, 91.348526f, 5.560700f },
429 { -3852.845459f, -2742.732666f, 91.348534f, 0.961583f },
430 { -3797.704834f, -2686.685791f, 91.348526f, 3.804689f },
431 { -3799.805664f, -2740.925293f, 91.348541f, 2.247305f },
436 { -3825.149414f, -2711.508789f, 91.354919f, 1.463445f },
437 { -3828.751709f, -2715.171875f, 91.354919f, 3.221487f },
438 { -3821.041748f, -2715.296875f, 91.354889f, 0.046978f },
439 { -3825.180664f, -2719.208252f, 91.354820f, 4.741285f },
446 { -3825.389f, -2739.4202f, 91.431305f, 4.8445f},
447 { -3849.8438f, -2715.0574f, 91.40953f, 2.9961f},
448 { -3825.4966f, -2692.6199f, 91.487495f, 1.4654f},
449 { -3800.6980f, -2715.4340f, 91.390780f, 6.2769f},
454 { -3839.8489f, -2679.7708f, 91.53031f, 5.1081f },
455 { -3860.8940f, -2701.0051f, 91.53032f, 5.9010f },
456 { -3860.5696f, -2729.7344f, 91.53032f, 0.3886f },
457 { -3839.6390f, -2750.8890f, 91.53032f, 1.1935f },
458 { -3811.0625f, -2679.6528f, 91.53031f, 4.3362f },
459 { -3789.8125f, -2700.5088f, 91.53032f, 3.5383f },
460 { -3789.2812f, -2729.3160f, 91.53032f, 2.7669f },
461 { -3810.4290f, -2751.0903f, 91.53032f, 1.9584f }
520 sylvanas->AttackStop();
548 auto forceAttack = [
this, remnant](
uint32 data)
568 std::list<Creature*> knights;
573 if (knight->HasStringId(
"left_knight"))
671 float marchSpeed = 0.0f;
731 auto teleportNamed = [
this](
uint32 data,
Position const& position)
748 auto castBrokerSpawn = [
this](
uint32 data)
1032 Seconds timeOffset = intermissionNum * 1s;
1072 if (intermissionNum == 1 ||
IsMythic())
1078 arthas->SetImmuneToAll(
false);
1097 events.
ScheduleEventSeries(
EVENT_DOMINATION_WORD_PAIN, { 7s, 13s, 13s, 10s, 15s, 13100ms, 12900ms, 13s, 13900ms, 12200ms, 14800ms });
1119 events.
ScheduleEventSeries(
EVENT_DOMINATION_WORD_PAIN, { 11500ms, 13s, 13s, 17700ms, 8100ms, 13s, 13s, 14400ms, 11200ms, 12200ms });
1125 events.
ScheduleEventSeries(
EVENT_DOMINATION_WORD_PAIN, { 10700ms, 13s, 13s, 17700ms, 8100ms, 13s, 13s, 14400ms, 11200ms, 12200ms });
1160 if (_intermissionsDone < 2 && me->HealthBelowPctDamaged(10, damage))
1173 std::list<Creature*> fiendishSouls;
1176 for (
Creature* fiends : fiendishSouls)
1179 fiends->DespawnOrUnsummon(500ms);
1182 std::list<Creature*> marches;
1186 march->DespawnOrUnsummon();
1204 beacon->DespawnOrUnsummon();
1406 for (
uint8 i = 0; i < 4; i++)
1444 _instance(creature->GetInstanceScript()) { }
1496 _instance(creature->GetInstanceScript()) { }
1608 std::list<Player*> targetList;
1610 if (!targetList.empty())
1722 if (
Player* player = players.GetSource())
1746 sylvanas->GetAI()->AttackStartCaster(
me, 25.0f);
1749 uther->GetAI()->AttackStart(
me);
1752 jaina->GetAI()->AttackStartCaster(
me, 25.0f);
2190 canBeRecalculated =
true;
2228 { 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1 };
2393 float startRadius = 1.0f;
2400 UpdateSizeBasedOnAbsorb();
2408 std::array<DBCPosition2D, 2> points =
2411 { 1.0f, targetRadius }
2427 if (G3D::fuzzyEq(currentRadius, targetRadius))
2471 creature->DespawnOrUnsummon(1s);
2505 float startRadius = 1.0f;
2513 UpdateSizeBasedOnCharges();
2521 std::array<DBCPosition2D, 2> points =
2524 { 1.0f, targetRadius }
2532 float radiusMod = 0.205129f *
_entries;
2539 if (G3D::fuzzyEq(currentRadius, targetRadius))
2625 barrierScript->
Absorb(absorbAmount);
2659 creatureTarget->DespawnOrUnsummon();
2683 int64 hopelessnessAffected = targets.size() / 2;
2684 int64 maxAffected = hopelessnessAffected * 2;
2689 if (hopelessnessAffected > 0)
2692 hopelessnessAffected--;
2738 unit->
CastSpell(unit, explodeSpellId,
true);
2742 target->CastSpell(target, explodeSpellId,
true);
2807 target->
CastSpell(target, explodeSpellId,
true);
2822 uint32 rangedDpsCount = 0;
2841 targets.remove_if([rangedDpsCount](
WorldObject* target) ->
bool
2850 if (rangedDpsCount >= 3)
2951 std::vector<G3D::Vector3> splinePoints;
2952 splinePoints.push_back(PositionToVector3(
at->
GetPosition()));
2953 splinePoints.push_back(PositionToVector3(
at->
GetPosition()));
2954 splinePoints.push_back(PositionToVector3(destPos));
2955 splinePoints.push_back(PositionToVector3(
at->
GetPosition()));
2956 splinePoints.push_back(PositionToVector3(
at->
GetPosition()));
3016 std::vector<G3D::Vector3> splinePoints;
3017 splinePoints.push_back(PositionToVector3(
at));
3018 splinePoints.push_back(PositionToVector3(
at));
3019 splinePoints.push_back(PositionToVector3(destPos));
3020 splinePoints.push_back(PositionToVector3(destPos));
3159 creature->DespawnOrUnsummon(3s);
3179 amount = 2 * powerValue;
3180 canBeRecalculated =
false;
3191 amount = -std::min(powerValue, 90);
3192 canBeRecalculated =
false;
3224 switch (
GetCaster()->GetMap()->GetDifficultyID())
3229 raidDifficulty = 28s;
3232 raidDifficulty = 21s;
3235 raidDifficulty = 28s;
3281 unitList.remove_if([
this](
WorldObject const* target)
3292 creature->DespawnOrUnsummon();
3325 if (summon->GetSummonerUnit() == caster)
3349 targets.remove_if([casterGuid](
WorldObject const* target) ->
bool
3385 if (targets.empty())
3390 std::vector<WorldObject*> rangedTargets;
3393 if (target->GetDistance(
GetCaster()) >= 5.0f)
3395 rangedTargets.push_back(target);
3400 if (!rangedTargets.empty())
3472 if (anduin->IsAIEnabled())
3500 for (
uint8 i = 0; i < reflectionsNumber; i++)
3686 if (!remorselessWinter)
std::chrono::seconds Seconds
Seconds shorthand typedef.
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
@ ENCOUNTER_FRAME_DISENGAGE
@ TEMPSUMMON_MANUAL_DESPAWN
@ TEMPSUMMON_TIMED_DESPAWN
float frand(float min, float max)
if(posix_memalign(&__mallocedMemory, __align, __size)) return NULL
#define RegisterSpellAndAuraScriptPair(script_1, script_2)
#define RegisterAreaTriggerAI(ai_name)
#define RegisterSpellScript(spell_script)
#define RegisterSpellAndAuraScriptPairWithArgs(script_1, script_2, script_name,...)
void GetCreatureListWithEntryInGrid(Container &container, WorldObject *source, uint32 entry, float maxSearchRange)
void GetPlayerListInGrid(Container &container, WorldObject *source, float maxSearchRange, bool alive=true)
@ TARGET_UNIT_SRC_AREA_ENTRY
@ TARGET_UNIT_SRC_AREA_ENEMY
@ SPELL_EFFECT_SCHOOL_DAMAGE
@ AURA_EFFECT_HANDLE_REAL
@ AURA_REMOVE_BY_ENEMY_SPELL
@ SPELL_AURA_TRIGGER_SPELL_ON_EXPIRE
@ SPELL_AURA_LINKED_SUMMON
@ SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN
@ SPELL_AURA_MOD_DAMAGE_PERCENT_DONE
@ SPELL_AURA_SCHOOL_ABSORB
@ SPELL_AURA_MOD_SUMMON_DAMAGE
@ SPELL_AURA_AREA_TRIGGER
@ SPELL_AURA_PERIODIC_DUMMY
@ SPELL_AURA_SCREEN_EFFECT
@ SPELL_AURA_PERIODIC_TRIGGER_SPELL
@ TRIGGERED_IGNORE_CAST_IN_PROGRESS
Will not check if a current cast is in progress.
@ TRIGGERED_IGNORE_GCD
Will ignore GCD.
#define AuraEffectProcFn(F, I, N)
#define SpellEffectFn(F, I, N)
#define AuraEffectAbsorbHealFn(F, I)
#define AuraEffectCalcAmountFn(F, I, N)
#define SpellObjectAreaTargetSelectFn(F, I, N)
#define AuraEffectPeriodicFn(F, I, N)
#define SpellDestinationTargetSelectFn(F, I, N)
#define AuraEffectAbsorbFn(F, I)
#define AuraEffectApplyFn(F, I, N, M)
#define AuraEffectRemoveFn(F, I, N, M)
@ UNIT_FLAG_NOT_ATTACKABLE_1
T CalculatePct(T base, U pct)
constexpr Position AnduinsDespairSpawnPosition
constexpr Position RightKnightPosition
constexpr Position QuartermasterRahmPos
float constexpr BEACON_OF_HOPE_MAX_RADIUS
constexpr Position AnduinsHopeSpawnPosition[4]
constexpr Position LeftKnightPosition
constexpr Position AnduinsSoulSpawnPosition
constexpr Position PreIntroductionAssistersPositions[3]
constexpr Position GrimReflectionsSpawnPositions[4]
@ SPELL_VISUAL_CHEST_LOOT
Position const MarchOfTheDamnedSpawnPositions[8]
@ SAY_EMPOWERED_HOPEBREAKER
@ SAY_KINGSMOURNE_HUNGERS
@ SAY_ANNOUNCE_WICKED_STAR
@ SAY_ANNOUNCE_KINGSMOURNE_HUNGERS
@ SAY_NECROTIC_DETONATION
@ SAY_ANNOUNCE_EMPOWERED_WICKED_STAR
void AddSC_boss_anduin_wrynn()
@ PATH_INTRODUCTION_SYLVANAS
@ PATH_INTRODUCTION_UTHER
@ PATH_OUTRODUCTION_FIRIM
@ PATH_INTRODUCTION_JAINA
@ PATH_OUTRODUCTION_THRALL
@ PATH_OUTRODUCTION_BOLVAR
constexpr Position RemnantOfAFallenKingSpawnPosition
float constexpr BEFOULED_BARRIER_MIN_RADIUS
constexpr Position ChestLootSpawnPosition
constexpr Position IntermissionAssistersTeleportPosition[3]
float constexpr BEFOULED_BARRIER_MAX_RADIUS
@ SPELL_SOUL_EXPLOSION_TRIGGER_MISSILE
@ SPELL_ANDUIN_WILLPOWER_PERIODIC
@ SPELL_HOPEBREAKER_DAMAGE
@ SPELL_BEFOULED_BARRIER_EXPLODE
@ SPELL_REMORSELESS_WINTER_PERIODIC
@ SPELL_EMPOWERED_WICKED_STAR_POINTER
@ SPELL_KINGSMOURNE_HUNGERS_DAMAGE
@ SPELL_RETURN_TO_KINGSMOURNE
@ SPELL_ECHOES_OF_ANDORHAL_FIENDISH_GHOULS
@ SPELL_LOST_SOUL_MIRROR_IMAGE
@ SPELL_WICKED_STAR_PROTECTION
@ SPELL_HOPEBREAKER_CLEAR
@ SPELL_BLASPHEMY_OVERCONFIDENCE
@ SPELL_BLASPHEMY_PRE_HIT
@ SPELL_POWER_ENERGIZE_WILLPOWER_LARGE
@ SPELL_EMPOWERED_HOPEBREAKER_EXPLOSION
@ SPELL_DOMINATION_GRASP_ROOT_AREATRIGGER
@ SPELL_BEFOULED_ERUPTION
@ SPELL_BEFOULED_BARRIER_DEBUFF
@ SPELL_BLASPHEMY_HOPELESSNESS
@ SPELL_UNRAVELING_FRENZY_PERIODIC
@ SPELL_MARCH_OF_THE_DAMNED
@ SPELL_FRAGMENT_OF_HOPE_DAMAGE
@ SPELL_WICKED_STAR_POINTER
@ SPELL_UNRAVELING_FRENZY
@ SPELL_BLASPHEMY_EXPLODE_LFR_NORMAL
@ SPELL_FRAGMENT_OF_HOPE_AREATRIGGER
@ SPELL_AWARD_ANDUIN_KILL
@ SPELL_DOMINATION_WORD_PAIN
@ SPELL_WICKED_STAR_EMPOWERMENT
@ SPELL_ANDUIN_PROGRESSION_AURA
@ SPELL_WICKED_STAR_DAMAGE_SILENCE
@ SPELL_GHOST_VISUAL_COSMETIC
@ SPELL_TELEPORT_DOMINATIONS_GRASP
@ SPELL_BEACON_OF_HOPE_AREATRIGGER
@ SPELL_ECHOES_OF_ANDORHAL_MONSTROUS_SOUL
@ SPELL_KINGSMOURNE_HUNGERS
@ SPELL_SOUL_REAPER_DEBUFF
@ SPELL_LOST_SOUL_CONSUME
@ SPELL_EMPOWERED_WICKED_STAR
@ SPELL_FRAGMENT_OF_HOPE_CLEAR_DEBUFF
@ SPELL_BLASPHEMY_EXPLODE
@ SPELL_ANDUIN_LOST_SOUL_TRACKER
@ SPELL_MARCH_OF_THE_DAMNED_DAMAGE
@ SPELL_ANDUIN_PLUNGE_KINGSMOURNE
@ SPELL_ANDUIN_SOUL_DESPAIR
@ SPELL_BLASPHEMY_OVERCONFIDENCE_AREATRIGGER
@ SPELL_RETURN_TO_KINGSMOURNE_VISUALS
@ SPELL_EMPOWERED_HOPEBREAKER
@ SPELL_GRIM_REFLECTIONS_DEST_SUMMON
@ SPELL_POWER_ENERGIZE_WILLPOWER_SMALL
@ SPELL_POWER_DISPLAY_WILLPOWER
@ SPELL_HOPELESSNESS_HOPELESSNESS_AREATRIGGER
@ SPELL_NECROTIC_CLAWS_LEAP
@ SPELL_LOST_SOUL_DIMENSION
@ SPELL_ECHOES_OF_ANDORHAL
@ SPELL_REMORSELESS_WINTER_DEBUFF_DAMAGE
@ SPELL_BEFOULED_BARRIER_SPHERE_AREATRIGGER
@ SPELL_KINGSMOURNE_HUNGERS_DAMAGE_IDK
@ SPELL_SOUL_EXPLOSION_TARGET
@ SPELL_REMORSELESS_WINTER_CLEAR
@ SPELL_SOUL_REAPER_PHYSICAL_DAMAGE
@ SPELL_WICKED_STAR_AREATRIGGER
@ SPELL_BEFOULED_BARRIER_CLEAR
@ SPELL_MARCH_OF_THE_DAMNED_AREATRIGGER
@ SPELL_REMORSELESS_WINTER
@ SPELL_CALAMITY_STATE_VISUAL
@ SPELL_ANDUIN_SOUL_GHOST
@ SPELL_WICKED_STAR_TARGETED
@ SPELL_GRIM_REFLECTIONS_SUMMON
@ SPELL_SOUL_REAPER_SHADOWFROST_DAMAGE
@ SPELL_SOUL_REAPER_ATTACK_SPEED
@ SPELL_HOPELESSNESS_EXPLODE
@ SPELL_HOPEBREAKER_DEBUFF
@ SPELL_EMPOWERED_WICKED_STAR_DAMAGE_SILENCE
@ SPELL_CANCEL_FORCE_OF_WILL
@ SPELL_NECROTIC_DETONATION
@ SPELL_LOST_SOUL_PERIODIC
@ SPELL_EMPOWERED_WICKED_STAR_AREATRIGGER
@ SPELL_ANDUIN_KNEEL_POSE
@ SPELL_RAIN_OF_DESPAIR_MELEE
@ SPELL_MARCH_OF_THE_DAMNED_PERIODIC
@ SPELL_RAIN_OF_DESPAIR_RANGED
@ SPELL_BLASPHEMY_SUCCESS
@ SPELL_RAIN_OF_DESPAIR_EXPLOSION
@ SPELL_SOUL_EXPLOSION_DAMAGE
@ SPELL_HOPELESSNESS_MISSILE
@ SPELL_WICKED_STAR_IDK_3
@ SPELL_NECROTIC_CLAWS_DEBUFF
@ SPELL_BLASPHEMY_HOPELESSNESS_AREATRIGGER
@ SPELL_SHADE_DESPAWN_CEREMONY
@ SPELL_MIRROR_IMAGE_IGNORE_PHASE_SHIFT
@ SPELL_HOPEBREAKER_DEBUFF_DAMAGE
@ SPELL_BEFOULED_BARRIER_BLACK_RING
@ SPELL_TELEPORT_COSMIC_HUB
constexpr Position AnduinsDoubtSpawnPositions[4]
float constexpr BEACON_OF_HOPE_MIN_RADIUS
@ EVENT_UPDATE_BEFOULED_BARRIER
@ EVENT_CANCEL_SYLVANAS_EVENTS
@ EVENT_DOMINATION_WORD_PAIN
@ EVENT_EMPOWERED_WICKED_STAR
@ EVENT_UNRAVELING_FRENZY
@ EVENT_KINGSMOURNE_HUNGERS
@ EVENT_EMPOWERED_HOPEBREAKER
@ EVENT_RETURN_TO_KINGSMOURNE
@ EVENT_NECROTIC_DETONATION
@ EVENT_GRIM_REFLECTION_IMMUNITY
@ EVENT_CANCEL_UTHER_EVENTS
@ EVENT_CANCEL_JAINA_EVENTS
@ ACTION_NECROTIC_DETONATION
@ ACTION_START_INTRODUCTION
@ ACTION_EXIT_INTERMISSION
@ ACTION_SUMMON_KINGSMOURNE_SOULS
@ ACTION_ARTHAS_INTERMISSION_SYLVANAS
@ ACTION_ACTIVATE_REMNANT
@ ACTION_MOVE_NPCS_ON_PLATFORM
@ ACTION_START_PRE_INTRODUCTION
@ ACTION_ARTHAS_INTERMISSION_UTHER
@ ACTION_START_OUTRODUCTION
constexpr Position DominationGraspCenter
@ CONVERSATION_ANDUIN_OUTRODUCTION
@ CONVERSATION_ANDUIN_PHASE_THREE
@ CONVERSATION_ARTHAS_UTHER
@ CONVERSATION_ARTHAS_SYLVANAS
constexpr Position BeaconOfHopeSpawnPosition
@ POINT_MARCH_OF_THE_DAMNED
@ POINT_START_INTRODUCTION
ActivateGhouls(Creature *summoner, Creature *owner)
bool Execute(uint64, uint32) override
GuidUnorderedSet const & GetInsideUnits() const
float GetMaxSearchRadius() const
uint32 GetSpellId() const
void InitSplines(std::vector< G3D::Vector3 > splinePoints, uint32 timeToTarget)
uint32 GetTimeToTargetScale() const
void SetTimeToTargetScale(uint32 timeToTargetScale)
void SetOverrideScaleCurve(float overrideScale)
void SetDuration(int32 newDuration)
uint32 GetTickNumber() const
HookList< EffectAbsorbHealHandler > OnEffectAbsorbHeal
AuraApplication const * GetTargetApplication() const
HookList< EffectApplyHandler > AfterEffectRemove
HookList< EffectPeriodicHandler > OnEffectPeriodic
HookList< EffectCalcAmountHandler > DoEffectCalcAmount
SpellEffectInfo const & GetEffectInfo(SpellEffIndex effIndex) const
HookList< EffectAbsorbHandler > OnEffectAbsorb
HookList< EffectApplyHandler > OnEffectRemove
HookList< EffectProcHandler > OnEffectProc
HookList< AuraProcHandler > OnProc
HookList< EffectApplyHandler > OnEffectApply
uint8 GetStackAmount() const
InstanceScript *const instance
void JustEngagedWith(Unit *who) override
void _DespawnAtEvade(Seconds delayToRespawn=30s, Creature *who=nullptr)
void AddActor(int32 actorId, uint32 actorIdx, ObjectGuid const &actorGuid)
static Conversation * CreateConversation(uint32 conversationEntry, Unit *creator, Position const &pos, ObjectGuid privateObjectOwner, SpellInfo const *spellInfo=nullptr, bool autoStart=true)
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
bool _EnterEvadeMode(EvadeReason why=EvadeReason::Other)
void AttackStart(Unit *victim) override
== Triggered Actions Requested ==================
void SetCanMelee(bool canMelee, bool fleeFromMelee=false)
void SetReactState(ReactStates st)
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
void SetRegenerateHealth(bool value)
void SetImmuneToAll(bool apply) override
void Repeat(Milliseconds time)
void ScheduleEventSeries(uint32 eventId, uint8 group, uint8 phase, std::initializer_list< Milliseconds > const &timeSeries)
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)
void AddEvent(BasicEvent *event, Milliseconds e_time, bool set_addtime=true)
Milliseconds CalculateTime(Milliseconds t_offset) const
virtual bool SetBossState(uint32 id, EncounterState state)
void DoRemoveAurasDueToSpellOnPlayers(uint32 spell, bool includePets=false, bool includeControlled=false)
void DoCastSpellOnPlayers(uint32 spell, bool includePets=false, bool includeControlled=false)
Creature * GetCreature(uint32 type)
void DoUpdateWorldState(int32 worldStateId, int32 value)
void SendEncounterUnit(EncounterFrameType type, Unit const *unit, Optional< int32 > param1={}, Optional< int32 > param2={})
Difficulty GetDifficultyID() const
uint32 GetPlayersCountExceptGMs() const
PlayerList const & GetPlayers() const
void MovePath(uint32 pathId, bool repeatable, Optional< Milliseconds > duration={}, Optional< float > speed={}, MovementWalkRunSpeedSelectionMode speedSelectionMode=MovementWalkRunSpeedSelectionMode::Default, Optional< std::pair< Milliseconds, Milliseconds > > waitTimeRangeAtPathEnd={}, Optional< float > wanderDistanceAtPathEnds={}, Optional< bool > followPathBackwardsFromEndToStart={}, bool generatePath=true)
void MovePoint(uint32 id, Position const &pos, bool generatePath=true, Optional< float > finalOrient={}, Optional< float > speed={}, MovementWalkRunSpeedSelectionMode speedSelectionMode=MovementWalkRunSpeedSelectionMode::Default, Optional< float > closeEnoughDistance={})
LowType GetCounter() const
static ObjectGuid const Empty
static Creature * ToCreature(Object *o)
static Unit * ToUnit(Object *o)
static ObjectGuid GetGUID(Object const *o)
static Player * ToPlayer(Object *o)
bool IsGameMaster() const
ChrSpecializationEntry const * GetPrimarySpecializationEntry() const
Unit * GetActionTarget() const
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
static bool ValidateSpellEffect(std::initializer_list< std::pair< uint32, SpellEffIndex > > effects)
HookList< CastHandler > AfterCast
int32 GetHitDamage() const
HookList< DestinationTargetSelectHandler > OnDestinationTargetSelect
Unit * GetHitUnit() const
SpellEffectInfo const & GetEffectInfo() const
HookList< EffectHandler > OnEffectHitTarget
HookList< CastHandler > OnCast
WorldObject * GetExplTargetWorldObject() const
HookList< EffectHandler > OnEffectLaunchTarget
void SetHitDamage(int32 damage)
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
void Summon(Creature const *summon)
TaskContext & Schedule(std::chrono::duration< Rep, Period > time, TaskScheduler::task_handler_t task)
TaskScheduler & CancelAll()
TaskScheduler & Schedule(std::chrono::duration< Rep, Period > time, task_handler_t task)
TaskScheduler & ClearValidator()
Clears the validator which is asked if tasks are allowed to be executed.
TaskScheduler & Update(success_t const &callback=nullptr)
ObjectGuid GetSummonerGUID() const
Unit * GetSummonerUnit() const
bool DoSpellAttackIfReady(uint32 spellId)
virtual void DoAction(int32)
SpellCastResult DoCastSelf(uint32 spellId, CastSpellExtraArgs const &args={})
SpellCastResult DoCastVictim(uint32 spellId, CastSpellExtraArgs const &args={})
SpellCastResult DoCastAOE(uint32 spellId, CastSpellExtraArgs const &args={})
SpellCastResult DoCast(uint32 spellId)
int32 ModifyPower(Powers power, int32 val, bool withPowerUpdate=true)
void SetHealth(uint64 val)
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
void SetHoverHeight(float hoverHeight)
bool HealthAbovePctHealed(int32 pct, uint32 heal) const
void SetFaction(uint32 faction) override
void SetSpeed(UnitMoveType mtype, float newValue)
void SetPower(Powers power, int32 val, bool withPowerUpdate=true)
void InterruptNonMeleeSpells(bool withDelayed, uint32 spellid=0, bool withInstant=true)
MotionMaster * GetMotionMaster()
Powers GetPowerType() const
TempSummon * ToTempSummon()
bool SetDisableGravity(bool disable, bool updateAnimTier=true)
void SetUninteractible(bool apply)
void SetEmoteState(Emote emote)
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
bool SetWalk(bool enable)
void NearTeleportTo(Position const &pos, bool casting=false)
int32 GetPower(Powers power) const
void SetSpeedRate(UnitMoveType mtype, float rate)
void SetFacingTo(float const ori, bool force=true)
bool HasUnitState(const uint32 f) const
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
bool HealthBelowPctDamaged(int32 pct, uint32 damage) const
void SetUnitFlag(UnitFlags flags)
void KillSelf(bool durabilityLoss=true, bool skipSettingDeathState=false)
void resetAttackTimer(WeaponAttackType type=BASE_ATTACK)
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
void RemoveUnitFlag(UnitFlags flags)
AreaTrigger * GetAreaTrigger(uint32 spellId) const
InstanceScript * GetInstanceScript() const
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
bool IsValidAttackTarget(WorldObject const *target, SpellInfo const *bySpell=nullptr) const
void MovePositionToFirstCollision(Position &pos, float dist, float angle)
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)
Position GetNearPosition(float dist, float angle)
GameObject * SummonGameObject(uint32 entry, Position const &pos, QuaternionData const &rot, Seconds respawnTime, GOSummonType summonType=GO_SUMMON_TIMED_OR_CORPSE_DESPAWN)
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
bool IsValidAssistTarget(WorldObject const *target, SpellInfo const *bySpell=nullptr) const
float GetDistance(WorldObject const *obj) const
Position GetFirstCollisionPosition(float dist, float angle)
void GetCreatureListWithOptionsInGrid(Container &creatureContainer, float maxSearchRange, FindCreatureOptions const &options) const
void SummonCreatureGroup(uint8 group, std::list< TempSummon * > *list=nullptr)
virtual void DoAction(uint32 actionId, WorldObject *source=nullptr, WorldObject *target=nullptr)
virtual uint32 GetData(uint32) const
virtual void SetData(uint32, uint32)
std::unordered_set< uint32 > _skippedPlayers
void OnMovieComplete(Player *player, uint32) override
void MarkPlayerAsSkipped(uint32 playerId)
void HandleDespair(SpellEffIndex effIndex) const
void FilterTargets(std::list< WorldObject * > &unitList) const
void HandleDummy(SpellEffIndex) const
bool Validate(SpellInfo const *spellInfo) override
void OnHealAbsorb(AuraEffect *, HealInfo const &healInfo, uint32 &absorbAmount) const
void OnRemove(AuraEffect const *, AuraEffectHandleModes) const
bool Validate(SpellInfo const *) override
std::unordered_map< ObjectGuid, uint32 > _spellAssignments
void OnPrecast() override
void HandleDebuff(SpellEffIndex)
bool Validate(SpellInfo const *) override
void FilterTargets(std::list< WorldObject * > &targets)
bool Validate(SpellInfo const *) override
void OnProc(AuraEffect *, ProcEventInfo const &eventInfo)
uint32 GetAreaTriggerSpellID() const override
uint8 GetAnnounceGroupID() const override
static constexpr std::array< int32, 22 > AnduinRegenCycle
void HandlePeriodic(AuraEffect const *)
void RecalculateHook(AuraEffect const *, int32 &amount, bool &canBeRecalculated) const
void OnApply(AuraEffect const *, AuraEffectHandleModes) const
void RecalculateHookDamageTaken(AuraEffect const *, int32 &amount, bool &canBeRecalculated) const
void SetDest(SpellDestination &destination) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleDamage(SpellEffIndex)
void OnPeriodic(AuraEffect const *) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleHit(SpellEffIndex) const
void OnRemove(AuraEffect const *, AuraEffectHandleModes) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void OnRemove(AuraEffect const *, AuraEffectHandleModes) const
void OnPrecast() override
void HandleDebuff(SpellEffIndex) const
bool Validate(SpellInfo const *) override
void HandleDummyEffect(SpellEffIndex) const
bool Validate(SpellInfo const *) override
void FilterTargets(std::list< WorldObject * > &targets) const
void OnApply(AuraEffect const *, AuraEffectHandleModes)
Position _lostSoulPosition
bool Validate(SpellInfo const *) override
void OnRemove(AuraEffect const *, AuraEffectHandleModes) const
void OnPeriodic(AuraEffect const *aurEff)
std::vector< Position > _availableSpawnPositions
void OnRemove(AuraEffect const *, AuraEffectHandleModes) const
void OnApply(AuraEffect const *, AuraEffectHandleModes) const
bool Validate(SpellInfo const *) override
void Trigger(AuraEffect *, DamageInfo const &dmgInfo, uint32 &absorbAmount)
void CalculateAmount(AuraEffect const *, int32 &amount, bool &canBeRecalculated)
void OnRemove(AuraEffect const *, AuraEffectHandleModes) const
void OnApply(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
void OnRemove(AuraEffect const *, AuraEffectHandleModes) const
virtual uint8 GetAnnounceGroupID() const
bool Validate(SpellInfo const *) override
void OnApply(AuraEffect const *, AuraEffectHandleModes) const
virtual uint32 GetAreaTriggerSpellID() const
void FilterTargets(std::list< WorldObject * > &targets)
void FilterTargets(std::list< WorldObject * > &targets) const
bool Validate(SpellInfo const *) override
void HandleMissile(SpellEffIndex) const
bool Validate(SpellInfo const *) override
void HandleAfterCast() const
static constexpr std::array< int32, 3 > RemnantRegenCycle
void HandlePeriodic(AuraEffect const *)
void HandleDamage(SpellEffIndex)
void OnPeriodic(AuraEffect const *) const
void OnApply(AuraEffect const *, AuraEffectHandleModes) const
bool Validate(SpellInfo const *) override
void AfterRemove(AuraEffect const *, AuraEffectHandleModes) const
bool Validate(SpellInfo const *) override
void HandleDummyEffect(SpellEffIndex) const
bool Validate(SpellInfo const *) override
void OnRemove(AuraEffect const *, AuraEffectHandleModes) const
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 &
auto MapGetValuePtr(M &map, typename M::key_type const &key)
void RandomResize(C &container, std::size_t requestedSize)
@ WORLD_STATE_ANDUIN_ENCOUNTER_STARTED
@ WORLD_STATE_ANDUIN_ENCOUNTER_COMPLETED
@ WORLD_STATE_ANDUIN_INTERMISSION
#define RegisterSepulcherOfTheFirstOnesCreatureAI(ai_name)
@ BOSS_REMNANT_OF_A_FALLEN_KING
@ NPC_LADY_JAINA_PROUDMOORE_ANDUIN
@ NPC_KNIGHT_OF_EBON_BLADE_ANDUIN
@ NPC_SYLVANAS_WINDRUNNER_ANDUIN
@ NPC_MARCH_OF_THE_DAMNED
@ NPC_UTHER_THE_LIGHTBRINGER_ANDUIN
@ DATA_QUARTERMASTER_RAHM_ANDUIN
@ DATA_BOLVAR_FORDRAGON_ANDUIN
@ DATA_SYLVANAS_WINDRUNNER_ANDUIN
@ DATA_UTHER_THE_LIGHTBRINGER_ANDUIN
@ DATA_ANDUIN_WRYNN_INTRODUCTION
@ DATA_JAINA_PROUDMOORE_ANDUIN
@ DATA_REMNANT_OF_A_FALLEN_KING
@ GAMEOBJECT_ANDUIN_CHEST_LOOT
EnumFlag< ChrSpecializationFlag > GetFlags() const
ChrSpecializationRole GetRole() const
constexpr void SetOrientation(float orientation)
constexpr float GetPositionX() const
constexpr float GetPositionY() const
float GetAbsoluteAngle(float x, float y) const
constexpr void GetPosition(float &x, float &y) const
constexpr float GetOrientation() const
constexpr float GetPositionZ() const
static QuaternionData fromEulerAnglesZYX(float Z, float Y, float X)
void SetCombatMovement(bool allowMovement)
void Relocate(Position const &pos)
void OnCreate(Spell const *) override
void UpdateSizeBasedOnCharges() const
void OnUpdate(uint32 diff) override
void OnInitialize() override
at_anduin_wrynn_beacon_of_hope(AreaTrigger *areatrigger)
InstanceScript * _instance
void UpdateSize(float radius, float targetRadius) const
void OnUnitEnter(Unit *unit) override
void OnInitialize() override
void OnUnitExit(Unit *unit) override
void UpdateSizeBasedOnAbsorb() const
void OnUpdate(uint32 diff) override
void OnUnitEnter(Unit *unit) override
void OnCreate(Spell const *) override
uint32 GetRemainingAbsorb() const
at_anduin_wrynn_befouled_barrier(AreaTrigger *areatrigger)
void UpdateSize(float radius, float targetRadius) const
void Absorb(uint32 absorbAmount)
at_anduin_wrynn_blasphemy(AreaTrigger *areatrigger)
void OnUnitEnter(Unit *unit) override
void HandleMovement(float angle) const
void OnInitialize() override
void OnDestinationReached() override
static float constexpr EMPOWERED_WICKED_STAR_SPEED
at_anduin_wrynn_empowered_wicked_star(AreaTrigger *areatrigger)
void OnUnitExit(Unit *unit) override
at_anduin_wrynn_hopelessness(AreaTrigger *areatrigger)
void OnUnitEnter(Unit *unit) override
void OnUnitEnter(Unit *unit) override
at_anduin_wrynn_march_of_the_damned(AreaTrigger *areatrigger)
at_anduin_wrynn_pre_introduction(AreaTrigger *areatrigger)
void OnUnitEnter(Unit *unit) override
static constexpr float GetWickedStarSpeed(Difficulty difficulty)
void OnInitialize() override
void OnUnitEnter(Unit *unit) override
void OnDestinationReached() override
at_anduin_wrynn_wicked_star(AreaTrigger *areatrigger)
void JustAppeared() override
void ForceAssistersToAttackRemnant() const
void JustSummoned(Creature *summon) override
void DoAction(int32 action) override
void KilledUnit(Unit *victim) override
void DamageTaken(Unit *, uint32 &damage, DamageEffectType, SpellInfo const *) override
void PhaseEvents(uint8 phase)
boss_anduin_wrynn(Creature *creature)
void PrepareAssistersForIntermission() const
void ClearDebuffs() const
void UpdateAI(uint32 diff) override
void HandleIntroduction()
void MoveKnightsOnPlatform() const
void JustEngagedWith(Unit *who) override
void StartIntermission(uint8 intermissionNum)
void SummonedCreatureDies(Creature *summon, Unit *) override
void EnterEvadeMode(EvadeReason) override
void EnterEvadeMode(EvadeReason) override
boss_remnant_of_a_fallen_king(Creature *creature)
void UpdateAI(uint32 diff) override
InstanceScript * _instance
void DoAction(int32 action) override
void JustSummoned(Creature *summon) override
void ContinueAttacking() const
void JustAppeared() override
InstanceScript * _instance
npc_anduin_wrynn_anduin_despair(Creature *creature)
void JustDied(Unit *) override
void JustAppeared() override
npc_anduin_wrynn_anduin_doubt(Creature *creature)
void UpdateAI(uint32) override
void JustAppeared() override
void JustDied(Unit *) override
void JustAppeared() override
void MovementInform(uint32 type, uint32 pointId) override
void HealReceived(Unit *, uint32 &heal) override
InstanceScript * _instance
void UpdateAI(uint32 diff) override
npc_anduin_wrynn_anduin_hope(Creature *creature)
void CheckForReleaseFromKingsmourne()
void JustAppeared() override
void JustSummoned(Creature *who) override
void JustDied(Unit *) override
void DoAction(int32 action) override
npc_anduin_wrynn_anduin_soul(Creature *creature)
void EnterEvadeMode(EvadeReason) override
void JustUnregisteredAreaTrigger(AreaTrigger *areaTrigger) override
npc_anduin_wrynn_beacon_of_hope(Creature *creature)
void IsSummonedBy(WorldObject *summoner) override
npc_anduin_wrynn_empty_vessel(Creature *creature)
void JustAppeared() override
void UpdateAI(uint32 diff) override
npc_anduin_wrynn_fiendish_soul(Creature *creature)
void JustEngagedWith(Unit *) override
void JustDied(Unit *) override
void EnterEvadeMode(EvadeReason) override
void UpdateAI(uint32 diff) override
npc_anduin_wrynn_grim_reflection(Creature *creature)
void JustDied(Unit *) override
void JustAppeared() override
void UpdateAI(uint32 diff) override
bool CanAIAttack(Unit const *target) const override
void JustAppeared() override
void WaypointPathEnded(uint32, uint32 pathId) override
void JustEngagedWith(Unit *) override
npc_anduin_wrynn_jaina(Creature *creature)
void IsSummonedBy(WorldObject *summoner) override
npc_anduin_wrynn_lost_soul(Creature *creature)
void UpdateAI(uint32 diff) override
void JustDied(Unit *) override
void JustAppeared() override
void JustDied(Unit *) override
void JustEngagedWith(Unit *) override
void DamageTaken(Unit *, uint32 &damage, DamageEffectType, SpellInfo const *) override
void EnterEvadeMode(EvadeReason) override
npc_anduin_wrynn_monstrous_soul(Creature *creature)
void UpdateAI(uint32 diff) override
void DoAction(int32 action) override
npc_anduin_wrynn_sylvanas(Creature *creature)
void UpdateAI(uint32 diff) override
void JustEngagedWith(Unit *) override
void JustAppeared() override
bool CanAIAttack(Unit const *target) const override
void UpdateAI(uint32 diff) override
bool CanAIAttack(Unit const *target) const override
npc_anduin_wrynn_uther(Creature *creature)
void JustAppeared() override
void JustEngagedWith(Unit *who) override