mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Core/Gossip: Fix interaction with gossip launched by accepting quest (#30419)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user