diff options
author | Shauren <shauren.trinity@gmail.com> | 2022-09-25 23:10:09 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-09-25 23:10:09 +0200 |
commit | e3ac84b929163d4253c15e3c9c430440c2cd15ac (patch) | |
tree | 7511ab6bf663d3e1f64cac422bdae743448a1ad9 /src | |
parent | 9ef9b79e84594f6dc2016809a0212b3fc090a0ce (diff) |
Scripts/The Underbog: Added spawn groups for bosses and implemented boss state tracking
Diffstat (limited to 'src')
4 files changed, 53 insertions, 33 deletions
diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp index f245bd6e873..916783f03e3 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp @@ -39,19 +39,20 @@ enum HungarfenSpells SPELL_GROW = 31698 }; -struct boss_hungarfen : public ScriptedAI +struct boss_hungarfen : public BossAI { - boss_hungarfen(Creature* creature) : ScriptedAI(creature), _roared(false) { } + boss_hungarfen(Creature* creature) : BossAI(creature, DATA_HUNGARFEN), _roared(false) { } void Reset() override { - _scheduler.CancelAll(); + BossAI::Reset(); _roared = false; me->SetReactState(REACT_AGGRESSIVE); } - void JustEngagedWith(Unit* /*who*/) override + void JustEngagedWith(Unit* who) override { + BossAI::JustEngagedWith(who); _scheduler.Schedule(IsHeroic() ? 2500ms : 5s, [this](TaskContext task) { /// @todo cast here SPELL_PUTRID_MUSHROOM_PRIMER and do it in spell script @@ -74,12 +75,13 @@ struct boss_hungarfen : public ScriptedAI void EnterEvadeMode(EvadeReason why) override { DoCastSelf(SPELL_DESPAWN_UNDERBOG_MUSHROOMS, true); - ScriptedAI::EnterEvadeMode(why); + BossAI::EnterEvadeMode(why); } - void JustDied(Unit* /*killer*/) override + void JustDied(Unit* killer) override { DoCastSelf(SPELL_DESPAWN_UNDERBOG_MUSHROOMS, true); + BossAI::JustDied(killer); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp index 8a0473f979c..6a04a457345 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp @@ -61,18 +61,13 @@ enum Events EVENT_SUMMON_SPORE_STRIDER }; -struct boss_the_black_stalker : public ScriptedAI +struct boss_the_black_stalker : public BossAI { - boss_the_black_stalker(Creature* creature) : ScriptedAI(creature), _summons(creature) { } + boss_the_black_stalker(Creature* creature) : BossAI(creature, DATA_THE_BLACK_STALKER), _summons(creature) { } - void Reset() override - { - _events.Reset(); - _summons.DespawnAll(); - } - - void JustEngagedWith(Unit* /*who*/) override + void JustEngagedWith(Unit* who) override { + BossAI::JustEngagedWith(who); _events.ScheduleEvent(EVENT_LEASH_CHECK, 5s); _events.ScheduleEvent(EVENT_LEVITATE, 8s, 18s); _events.ScheduleEvent(EVENT_CHAIN_LIGHTNING, 0s, 3s); @@ -81,19 +76,6 @@ struct boss_the_black_stalker : public ScriptedAI _events.ScheduleEvent(EVENT_SUMMON_SPORE_STRIDER, 20s, 30s); } - void JustSummoned(Creature* summon) override - { - _summons.Summon(summon); - - if (me->IsEngaged()) - DoZoneInCombat(summon); - } - - void JustDied(Unit* /*killer*/) override - { - _summons.DespawnAll(); - } - void UpdateAI(uint32 diff) override { if (!UpdateVictim()) diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/instance_the_underbog.cpp b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/instance_the_underbog.cpp index 805846bc813..ba81be2850e 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/instance_the_underbog.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/instance_the_underbog.cpp @@ -31,15 +31,34 @@ class instance_the_underbog : public InstanceMapScript public: instance_the_underbog() : InstanceMapScript(TheUndebogScriptName, 546) { } + struct instance_the_underbog_InstanceMapScript : public InstanceScript + { + instance_the_underbog_InstanceMapScript(InstanceMap* map) : InstanceScript(map) + { + SetHeaders(TheUndebogDataHeader); + SetBossNumber(TheUnderbogBossCount); + } + + void OnUnitDeath(Unit* unit) override + { + switch (unit->GetEntry()) + { + case NPC_GHAZAN: + SetBossState(DATA_GHAZAN, DONE); + break; + case NPC_SWAMPLORD_MUSELEK: + SetBossState(DATA_SWAMPLORD_MUSELEK, DONE); + break; + default: + break; + } + } + }; + InstanceScript* GetInstanceScript(InstanceMap* map) const override { return new instance_the_underbog_InstanceMapScript(map); } - - struct instance_the_underbog_InstanceMapScript : public InstanceScript - { - instance_the_underbog_InstanceMapScript(InstanceMap* map) : InstanceScript(map) { } - }; }; void AddSC_instance_the_underbog() diff --git a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/the_underbog.h b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/the_underbog.h index 05540c79992..4b28702f046 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/the_underbog.h +++ b/src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/the_underbog.h @@ -20,8 +20,25 @@ #include "CreatureAIImpl.h" +#define TheUndebogDataHeader "UBOG" #define TheUndebogScriptName "instance_the_underbog" +constexpr uint32 TheUnderbogBossCount = 4; + +enum TheUnderbogDataId +{ + DATA_HUNGARFEN = 0, + DATA_GHAZAN = 1, + DATA_SWAMPLORD_MUSELEK = 2, + DATA_THE_BLACK_STALKER = 3 +}; + +enum TheUnderbogCreatureId +{ + NPC_GHAZAN = 18105, + NPC_SWAMPLORD_MUSELEK = 17826 +}; + template <class AI, class T> inline AI* GetTheUnderbogAI(T* obj) { |