aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroffl <11556157+offl@users.noreply.github.com>2021-07-15 01:53:58 +0300
committerGitHub <noreply@github.com>2021-07-15 01:53:58 +0300
commitd7f80132c96526a3816af34dcf6e7c3443e183cc (patch)
tree2d688dcb707fe5936bf4a2868630d9c5d294eee7
parent6f8a7c5641081a087cb1399665cac72fa4aeb0c2 (diff)
Scripts/Ruby Sanctum: Update Saviana to new register model (#26698)
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp339
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);
}