aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2017-06-06 15:36:01 -0300
committerariel- <ariel-@users.noreply.github.com>2017-06-06 17:57:04 -0300
commit2335b9de1a46a409c714a1dc89cbd0565545e70e (patch)
treed711b7cf6206e5dde3432dd4d0accae5b8243135 /src/server/game
parent47d54bf5e20617d04055e1102e7688fb93e9f985 (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.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 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())