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;