diff options
author | Meji <alvaro.megias@outlook.com> | 2024-12-29 00:43:01 +0100 |
---|---|---|
committer | Ovahlord <dreadkiller@gmx.de> | 2024-12-29 12:17:56 +0100 |
commit | 01bf45468b19707d1c3b80cf9069cd7e17bb2c02 (patch) | |
tree | bf2eb7acc731a715877027c656dcc4139c469680 | |
parent | 74f9ad8c2e3efa6b18ecb0f7df6a6e37a85d3c3f (diff) |
Core/Gossip: Fix interaction with gossip launched by accepting quest (#30419)
(cherry picked from commit 75bc3021da469d7c8eddbff23e5f1ec7c4a4dfbb)
-rw-r--r-- | src/server/game/Entities/Creature/GossipDef.h | 2 | ||||
-rw-r--r-- | src/server/game/Handlers/MiscHandler.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Handlers/QuestHandler.cpp | 7 |
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; } |