diff options
| author | ariel- <ariel-@users.noreply.github.com> | 2017-05-01 18:19:36 -0300 |
|---|---|---|
| committer | ariel- <ariel-@users.noreply.github.com> | 2017-05-01 18:19:36 -0300 |
| commit | f913f3bb8977c127d200d5d4a608ab434b21bbcd (patch) | |
| tree | bb2d18ad5c0c23667271ca98bd6754cc745256a8 /src/server/scripts/EasternKingdoms/Karazhan | |
| parent | e4481c016a86fe7db0b83a434ea08eb7ba50174f (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')
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); } }; |
