diff options
Diffstat (limited to 'src/server/scripts/Outland/HellfireCitadel')
3 files changed, 38 insertions, 15 deletions
diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h index e59b5b6ca83..e3fd9704a0b 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h @@ -82,10 +82,10 @@ enum BFActionIds ACTION_PREPARE_BROGGOK = 3 }; -template<typename AI> -inline AI* GetBloodFurnaceAI(Creature* creature) +template<class AI, class T> +inline AI* GetBloodFurnaceAI(T* obj) { - return GetInstanceAI<AI>(creature, BFScriptName); + return GetInstanceAI<AI>(obj, BFScriptName); } #endif // BLOOD_FURNACE_H_ diff --git a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp index bdaa36fc778..789472f2a29 100644 --- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp @@ -21,6 +21,7 @@ #include "InstanceScript.h" #include "ObjectAccessor.h" #include "ScriptedCreature.h" +#include "GameObjectAI.h" #include "SpellAuraEffects.h" #include "SpellInfo.h" #include "SpellScript.h" @@ -131,18 +132,29 @@ class go_broggok_lever : public GameObjectScript public: go_broggok_lever() : GameObjectScript("go_broggok_lever") { } - bool OnGossipHello(Player* /*player*/, GameObject* go) override + struct go_broggok_leverAI : public GameObjectAI { - if (InstanceScript* instance = go->GetInstanceScript()) + go_broggok_leverAI(GameObject* go) : GameObjectAI(go), instance(go->GetInstanceScript()) { } + + InstanceScript* instance; + + bool GossipHello(Player* /*player*/, bool /*reportUse*/) override + { if (instance->GetBossState(DATA_BROGGOK) != DONE && instance->GetBossState(DATA_BROGGOK) != IN_PROGRESS) { instance->SetBossState(DATA_BROGGOK, IN_PROGRESS); - if (Creature* broggok = ObjectAccessor::GetCreature(*go, instance->GetGuidData(DATA_BROGGOK))) + if (Creature* broggok = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_BROGGOK))) broggok->AI()->DoAction(ACTION_PREPARE_BROGGOK); } - go->UseDoorOrButton(); - return false; + me->UseDoorOrButton(); + return false; + } + }; + + GameObjectAI* GetAI(GameObject* go) const override + { + return GetBloodFurnaceAI<go_broggok_leverAI>(go); } }; diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp index 64d5407f312..e61d5186fbf 100644 --- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp @@ -27,6 +27,7 @@ #include "SpellScript.h" #include "SpellAuraEffects.h" #include "PassiveAI.h" +#include "GameObjectAI.h" enum Yells { @@ -467,16 +468,26 @@ class go_manticron_cube : public GameObjectScript public: go_manticron_cube() : GameObjectScript("go_manticron_cube") { } - bool OnGossipHello(Player* player, GameObject* /*go*/) override + struct go_manticron_cubeAI : public GameObjectAI { - if (player->HasAura(SPELL_MIND_EXHAUSTION) || player->HasAura(SPELL_SHADOW_GRASP)) - return true; + go_manticron_cubeAI(GameObject* go) : GameObjectAI(go) { } + + bool GossipHello(Player* player, bool /*reportUse*/) override + { + if (player->HasAura(SPELL_MIND_EXHAUSTION) || player->HasAura(SPELL_SHADOW_GRASP)) + return true; + + if (Creature* trigger = player->FindNearestCreature(NPC_HELFIRE_RAID_TRIGGER, 10.0f)) + trigger->CastSpell((Unit*)nullptr, SPELL_SHADOW_GRASP_VISUAL); - if (Creature* trigger = player->FindNearestCreature(NPC_HELFIRE_RAID_TRIGGER, 10.0f)) - trigger->CastSpell((Unit*)nullptr, SPELL_SHADOW_GRASP_VISUAL); + player->CastSpell((Unit*)nullptr, SPELL_SHADOW_GRASP, true); + return true; + } + }; - player->CastSpell((Unit*)nullptr, SPELL_SHADOW_GRASP, true); - return true; + GameObjectAI* GetAI(GameObject* go) const override + { + return new go_manticron_cubeAI(go); } }; |
