diff options
author | offl <11556157+offl@users.noreply.github.com> | 2021-07-15 01:53:58 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-15 01:53:58 +0300 |
commit | d7f80132c96526a3816af34dcf6e7c3443e183cc (patch) | |
tree | 2d688dcb707fe5936bf4a2868630d9c5d294eee7 /src | |
parent | 6f8a7c5641081a087cb1399665cac72fa4aeb0c2 (diff) |
Scripts/Ruby Sanctum: Update Saviana to new register model (#26698)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp | 339 |
1 files changed, 153 insertions, 186 deletions
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp index 1b4e4546958..790cf502574 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp @@ -69,141 +69,130 @@ Position const SavianaRagefireFlyOutPos = {3155.51f, 683.844f, 95.0f, 4.69f}; Position const SavianaRagefireFlyInPos = {3151.07f, 636.443f, 79.540f, 4.69f}; Position const SavianaRagefireLandPos = {3151.07f, 636.443f, 78.649f, 4.69f}; -class boss_saviana_ragefire : public CreatureScript +struct boss_saviana_ragefire : public BossAI { - public: - boss_saviana_ragefire() : CreatureScript("boss_saviana_ragefire") { } - - struct boss_saviana_ragefireAI : public BossAI + boss_saviana_ragefire(Creature* creature) : BossAI(creature, DATA_SAVIANA_RAGEFIRE) { } + + void Reset() override + { + _Reset(); + me->SetReactState(REACT_AGGRESSIVE); + me->SetCanFly(false); + me->SetDisableGravity(false); + } + + void JustEngagedWith(Unit* who) override + { + BossAI::JustEngagedWith(who); + Talk(SAY_AGGRO); + events.Reset(); + events.ScheduleEvent(EVENT_ENRAGE, Seconds(20), EVENT_GROUP_LAND_PHASE); + events.ScheduleEvent(EVENT_FLAME_BREATH, Seconds(14), EVENT_GROUP_LAND_PHASE); + events.ScheduleEvent(EVENT_FLIGHT, Seconds(60), EVENT_GROUP_LAND_PHASE); + } + + void JustDied(Unit* /*killer*/) override + { + _JustDied(); + DoPlaySoundToSet(me, SOUND_ID_DEATH); + } + + void MovementInform(uint32 type, uint32 point) override + { + if (type != POINT_MOTION_TYPE && type != EFFECT_MOTION_TYPE) + return; + + switch (point) { - boss_saviana_ragefireAI(Creature* creature) : BossAI(creature, DATA_SAVIANA_RAGEFIRE) { } - - void Reset() override - { - _Reset(); - me->SetReactState(REACT_AGGRESSIVE); + case POINT_FLIGHT: + events.ScheduleEvent(EVENT_CONFLAGRATION, 1s); + Talk(SAY_CONFLAGRATION); + break; + case POINT_LAND: + events.ScheduleEvent(EVENT_LAND_GROUND, Milliseconds(1)); + break; + case POINT_LAND_GROUND: me->SetCanFly(false); me->SetDisableGravity(false); - } + me->SetReactState(REACT_AGGRESSIVE); + events.ScheduleEvent(EVENT_ENRAGE, Seconds(1), EVENT_GROUP_LAND_PHASE); + events.ScheduleEvent(EVENT_FLAME_BREATH, Seconds(2), Seconds(4), EVENT_GROUP_LAND_PHASE); + events.ScheduleEvent(EVENT_FLIGHT, Seconds(50), EVENT_GROUP_LAND_PHASE); + break; + case POINT_TAKEOFF: + events.ScheduleEvent(EVENT_AIR_MOVEMENT, Milliseconds(1)); + break; + default: + break; + } + } - void JustEngagedWith(Unit* who) override - { - BossAI::JustEngagedWith(who); - Talk(SAY_AGGRO); - events.Reset(); - events.ScheduleEvent(EVENT_ENRAGE, Seconds(20), EVENT_GROUP_LAND_PHASE); - events.ScheduleEvent(EVENT_FLAME_BREATH, Seconds(14), EVENT_GROUP_LAND_PHASE); - events.ScheduleEvent(EVENT_FLIGHT, Seconds(60), EVENT_GROUP_LAND_PHASE); - } + void EnterEvadeMode(EvadeReason /*why*/) override + { + _DespawnAtEvade(); + } - void JustDied(Unit* /*killer*/) override - { - _JustDied(); - DoPlaySoundToSet(me, SOUND_ID_DEATH); - } + void KilledUnit(Unit* victim) override + { + if (victim->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_KILL); + } - void MovementInform(uint32 type, uint32 point) override - { - if (type != POINT_MOTION_TYPE && type != EFFECT_MOTION_TYPE) - return; + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - switch (point) - { - case POINT_FLIGHT: - events.ScheduleEvent(EVENT_CONFLAGRATION, 1s); - Talk(SAY_CONFLAGRATION); - break; - case POINT_LAND: - events.ScheduleEvent(EVENT_LAND_GROUND, Milliseconds(1)); - break; - case POINT_LAND_GROUND: - me->SetCanFly(false); - me->SetDisableGravity(false); - me->SetReactState(REACT_AGGRESSIVE); - events.ScheduleEvent(EVENT_ENRAGE, Seconds(1), EVENT_GROUP_LAND_PHASE); - events.ScheduleEvent(EVENT_FLAME_BREATH, Seconds(2), Seconds(4), EVENT_GROUP_LAND_PHASE); - events.ScheduleEvent(EVENT_FLIGHT, Seconds(50), EVENT_GROUP_LAND_PHASE); - break; - case POINT_TAKEOFF: - events.ScheduleEvent(EVENT_AIR_MOVEMENT, Milliseconds(1)); - break; - default: - break; - } - } + events.Update(diff); - void EnterEvadeMode(EvadeReason /*why*/) override - { - _DespawnAtEvade(); - } + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - void KilledUnit(Unit* victim) override - { - if (victim->GetTypeId() == TYPEID_PLAYER) - Talk(SAY_KILL); - } - - void UpdateAI(uint32 diff) override + while (uint32 eventId = events.ExecuteEvent()) + { + switch (eventId) { - if (!UpdateVictim()) - return; - - events.Update(diff); - - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - while (uint32 eventId = events.ExecuteEvent()) + case EVENT_FLIGHT: { - switch (eventId) - { - case EVENT_FLIGHT: - { - me->SetCanFly(true); - me->SetDisableGravity(true); - me->SetReactState(REACT_PASSIVE); - me->AttackStop(); - Position pos; - pos.Relocate(me); - pos.m_positionZ += 10.0f; - me->GetMotionMaster()->MoveTakeoff(POINT_TAKEOFF, pos); - events.CancelEventGroup(EVENT_GROUP_LAND_PHASE); - break; - } - case EVENT_CONFLAGRATION: - DoCastSelf(SPELL_CONFLAGRATION, true); - break; - case EVENT_ENRAGE: - DoCastSelf(SPELL_ENRAGE); - Talk(EMOTE_ENRAGED); - events.Repeat(Seconds(24)); - break; - case EVENT_FLAME_BREATH: - DoCastVictim(SPELL_FLAME_BREATH); - events.Repeat(Seconds(20), Seconds(30)); - break; - case EVENT_AIR_MOVEMENT: - me->GetMotionMaster()->MovePoint(POINT_FLIGHT, SavianaRagefireFlyOutPos); - break; - case EVENT_LAND_GROUND: - me->GetMotionMaster()->MoveLand(POINT_LAND_GROUND, SavianaRagefireLandPos); - break; - default: - break; - } - - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; + me->SetCanFly(true); + me->SetDisableGravity(true); + me->SetReactState(REACT_PASSIVE); + me->AttackStop(); + Position pos; + pos.Relocate(me); + pos.m_positionZ += 10.0f; + me->GetMotionMaster()->MoveTakeoff(POINT_TAKEOFF, pos); + events.CancelEventGroup(EVENT_GROUP_LAND_PHASE); + break; } - - DoMeleeAttackIfReady(); + case EVENT_CONFLAGRATION: + DoCastSelf(SPELL_CONFLAGRATION, true); + break; + case EVENT_ENRAGE: + DoCastSelf(SPELL_ENRAGE); + Talk(EMOTE_ENRAGED); + events.Repeat(Seconds(24)); + break; + case EVENT_FLAME_BREATH: + DoCastVictim(SPELL_FLAME_BREATH); + events.Repeat(Seconds(20), Seconds(30)); + break; + case EVENT_AIR_MOVEMENT: + me->GetMotionMaster()->MovePoint(POINT_FLIGHT, SavianaRagefireFlyOutPos); + break; + case EVENT_LAND_GROUND: + me->GetMotionMaster()->MoveLand(POINT_LAND_GROUND, SavianaRagefireLandPos); + break; + default: + break; } - }; - CreatureAI* GetAI(Creature* creature) const override - { - return GetRubySanctumAI<boss_saviana_ragefireAI>(creature); + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; } + + DoMeleeAttackIfReady(); + } }; class ConflagrationTargetSelector @@ -218,80 +207,58 @@ class ConflagrationTargetSelector }; // 74452 - Conflagration -class spell_saviana_conflagration_init : public SpellScriptLoader +class spell_saviana_conflagration_init : public SpellScript { - public: - spell_saviana_conflagration_init() : SpellScriptLoader("spell_saviana_conflagration_init") { } - - class spell_saviana_conflagration_init_SpellScript : public SpellScript - { - PrepareSpellScript(spell_saviana_conflagration_init_SpellScript); - - bool Validate(SpellInfo const* /*spell*/) override - { - return ValidateSpellInfo({ SPELL_FLAME_BEACON, SPELL_CONFLAGRATION_2 }); - } - - void FilterTargets(std::list<WorldObject*>& targets) - { - targets.remove_if(ConflagrationTargetSelector()); - uint8 maxSize = uint8(GetCaster()->GetMap()->GetSpawnMode() & 1 ? 6 : 3); - if (targets.size() > maxSize) - Trinity::Containers::RandomResize(targets, maxSize); - } - - void HandleDummy(SpellEffIndex effIndex) - { - PreventHitDefaultEffect(effIndex); - GetCaster()->CastSpell(GetHitUnit(), SPELL_FLAME_BEACON, true); - GetCaster()->CastSpell(GetHitUnit(), SPELL_CONFLAGRATION_2, false); - } - - void Register() override - { - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_saviana_conflagration_init_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); - OnEffectHitTarget += SpellEffectFn(spell_saviana_conflagration_init_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } - }; - - SpellScript* GetSpellScript() const override - { - return new spell_saviana_conflagration_init_SpellScript(); - } + PrepareSpellScript(spell_saviana_conflagration_init); + + bool Validate(SpellInfo const* /*spell*/) override + { + return ValidateSpellInfo({ SPELL_FLAME_BEACON, SPELL_CONFLAGRATION_2 }); + } + + void FilterTargets(std::list<WorldObject*>& targets) + { + targets.remove_if(ConflagrationTargetSelector()); + uint8 maxSize = uint8(GetCaster()->GetMap()->GetSpawnMode() & 1 ? 6 : 3); + if (targets.size() > maxSize) + Trinity::Containers::RandomResize(targets, maxSize); + } + + void HandleDummy(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + GetCaster()->CastSpell(GetHitUnit(), SPELL_FLAME_BEACON, true); + GetCaster()->CastSpell(GetHitUnit(), SPELL_CONFLAGRATION_2, false); + } + + void Register() override + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_saviana_conflagration_init::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); + OnEffectHitTarget += SpellEffectFn(spell_saviana_conflagration_init::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } }; // 74455 - Conflagration -class spell_saviana_conflagration_throwback : public SpellScriptLoader +class spell_saviana_conflagration_throwback : public SpellScript { - public: - spell_saviana_conflagration_throwback() : SpellScriptLoader("spell_saviana_conflagration_throwback") { } - - class spell_saviana_conflagration_throwback_SpellScript : public SpellScript - { - PrepareSpellScript(spell_saviana_conflagration_throwback_SpellScript); - - void HandleScript(SpellEffIndex effIndex) - { - PreventHitDefaultEffect(effIndex); - GetHitUnit()->CastSpell(GetCaster(), uint32(GetEffectValue()), true); - GetHitUnit()->GetMotionMaster()->MovePoint(POINT_LAND, SavianaRagefireFlyInPos); - } - - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_saviana_conflagration_throwback_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } - }; - - SpellScript* GetSpellScript() const override - { - return new spell_saviana_conflagration_throwback_SpellScript(); - } + PrepareSpellScript(spell_saviana_conflagration_throwback); + + void HandleScript(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + GetHitUnit()->CastSpell(GetCaster(), uint32(GetEffectValue()), true); + GetHitUnit()->GetMotionMaster()->MovePoint(POINT_LAND, SavianaRagefireFlyInPos); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_saviana_conflagration_throwback::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } }; void AddSC_boss_saviana_ragefire() { - new boss_saviana_ragefire(); - new spell_saviana_conflagration_init(); - new spell_saviana_conflagration_throwback(); + RegisterRubySanctumCreatureAI(boss_saviana_ragefire); + RegisterSpellScript(spell_saviana_conflagration_init); + RegisterSpellScript(spell_saviana_conflagration_throwback); } |