aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMeji <alvaro.megias@outlook.com>2024-12-29 00:43:01 +0100
committerOvahlord <dreadkiller@gmx.de>2024-12-29 12:17:56 +0100
commit01bf45468b19707d1c3b80cf9069cd7e17bb2c02 (patch)
treebf2eb7acc731a715877027c656dcc4139c469680 /src
parent74f9ad8c2e3efa6b18ecb0f7df6a6e37a85d3c3f (diff)
Core/Gossip: Fix interaction with gossip launched by accepting quest (#30419)
(cherry picked from commit 75bc3021da469d7c8eddbff23e5f1ec7c4a4dfbb)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Creature/GossipDef.h2
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp4
-rw-r--r--src/server/game/Handlers/QuestHandler.cpp7
3 files changed, 9 insertions, 4 deletions
diff --git a/src/server/game/Entities/Creature/GossipDef.h b/src/server/game/Entities/Creature/GossipDef.h
index e97c1cca3d9..778d2964b6b 100644
--- a/src/server/game/Entities/Creature/GossipDef.h
+++ b/src/server/game/Entities/Creature/GossipDef.h
@@ -231,11 +231,13 @@ class InteractionData
SourceGuid.Clear();
TrainerId = 0;
PlayerChoiceId = 0;
+ IsLaunchedByQuest = false;
}
ObjectGuid SourceGuid;
uint32 TrainerId = 0;
uint32 PlayerChoiceId = 0;
+ bool IsLaunchedByQuest = false;
};
class TC_GAME_API PlayerMenu
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp
index 679d95a46b8..7e53503c8f4 100644
--- a/src/server/game/Handlers/MiscHandler.cpp
+++ b/src/server/game/Handlers/MiscHandler.cpp
@@ -1151,7 +1151,9 @@ void WorldSession::HandleMountSetFavorite(WorldPackets::Misc::MountSetFavorite&
void WorldSession::HandleCloseInteraction(WorldPackets::Misc::CloseInteraction& closeInteraction)
{
- if (_player->PlayerTalkClass->GetInteractionData().SourceGuid == closeInteraction.SourceGuid)
+ if (_player->PlayerTalkClass->GetInteractionData().IsLaunchedByQuest)
+ _player->PlayerTalkClass->GetInteractionData().IsLaunchedByQuest = false;
+ else if (_player->PlayerTalkClass->GetInteractionData().SourceGuid == closeInteraction.SourceGuid)
_player->PlayerTalkClass->GetInteractionData().Reset();
if (_player->GetStableMaster() == closeInteraction.SourceGuid)
diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp
index b8589e1db59..1f51be2ec95 100644
--- a/src/server/game/Handlers/QuestHandler.cpp
+++ b/src/server/game/Handlers/QuestHandler.cpp
@@ -188,15 +188,14 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPackets::Quest::QuestG
}
}
- _player->PlayerTalkClass->SendCloseGossip();
-
- if (quest->HasFlag(QUEST_FLAGS_LAUNCH_GOSSIP_ACCEPT))
+ if (quest->HasFlag(QUEST_FLAGS_LAUNCH_GOSSIP_ACCEPT) && !quest->HasFlagEx(QUEST_FLAGS_EX_SUPPRESS_GOSSIP_ACCEPT))
{
auto launchGossip = [&](WorldObject* worldObject)
{
_player->PlayerTalkClass->ClearMenus();
_player->PrepareGossipMenu(worldObject, _player->GetGossipMenuForSource(worldObject), true);
_player->SendPreparedGossip(worldObject);
+ _player->PlayerTalkClass->GetInteractionData().IsLaunchedByQuest = true;
};
if (Creature* creature = object->ToCreature())
@@ -204,6 +203,8 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPackets::Quest::QuestG
else if (GameObject* go = object->ToGameObject())
launchGossip(go);
}
+ else
+ _player->PlayerTalkClass->SendCloseGossip();
return;
}