diff options
author | ariel- <ariel-@users.noreply.github.com> | 2017-06-06 15:36:01 -0300 |
---|---|---|
committer | ariel- <ariel-@users.noreply.github.com> | 2017-06-06 17:57:04 -0300 |
commit | 2335b9de1a46a409c714a1dc89cbd0565545e70e (patch) | |
tree | d711b7cf6206e5dde3432dd4d0accae5b8243135 /src/server/game | |
parent | 47d54bf5e20617d04055e1102e7688fb93e9f985 (diff) |
Core/AI: segregate GameObject ReportUse from normal Use (lock open/normal click)
Closes #19819
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 1d938be7b1a..84ead51cc91 100644 --- a/src/server/game/AI/CoreAI/GameObjectAI.h +++ b/src/server/game/AI/CoreAI/GameObjectAI.h @@ -48,7 +48,7 @@ class TC_GAME_API GameObjectAI static int32 Permissible(GameObject const* /*go*/) { return PERMIT_BASE_NO; } // 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; } @@ -65,6 +65,10 @@ class TC_GAME_API GameObjectAI // Called when the dialog status between a player and the gameobject is requested. virtual uint32 GetDialogStatus(Player* /*player*/) { return DIALOG_STATUS_SCRIPTED_NO_STATUS; } + // 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 14689b93839..df5fe1d6b7b 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -982,10 +982,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 886bc94c3dd..e295f1bc7c4 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -259,7 +259,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 0a4f8469c9f..b82ca03f48b 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -1250,7 +1250,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 1d5fb796568..bea6cb7bbe5 100644 --- a/src/server/game/Handlers/SpellHandler.cpp +++ b/src/server/game/Handlers/SpellHandler.cpp @@ -314,7 +314,7 @@ void WorldSession::HandleGameobjectReportUse(WorldPacket& recvPacket) if (GameObject* go = GetPlayer()->GetGameObjectIfCanInteractWith(guid)) { - if (go->AI()->GossipHello(_player, true)) + if (go->AI()->OnReportUse(_player)) return; _player->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_USE_GAMEOBJECT, go->GetEntry()); diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 0d5457044c1..c20799d391b 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -1857,7 +1857,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()) |