aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Outland/HellfireCitadel
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2017-05-01 18:19:36 -0300
committerariel- <ariel-@users.noreply.github.com>2017-05-01 18:19:36 -0300
commitf913f3bb8977c127d200d5d4a608ab434b21bbcd (patch)
treebb2d18ad5c0c23667271ca98bd6754cc745256a8 /src/server/scripts/Outland/HellfireCitadel
parente4481c016a86fe7db0b83a434ea08eb7ba50174f (diff)
Core/Scripts: unified scripted gossip/quest api
- Changed self-accessor on GameObjectAI to "me", like UnitAI - Moved all related functions to AI, now Unit and GameObject have the same function names with identical behaviour - Remove "OnUpdate" from CreatureScript/GameObjectScript, was never used and we already have AI Update method - Quest methods no longer return a bool, the return value was used to call the AI version if the ScriptMgr one returned false - Implemented GameObjectAI::Destroyed hook (was never called), implemented Damaged method - Rename OnStateChanged to OnLootStateChanged to reflect when it's really called, and created a new hook OnStateChanged that only gets called on GOState change - Since the functions are now only getting called from AI, made GetAI methods full virtual. (CanSpawn method is anyways going to be used on creatures with AI)
Diffstat (limited to 'src/server/scripts/Outland/HellfireCitadel')
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h6
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp22
-rw-r--r--src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp25
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 4c05bde00cb..942f6fa9e6a 100644
--- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h
+++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/blood_furnace.h
@@ -80,10 +80,10 @@ enum BFActionIds
ACTION_PREPARE_BROGGOK = 3
};
-template<class AI>
-AI* GetBloodFurnaceAI(Creature* creature)
+template<class AI, class T>
+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 190b41134d3..02d4e7e7e35 100644
--- a/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/BloodFurnace/boss_broggok.cpp
@@ -17,6 +17,7 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "GameObjectAI.h"
#include "SpellScript.h"
#include "SpellAuraEffects.h"
#include "blood_furnace.h"
@@ -127,18 +128,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 fee33645646..ac9399ee6ad 100644
--- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
+++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp
@@ -23,6 +23,7 @@
#include "SpellScript.h"
#include "SpellAuraEffects.h"
#include "PassiveAI.h"
+#include "GameObjectAI.h"
enum Yells
{
@@ -463,16 +464,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) { }
- if (Creature* trigger = player->FindNearestCreature(NPC_HELFIRE_RAID_TRIGGER, 10.0f))
- trigger->CastSpell((Unit*)nullptr, SPELL_SHADOW_GRASP_VISUAL);
+ bool GossipHello(Player* player, bool /*reportUse*/) override
+ {
+ if (player->HasAura(SPELL_MIND_EXHAUSTION) || player->HasAura(SPELL_SHADOW_GRASP))
+ return true;
- player->CastSpell((Unit*)nullptr, SPELL_SHADOW_GRASP, true);
- return true;
+ 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;
+ }
+ };
+
+ GameObjectAI* GetAI(GameObject* go) const override
+ {
+ return new go_manticron_cubeAI(go);
}
};