From a60dc0bd9e03322b73a3dd7f716c05728e257018 Mon Sep 17 00:00:00 2001 From: Hondacrx Date: Sun, 10 Nov 2024 13:59:19 -0500 Subject: [PATCH] Core/PacketIO: Fix SMSG_UI_MAP_QUEST_LINES_RESPONSE struct (TWW) Port From (https://github.com/TrinityCore/TrinityCore/commit/19a0e885a63a7d07a6edd6c1b14ba91f87141ffd) --- Source/Game/Handlers/QuestHandler.cs | 14 ++++++++++++-- Source/Game/Networking/Packets/QuestPackets.cs | 5 +++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Source/Game/Handlers/QuestHandler.cs b/Source/Game/Handlers/QuestHandler.cs index aa6e25f5c..5ee27bb06 100644 --- a/Source/Game/Handlers/QuestHandler.cs +++ b/Source/Game/Handlers/QuestHandler.cs @@ -810,12 +810,22 @@ namespace Game if (questLineQuests.Empty()) continue; + bool isQuestLineCompleted = true; foreach (var questLineQuest in questLineQuests) { Quest quest = Global.ObjectMgr.GetQuestTemplate(questLineQuest.QuestID); - if (quest != null && _player.CanTakeQuest(quest, false)) - response.QuestLineXQuestIDs.Add(questLineQuest.Id); + if (quest != null) + { + if (_player.CanTakeQuest(quest, false)) + response.QuestLineXQuestIDs.Add(questLineQuest.Id); + + if (isQuestLineCompleted && !_player.GetQuestRewardStatus(questLineQuest.QuestID)) + isQuestLineCompleted = false; + } } + + if (!isQuestLineCompleted) + response.QuestLineIDs.Add(questLineId); } var quests = Global.ObjectMgr.GetUiMapQuestsList(uiMap.Id); diff --git a/Source/Game/Networking/Packets/QuestPackets.cs b/Source/Game/Networking/Packets/QuestPackets.cs index 140a65811..16eccb3cd 100644 --- a/Source/Game/Networking/Packets/QuestPackets.cs +++ b/Source/Game/Networking/Packets/QuestPackets.cs @@ -960,6 +960,7 @@ namespace Game.Networking.Packets public uint UiMapID; public List QuestLineXQuestIDs = new(); public List QuestIDs = new(); + public List QuestLineIDs = new(); public UiMapQuestLinesResponse() : base(ServerOpcodes.UiMapQuestLinesResponse, ConnectionType.Instance) { } @@ -968,12 +969,16 @@ namespace Game.Networking.Packets _worldPacket.WriteUInt32(UiMapID); _worldPacket.WriteInt32(QuestLineXQuestIDs.Count); _worldPacket.WriteInt32(QuestIDs.Count); + _worldPacket.WriteInt32(QuestLineIDs.Count); foreach (var questLineQuestID in QuestLineXQuestIDs) _worldPacket.WriteUInt32(questLineQuestID); foreach (var questID in QuestIDs) _worldPacket.WriteUInt32(questID); + + foreach (var questID in QuestLineIDs) + _worldPacket.WriteUInt32(questID); } }