diff options
author | offl <11556157+offl@users.noreply.github.com> | 2021-04-13 10:34:07 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-13 09:34:07 +0200 |
commit | fe41744c7a082cf726ec63ace9f823f47d80a5a0 (patch) | |
tree | 9360e5a632843cbcace911e2567799b7e8cab47a | |
parent | 07fe74b2333567d0c51b22e587396ddc70da1ffb (diff) |
Scripts: Update Azuregos to new model (#26392)
Co-authored-by: offl <offl@users.noreply.github.com>
-rw-r--r-- | src/server/scripts/Kalimdor/boss_azuregos.cpp | 254 |
1 files changed, 116 insertions, 138 deletions
diff --git a/src/server/scripts/Kalimdor/boss_azuregos.cpp b/src/server/scripts/Kalimdor/boss_azuregos.cpp index c07f462e44c..4194c5656fa 100644 --- a/src/server/scripts/Kalimdor/boss_azuregos.cpp +++ b/src/server/scripts/Kalimdor/boss_azuregos.cpp @@ -21,12 +21,12 @@ #include "ScriptedCreature.h" #include "SpellScript.h" -enum Say +enum AzuregosTexts { SAY_TELEPORT = 0 }; -enum Spells +enum AzuregosSpells { SPELL_MARK_OF_FROST = 23182, SPELL_AURA_OF_FROST = 23186, @@ -39,7 +39,7 @@ enum Spells SPELL_ENRAGE = 23537 }; -enum Events +enum AzuregosEvents { EVENT_MARK_OF_FROST = 1, EVENT_MANA_STORM, @@ -51,114 +51,103 @@ enum Events EVENT_ENRAGE }; -class boss_azuregos : public CreatureScript +struct boss_azuregos : public WorldBossAI { - public: - boss_azuregos() : CreatureScript("boss_azuregos") { } - - struct boss_azuregosAI : public WorldBossAI + boss_azuregos(Creature* creature) : WorldBossAI(creature) + { + _enraged = false; + } + + void Reset() override + { + _Reset(); + } + + void JustEngagedWith(Unit* /*who*/) override + { + DoCast(me, SPELL_MARK_OF_FROST_AURA, true); + _enraged = false; + + events.ScheduleEvent(EVENT_MARK_OF_FROST, 35s); + events.ScheduleEvent(EVENT_MANA_STORM, 5s, 17s); + events.ScheduleEvent(EVENT_CHILL, 10s, 30s); + events.ScheduleEvent(EVENT_BREATH, 2s, 8s); + events.ScheduleEvent(EVENT_TELEPORT, 30s); + events.ScheduleEvent(EVENT_REFLECT, 15s, 30s); + events.ScheduleEvent(EVENT_CLEAVE, 7s); + } + + void KilledUnit(Unit* who) override + { + if (who->GetTypeId() == TYPEID_PLAYER) + who->CastSpell(who, SPELL_MARK_OF_FROST, true); + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + events.Update(diff); + + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + + while (uint32 eventId = events.ExecuteEvent()) { - boss_azuregosAI(Creature* creature) : WorldBossAI(creature) - { - _enraged = false; - } - - void Reset() override - { - _Reset(); - } - - void JustEngagedWith(Unit* /*who*/) override - { - DoCast(me, SPELL_MARK_OF_FROST_AURA, true); - _enraged = false; - - events.ScheduleEvent(EVENT_MARK_OF_FROST, 35s); - events.ScheduleEvent(EVENT_MANA_STORM, 5s, 17s); - events.ScheduleEvent(EVENT_CHILL, 10s, 30s); - events.ScheduleEvent(EVENT_BREATH, 2s, 8s); - events.ScheduleEvent(EVENT_TELEPORT, 30s); - events.ScheduleEvent(EVENT_REFLECT, 15s, 30s); - events.ScheduleEvent(EVENT_CLEAVE, 7s); - } - - void KilledUnit(Unit* who) override + switch (eventId) { - if (who->GetTypeId() == TYPEID_PLAYER) - who->CastSpell(who, SPELL_MARK_OF_FROST, true); - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - while (uint32 eventId = events.ExecuteEvent()) + case EVENT_MANA_STORM: + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 60.0f, true)) + DoCast(target, SPELL_MANA_STORM); + events.ScheduleEvent(EVENT_MANA_STORM, 7500ms, 12500ms); + break; + case EVENT_CHILL: + DoCastVictim(SPELL_CHILL); + events.ScheduleEvent(EVENT_CHILL, 13s, 25s); + break; + case EVENT_BREATH: + DoCastVictim(SPELL_FROST_BREATH); + events.ScheduleEvent(EVENT_BREATH, 10s, 15s); + break; + case EVENT_TELEPORT: { - switch (eventId) - { - case EVENT_MANA_STORM: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 60.0f, true)) - DoCast(target, SPELL_MANA_STORM); - events.ScheduleEvent(EVENT_MANA_STORM, 7500ms, 12500ms); - break; - case EVENT_CHILL: - DoCastVictim(SPELL_CHILL); - events.ScheduleEvent(EVENT_CHILL, 13s, 25s); - break; - case EVENT_BREATH: - DoCastVictim(SPELL_FROST_BREATH); - events.ScheduleEvent(EVENT_BREATH, 10s, 15s); - break; - case EVENT_TELEPORT: - { - Talk(SAY_TELEPORT); - for (auto const& pair : me->GetCombatManager().GetPvECombatRefs()) - if (Player* player = pair.second->GetOther(me)->ToPlayer()) - DoTeleportPlayer(player, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()+3, player->GetOrientation()); - - ResetThreatList(); - events.ScheduleEvent(EVENT_TELEPORT, 30s); - break; - } - case EVENT_REFLECT: - DoCast(me, SPELL_REFLECT); - events.ScheduleEvent(EVENT_REFLECT, 20s, 35s); - break; - case EVENT_CLEAVE: - DoCastVictim(SPELL_CLEAVE); - events.ScheduleEvent(EVENT_CLEAVE, 7s); - break; - default: - break; - } - - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; + Talk(SAY_TELEPORT); + for (auto const& pair : me->GetCombatManager().GetPvECombatRefs()) + if (Player* player = pair.second->GetOther(me)->ToPlayer()) + DoTeleportPlayer(player, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()+3, player->GetOrientation()); + + ResetThreatList(); + events.ScheduleEvent(EVENT_TELEPORT, 30s); + break; } - - if (HealthBelowPct(26) && !_enraged) - { - DoCast(me, SPELL_ENRAGE); - _enraged = true; - } - - DoMeleeAttackIfReady(); + case EVENT_REFLECT: + DoCast(me, SPELL_REFLECT); + events.ScheduleEvent(EVENT_REFLECT, 20s, 35s); + break; + case EVENT_CLEAVE: + DoCastVictim(SPELL_CLEAVE); + events.ScheduleEvent(EVENT_CLEAVE, 7s); + break; + default: + break; } - private: - bool _enraged; - }; + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; + } - CreatureAI* GetAI(Creature* creature) const override + if (HealthBelowPct(26) && !_enraged) { - return new boss_azuregosAI(creature); + DoCast(me, SPELL_ENRAGE); + _enraged = true; } + + DoMeleeAttackIfReady(); + } + +private: + bool _enraged; }; class MarkOfFrostTargetSelector @@ -174,46 +163,35 @@ class MarkOfFrostTargetSelector } }; -class spell_mark_of_frost : public SpellScriptLoader +class spell_mark_of_frost : public SpellScript { - public: - spell_mark_of_frost() : SpellScriptLoader("spell_mark_of_frost") { } - - class spell_mark_of_frost_SpellScript : public SpellScript - { - PrepareSpellScript(spell_mark_of_frost_SpellScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_MARK_OF_FROST, SPELL_AURA_OF_FROST }); - } - - void FilterTargets(std::list<WorldObject*>& targets) - { - targets.remove_if(MarkOfFrostTargetSelector()); - } - - void HandleEffect(SpellEffIndex effIndex) - { - PreventHitDefaultEffect(effIndex); - GetHitUnit()->CastSpell(GetHitUnit(), SPELL_AURA_OF_FROST, true); - } - - void Register() override - { - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mark_of_frost_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); - OnEffectHitTarget += SpellEffectFn(spell_mark_of_frost_SpellScript::HandleEffect, EFFECT_0, SPELL_EFFECT_APPLY_AURA); - } - }; - - SpellScript* GetSpellScript() const override - { - return new spell_mark_of_frost_SpellScript(); - } + PrepareSpellScript(spell_mark_of_frost); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_MARK_OF_FROST, SPELL_AURA_OF_FROST }); + } + + void FilterTargets(std::list<WorldObject*>& targets) + { + targets.remove_if(MarkOfFrostTargetSelector()); + } + + void HandleEffect(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + GetHitUnit()->CastSpell(GetHitUnit(), SPELL_AURA_OF_FROST, true); + } + + void Register() override + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_mark_of_frost::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); + OnEffectHitTarget += SpellEffectFn(spell_mark_of_frost::HandleEffect, EFFECT_0, SPELL_EFFECT_APPLY_AURA); + } }; void AddSC_boss_azuregos() { - new boss_azuregos(); - new spell_mark_of_frost(); + RegisterCreatureAI(boss_azuregos); + RegisterSpellScript(spell_mark_of_frost); } |