From d02b28115b630dbd4791c52a26438dcb32ec5451 Mon Sep 17 00:00:00 2001 From: SilicaAndPina Date: Sun, 27 Dec 2020 00:56:31 +1300 Subject: [PATCH] add --- .../Horse Isle Server/Game/Meta.cs | 27 ++++++++++++++ .../Horse Isle Server/Game/Quest.cs | 36 ++++++++++++------- .../Horse Isle Server/Server/GameDataJson.cs | 4 +-- .../Horse Isle Server/Server/GameServer.cs | 15 ++++++-- 4 files changed, 64 insertions(+), 18 deletions(-) diff --git a/Horse Isle Server/Horse Isle Server/Game/Meta.cs b/Horse Isle Server/Horse Isle Server/Game/Meta.cs index 88ecf17..2a20f90 100644 --- a/Horse Isle Server/Horse Isle Server/Game/Meta.cs +++ b/Horse Isle Server/Horse Isle Server/Game/Meta.cs @@ -316,6 +316,33 @@ namespace HISP.Game message += Messages.QuestLogHeader; Quest.QuestEntry[] questList = Quest.GetPublicQuestList(); foreach (Quest.QuestEntry quest in questList) + { + string fmsg = ""; + if (user.Quests.GetTrackedQuestAmount(quest.Id) > 0) + fmsg = Messages.QuestCompleted; + else + fmsg = Messages.QuestNotCompleted; + + if (Quest.IsQuestAvalible(user,quest)) + fmsg = Messages.QuestNotAvalible; + + message += Messages.FormatQuestLogQuest(quest.Title, quest.QuestPointsEarned, quest.Difficulty, fmsg); + } + + int totalComplete = 0; + int totalQuestPoints = 0; + foreach(Quest.QuestEntry quest in questList) + { + if(user.Quests.GetTrackedQuestAmount(quest.Id) > 0) + totalComplete++; + totalQuestPoints += quest.QuestPointsEarned; + } + + message += Messages.FormatQuestFooter(totalComplete, questList.Length, user.QuestPoints, totalQuestPoints); + message += Messages.BackToMap; + message += Messages.MetaTerminator; + + return message; } public static string BuildSpecialTileInfo(User user, World.SpecialTile specialTile) diff --git a/Horse Isle Server/Horse Isle Server/Game/Quest.cs b/Horse Isle Server/Horse Isle Server/Game/Quest.cs index a5db973..3052b55 100644 --- a/Horse Isle Server/Horse Isle Server/Game/Quest.cs +++ b/Horse Isle Server/Horse Isle Server/Game/Quest.cs @@ -72,14 +72,30 @@ namespace HISP.Game } public static QuestEntry[] GetPublicQuestList() { - List quests = QuestList.OrderBy(o => o.Title).ToList(); - foreach(QuestEntry quest in quests) + QuestEntry[] quests = QuestList.OrderBy(o => o.Title).ToArray(); + List sortedQuests = new List(); + foreach (QuestEntry quest in quests) { - if (quest.Title == null) - quests.Remove(quest); + if (quest.Title != null) + sortedQuests.Add(quest); } - return quests.ToArray(); + return sortedQuests.ToArray(); + } + + public static bool IsQuestAvalible(User user, QuestEntry quest) + { + // Has completed other required quests? + foreach (int questId in quest.RequiresQuestIdCompleted) + if (user.Quests.GetTrackedQuestAmount(quest.Id) < 1) + return false; + + // Has NOT competed other MUST NOT BE required quests + foreach (int questId in quest.RequiresQuestIdNotCompleted) + if (user.Quests.GetTrackedQuestAmount(quest.Id) > 1) + return false; + + return true; } public static bool ActivateQuest(User user, QuestEntry quest, bool npcActivation = false) @@ -87,15 +103,9 @@ namespace HISP.Game if (quest.Tracked) { - // Has completed other required quests? - foreach (int questId in quest.RequiresQuestIdCompleted) - if (user.Quests.GetTrackedQuestAmount(quest.Id) < 1) - goto Fail; + if (!IsQuestAvalible(user, quest)) + goto Fail; - // Has NOT competed other MUST NOT BE required quests - foreach (int questId in quest.RequiresQuestIdNotCompleted) - if (user.Quests.GetTrackedQuestAmount(quest.Id) > 1) - goto Fail; // Has allready tracked this quest? if (user.Quests.GetTrackedQuestAmount(quest.Id) >= quest.MaxRepeats) goto Fail; diff --git a/Horse Isle Server/Horse Isle Server/Server/GameDataJson.cs b/Horse Isle Server/Horse Isle Server/Server/GameDataJson.cs index da8e215..d2dc673 100644 --- a/Horse Isle Server/Horse Isle Server/Server/GameDataJson.cs +++ b/Horse Isle Server/Horse Isle Server/Server/GameDataJson.cs @@ -440,8 +440,8 @@ namespace HISP.Server Messages.RandomMovement = gameData.messages.random_movement; // Quests Log - Messages.QuestLogHeader = gameData.messages.meta.quest_log.meta.header_meta; - Messages.QuestFormat = gameData.messages.meta.quest_log.meta.quest_format; + Messages.QuestLogHeader = gameData.messages.meta.quest_log.header_meta; + Messages.QuestFormat = gameData.messages.meta.quest_log.quest_format; Messages.QuestNotCompleted = gameData.messages.meta.quest_log.not_complete; Messages.QuestNotAvalible = gameData.messages.meta.quest_log.not_avalible; diff --git a/Horse Isle Server/Horse Isle Server/Server/GameServer.cs b/Horse Isle Server/Horse Isle Server/Server/GameServer.cs index b65c7b0..0f0ce05 100644 --- a/Horse Isle Server/Horse Isle Server/Server/GameServer.cs +++ b/Horse Isle Server/Horse Isle Server/Server/GameServer.cs @@ -147,10 +147,19 @@ namespace HISP.Server return; } - if(buttonId == 21) // Private Notes + switch(buttonId) { - byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildPrivateNotes(sender.LoggedinUser)); - sender.SendPacket(metaPacket); + case 3: + byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildQuestLog(sender.LoggedinUser)); + sender.SendPacket(metaPacket); + break; + case 21: + metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildPrivateNotes(sender.LoggedinUser)); + sender.SendPacket(metaPacket); + break; + default: + Logger.ErrorPrint("Dynamic button #" + buttonId + " unknown..."); + break; } } public static void OnUserInfoRequest(GameClient sender, byte[] packet)