aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2022-09-25 23:10:09 +0200
committerShauren <shauren.trinity@gmail.com>2022-09-25 23:10:09 +0200
commite3ac84b929163d4253c15e3c9c430440c2cd15ac (patch)
tree7511ab6bf663d3e1f64cac422bdae743448a1ad9 /src
parent9ef9b79e84594f6dc2016809a0212b3fc090a0ce (diff)
Scripts/The Underbog: Added spawn groups for bosses and implemented boss state tracking
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_hungarfen.cpp14
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/boss_the_black_stalker.cpp26
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/instance_the_underbog.cpp29
-rw-r--r--src/server/scripts/Outland/CoilfangReservoir/TheUnderbog/the_underbog.h17
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)
{