aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/EasternKingdoms/Karazhan
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/EasternKingdoms/Karazhan
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/EasternKingdoms/Karazhan')
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp40
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp3
-rw-r--r--src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp92
3 files changed, 71 insertions, 64 deletions
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp
index c40def9a5c6..7e4308c685f 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_nightbane.cpp
@@ -17,6 +17,7 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "GameObjectAI.h"
#include "SpellScript.h"
#include "SpellAuraEffects.h"
#include "karazhan.h"
@@ -415,25 +416,36 @@ class spell_rain_of_bones : public SpellScriptLoader
class go_blackened_urn : public GameObjectScript
{
-public:
- go_blackened_urn() : GameObjectScript("go_blackened_urn") { }
+ public:
+ go_blackened_urn() : GameObjectScript("go_blackened_urn") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) override
- {
- if (go->HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE))
- return false;
+ struct go_blackened_urnAI : GameObjectAI
+ {
+ go_blackened_urnAI(GameObject* go) : GameObjectAI(go), instance(go->GetInstanceScript()) { }
- InstanceScript* instance = go->GetInstanceScript();
- if (!instance || instance->GetBossState(DATA_NIGHTBANE) == DONE || instance->GetBossState(DATA_NIGHTBANE) == IN_PROGRESS)
- return false;
+ InstanceScript* instance;
- if (Creature* nightbane = ObjectAccessor::GetCreature(*go, instance->GetGuidData(DATA_NIGHTBANE)))
+ bool GossipHello(Player* /*player*/, bool /*reportUse*/) override
+ {
+ if (me->HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE))
+ return false;
+
+ if (instance->GetBossState(DATA_NIGHTBANE) == DONE || instance->GetBossState(DATA_NIGHTBANE) == IN_PROGRESS)
+ return false;
+
+ if (Creature* nightbane = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_NIGHTBANE)))
+ {
+ me->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
+ nightbane->AI()->DoAction(ACTION_SUMMON);
+ }
+ return false;
+ }
+ };
+
+ GameObjectAI* GetAI(GameObject* go) const override
{
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
- nightbane->AI()->DoAction(ACTION_SUMMON);
+ return GetKarazhanAI<go_blackened_urnAI>(go);
}
- return false;
- }
};
void AddSC_boss_nightbane()
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp
index 3a13da90857..55bbbbc0e03 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/bosses_opera.cpp
@@ -816,7 +816,7 @@ class npc_grandmother : public CreatureScript
{
npc_grandmotherAI(Creature* creature) : ScriptedAI(creature) { }
- void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
+ bool GossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
{
if (menuId == OPTION_WHAT_PHAT_LEWTS_YOU_HAVE && gossipListId == 0)
{
@@ -827,6 +827,7 @@ class npc_grandmother : public CreatureScript
me->DespawnOrUnsummon();
}
+ return false;
}
};
diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
index 264a21d880f..09dff7b6f0f 100644
--- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
+++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp
@@ -335,46 +335,43 @@ public:
}
}
}
- };
-
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- ClearGossipMenuFor(player);
- npc_barnesAI* pBarnesAI = ENSURE_AI(npc_barnes::npc_barnesAI, creature->AI());
- switch (action)
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
{
- case GOSSIP_ACTION_INFO_DEF+1:
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, OZ_GOSSIP2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
- SendGossipMenuFor(player, 8971, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+2:
- CloseGossipMenuFor(player);
- pBarnesAI->StartEvent();
- break;
- case GOSSIP_ACTION_INFO_DEF+3:
- CloseGossipMenuFor(player);
- pBarnesAI->m_uiEventId = EVENT_OZ;
- TC_LOG_DEBUG("scripts", "player (%s) manually set Opera event to EVENT_OZ", player->GetGUID().ToString().c_str());
- break;
- case GOSSIP_ACTION_INFO_DEF+4:
- CloseGossipMenuFor(player);
- pBarnesAI->m_uiEventId = EVENT_HOOD;
- TC_LOG_DEBUG("scripts", "player (%s) manually set Opera event to EVENT_HOOD", player->GetGUID().ToString().c_str());
- break;
- case GOSSIP_ACTION_INFO_DEF+5:
- CloseGossipMenuFor(player);
- pBarnesAI->m_uiEventId = EVENT_RAJ;
- TC_LOG_DEBUG("scripts", "player (%s) manually set Opera event to EVENT_RAJ", player->GetGUID().ToString().c_str());
- break;
- }
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
- return true;
- }
+ switch (action)
+ {
+ case GOSSIP_ACTION_INFO_DEF + 1:
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, OZ_GOSSIP2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
+ SendGossipMenuFor(player, 8971, me->GetGUID());
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 2:
+ CloseGossipMenuFor(player);
+ StartEvent();
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 3:
+ CloseGossipMenuFor(player);
+ m_uiEventId = EVENT_OZ;
+ TC_LOG_DEBUG("scripts", "player (%s) manually set Opera event to EVENT_OZ", player->GetGUID().ToString().c_str());
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 4:
+ CloseGossipMenuFor(player);
+ m_uiEventId = EVENT_HOOD;
+ TC_LOG_DEBUG("scripts", "player (%s) manually set Opera event to EVENT_HOOD", player->GetGUID().ToString().c_str());
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 5:
+ CloseGossipMenuFor(player);
+ m_uiEventId = EVENT_RAJ;
+ TC_LOG_DEBUG("scripts", "player (%s) manually set Opera event to EVENT_RAJ", player->GetGUID().ToString().c_str());
+ break;
+ }
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- if (InstanceScript* instance = creature->GetInstanceScript())
+ return true;
+ }
+
+ bool GossipHello(Player* player) override
{
// Check for death of Moroes and if opera event is not done already
if (instance->GetBossState(DATA_MOROES) == DONE && instance->GetBossState(DATA_OPERA_PERFORMANCE) != DONE)
@@ -388,25 +385,22 @@ public:
AddGossipItemFor(player, GOSSIP_ICON_DOT, OZ_GM_GOSSIP3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5);
}
- if (npc_barnesAI* pBarnesAI = CAST_AI(npc_barnes::npc_barnesAI, creature->AI()))
- {
- if (!pBarnesAI->RaidWiped)
- SendGossipMenuFor(player, 8970, creature->GetGUID());
- else
- SendGossipMenuFor(player, 8975, creature->GetGUID());
+ if (!RaidWiped)
+ SendGossipMenuFor(player, 8970, me->GetGUID());
+ else
+ SendGossipMenuFor(player, 8975, me->GetGUID());
- return true;
- }
+ return true;
}
- }
- SendGossipMenuFor(player, 8978, creature->GetGUID());
- return true;
- }
+ SendGossipMenuFor(player, 8978, me->GetGUID());
+ return true;
+ }
+ };
CreatureAI* GetAI(Creature* creature) const override
{
- return GetInstanceAI<npc_barnesAI>(creature);
+ return GetKarazhanAI<npc_barnesAI>(creature);
}
};