diff options
author | offl <11556157+offl@users.noreply.github.com> | 2021-07-13 05:16:32 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-13 05:16:32 +0300 |
commit | 661e7cca00ac863849ee05677e5d001c90bed0cc (patch) | |
tree | f9e4633faf1126187322dd83777099e2590ee895 | |
parent | db1ec411cc91ea8b0caeb75e635077121d7dfa2c (diff) |
Scripts/MT: Update scripts to new register model (#26679)
3 files changed, 256 insertions, 309 deletions
diff --git a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp index a27f04d4890..c42902b6085 100644 --- a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp +++ b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_nexusprince_shaffar.cpp @@ -71,123 +71,112 @@ enum Events EVENT_FROST_NOVA }; -class boss_nexusprince_shaffar : public CreatureScript +struct boss_nexusprince_shaffar : public BossAI { - public: - boss_nexusprince_shaffar() : CreatureScript("boss_nexusprince_shaffar") { } + boss_nexusprince_shaffar(Creature* creature) : BossAI(creature, DATA_NEXUSPRINCE_SHAFFAR) + { + _hasTaunted = false; + } - struct boss_nexusprince_shaffarAI : public BossAI - { - boss_nexusprince_shaffarAI(Creature* creature) : BossAI(creature, DATA_NEXUSPRINCE_SHAFFAR) - { - _hasTaunted = false; - } + void Reset() override + { + _Reset(); - void Reset() override - { - _Reset(); + float dist = 8.0f; + float posX, posY, posZ, angle; + me->GetHomePosition(posX, posY, posZ, angle); - float dist = 8.0f; - float posX, posY, posZ, angle; - me->GetHomePosition(posX, posY, posZ, angle); + me->SummonCreature(NPC_BEACON, posX - dist, posY - dist, posZ, angle, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2h); + me->SummonCreature(NPC_BEACON, posX - dist, posY + dist, posZ, angle, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2h); + me->SummonCreature(NPC_BEACON, posX + dist, posY, posZ, angle, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2h); + } - me->SummonCreature(NPC_BEACON, posX - dist, posY - dist, posZ, angle, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2h); - me->SummonCreature(NPC_BEACON, posX - dist, posY + dist, posZ, angle, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2h); - me->SummonCreature(NPC_BEACON, posX + dist, posY, posZ, angle, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 2h); - } + void MoveInLineOfSight(Unit* who) override + { + if (!_hasTaunted && who->GetTypeId() == TYPEID_PLAYER && me->IsWithinDistInMap(who, 100.0f)) + { + Talk(SAY_INTRO); + _hasTaunted = true; + } + } - void MoveInLineOfSight(Unit* who) override - { - if (!_hasTaunted && who->GetTypeId() == TYPEID_PLAYER && me->IsWithinDistInMap(who, 100.0f)) - { - Talk(SAY_INTRO); - _hasTaunted = true; - } - } + void JustEngagedWith(Unit* who) override + { + Talk(SAY_AGGRO); + BossAI::JustEngagedWith(who); - void JustEngagedWith(Unit* who) override - { - Talk(SAY_AGGRO); - BossAI::JustEngagedWith(who); + events.ScheduleEvent(EVENT_BEACON, 10s); + events.ScheduleEvent(EVENT_FIREBALL, 8s); + events.ScheduleEvent(EVENT_FROSTBOLT, 4s); + events.ScheduleEvent(EVENT_FROST_NOVA, 15s); + } - events.ScheduleEvent(EVENT_BEACON, 10s); - events.ScheduleEvent(EVENT_FIREBALL, 8s); - events.ScheduleEvent(EVENT_FROSTBOLT, 4s); - events.ScheduleEvent(EVENT_FROST_NOVA, 15s); - } + void JustSummoned(Creature* summoned) override + { + if (summoned->GetEntry() == NPC_BEACON) + { + summoned->CastSpell(summoned, SPELL_ETHEREAL_BEACON_VISUAL, false); - void JustSummoned(Creature* summoned) override - { - if (summoned->GetEntry() == NPC_BEACON) - { - summoned->CastSpell(summoned, SPELL_ETHEREAL_BEACON_VISUAL, false); + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) + summoned->AI()->AttackStart(target); + } - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) - summoned->AI()->AttackStart(target); - } + summons.Summon(summoned); + } - summons.Summon(summoned); - } + void KilledUnit(Unit* victim) override + { + if (victim->GetTypeId() == TYPEID_PLAYER) + Talk(SAY_SLAY); + } - void KilledUnit(Unit* victim) override - { - if (victim->GetTypeId() == TYPEID_PLAYER) - Talk(SAY_SLAY); - } + void JustDied(Unit* /*killer*/) override + { + Talk(SAY_DEAD); + _JustDied(); + } - void JustDied(Unit* /*killer*/) override - { - Talk(SAY_DEAD); - _JustDied(); - } + void ExecuteEvent(uint32 eventId) override + { + switch (eventId) + { + case EVENT_BLINK: + if (me->IsNonMeleeSpellCast(false)) + me->InterruptNonMeleeSpells(true); - void ExecuteEvent(uint32 eventId) override - { - switch (eventId) - { - case EVENT_BLINK: - if (me->IsNonMeleeSpellCast(false)) - me->InterruptNonMeleeSpells(true); - - // expire movement, will prevent from running right back to victim after cast - // (but should MoveChase be used again at a certain time or should he not move?) - me->GetMotionMaster()->Clear(MOTION_PRIORITY_NORMAL); - - DoCast(me, SPELL_BLINK); - break; - case EVENT_BEACON: - if (!urand(0, 3)) - Talk(SAY_SUMMON); - - DoCast(me, SPELL_ETHEREAL_BEACON, true); - events.ScheduleEvent(EVENT_BEACON, 10s); - break; - case EVENT_FIREBALL: - DoCastVictim(SPELL_FROSTBOLT); - events.ScheduleEvent(EVENT_FIREBALL, 4500ms, 6s); - break; - case EVENT_FROSTBOLT: - DoCastVictim(SPELL_FROSTBOLT); - events.ScheduleEvent(EVENT_FROSTBOLT, 4500ms, 6s); - break; - case EVENT_FROST_NOVA: - DoCast(me, SPELL_FROSTNOVA); - events.ScheduleEvent(EVENT_FROST_NOVA, 17500ms, 25s); - events.ScheduleEvent(EVENT_BLINK, 1500ms); - break; - default: - break; - } - } + // expire movement, will prevent from running right back to victim after cast + // (but should MoveChase be used again at a certain time or should he not move?) + me->GetMotionMaster()->Clear(MOTION_PRIORITY_NORMAL); - private: - bool _hasTaunted; - }; + DoCast(me, SPELL_BLINK); + break; + case EVENT_BEACON: + if (!urand(0, 3)) + Talk(SAY_SUMMON); - CreatureAI* GetAI(Creature* creature) const override - { - return GetManaTombsAI<boss_nexusprince_shaffarAI>(creature); + DoCast(me, SPELL_ETHEREAL_BEACON, true); + events.ScheduleEvent(EVENT_BEACON, 10s); + break; + case EVENT_FIREBALL: + DoCastVictim(SPELL_FROSTBOLT); + events.ScheduleEvent(EVENT_FIREBALL, 4500ms, 6s); + break; + case EVENT_FROSTBOLT: + DoCastVictim(SPELL_FROSTBOLT); + events.ScheduleEvent(EVENT_FROSTBOLT, 4500ms, 6s); + break; + case EVENT_FROST_NOVA: + DoCast(me, SPELL_FROSTNOVA); + events.ScheduleEvent(EVENT_FROST_NOVA, 17500ms, 25s); + events.ScheduleEvent(EVENT_BLINK, 1500ms); + break; + default: + break; } + } + +private: + bool _hasTaunted; }; enum EtherealBeacon @@ -196,71 +185,60 @@ enum EtherealBeacon EVENT_ARCANE_BOLT }; -class npc_ethereal_beacon : public CreatureScript +struct npc_ethereal_beacon : public ScriptedAI { - public: - npc_ethereal_beacon() : CreatureScript("npc_ethereal_beacon") { } + npc_ethereal_beacon(Creature* creature) : ScriptedAI(creature) { } - struct npc_ethereal_beaconAI : public ScriptedAI - { - npc_ethereal_beaconAI(Creature* creature) : ScriptedAI(creature) { } + void Reset() override + { + _events.Reset(); + } - void Reset() override - { - _events.Reset(); - } + void JustEngagedWith(Unit* who) override + { + if (Creature* shaffar = me->FindNearestCreature(NPC_SHAFFAR, 100.0f)) + if (!shaffar->IsInCombat()) + shaffar->AI()->AttackStart(who); - void JustEngagedWith(Unit* who) override - { - if (Creature* shaffar = me->FindNearestCreature(NPC_SHAFFAR, 100.0f)) - if (!shaffar->IsInCombat()) - shaffar->AI()->AttackStart(who); + _events.ScheduleEvent(EVENT_APPRENTICE, DUNGEON_MODE(20s, 10s)); + _events.ScheduleEvent(EVENT_ARCANE_BOLT, 1s); + } - _events.ScheduleEvent(EVENT_APPRENTICE, DUNGEON_MODE(20s, 10s)); - _events.ScheduleEvent(EVENT_ARCANE_BOLT, 1s); - } + void JustSummoned(Creature* summoned) override + { + summoned->AI()->AttackStart(me->GetVictim()); + } - void JustSummoned(Creature* summoned) override - { - summoned->AI()->AttackStart(me->GetVictim()); - } + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - 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_APPRENTICE: - DoCast(me, SPELL_ETHEREAL_APPRENTICE, true); - me->DespawnOrUnsummon(); - break; - case EVENT_ARCANE_BOLT: - DoCastVictim(SPELL_ARCANE_BOLT); - _events.ScheduleEvent(EVENT_ARCANE_BOLT, 2s, 4500ms); - break; - default: - break; - } - } - } + _events.Update(diff); - private: - EventMap _events; - }; + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - CreatureAI* GetAI(Creature* creature) const override + while (uint32 eventId = _events.ExecuteEvent()) { - return GetManaTombsAI<npc_ethereal_beaconAI>(creature); + switch (eventId) + { + case EVENT_APPRENTICE: + DoCast(me, SPELL_ETHEREAL_APPRENTICE, true); + me->DespawnOrUnsummon(); + break; + case EVENT_ARCANE_BOLT: + DoCastVictim(SPELL_ARCANE_BOLT); + _events.ScheduleEvent(EVENT_ARCANE_BOLT, 2s, 4500ms); + break; + default: + break; + } } + } + +private: + EventMap _events; }; enum EtherealApprentice @@ -271,61 +249,50 @@ enum EtherealApprentice EVENT_ETHEREAL_APPRENTICE_FROSTBOLT }; -class npc_ethereal_apprentice : public CreatureScript +struct npc_ethereal_apprentice : public ScriptedAI { - public: - npc_ethereal_apprentice() : CreatureScript("npc_ethereal_apprentice") { } + npc_ethereal_apprentice(Creature* creature) : ScriptedAI(creature) { } - struct npc_ethereal_apprenticeAI : public ScriptedAI - { - npc_ethereal_apprenticeAI(Creature* creature) : ScriptedAI(creature) { } + void Reset() override + { + _events.Reset(); + } - void Reset() override - { - _events.Reset(); - } + void JustEngagedWith(Unit* /*who*/) override + { + _events.ScheduleEvent(EVENT_ETHEREAL_APPRENTICE_FIREBOLT, 3s); + } - void JustEngagedWith(Unit* /*who*/) override - { - _events.ScheduleEvent(EVENT_ETHEREAL_APPRENTICE_FIREBOLT, 3s); - } + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - 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_ETHEREAL_APPRENTICE_FIREBOLT: - DoCastVictim(SPELL_ETHEREAL_APPRENTICE_FIREBOLT, true); - _events.ScheduleEvent(EVENT_ETHEREAL_APPRENTICE_FROSTBOLT, 3s); - break; - case EVENT_ETHEREAL_APPRENTICE_FROSTBOLT: - DoCastVictim(SPELL_ETHEREAL_APPRENTICE_FROSTBOLT, true); - _events.ScheduleEvent(EVENT_ETHEREAL_APPRENTICE_FIREBOLT, 3s); - break; - default: - break; - } - } - } + _events.Update(diff); - private: - EventMap _events; - }; + if (me->HasUnitState(UNIT_STATE_CASTING)) + return; - CreatureAI* GetAI(Creature* creature) const override + while (uint32 eventId = _events.ExecuteEvent()) { - return GetManaTombsAI<npc_ethereal_apprenticeAI>(creature); + switch (eventId) + { + case EVENT_ETHEREAL_APPRENTICE_FIREBOLT: + DoCastVictim(SPELL_ETHEREAL_APPRENTICE_FIREBOLT, true); + _events.ScheduleEvent(EVENT_ETHEREAL_APPRENTICE_FROSTBOLT, 3s); + break; + case EVENT_ETHEREAL_APPRENTICE_FROSTBOLT: + DoCastVictim(SPELL_ETHEREAL_APPRENTICE_FROSTBOLT, true); + _events.ScheduleEvent(EVENT_ETHEREAL_APPRENTICE_FIREBOLT, 3s); + break; + default: + break; + } } + } + +private: + EventMap _events; }; enum Yor @@ -334,60 +301,49 @@ enum Yor EVENT_DOUBLE_BREATH = 1 }; -class npc_yor : public CreatureScript +struct npc_yor : public ScriptedAI { -public: - npc_yor() : CreatureScript("npc_yor") { } + npc_yor(Creature* creature) : ScriptedAI(creature) { } - struct npc_yorAI : public ScriptedAI + void Reset() override { } + + void JustEngagedWith(Unit* /*who*/) override { - npc_yorAI(Creature* creature) : ScriptedAI(creature) { } + _events.ScheduleEvent(EVENT_DOUBLE_BREATH, 6s, 9s); + } - void Reset() override { } + void UpdateAI(uint32 diff) override + { + if (!UpdateVictim()) + return; - void JustEngagedWith(Unit* /*who*/) override - { - _events.ScheduleEvent(EVENT_DOUBLE_BREATH, 6s, 9s); - } + _events.Update(diff); - void UpdateAI(uint32 diff) override + while (uint32 eventId = _events.ExecuteEvent()) { - if (!UpdateVictim()) - return; - - _events.Update(diff); - - while (uint32 eventId = _events.ExecuteEvent()) + switch (eventId) { - switch (eventId) - { - case EVENT_DOUBLE_BREATH: - if (me->IsWithinDist(me->GetVictim(), ATTACK_DISTANCE)) - DoCastVictim(SPELL_DOUBLE_BREATH); - _events.ScheduleEvent(EVENT_DOUBLE_BREATH, 6s, 9s); - break; - default: - break; - } + case EVENT_DOUBLE_BREATH: + if (me->IsWithinDist(me->GetVictim(), ATTACK_DISTANCE)) + DoCastVictim(SPELL_DOUBLE_BREATH); + _events.ScheduleEvent(EVENT_DOUBLE_BREATH, 6s, 9s); + break; + default: + break; } - - DoMeleeAttackIfReady(); } - private: - EventMap _events; - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return GetManaTombsAI<npc_yorAI>(creature); + DoMeleeAttackIfReady(); } + + private: + EventMap _events; }; void AddSC_boss_nexusprince_shaffar() { - new boss_nexusprince_shaffar(); - new npc_ethereal_beacon(); - new npc_ethereal_apprentice(); - new npc_yor(); + RegisterManaTombsCreatureAI(boss_nexusprince_shaffar); + RegisterManaTombsCreatureAI(npc_ethereal_beacon); + RegisterManaTombsCreatureAI(npc_ethereal_apprentice); + RegisterManaTombsCreatureAI(npc_yor); } diff --git a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp index 2e37a268f26..7e27d248182 100644 --- a/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp +++ b/src/server/scripts/Outland/Auchindoun/ManaTombs/boss_pandemonius.cpp @@ -41,87 +41,76 @@ enum Events uint32 constexpr DARK_SHELL_EVENT_GROUP = 1; -class boss_pandemonius : public CreatureScript +struct boss_pandemonius : public BossAI { -public: - boss_pandemonius() : CreatureScript("boss_pandemonius") { } - - struct boss_pandemoniusAI : public BossAI + boss_pandemonius(Creature* creature) : BossAI(creature, DATA_PANDEMONIUS) { - boss_pandemoniusAI(Creature* creature) : BossAI(creature, DATA_PANDEMONIUS) - { - VoidBlastCounter = 0; - } + VoidBlastCounter = 0; + } - void Reset() override - { - _Reset(); - VoidBlastCounter = 0; - } + void Reset() override + { + _Reset(); + VoidBlastCounter = 0; + } - void JustDied(Unit* /*killer*/) override - { - Talk(SAY_DEATH); - } + void JustDied(Unit* /*killer*/) override + { + Talk(SAY_DEATH); + } - void KilledUnit(Unit* /*victim*/) override - { - Talk(SAY_KILL); - } + void KilledUnit(Unit* /*victim*/) override + { + Talk(SAY_KILL); + } - void JustEngagedWith(Unit* who) override - { - BossAI::JustEngagedWith(who); - Talk(SAY_AGGRO); - events.ScheduleEvent(EVENT_DARK_SHELL, 20s, DARK_SHELL_EVENT_GROUP); - events.ScheduleEvent(EVENT_VOID_BLAST, 8s, 23s); - } + void JustEngagedWith(Unit* who) override + { + BossAI::JustEngagedWith(who); + Talk(SAY_AGGRO); + events.ScheduleEvent(EVENT_DARK_SHELL, 20s, DARK_SHELL_EVENT_GROUP); + events.ScheduleEvent(EVENT_VOID_BLAST, 8s, 23s); + } - void ExecuteEvent(uint32 eventId) override + void ExecuteEvent(uint32 eventId) override + { + switch (eventId) { - switch (eventId) - { - case EVENT_VOID_BLAST: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true)) - { - DoCast(target, SPELL_VOID_BLAST); - ++VoidBlastCounter; - } - - if (VoidBlastCounter == 5) - { - VoidBlastCounter = 0; - events.ScheduleEvent(EVENT_VOID_BLAST, 15s, 25s); - } - else - { - events.ScheduleEvent(EVENT_VOID_BLAST, 500ms); - events.DelayEvents(500ms, DARK_SHELL_EVENT_GROUP); - } - break; - case EVENT_DARK_SHELL: - if (me->IsNonMeleeSpellCast(false)) - me->InterruptNonMeleeSpells(true); - Talk(EMOTE_DARK_SHELL); - DoCast(me, SPELL_DARK_SHELL); - events.ScheduleEvent(EVENT_DARK_SHELL, 20s, DARK_SHELL_EVENT_GROUP); - break; - default: - break; - } + case EVENT_VOID_BLAST: + if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100.0f, true)) + { + DoCast(target, SPELL_VOID_BLAST); + ++VoidBlastCounter; + } + + if (VoidBlastCounter == 5) + { + VoidBlastCounter = 0; + events.ScheduleEvent(EVENT_VOID_BLAST, 15s, 25s); + } + else + { + events.ScheduleEvent(EVENT_VOID_BLAST, 500ms); + events.DelayEvents(500ms, DARK_SHELL_EVENT_GROUP); + } + break; + case EVENT_DARK_SHELL: + if (me->IsNonMeleeSpellCast(false)) + me->InterruptNonMeleeSpells(true); + Talk(EMOTE_DARK_SHELL); + DoCast(me, SPELL_DARK_SHELL); + events.ScheduleEvent(EVENT_DARK_SHELL, 20s, DARK_SHELL_EVENT_GROUP); + break; + default: + break; } - - private: - uint32 VoidBlastCounter; - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return GetManaTombsAI<boss_pandemoniusAI>(creature); } + + private: + uint32 VoidBlastCounter; }; void AddSC_boss_pandemonius() { - new boss_pandemonius(); + RegisterManaTombsCreatureAI(boss_pandemonius); } diff --git a/src/server/scripts/Outland/Auchindoun/ManaTombs/mana_tombs.h b/src/server/scripts/Outland/Auchindoun/ManaTombs/mana_tombs.h index 2b6844017f0..6c982df370b 100644 --- a/src/server/scripts/Outland/Auchindoun/ManaTombs/mana_tombs.h +++ b/src/server/scripts/Outland/Auchindoun/ManaTombs/mana_tombs.h @@ -40,4 +40,6 @@ inline AI* GetManaTombsAI(T* obj) return GetInstanceAI<AI>(obj, MTScriptName); } +#define RegisterManaTombsCreatureAI(ai_name) RegisterCreatureAIWithFactory(ai_name, GetManaTombsAI) + #endif // MANA_TOMBS_H_ |