diff options
author | offl <11556157+offl@users.noreply.github.com> | 2021-04-15 15:17:56 +0300 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-03-08 22:32:32 +0100 |
commit | 8f069e197f361157f779fae5ad4db0b2a9cd67a3 (patch) | |
tree | 8f2adf21e1d5223979e19164be7213fdec11e4d3 /src | |
parent | fe8becd2a074ce852e37aa0f1782d081dbabccc9 (diff) |
Scripts/Ahn'kahet: Update Nadox to new model (#26414)
Co-authored-by: offl <offl@users.noreply.github.com>
(cherry picked from commit 576befdc07ee4647ae052f070ca06e9f7e7fc656)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp | 371 |
1 files changed, 169 insertions, 202 deletions
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp index e79e1242571..cc51fbc99c2 100644 --- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_elder_nadox.cpp @@ -21,7 +21,7 @@ #include "SpellAuras.h" #include "SpellScript.h" -enum Yells +enum NadoxTexts { SAY_AGGRO = 0, SAY_SLAY = 1, @@ -30,7 +30,7 @@ enum Yells EMOTE_HATCHES = 4 }; -enum Spells +enum NadoxSpells { // Elder Nadox SPELL_BROOD_PLAGUE = 56130, @@ -44,7 +44,7 @@ enum Spells SPELL_SPRINT = 56354 }; -enum Events +enum NadoxEvents { EVENT_PLAGUE = 1, EVENT_RAGE, @@ -54,234 +54,201 @@ enum Events DATA_RESPECT_YOUR_ELDERS }; -class boss_elder_nadox : public CreatureScript +struct boss_elder_nadox : public BossAI { - public: - boss_elder_nadox() : CreatureScript("boss_elder_nadox") { } - - struct boss_elder_nadoxAI : public BossAI + boss_elder_nadox(Creature* creature) : BossAI(creature, DATA_ELDER_NADOX) + { + Initialize(); + } + + void Initialize() + { + GuardianSummoned = false; + GuardianDied = false; + } + + void Reset() override + { + _Reset(); + Initialize(); + } + + void JustEngagedWith(Unit* who) override + { + BossAI::JustEngagedWith(who); + Talk(SAY_AGGRO); + + events.ScheduleEvent(EVENT_PLAGUE, 13s); + events.ScheduleEvent(EVENT_SUMMON_SWARMER, 10s); + + if (IsHeroic()) { - boss_elder_nadoxAI(Creature* creature) : BossAI(creature, DATA_ELDER_NADOX) - { - Initialize(); - } - - void Initialize() - { - GuardianSummoned = false; - GuardianDied = false; - } - - void Reset() override - { - _Reset(); - Initialize(); - } - - void JustEngagedWith(Unit* who) override + events.ScheduleEvent(EVENT_RAGE, 12s); + events.ScheduleEvent(EVENT_CHECK_ENRAGE, 5s); + } + } + + void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) override + { + if (summon->GetEntry() == NPC_AHNKAHAR_GUARDIAN) + GuardianDied = true; + } + + uint32 GetData(uint32 type) const override + { + if (type == DATA_RESPECT_YOUR_ELDERS) + return !GuardianDied ? 1 : 0; + + return 0; + } + + void KilledUnit(Unit* who) override + { + if (who->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); + } + + void JustDied(Unit* /*killer*/) override + { + _JustDied(); + Talk(SAY_DEATH); + } + + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; + + events.Update(diff); + + while (uint32 eventId = events.ExecuteEvent()) + { + switch (eventId) { - BossAI::JustEngagedWith(who); - Talk(SAY_AGGRO); - - events.ScheduleEvent(EVENT_PLAGUE, 13s); - events.ScheduleEvent(EVENT_SUMMON_SWARMER, 10s); - - if (IsHeroic()) - { - events.ScheduleEvent(EVENT_RAGE, 12s); + case EVENT_PLAGUE: + DoCast(SelectTarget(SelectTargetMethod::Random, 0, 100, true), SPELL_BROOD_PLAGUE, true); + events.ScheduleEvent(EVENT_PLAGUE, 15s); + break; + case EVENT_RAGE: + DoCast(H_SPELL_BROOD_RAGE); + events.ScheduleEvent(EVENT_RAGE, 10s, 50s); + break; + case EVENT_SUMMON_SWARMER: + /// @todo: summoned by egg + DoCast(me, SPELL_SUMMON_SWARMERS); + if (urand(1, 3) == 3) // 33% chance of dialog + Talk(SAY_EGG_SAC); + events.ScheduleEvent(EVENT_SUMMON_SWARMER, 10s); + break; + case EVENT_CHECK_ENRAGE: + if (me->HasAura(SPELL_ENRAGE)) + return; + if (me->GetPositionZ() < 24.0f) + DoCast(me, SPELL_ENRAGE, true); events.ScheduleEvent(EVENT_CHECK_ENRAGE, 5s); - } - } - - void SummonedCreatureDies(Creature* summon, Unit* /*killer*/) override - { - if (summon->GetEntry() == NPC_AHNKAHAR_GUARDIAN) - GuardianDied = true; + break; + default: + break; } + } - uint32 GetData(uint32 type) const override - { - if (type == DATA_RESPECT_YOUR_ELDERS) - return !GuardianDied ? 1 : 0; - - return 0; - } + if (!GuardianSummoned && me->HealthBelowPct(50)) + { + /// @todo: summoned by egg + Talk(EMOTE_HATCHES, me); + DoCast(me, SPELL_SUMMON_SWARM_GUARD); + GuardianSummoned = true; + } - void KilledUnit(Unit* who) override - { - if (who->GetTypeId() == TYPEID_PLAYER) - Talk(SAY_SLAY); - } + DoMeleeAttackIfReady(); + } - void JustDied(Unit* /*killer*/) override - { - _JustDied(); - Talk(SAY_DEATH); - } +private: + bool GuardianSummoned; + bool GuardianDied; +}; - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - events.Update(diff); - - while (uint32 eventId = events.ExecuteEvent()) - { - switch (eventId) - { - case EVENT_PLAGUE: - DoCast(SelectTarget(SelectTargetMethod::Random, 0, 100, true), SPELL_BROOD_PLAGUE, true); - events.ScheduleEvent(EVENT_PLAGUE, 15s); - break; - case EVENT_RAGE: - DoCast(H_SPELL_BROOD_RAGE); - events.ScheduleEvent(EVENT_RAGE, 10s, 50s); - break; - case EVENT_SUMMON_SWARMER: - /// @todo: summoned by egg - DoCast(me, SPELL_SUMMON_SWARMERS); - if (urand(1, 3) == 3) // 33% chance of dialog - Talk(SAY_EGG_SAC); - events.ScheduleEvent(EVENT_SUMMON_SWARMER, 10s); - break; - case EVENT_CHECK_ENRAGE: - if (me->HasAura(SPELL_ENRAGE)) - return; - if (me->GetPositionZ() < 24.0f) - DoCast(me, SPELL_ENRAGE, true); - events.ScheduleEvent(EVENT_CHECK_ENRAGE, 5s); - break; - default: - break; - } - } - - if (!GuardianSummoned && me->HealthBelowPct(50)) - { - /// @todo: summoned by egg - Talk(EMOTE_HATCHES, me); - DoCast(me, SPELL_SUMMON_SWARM_GUARD); - GuardianSummoned = true; - } +struct npc_ahnkahar_nerubian : public ScriptedAI +{ + npc_ahnkahar_nerubian(Creature* creature) : ScriptedAI(creature) { } - DoMeleeAttackIfReady(); - } + void Reset() override + { + _events.Reset(); + _events.ScheduleEvent(EVENT_SPRINT, 13s); + } - private: - bool GuardianSummoned; - bool GuardianDied; - }; + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - CreatureAI* GetAI(Creature* creature) const override - { - return GetAhnKahetAI<boss_elder_nadoxAI>(creature); - } -}; + _events.Update(diff); -class npc_ahnkahar_nerubian : public CreatureScript -{ - public: - npc_ahnkahar_nerubian() : CreatureScript("npc_ahnkahar_nerubian") { } + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - struct npc_ahnkahar_nerubianAI : public ScriptedAI + while (uint32 eventId = _events.ExecuteEvent()) { - npc_ahnkahar_nerubianAI(Creature* creature) : ScriptedAI(creature) { } - - void Reset() override + switch (eventId) { - _events.Reset(); - _events.ScheduleEvent(EVENT_SPRINT, 13s); - } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - _events.Update(diff); - - if (me->HasUnitState(UNIT_STATE_CASTING)) - return; - - while (uint32 eventId = _events.ExecuteEvent()) - { - switch (eventId) - { - case EVENT_SPRINT: - DoCast(me, SPELL_SPRINT); - _events.ScheduleEvent(EVENT_SPRINT, 20s); - break; - } - } - - DoMeleeAttackIfReady(); + case EVENT_SPRINT: + DoCast(me, SPELL_SPRINT); + _events.ScheduleEvent(EVENT_SPRINT, 20s); + break; } + } - private: - EventMap _events; - }; + DoMeleeAttackIfReady(); + } - CreatureAI* GetAI(Creature* creature) const override - { - return GetAhnKahetAI<npc_ahnkahar_nerubianAI>(creature); - } +private: + EventMap _events; }; // 56159 - Swarm -class spell_ahn_kahet_swarm : public SpellScriptLoader +class spell_ahn_kahet_swarm : public SpellScript { - public: - spell_ahn_kahet_swarm() : SpellScriptLoader("spell_ahn_kahet_swarm") { } + PrepareSpellScript(spell_ahn_kahet_swarm); - class spell_ahn_kahet_swarm_SpellScript : public SpellScript - { - PrepareSpellScript(spell_ahn_kahet_swarm_SpellScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_SWARM_BUFF }); - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_SWARM_BUFF }); + } - void CountTargets(std::list<WorldObject*>& targets) - { - _targetCount = targets.size(); - } + void CountTargets(std::list<WorldObject*>& targets) + { + _targetCount = targets.size(); + } - void HandleDummy(SpellEffIndex /*effIndex*/) + void HandleDummy(SpellEffIndex /*effIndex*/) + { + if (_targetCount) + { + if (Aura* aura = GetCaster()->GetAura(SPELL_SWARM_BUFF)) { - if (_targetCount) - { - if (Aura* aura = GetCaster()->GetAura(SPELL_SWARM_BUFF)) - { - aura->SetStackAmount(_targetCount); - aura->RefreshDuration(); - } - else - { - CastSpellExtraArgs args; - args.TriggerFlags = TRIGGERED_FULL_MASK; - args.AddSpellMod(SPELLVALUE_AURA_STACK, _targetCount); - GetCaster()->CastSpell(GetCaster(), SPELL_SWARM_BUFF, args); - } - } - else - GetCaster()->RemoveAurasDueToSpell(SPELL_SWARM_BUFF); + aura->SetStackAmount(_targetCount); + aura->RefreshDuration(); } - - void Register() override + else { - OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_ahn_kahet_swarm_SpellScript::CountTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY); - OnEffectHit += SpellEffectFn(spell_ahn_kahet_swarm_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + CastSpellExtraArgs args; + args.TriggerFlags = TRIGGERED_FULL_MASK; + args.AddSpellMod(SPELLVALUE_AURA_STACK, _targetCount); + GetCaster()->CastSpell(GetCaster(), SPELL_SWARM_BUFF, args); } + } + else + GetCaster()->RemoveAurasDueToSpell(SPELL_SWARM_BUFF); + } - uint32 _targetCount = 0; - }; + void Register() override + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_ahn_kahet_swarm::CountTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ALLY); + OnEffectHit += SpellEffectFn(spell_ahn_kahet_swarm::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } - SpellScript* GetSpellScript() const override - { - return new spell_ahn_kahet_swarm_SpellScript(); - } + uint32 _targetCount = 0; }; class achievement_respect_your_elders : public AchievementCriteriaScript @@ -297,8 +264,8 @@ class achievement_respect_your_elders : public AchievementCriteriaScript void AddSC_boss_elder_nadox() { - new boss_elder_nadox(); - new npc_ahnkahar_nerubian(); - new spell_ahn_kahet_swarm(); + RegisterAhnKahetCreatureAI(boss_elder_nadox); + RegisterAhnKahetCreatureAI(npc_ahnkahar_nerubian); + RegisterSpellScript(spell_ahn_kahet_swarm); new achievement_respect_your_elders(); } |