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); } }