Core/Gossip: Fix interaction with gossip launched by accepting quest (#30419)

This commit is contained in:
Meji
2024-12-29 00:43:01 +01:00
committed by GitHub
parent 6b96facee3
commit 75bc3021da
3 changed files with 9 additions and 4 deletions

View File

@@ -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

View File

@@ -1156,7 +1156,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)

View File

@@ -181,15 +181,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())
@@ -197,6 +196,8 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode(WorldPackets::Quest::QuestG
else if (GameObject* go = object->ToGameObject())
launchGossip(go);
}
else
_player->PlayerTalkClass->SendCloseGossip();
return;
}