114 { -4599.8057f, -2494.7551f, 2876.6255f, 4.694935f },
115 { -4618.8994f, -2526.8315f, 2876.6252f, 0.663225f },
116 { -4581.1006f, -2526.6892f, 2876.6257f, 2.460914f }
121 { -4573.2363f, -2517.875f, 2903.3594f },
122 { -4617.39f, -2499.2f, 2886.25f },
123 { -4620.2275f, -2535.092f, 2903.4875f },
124 { -4573.2363f, -2517.875f, 2885.7869f },
125 { -4617.3906f, -2499.1997f, 2902.f },
126 { -4598.722f, -2555.3784f, 2906.814f },
127 { -4580.137f, -2499.736f, 2887.0764f },
128 { -4624.4116f, -2517.2588f, 2886.9016f },
129 { -4624.4116f, -2517.2588f, 2904.4302f },
130 { -4580.137f, -2499.736f, 2902.3f },
131 { -4620.2275f, -2535.092f, 2887.8333f },
132 { -4577.932f, -2535.927f, 2902.615f },
133 { -4573.2363f, -2517.875f, 2903.3594f },
134 { -4577.932f, -2535.927f, 2885.7869f }
151 static constexpr uint8 VisualCount = 5;
152 static constexpr float TravelSpeed = 8.0f;
157 for (
uint8 i = 0; i < VisualCount; i++)
232 switch (spellInfo->
Id)
266 switch (spellInfo->
Id)
285 switch (spellInfo->
Id)
310 switch (spellInfo->
Id)
432 shadeOfMedivh->AI()->EnterEvadeMode(why);
662 for (
uint8 i = 0; i < 3; i++)
724 shadeOfMedivh->AI()->Talk(text);
804 Player* player = ObjectAccessor::GetPlayer(*at, guid);
805 if (!player || !player->IsAlive() || player->IsGameMaster())
First const & RAND(First const &first, Second const &second, Rest const &... rest)
@ ENCOUNTER_FRAME_DISENGAGE
@ ENCOUNTER_FRAME_UPDATE_PRIORITY
#define RegisterAreaTriggerAI(ai_name)
#define RegisterSpellScript(spell_script)
@ SPELL_EFFECT_APPLY_AURA
@ AURA_EFFECT_HANDLE_REAL
@ SPELL_AURA_PERIODIC_DUMMY
@ SPELL_AURA_PERIODIC_TRIGGER_SPELL
@ TRIGGERED_FULL_MASK
Used when doing CastSpell with triggered == true.
@ TRIGGERED_IGNORE_CAST_IN_PROGRESS
Will not check if a current cast is in progress.
@ TRIGGERED_DONT_REPORT_CAST_ERROR
Will return SPELL_FAILED_DONT_REPORT in CheckCast functions.
#define SpellEffectFn(F, I, N)
#define AuraEffectPeriodicFn(F, I, N)
#define AuraEffectRemoveFn(F, I, N, M)
static constexpr Position MedivhVisualSpellsPositions[14]
@ SAY_INFERNO_BOLT_WARNING
@ SAY_FLAME_WREATH_WARNING
@ SPELL_INFERNO_BOLT_MARKER
@ SPELL_REFORM_VISUAL_STATE_1
@ SPELL_FLAME_WREATH_AREA_DAMAGE
@ SPELL_ARCANE_BOLT_SELECTOR
@ SPELL_REFORM_VISUAL_STATE_2
@ SPELL_FLAME_WREATH_AREATRIGGER
@ SPELL_FLAME_WREATH_PERIODIC_DAMAGE
@ SPELL_PIERCING_MISSILES
@ SPELL_ARCANE_DISSOLVE_IN
@ SPELL_CEASELESS_WINTER_PERIODIC
@ SPELL_FLAME_WREATH_SELECTOR
@ SPELL_GUARDIANS_IMAGE_MISSILE
@ SPELL_CEASELESS_WINTER_DAMAGE
@ SPELL_PIERCING_MISSILES_DEBUFF
@ SPELLVISUAL_ARCANE_MISSILE
static constexpr Position GuardiansImagePosition[3]
static constexpr Position GuardiansImageMedivhPosition
void AddSC_boss_shade_of_medivh()
AreaTriggerAI(AreaTrigger *a, uint32 scriptId={}) noexcept
GuidUnorderedSet const & GetInsideUnits() const
uint32 GetTickNumber() const
AuraApplication const * GetTargetApplication() const
HookList< EffectApplyHandler > AfterEffectRemove
HookList< EffectPeriodicHandler > OnEffectPeriodic
InstanceScript *const instance
void JustEngagedWith(Unit *who) override
void _DespawnAtEvade(Seconds delayToRespawn=30s, Creature *who=nullptr)
bool _EnterEvadeMode(EvadeReason why=EvadeReason::Other)
void SetReactState(ReactStates st)
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
void Repeat(Milliseconds time)
void ScheduleEvent(uint32 eventId, Milliseconds time, uint32 group=0, uint8 phase=0)
void CancelEvent(uint32 eventId)
Creature * GetCreature(uint32 type)
void SendEncounterUnit(EncounterFrameType type, Unit const *unit, Optional< int32 > param1={}, Optional< int32 > param2={})
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
HookList< CastHandler > AfterCast
int32 GetEffectValueAsInt() const
HookList< HitHandler > OnHit
Unit * GetHitUnit() const
HookList< EffectHandler > OnEffectHitTarget
ObjectGuid m_originalCastId
TaskContext & Repeat(TaskScheduler::duration_t duration)
TaskScheduler & CancelAll()
TaskScheduler & Schedule(duration_t time, task_handler_t task)
TaskScheduler & ClearValidator()
Clears the validator which is asked if tasks are allowed to be executed.
TaskScheduler & Update()
Update the scheduler to the current time.
virtual void SetData(uint32 id, uint32 value)
SpellCastResult DoCastSelf(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)
virtual uint32 GetData(uint32 id) const
SpellCastResult DoCast(uint32 spellId)
int32 ModifyPower(Powers power, int32 val, bool withPowerUpdate=true)
void SendPlaySpellVisual(Unit *target, uint32 spellVisualId, uint8 missReason, uint8 reflectStatus, float travelSpeed, bool speedAsTime=false, float launchDelay=0.0f)
void SetPower(Powers power, int32 val, bool withPowerUpdate=true)
int32 GetMaxPower(Powers power) const
void SetUninteractible(bool apply)
void RemoveAuraFromStack(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT, uint16 num=1)
void NearTeleportTo(TeleportLocation const &target, bool casting=false)
bool HasUnitState(const uint32 f) const
float GetPowerPct(Powers power) const
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
void RemoveAllAreaTriggers(AreaTriggerRemoveReason reason=AreaTriggerRemoveReason::Default)
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
void SetPowerType(Powers power, bool sendUpdate=true, bool onInit=false)
InstanceScript * GetInstanceScript() const
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
void HandleScript(SpellEffIndex) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleEffectPeriodic(AuraEffect const *) const
bool Validate(SpellInfo const *) override
void HandleHitTarget(SpellEffIndex) const
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleInfernoBolt(SpellEffIndex) const
static constexpr std::array< uint8, 3 > ShadeOfMedivhEnergizeCycle
void PeriodicTick(AuraEffect const *aurEff) const
void OnRemove(AuraEffect const *, AuraEffectHandleModes) const
bool Validate(SpellInfo const *) override
void HandleAfterCast() const
bool Validate(SpellInfo const *) override
void HandleAfterCast() const
bool Validate(SpellInfo const *) override
void HandleScript(SpellEffIndex) const
void RandomShuffle(Iterator begin, Iterator end)
Reorder the elements of the iterator range randomly.
#define RegisterReturnToKarazhanCreatureAI(ai_name)
void OnUnitExit(Unit *unit, AreaTriggerExitReason) override
void OnUnitEnter(Unit *unit) override
void OnUnitExit(Unit *unit, AreaTriggerExitReason) override
void OnUnitEnter(Unit *unit) override
void OnUnitExit(Unit *unit, AreaTriggerExitReason) override
uint32 GetInsidePlayersCount()
void JustAppeared() override
void JustEngagedWith(Unit *) override
void JustDied(Unit *) override
boss_shade_of_medivh_guardians_image(Creature *creature)
void EnterEvadeMode(EvadeReason why) override
void UpdateAI(uint32 diff) override
uint8 _guardiansImageDefeatedCount
void JustDied(Unit *) override
void SpellHitTarget(WorldObject *target, SpellInfo const *spellInfo) override
void SpellHit(WorldObject *, SpellInfo const *spellInfo) override
boss_shade_of_medivh(Creature *creature)
void KilledUnit(Unit *victim) override
void SetData(uint32 id, uint32 value) override
void JustEngagedWith(Unit *who) override
void OnSpellFailed(SpellInfo const *spellInfo) override
uint8 _castInfernoBoltNext
void JustAppeared() override
void OnSpellStart(SpellInfo const *spellInfo) override
void UpdateAI(uint32 diff) override
uint32 GetData(uint32 id) const override
void DoAction(int32 action) override
void EnterEvadeMode(EvadeReason) override