aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoroffl <11556157+offl@users.noreply.github.com>2021-04-20 17:38:17 +0300
committerGitHub <noreply@github.com>2021-04-20 17:38:17 +0300
commit158f877a4ecd0e10c53fb2ea4f584fbd6e9656d4 (patch)
treef1e9c98b3c03b0ff8069e979c59d2aa29753a35d /src
parentab46e6587f43ee95c759dae3157dcc80f860f8e1 (diff)
Scripts/Gundrak: Update Moorabi to new model (#26437)
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp280
1 files changed, 129 insertions, 151 deletions
diff --git a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp
index 102ea3a85a9..d83012df2d3 100644
--- a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp
+++ b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp
@@ -68,131 +68,120 @@ enum Phases
PHASE_COMBAT
};
-class boss_moorabi : public CreatureScript
+struct boss_moorabi : public BossAI
{
- public:
- boss_moorabi() : CreatureScript("boss_moorabi") { }
-
- struct boss_moorabiAI : public BossAI
+ boss_moorabi(Creature* creature) : BossAI(creature, DATA_MOORABI), _transformed(false) { }
+
+ void Reset() override
+ {
+ _Reset();
+ _transformed = false;
+ events.SetPhase(PHASE_INTRO);
+ events.ScheduleEvent(EVENT_PHANTOM, Seconds(21), 0, PHASE_INTRO);
+ }
+
+ void JustEngagedWith(Unit* who) override
+ {
+ BossAI::JustEngagedWith(who);
+ Talk(SAY_AGGRO);
+ DoCastSelf(SPELL_MOJO_FRENZY, true);
+
+ events.SetPhase(PHASE_COMBAT);
+ events.ScheduleEvent(EVENT_GROUND_TREMOR, 18s);
+ events.ScheduleEvent(EVENT_NUMBLING_SHOUT, 10s);
+ events.ScheduleEvent(EVENT_DETERMINED_STAB, 20s);
+ events.ScheduleEvent(EVENT_TRANFORMATION, 12s);
+ }
+
+ void EnterEvadeMode(EvadeReason /*why*/) override
+ {
+ _DespawnAtEvade();
+ }
+
+ void JustSummoned(Creature* /*summon*/) override {}
+
+ uint32 GetData(uint32 type) const override
+ {
+ if (type == DATA_LESS_RABI)
+ return _transformed ? 0 : 1;
+ return 0;
+ }
+
+ void KilledUnit(Unit* victim) override
+ {
+ if (victim->GetTypeId() == TYPEID_PLAYER)
+ Talk(SAY_SLAY);
+ }
+
+ void JustDied(Unit* /*killer*/) override
+ {
+ _JustDied();
+ Talk(EMOTE_ACTIVATE_ALTAR);
+ Talk(SAY_DEATH);
+ }
+
+ void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override
+ {
+ if (spellInfo->Id == SPELL_TRANSFORMATION)
{
- boss_moorabiAI(Creature* creature) : BossAI(creature, DATA_MOORABI), _transformed(false) { }
-
- void Reset() override
- {
- _Reset();
- _transformed = false;
- events.SetPhase(PHASE_INTRO);
- events.ScheduleEvent(EVENT_PHANTOM, Seconds(21), 0, PHASE_INTRO);
- }
-
- void JustEngagedWith(Unit* who) override
- {
- BossAI::JustEngagedWith(who);
- Talk(SAY_AGGRO);
- DoCastSelf(SPELL_MOJO_FRENZY, true);
-
- events.SetPhase(PHASE_COMBAT);
- events.ScheduleEvent(EVENT_GROUND_TREMOR, 18s);
- events.ScheduleEvent(EVENT_NUMBLING_SHOUT, 10s);
- events.ScheduleEvent(EVENT_DETERMINED_STAB, 20s);
- events.ScheduleEvent(EVENT_TRANFORMATION, 12s);
- }
-
- void EnterEvadeMode(EvadeReason /*why*/) override
- {
- _DespawnAtEvade();
- }
-
- void JustSummoned(Creature* /*summon*/) override {}
-
- uint32 GetData(uint32 type) const override
- {
- if (type == DATA_LESS_RABI)
- return _transformed ? 0 : 1;
- return 0;
- }
+ _transformed = true;
+ Talk(EMOTE_TRANSFORMED);
+ events.CancelEvent(EVENT_TRANFORMATION);
+ me->RemoveAurasDueToSpell(SPELL_MOJO_FRENZY);
+ }
+ }
- void KilledUnit(Unit* victim) override
- {
- if (victim->GetTypeId() == TYPEID_PLAYER)
- Talk(SAY_SLAY);
- }
+ void UpdateAI(uint32 diff) override
+ {
+ if (!UpdateVictim() && !events.IsInPhase(PHASE_INTRO))
+ return;
- void JustDied(Unit* /*killer*/) override
- {
- _JustDied();
- Talk(EMOTE_ACTIVATE_ALTAR);
- Talk(SAY_DEATH);
- }
+ events.Update(diff);
+ if (me->HasUnitState(UNIT_STATE_CASTING))
+ return;
- void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override
+ while (uint32 eventId = events.ExecuteEvent())
+ {
+ switch (eventId)
{
- if (spellInfo->Id == SPELL_TRANSFORMATION)
- {
- _transformed = true;
- Talk(EMOTE_TRANSFORMED);
- events.CancelEvent(EVENT_TRANFORMATION);
- me->RemoveAurasDueToSpell(SPELL_MOJO_FRENZY);
- }
+ case EVENT_GROUND_TREMOR:
+ if (roll_chance_i(50))
+ Talk(SAY_QUAKE);
+ DoCastAOE(_transformed ? SPELL_QUAKE : SPELL_GROUND_TREMOR);
+ events.Repeat(Seconds(10));
+ break;
+ case EVENT_NUMBLING_SHOUT:
+ DoCastAOE(_transformed ? SPELL_NUMBING_ROAR : SPELL_NUMBING_SHOUT);
+ events.Repeat(Seconds(10));
+ break;
+ case EVENT_DETERMINED_STAB:
+ DoCastAOE(_transformed ? SPELL_DETERMINED_GORE : SPELL_DETERMINED_STAB);
+ events.Repeat(Seconds(8));
+ break;
+ case EVENT_TRANFORMATION:
+ Talk(EMOTE_BEGIN_TRANSFORM);
+ Talk(SAY_TRANSFORM);
+ DoCastSelf(SPELL_TRANSFORMATION);
+ DoCastSelf(SPELL_SUMMON_PHANTOM_TRANSFORM, true);
+ events.Repeat(Seconds(10));
+ break;
+ case EVENT_PHANTOM:
+ DoCastSelf(SPELL_SUMMON_PHANTOM, true);
+ events.Repeat(Seconds(20), Seconds(25));
+ break;
+ default:
+ break;
}
- void UpdateAI(uint32 diff) override
- {
- if (!UpdateVictim() && !events.IsInPhase(PHASE_INTRO))
- return;
-
- events.Update(diff);
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
-
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case EVENT_GROUND_TREMOR:
- if (roll_chance_i(50))
- Talk(SAY_QUAKE);
- DoCastAOE(_transformed ? SPELL_QUAKE : SPELL_GROUND_TREMOR);
- events.Repeat(Seconds(10));
- break;
- case EVENT_NUMBLING_SHOUT:
- DoCastAOE(_transformed ? SPELL_NUMBING_ROAR : SPELL_NUMBING_SHOUT);
- events.Repeat(Seconds(10));
- break;
- case EVENT_DETERMINED_STAB:
- DoCastAOE(_transformed ? SPELL_DETERMINED_GORE : SPELL_DETERMINED_STAB);
- events.Repeat(Seconds(8));
- break;
- case EVENT_TRANFORMATION:
- Talk(EMOTE_BEGIN_TRANSFORM);
- Talk(SAY_TRANSFORM);
- DoCastSelf(SPELL_TRANSFORMATION);
- DoCastSelf(SPELL_SUMMON_PHANTOM_TRANSFORM, true);
- events.Repeat(Seconds(10));
- break;
- case EVENT_PHANTOM:
- DoCastSelf(SPELL_SUMMON_PHANTOM, true);
- events.Repeat(Seconds(20), Seconds(25));
- break;
- default:
- break;
- }
-
- if(me->HasUnitState(UNIT_STATE_CASTING))
- return;
- }
-
- DoMeleeAttackIfReady();
- }
+ if(me->HasUnitState(UNIT_STATE_CASTING))
+ return;
+ }
- private:
- bool _transformed;
- };
+ DoMeleeAttackIfReady();
+ }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetGundrakAI<boss_moorabiAI>(creature);
- }
+private:
+ bool _transformed;
};
class achievement_less_rabi : public AchievementCriteriaScript
@@ -214,46 +203,35 @@ class achievement_less_rabi : public AchievementCriteriaScript
};
// 55163 - Mojo Frenzy
-class spell_moorabi_mojo_frenzy : public SpellScriptLoader
+class spell_moorabi_mojo_frenzy : public AuraScript
{
- public:
- spell_moorabi_mojo_frenzy() : SpellScriptLoader("spell_moorabi_mojo_frenzy") { }
-
- class spell_moorabi_mojo_frenzy_AuraScript : public AuraScript
- {
- PrepareAuraScript(spell_moorabi_mojo_frenzy_AuraScript);
-
- bool Validate(SpellInfo const* /*spell*/) override
- {
- return ValidateSpellInfo({ SPELL_MOJO_FRENZY_CAST_SPEED });
- }
-
- void HandlePeriodic(AuraEffect const* /*aurEff*/)
- {
- PreventDefaultAction();
-
- Unit* owner = GetUnitOwner();
- int32 castSpeedBonus = (100.0f - owner->GetHealthPct()) * 4; // between 0% and 400% cast speed bonus
- CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
- args.AddSpellBP0(castSpeedBonus);
- owner->CastSpell(owner, SPELL_MOJO_FRENZY_CAST_SPEED, args);
- }
-
- void Register() override
- {
- OnEffectPeriodic += AuraEffectPeriodicFn(spell_moorabi_mojo_frenzy_AuraScript::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
- }
- };
-
- AuraScript* GetAuraScript() const override
- {
- return new spell_moorabi_mojo_frenzy_AuraScript();
- }
+ PrepareAuraScript(spell_moorabi_mojo_frenzy);
+
+ bool Validate(SpellInfo const* /*spell*/) override
+ {
+ return ValidateSpellInfo({ SPELL_MOJO_FRENZY_CAST_SPEED });
+ }
+
+ void HandlePeriodic(AuraEffect const* /*aurEff*/)
+ {
+ PreventDefaultAction();
+
+ Unit* owner = GetUnitOwner();
+ int32 castSpeedBonus = (100.0f - owner->GetHealthPct()) * 4; // between 0% and 400% cast speed bonus
+ CastSpellExtraArgs args(TRIGGERED_FULL_MASK);
+ args.AddSpellBP0(castSpeedBonus);
+ owner->CastSpell(owner, SPELL_MOJO_FRENZY_CAST_SPEED, args);
+ }
+
+ void Register() override
+ {
+ OnEffectPeriodic += AuraEffectPeriodicFn(spell_moorabi_mojo_frenzy::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
+ }
};
void AddSC_boss_moorabi()
{
- new boss_moorabi();
+ RegisterGundrakCreatureAI(boss_moorabi);
new achievement_less_rabi();
- new spell_moorabi_mojo_frenzy();
+ RegisterSpellScript(spell_moorabi_mojo_frenzy);
}