This commit is contained in:
SilicaAndPina 2020-12-27 00:56:31 +13:00
parent efc21b7b5b
commit d02b28115b
4 changed files with 64 additions and 18 deletions

View file

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

View file

@ -72,14 +72,30 @@ namespace HISP.Game
}
public static QuestEntry[] GetPublicQuestList()
{
List<QuestEntry> quests = QuestList.OrderBy(o => o.Title).ToList();
foreach(QuestEntry quest in quests)
QuestEntry[] quests = QuestList.OrderBy(o => o.Title).ToArray();
List<QuestEntry> sortedQuests = new List<QuestEntry>();
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;

View file

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

View file

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