aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2017-06-06 20:36:01 +0200
committerCarbenium <carbenium@outlook.com>2020-07-16 21:47:28 +0200
commit5903a10a834b1198702b024182581799648540ff (patch)
treebf13bff656fdae5ee6028b4db2ba32e0b6ddf6a5 /src/server/game
parentf27b7ba2855f1d3a707dc0bdd15ca38546a4c321 (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.h6
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.cpp11
-rw-r--r--src/server/game/AI/SmartScripts/SmartAI.h3
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp2
-rw-r--r--src/server/game/Handlers/SpellHandler.cpp2
-rw-r--r--src/server/game/Spells/SpellEffects.cpp2
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())