diff options
| author | ariel- <ariel-@users.noreply.github.com> | 2017-06-06 20:36:01 +0200 |
|---|---|---|
| committer | Carbenium <carbenium@outlook.com> | 2020-07-16 21:47:28 +0200 |
| commit | 5903a10a834b1198702b024182581799648540ff (patch) | |
| tree | bf13bff656fdae5ee6028b4db2ba32e0b6ddf6a5 /src/server/game | |
| parent | f27b7ba2855f1d3a707dc0bdd15ca38546a4c321 (diff) | |
Core/AI: segregate GameObject ReportUse from normal Use (lock open/normal click)
Closes #19819
(cherry picked from commit 2335b9de1a46a409c714a1dc89cbd0565545e70e)
Diffstat (limited to 'src/server/game')
| -rw-r--r-- | src/server/game/AI/CoreAI/GameObjectAI.h | 6 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartAI.cpp | 11 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartAI.h | 3 | ||||
| -rw-r--r-- | src/server/game/Entities/GameObject/GameObject.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Handlers/SpellHandler.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 2 |
6 files changed, 19 insertions, 7 deletions
diff --git a/src/server/game/AI/CoreAI/GameObjectAI.h b/src/server/game/AI/CoreAI/GameObjectAI.h index 4bfc6c7a2f3..61fb2f350a1 100644 --- a/src/server/game/AI/CoreAI/GameObjectAI.h +++ b/src/server/game/AI/CoreAI/GameObjectAI.h @@ -49,7 +49,7 @@ class TC_GAME_API GameObjectAI static int32 Permissible(GameObject const* /*go*/); // Called when a player opens a gossip dialog with the gameobject. - virtual bool GossipHello(Player* /*player*/, bool /*reportUse*/) { return false; } + virtual bool GossipHello(Player* /*player*/) { return false; } // Called when a player selects a gossip item in the gameobject's gossip menu. virtual bool GossipSelect(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/) { return false; } @@ -66,6 +66,10 @@ class TC_GAME_API GameObjectAI // Called when the dialog status between a player and the gameobject is requested. virtual uint32 GetDialogStatus(Player* player); + // Called when a Player clicks a GameObject, before GossipHello + // prevents achievement tracking if returning true + virtual bool OnReportUse(Player* /*player*/) { return false; } + virtual void Destroyed(Player* /*player*/, uint32 /*eventId*/) { } virtual void Damaged(Player* /*player*/, uint32 /*eventId*/) { } diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 5c2c48bdf6d..fb596a054da 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -983,10 +983,17 @@ void SmartGameObjectAI::Reset() } // Called when a player opens a gossip dialog with the gameobject. -bool SmartGameObjectAI::GossipHello(Player* player, bool reportUse) +bool SmartGameObjectAI::GossipHello(Player* player) { _gossipReturn = false; - GetScript()->ProcessEventsFor(SMART_EVENT_GOSSIP_HELLO, player, uint32(reportUse), 0, false, nullptr, me); + GetScript()->ProcessEventsFor(SMART_EVENT_GOSSIP_HELLO, player, 0, 0, false, nullptr, me); + return _gossipReturn; +} + +bool SmartGameObjectAI::OnReportUse(Player* player) +{ + _gossipReturn = false; + GetScript()->ProcessEventsFor(SMART_EVENT_GOSSIP_HELLO, player, 1, 0, false, nullptr, me); return _gossipReturn; } diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h index 070165efa40..5aaab7bfd02 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -260,7 +260,8 @@ class TC_GAME_API SmartGameObjectAI : public GameObjectAI SmartScript* GetScript() { return &mScript; } static int32 Permissible(GameObject const* /*go*/) { return PERMIT_BASE_NO; } - bool GossipHello(Player* player, bool reportUse) override; + bool GossipHello(Player* player) override; + bool OnReportUse(Player* player) override; bool GossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override; bool GossipSelectCode(Player* player, uint32 menuId, uint32 gossipListId, const char* code) override; void QuestAccept(Player* player, Quest const* quest) override; diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 12cdbe445fb..f72c1cb8a94 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -1417,7 +1417,7 @@ void GameObject::Use(Unit* user) if (Player* playerUser = user->ToPlayer()) { playerUser->PlayerTalkClass->ClearMenus(); - if (AI()->GossipHello(playerUser, false)) + if (AI()->GossipHello(playerUser)) return; } diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp index 30b8450ad1e..c6ebd656a00 100644 --- a/src/server/game/Handlers/SpellHandler.cpp +++ b/src/server/game/Handlers/SpellHandler.cpp @@ -262,7 +262,7 @@ void WorldSession::HandleGameobjectReportUse(WorldPackets::GameObject::GameObjRe if (GameObject* go = GetPlayer()->GetGameObjectIfCanInteractWith(packet.Guid)) { - if (go->AI()->GossipHello(_player, true)) + if (go->AI()->OnReportUse(_player)) return; _player->UpdateCriteria(CRITERIA_TYPE_USE_GAMEOBJECT, go->GetEntry()); diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index e0fa7462a7c..21d6dbf18ac 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -1602,7 +1602,7 @@ void Spell::SendLoot(ObjectGuid guid, LootType loottype) } player->PlayerTalkClass->ClearMenus(); - if (gameObjTarget->AI()->GossipHello(player, false)) + if (gameObjTarget->AI()->GossipHello(player)) return; switch (gameObjTarget->GetGoType()) |
