229#define MAX_SUMMONS_PHASE_TWO_10MAN 6
230#define MAX_SUMMONS_PHASE_TWO_25MAN 12
232#define MAX_RANGE_HOVER_DISK_SPAWNPOINTS 8
235 { 782.9821f, 1296.652f, 282.1114f, 0.0f },
236 { 764.3126f, 1328.871f, 282.3091f, 0.0f },
237 { 725.8506f, 1306.749f, 282.2698f, 0.0f },
238 { 744.5175f, 1274.396f, 282.3402f, 0.0f },
239 { 764.3936f, 1274.371f, 282.6011f, 0.0f },
240 { 779.3761f, 1316.166f, 282.1653f, 0.0f },
241 { 744.4915f, 1328.901f, 282.2112f, 0.0f },
242 { 729.2364f, 1287.328f, 282.4173f, 0.0f }
245#define MAX_MELEE_HOVER_DISK_SPAWNPOINTS 4
248 { 754.4617f, 1283.859f, 285.0522f, 0.0f },
249 { 771.7864f, 1301.853f, 285.0522f, 0.0f },
250 { 753.9635f, 1319.003f, 285.0522f, 0.0f },
251 { 736.4914f, 1301.683f, 285.0522f, 0.0f }
254#define MAX_MELEE_HOVER_DISK_WAYPOINTS 16
258 { 766.2931f, 1312.904f, 277.0551f, 0.0f },
259 { 754.3397f, 1319.759f, 274.0536f, 0.0f },
260 { 742.1018f, 1312.714f, 270.1367f, 0.0f },
261 { 735.6851f, 1301.422f, 266.7208f, 0.0f },
263 { 742.6257f, 1313.471f, 275.9713f, 0.0f },
264 { 736.8845f, 1301.921f, 274.0264f, 0.0f },
265 { 742.6632f, 1289.951f, 269.8603f, 0.0f },
266 { 754.3682f, 1283.942f, 266.6098f, 0.0f },
268 { 742.2078f, 1290.518f, 276.2484f, 0.0f },
269 { 754.5398f, 1284.311f, 273.5815f, 0.0f },
270 { 766.5588f, 1290.345f, 269.6655f, 0.0f },
271 { 773.4768f, 1301.474f, 266.5821f, 0.0f },
273 { 766.1189f, 1290.197f, 276.9436f, 0.0f },
274 { 771.9507f, 1301.602f, 273.9712f, 0.0f },
275 { 766.1253f, 1313.451f, 270.4991f, 0.0f },
276 { 754.5378f, 1319.399f, 266.6653f, 0.0f }
279#define MAX_MALYGOS_POS 10
282 { 754.544f, 1301.71f, 320.01f, 0.0f },
283 { 754.393f, 1301.27f, 292.91f, 0.0f },
284 { 754.362f, 1301.61f, 266.17f, 0.0f },
285 { 754.695f, 1301.66f, 316.65f, 0.0f },
286 { 755.681f, 1298.41f, 220.06f, 0.0f }
292#define TEN_MINUTES (10*MINUTE*IN_MILLISECONDS)
458 pos.
m_positionZ = alexstraszaBunny->GetPositionZ();
459 alexstraszaBunny->GetNearPoint2D(
nullptr, pos.
m_positionX, pos.
m_positionY, 30.0f, alexstraszaBunny->GetAbsoluteAngle(
me));
630 creature->DespawnOrUnsummon();
820 alexstraszaBunny->GetNearPoint2D(
nullptr, randomPosOnRadius.
m_positionX, randomPosOnRadius.
m_positionY, 120.0f, alexstraszaBunny->GetAbsoluteAngle(
me));
836 for (
uint8 meleeDisks = 0; meleeDisks < 2; meleeDisks++)
849 for (
uint8 rangeDisks = 5; rangeDisks < 8; rangeDisks++)
857 for (
uint8 meleeDisks = 2; meleeDisks < 4; meleeDisks++)
928 if (
Vehicle* drakeVehicle = tempSurgeTarget->GetVehicleKit())
930 if (
Unit* passenger = drakeVehicle->GetPassenger(0))
1157 if (vehicleTemp->GetPassenger(0) && vehicleTemp->GetPassenger(0)->GetTypeId() ==
TYPEID_PLAYER)
1159 vehicleTemp->RemoveAllPassengers();
1178 if (
Unit* passenger = hoverDisk->GetPassenger(0))
1385 else if (malygos->AI()->GetData(
DATA_PHASE) == 0)
1538 if (unit->GetTypeId() ==
TYPEID_UNIT && unit->GetVehicleKit())
1563 if (targets.empty())
1635 for (
ThreatReference const* ref : caster->GetThreatManager().GetUnsortedThreatList())
1639 if (targetPlayer->IsGameMaster())
1730 if (passenger->GetVehicleBase() && passenger->GetVehicleBase()->GetEntry() ==
NPC_HOVER_DISK_MELEE)
1750 if (targets.empty())
1760 if (targets.size() > 1)
1765 std::list<WorldObject*> playersWithoutDisk;
1767 for (std::list<WorldObject*>::iterator itr = targets.begin(); itr != targets.end(); ++itr)
1769 playersWithoutDisk.push_back(*itr);
1772 if (!playersWithoutDisk.empty())
1773 targets = playersWithoutDisk;
1777 if (!targets.empty())
1784 if (!targets.empty())
1786 if (targets.size() > 1)
1789 if (
WorldObject* filteredTarget = targets.front())
1799 .SetOriginalCaster(
GetCaster()->GetGUID()));
1900 Position const offset = { 0.0f, 0.0f, -80.0f, 0.0f };
1949 if (targets.empty())
1953 std::list<WorldObject*> selectedTargets = targets;
1957 for (std::list<WorldObject*>::const_iterator itr = selectedTargets.begin(); itr != selectedTargets.end(); ++itr)
1963 if (
Unit* passenger = vehicle->GetPassenger(0))
1993 for (std::list<WorldObject*>::iterator itr = targets.begin(); itr != targets.end();)
2008 targets.erase(itr++);
@ TEMPSUMMON_MANUAL_DESPAWN
float frand(float min, float max)
#define RegisterSpellScript(spell_script)
@ TARGET_DEST_CASTER_RADIUS
@ TARGET_UNIT_SRC_AREA_ENEMY
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_SEND_EVENT
@ SPELL_EFFECT_SCHOOL_DAMAGE
@ AURA_EFFECT_HANDLE_REAL
@ TRIGGERED_FULL_MASK
Used when doing CastSpell with triggered == true.
#define SpellEffectFn(F, I, N)
#define SpellObjectAreaTargetSelectFn(F, I, N)
#define SpellDestinationTargetSelectFn(F, I, N)
#define AuraEffectApplyFn(F, I, N, M)
#define AuraEffectRemoveFn(F, I, N, M)
Position const AlexstraszaSpawnPos
#define MAX_RANGE_HOVER_DISK_SPAWNPOINTS
@ LIGHT_CHANGE_DIMENSIONS
@ LIGHT_OBSCURE_ARCANE_RUNES
@ DATA_LAST_TARGET_BARRAGE_GUID
@ DATA_FIRST_SURGE_TARGET_GUID
@ DATA_LAST_OVERLOAD_GUID
@ ACTION_HANDLE_P_THREE_INTRO
@ ACTION_LAND_ENCOUNTER_START
@ ACTION_SET_DISK_VICTIM_CHASE
void AddSC_boss_malygos()
@ SPELL_CLEAR_ALL_DEBUFFS
@ SPELL_ARCANE_STORM_EXTRA_VISUAL
@ SPELL_POWER_SPARK_MALYGOS
@ SPELL_POWER_SPARK_DEATH
@ SPELL_PORTAL_VISUAL_CLOSED
@ SPELL_SUMMON_ARCANE_BOMB
@ SPELL_SUMMON_RED_DRAGON_BUDDY_F_CAST
@ SPELL_RIDE_RED_DRAGON_BUDDY
@ SPELL_ARCANE_BOMB_TRIGGER
@ SPELL_DESTROY_PLATFORM_BOOM_VISUAL
@ SPELL_ARCANE_BARRAGE_DAMAGE
@ SPELL_DESTROY_PLATFORM_CHANNEL
@ SPELL_SURGE_OF_POWER_PHASE_3_10
@ SPELL_ARCANE_OVERLOAD_1
@ SPELL_ARCANE_BOMB_KNOCKBACK_DAMAGE
@ SPELL_ALEXSTRASZAS_GIFT_BEAM_VISUAL
@ SPELL_SURGE_OF_POWER_PHASE_3_25
@ SPELL_DESTROY_PLATFORM_EVENT
@ SPELL_STATIC_FIELD_MISSLE
@ SPELL_SURGE_OF_POWER_WARNING_SELECTOR_25
@ SPELL_SUMMON_POWER_PARK
@ SPELL_TELEPORT_VISUAL_ONLY
@ SPELL_SURGE_OF_POWER_P_II
@ SPELL_ARCANE_STORM_P_III
Position const RangeHoverDisksSpawnPositions[MAX_RANGE_HOVER_DISK_SPAWNPOINTS]
#define MAX_SUMMONS_PHASE_TWO_25MAN
@ EMOTE_POWER_SPARK_SUMMONED
@ SAY_KILLED_PLAYER_P_THREE
@ SAY_KILLED_PLAYER_P_TWO
@ EMOTE_SURGE_OF_POWER_WARNING_P3
@ SAY_SPELL_CASTING_P_THREE
@ EMOTE_SURGE_OF_POWER_WARNING_P2
@ SAY_KILLED_PLAYER_P_ONE
@ EMOTE_HIT_BERSERKER_TIMER
Position const MalygosPositions[MAX_MALYGOS_POS]
Position const HeartOfMagicSpawnPos
Position const MeleeHoverDisksSpawnPositions[MAX_RANGE_HOVER_DISK_SPAWNPOINTS]
Position const MeleeHoverDisksWaypoints[MAX_MELEE_HOVER_DISK_WAYPOINTS]
#define MAX_MELEE_HOVER_DISK_SPAWNPOINTS
@ POINT_DESTROY_PLATFORM_P_TWO
@ POINT_NEAR_RANDOM_PORTAL_P_NONE
@ POINT_LIFT_IN_AIR_P_ONE
@ POINT_LAND_AFTER_VORTEX_P_ONE
@ POINT_PHASE_ONE_TO_TWO_TRANSITION
@ POINT_SURGE_OF_POWER_P_TWO
@ POINT_FLY_OUT_OF_PLATFORM_P_TWO
#define MAX_SUMMONS_PHASE_TWO_10MAN
@ ACHIEV_TIMED_START_EVENT
#define MAX_MELEE_HOVER_DISK_WAYPOINTS
@ EVENT_LAND_START_ENCOUNTER
@ EVENT_SUMMON_ARCANE_BOMB
@ EVENT_MOVE_TO_POINT_SURGE_P_TWO
@ EVENT_DELAYED_REINFORCEMENTS
@ EVENT_SURGE_OF_POWER_P_THREE
@ EVENT_MOVE_TO_P_THREE_POINT
@ EVENT_LIGHT_DIMENSION_CHANGE
@ EVENT_SURGE_OF_POWER_P_TWO
@ EVENT_PATHING_AROUND_PLATFORM
@ EVENT_PREVENT_SAY_SPAM_ON_KILL
@ EVENT_FLY_OUT_OF_PLATFORM
@ EVENT_DELAY_MOVE_TO_DESTROY_P
@ EVENT_START_FIRST_RANDOM_PORTAL
@ EVENT_MOVE_TO_VORTEX_POINT
HookList< EffectApplyHandler > AfterEffectRemove
HookList< EffectApplyHandler > OnEffectApply
InstanceScript *const instance
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
void SetHomePosition(float x, float y, float z, float o)
void SetCanMelee(bool canMelee, bool fleeFromMelee=false)
void GetRespawnPosition(float &x, float &y, float &z, float *ori=nullptr, float *dist=nullptr) const
void SetReactState(ReactStates st)
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
void SetImmuneToAll(bool apply) override
void CancelEventGroup(uint32 group)
void ScheduleEvent(uint32 eventId, Milliseconds time, uint32 group=0, uint8 phase=0)
void SetPhase(uint8 phase)
ExactDistanceCheck(Unit *source, float dist)
bool operator()(WorldObject *unit)
void RemoveFlag(GameObjectFlags flags)
virtual bool SetBossState(uint32 id, EncounterState state)
virtual ObjectGuid GetGuidData(uint32 type) const override
EncounterState GetBossState(uint32 id) const
void TriggerGameEvent(uint32 gameEventId, WorldObject *source=nullptr, WorldObject *target=nullptr) override
virtual bool CheckRequiredBosses(uint32, Player const *=nullptr) const
IsCreatureVehicleCheck(bool isVehicle)
bool operator()(WorldObject *obj)
IsPlayerOnHoverDisk(bool isOnHoverDisk)
bool operator()(WorldObject *obj)
GameObject * GetGameObject(ObjectGuid const &guid)
void SetZoneOverrideLight(uint32 zoneId, uint32 areaLightId, uint32 overrideLightId, Milliseconds transitionTime)
Difficulty GetDifficultyID() const
Creature * GetCreature(ObjectGuid const &guid)
MovementGeneratorType GetCurrentMovementGeneratorType() const
void MoveChase(Unit *target, Optional< ChaseRange > dist={}, Optional< ChaseAngle > angle={})
void MoveTakeoff(uint32 id, Position const &pos, Optional< int32 > tierTransitionId={}, Optional< float > velocity={}, MovementWalkRunSpeedSelectionMode speedSelectionMode=MovementWalkRunSpeedSelectionMode::Default)
void MovePoint(uint32 id, Position const &pos, bool generatePath=true, Optional< float > finalOrient={}, Optional< float > speed={}, MovementWalkRunSpeedSelectionMode speedSelectionMode=MovementWalkRunSpeedSelectionMode::Default, Optional< float > closeEnoughDistance={})
void MoveLand(uint32 id, Position const &pos, Optional< int32 > tierTransitionId={}, Optional< float > velocity={}, MovementWalkRunSpeedSelectionMode speedSelectionMode=MovementWalkRunSpeedSelectionMode::Default)
void MoveFollow(Unit *target, float dist, ChaseAngle angle, Optional< Milliseconds > duration={}, MovementSlot slot=MOTION_SLOT_ACTIVE)
void MoveCirclePath(float x, float y, float z, float radius, bool clockwise, uint8 stepCount, Optional< Milliseconds > duration={}, Optional< float > speed={}, MovementWalkRunSpeedSelectionMode speedSelectionMode=MovementWalkRunSpeedSelectionMode::Default)
static ObjectGuid const Empty
static Creature * ToCreature(Object *o)
float GetObjectScale() const
static Unit * ToUnit(Object *o)
static ObjectGuid GetGUID(Object const *o)
static Player * ToPlayer(Object *o)
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
Creature * GetHitCreature() const
Player * GetHitPlayer() const
HookList< HitHandler > AfterHit
HookList< DestinationTargetSelectHandler > OnDestinationTargetSelect
HookList< HitHandler > OnHit
HookList< EffectHandler > OnEffectHit
Unit * GetHitUnit() const
int32 GetEffectValue() const
SpellEffectInfo const & GetEffectInfo() const
HookList< EffectHandler > OnEffectHitTarget
HookList< EffectHandler > OnEffectLaunchTarget
SpellInfo const * GetSpellInfo() const
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
void DespawnIf(T const &predicate)
void DoAction(int32 info, Predicate &&predicate, uint16 max=0)
virtual void DoAction(int32)
SpellCastResult DoCastSelf(uint32 spellId, CastSpellExtraArgs const &args={})
SpellCastResult DoCastVictim(uint32 spellId, CastSpellExtraArgs const &args={})
virtual ObjectGuid GetGUID(int32=0) const
Unit * SelectTarget(SelectTargetMethod targetType, uint32 offset=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
virtual void SetGUID(ObjectGuid const &, int32=0)
SpellCastResult DoCastAOE(uint32 spellId, CastSpellExtraArgs const &args={})
SpellCastResult DoCast(uint32 spellId)
float GetHealthPct() const
float GetSpeed(UnitMoveType mtype) const
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
void SetControlled(bool apply, UnitState state)
void SetFaction(uint32 faction) override
void InterruptNonMeleeSpells(bool withDelayed, uint32 spellid=0, bool withInstant=true)
Unit * GetVehicleBase() const
MotionMaster * GetMotionMaster()
void SetFacingToObject(WorldObject const *object, bool force=true)
bool SetDisableGravity(bool disable, bool updateAnimTier=true)
void SetUninteractible(bool apply)
bool SetCanFly(bool enable)
void NearTeleportTo(Position const &pos, bool casting=false)
void SetSpeedRate(UnitMoveType mtype, float rate)
bool HasUnitState(const uint32 f) const
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
Vehicle * GetVehicleKit() const
bool operator()(ObjectGuid guid)
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)
void setActive(bool isActiveObject)
GameObject * SummonGameObject(uint32 entry, Position const &pos, QuaternionData const &rot, Seconds respawnTime, GOSummonType summonType=GO_SUMMON_TIMED_OR_CORPSE_DESPAWN)
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
float GetDistance(WorldObject const *obj) const
virtual void SetData(uint32, uint32)
bool OnCheck(Player *source, Unit *) override
achievement_denyin_the_scion()
GameObject * _alexstraszaGift
void OnApply(AuraEffect const *, AuraEffectHandleModes)
spell_alexstrasza_gift_beam_visual()
void OnRemove(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
void OnApply(AuraEffect const *, AuraEffectHandleModes)
void OnRemove(AuraEffect const *, AuraEffectHandleModes)
void ResizeEffectRadiusTargetChecker(std::list< WorldObject * > &targets)
void HandleVisual(SpellEffIndex)
void FilterTargets(std::list< WorldObject * > &targets)
bool Validate(SpellInfo const *) override
void OnApply(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
void OnRemove(AuraEffect const *, AuraEffectHandleModes)
void HandleDummy(SpellEffIndex)
void FilterTargets(std::list< WorldObject * > &targets)
bool Validate(SpellInfo const *) override
void SendThreeTargets(std::list< WorldObject * > &targets)
void HandleScript(SpellEffIndex)
void OnRemove(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
void HandleScript(SpellEffIndex)
void FilterMeleeHoverDiskPassangers(std::list< WorldObject * > &targets)
void TriggerDamageSpellFromPlayer()
void HandleScript(SpellEffIndex)
void SetDest(SpellDestination &dest)
@ DATA_POWER_SPARKS_HANDLING
@ GO_ALEXSTRASZA_S_GIFT_10
@ GO_ALEXSTRASZA_S_GIFT_25
#define RegisterEyeOfEternityCreatureAI(ai_name)
@ SPELL_RIDE_RED_DRAGON_TRIGGERED
@ DATA_HEART_OF_MAGIC_GUID
@ DATA_ALEXSTRASZA_BUNNY_GUID
@ DATA_FOCUSING_IRIS_GUID
@ DATA_GIFT_BOX_BUNNY_GUID
TC_GAME_API GameObject * GetGameObject(WorldObject const &u, ObjectGuid const &guid)
TC_GAME_API Player * GetPlayer(Map const *, ObjectGuid const &guid)
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
void RandomResize(C &container, std::size_t requestedSize)
constexpr void SetOrientation(float orientation)
constexpr float GetPositionX() const
constexpr float GetPositionY() const
float GetExactDist2d(const float x, const 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)
T const & RAID_MODE(T const &normal10, T const &normal25) const
Difficulty GetDifficulty() const
void RelocateOffset(Position const &offset)
void UpdateAI(uint32 diff) override
void MoveInLineOfSight(Unit *who) override
bool _flyingOutOfPlatform
void JustEngagedWith(Unit *) override
ObjectGuid _surgeTargetGUID[3]
void DamageTaken(Unit *, uint32 &damage, DamageEffectType, SpellInfo const *) override
uint8 _preparingPulsesChecker
void SetData(uint32 data, uint32 value) override
ObjectGuid GetGUID(int32 type) const override
bool _arcaneReinforcements
void JustDied(Unit *) override
void DoAction(int32 action) override
bool _performingSurgeOfPower
void UpdateAI(uint32 diff) override
uint32 GetData(uint32 data) const override
void MovementInform(uint32 type, uint32 id) override
void SpellHit(WorldObject *caster, SpellInfo const *spellInfo) override
void EnterEvadeMode(EvadeReason) override
void SetPhase(uint8 phase, bool setEvents=false)
bool _performingDestroyPlatform
ObjectGuid _arcaneOverloadGUID
boss_malygos(Creature *creature)
void KilledUnit(Unit *victim) override
void SetGUID(ObjectGuid const &guid, int32 id) override
ObjectGuid _lastHitByArcaneBarrageGUID
bool _firstCyclicMovementStarted
void IsSummonedBy(WorldObject *summoner) override
void UpdateAI(uint32) override
void DoAction(int32) override
InstanceScript * _instance
npc_arcane_overload(Creature *creature)
void SpellHit(WorldObject *, SpellInfo const *spellInfo) override
void DoAction(int32 action) override
npc_caster_hover_disk(Creature *creature)
InstanceScript * _instance
void PassengerBoarded(Unit *unit, int8, bool apply) override
== Fields =======================================
void EnterEvadeMode(EvadeReason) override
void MovementInform(uint32 type, uint32 id) override
npc_melee_hover_disk(Creature *creature)
void DoAction(int32) override
void PassengerBoarded(Unit *unit, int8, bool apply) override
== Fields =======================================
void UpdateAI(uint32 diff) override
InstanceScript * _instance
void DoAction(int32) override
InstanceScript * _instance
void EnterEvadeMode(EvadeReason) override
npc_nexus_lord(Creature *creature)
void UpdateAI(uint32 diff) override
void JustDied(Unit *) override
void SpellHit(WorldObject *, SpellInfo const *spellInfo) override
npc_portal_eoe(Creature *creature)
InstanceScript * _instance
void UpdateAI(uint32) override
InstanceScript * _instance
npc_power_spark(Creature *creature)
void UpdateAI(uint32) override
void JustDied(Unit *) override
InstanceScript * _instance
void UpdateAI(uint32 diff) override
void EnterEvadeMode(EvadeReason) override
void JustDied(Unit *) override
void JustEngagedWith(Unit *) override
void IsSummonedBy(WorldObject *) override
void AttackStart(Unit *) override
== Triggered Actions Requested ==================
npc_scion_of_eternity(Creature *creature)
npc_static_field(Creature *creature)
void IsSummonedBy(WorldObject *) override
npc_wyrmrest_skytalon(Creature *creature)
void IsSummonedBy(WorldObject *summoner) override
void PassengerBoarded(Unit *, int8, bool apply) override
== Fields =======================================
void UpdateAI(uint32 diff) override