aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp29
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp40
-rw-r--r--src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.h15
3 files changed, 67 insertions, 17 deletions
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp
index cf2946faf50..11a5102547d 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_blackheart_the_inciter.cpp
@@ -15,8 +15,9 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "PassiveAI.h"
+#include "InstanceScript.h"
#include "ObjectAccessor.h"
+#include "PassiveAI.h"
#include "Player.h"
#include "PlayerAI.h"
#include "ScriptMgr.h"
@@ -26,7 +27,6 @@
enum BlackheartTheInciter
{
- NPC_BLACKHEART = 18667,
SPELL_INCITE_CHAOS = 33676,
SPELL_INCITE_CHAOS_B = 33684, //debuff applied to each member of party
SPELL_CHARGE = 33709,
@@ -79,7 +79,7 @@ class BlackheartCharmedPlayerAI : public SimpleCharmedPlayerAI
void OnCharmed(bool apply) override
{
SimpleCharmedPlayerAI::OnCharmed(apply);
- if (Creature* blackheart = me->FindNearestCreature(NPC_BLACKHEART, 50000.0f))
+ if (Creature* blackheart = ObjectAccessor::GetCreature(*me, me->GetInstanceScript()->GetGuidData(DATA_BLACKHEART_THE_INCITER)))
{
blackheart->AI()->SetData(0, apply);
blackheart->GetThreatManager().AddThreat(me, 0.0f);
@@ -182,24 +182,25 @@ struct boss_blackheart_the_inciter_mc_dummy : public NullCreatureAI
{
using NullCreatureAI::NullCreatureAI;
void InitializeAI() override { me->SetReactState(REACT_PASSIVE); }
- static const uint32 FIRST_DUMMY = 19300, LAST_DUMMY = 19304;
+ static const uint32 FIRST_DUMMY = NPC_BLACKHEART_DUMMY1, LAST_DUMMY = NPC_BLACKHEART_DUMMY5;
void IsSummonedBy(Unit* who) override
{
me->CastSpell(who, SPELL_INCITE_CHAOS_B, true);
// ensure everyone is in combat with everyone
- for (uint32 entry = FIRST_DUMMY; entry <= LAST_DUMMY; ++entry)
- if (entry != me->GetEntry())
- if (Creature* trigger = me->FindNearestCreature(entry, 50000.0f))
- {
- me->GetThreatManager().AddThreat(trigger, 0.0f);
- trigger->GetThreatManager().AddThreat(who, 0.0f);
- for (Unit* other : trigger->m_Controlled)
+ if (GuidUnorderedSet const* dummies = GetBlackheartDummies(me->GetInstanceScript()))
+ for (ObjectGuid const& guid : *dummies)
+ if (Creature* trigger = ObjectAccessor::GetCreature(*me, guid))
+ if (me->GetEntry() != trigger->GetEntry())
{
- me->GetThreatManager().AddThreat(other, 0.0f);
- other->GetThreatManager().AddThreat(who, 0.0f);
+ me->GetThreatManager().AddThreat(trigger, 0.0f);
+ trigger->GetThreatManager().AddThreat(who, 0.0f);
+ for (Unit* other : trigger->m_Controlled)
+ {
+ me->GetThreatManager().AddThreat(other, 0.0f);
+ other->GetThreatManager().AddThreat(who, 0.0f);
+ }
}
- }
}
void UpdateAI(uint32 /*diff*/) override
{
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp
index afdd904758b..fa608b1f824 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/instance_shadow_labyrinth.cpp
@@ -53,6 +53,16 @@ class instance_shadow_labyrinth : public InstanceMapScript
case NPC_AMBASSADOR_HELLMAW:
AmbassadorHellmawGUID = creature->GetGUID();
break;
+ case NPC_BLACKHEART:
+ BlackheartGUID = creature->GetGUID();
+ break;
+ case NPC_BLACKHEART_DUMMY1:
+ case NPC_BLACKHEART_DUMMY2:
+ case NPC_BLACKHEART_DUMMY3:
+ case NPC_BLACKHEART_DUMMY4:
+ case NPC_BLACKHEART_DUMMY5:
+ BlackheartDummyGUIDs.insert(creature->GetGUID());
+ break;
case NPC_GRANDMASTER_VORPIL:
GrandmasterVorpilGUID = creature->GetGUID();
break;
@@ -69,6 +79,22 @@ class instance_shadow_labyrinth : public InstanceMapScript
}
}
+ void OnCreatureRemove(Creature* creature) override
+ {
+ switch (creature->GetEntry())
+ {
+ case NPC_BLACKHEART_DUMMY1:
+ case NPC_BLACKHEART_DUMMY2:
+ case NPC_BLACKHEART_DUMMY3:
+ case NPC_BLACKHEART_DUMMY4:
+ case NPC_BLACKHEART_DUMMY5:
+ BlackheartDummyGUIDs.erase(creature->GetGUID());
+ break;
+ default:
+ break;
+ }
+ }
+
void OnGameObjectCreate(GameObject* go) override
{
switch (go->GetEntry())
@@ -128,6 +154,8 @@ class instance_shadow_labyrinth : public InstanceMapScript
{
switch (type)
{
+ case DATA_BLACKHEART_THE_INCITER:
+ return BlackheartGUID;
case DATA_GRANDMASTER_VORPIL:
return GrandmasterVorpilGUID;
default:
@@ -136,8 +164,12 @@ class instance_shadow_labyrinth : public InstanceMapScript
return ObjectGuid::Empty;
}
+ GuidUnorderedSet const& GetBlackheartDummies() const { return BlackheartDummyGUIDs; }
+
protected:
ObjectGuid AmbassadorHellmawGUID;
+ ObjectGuid BlackheartGUID;
+ GuidUnorderedSet BlackheartDummyGUIDs;
ObjectGuid GrandmasterVorpilGUID;
uint32 FelOverseerCount;
};
@@ -148,6 +180,14 @@ class instance_shadow_labyrinth : public InstanceMapScript
}
};
+GuidUnorderedSet const* GetBlackheartDummies(InstanceScript const* s)
+{
+ if (auto* script = dynamic_cast<instance_shadow_labyrinth::instance_shadow_labyrinth_InstanceMapScript const*>(s))
+ return &script->GetBlackheartDummies();
+
+ return nullptr;
+}
+
void AddSC_instance_shadow_labyrinth()
{
new instance_shadow_labyrinth();
diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.h b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.h
index 2f9b9b572e5..642ee116055 100644
--- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.h
+++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/shadow_labyrinth.h
@@ -19,6 +19,7 @@
#define SHADOW_LABYRINTH_H_
#include "CreatureAIImpl.h"
+#include "ObjectGuid.h"
#define SLScriptName "instance_shadow_labyrinth"
#define DataHeader "SL"
@@ -40,6 +41,12 @@ enum SLDataTypes
enum SLCreatureIds
{
NPC_AMBASSADOR_HELLMAW = 18731,
+ NPC_BLACKHEART = 18667,
+ NPC_BLACKHEART_DUMMY1 = 19300,
+ NPC_BLACKHEART_DUMMY2 = 19301,
+ NPC_BLACKHEART_DUMMY3 = 19302,
+ NPC_BLACKHEART_DUMMY4 = 19303,
+ NPC_BLACKHEART_DUMMY5 = 19304,
NPC_GRANDMASTER_VORPIL = 18732,
NPC_FEL_OVERSEER = 18796
};
@@ -56,10 +63,12 @@ enum SLMisc
ACTION_AMBASSADOR_HELLMAW_BANISH = 2,
};
-template<typename AI>
-inline AI* GetShadowLabyrinthAI(Creature* creature)
+GuidUnorderedSet const* GetBlackheartDummies(InstanceScript const* s);
+
+template <class AI, class T>
+inline AI* GetShadowLabyrinthAI(T* obj)
{
- return GetInstanceAI<AI>(creature, SLScriptName);
+ return GetInstanceAI<AI>(obj, SLScriptName);
}
#endif // SHADOW_LABYRINTH_H_