diff options
author | offl <11556157+offl@users.noreply.github.com> | 2021-04-20 17:38:17 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-20 17:38:17 +0300 |
commit | 158f877a4ecd0e10c53fb2ea4f584fbd6e9656d4 (patch) | |
tree | f1e9c98b3c03b0ff8069e979c59d2aa29753a35d /src | |
parent | ab46e6587f43ee95c759dae3157dcc80f860f8e1 (diff) |
Scripts/Gundrak: Update Moorabi to new model (#26437)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp | 280 |
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); } |