From 91d66f3b51ada41fb47804a6fd9fc67ea53448a5 Mon Sep 17 00:00:00 2001 From: Chomp Date: Tue, 7 Sep 2021 19:53:02 +0100 Subject: [PATCH] assortmentunlock checks --- QuestValidator/Program.cs | 84 +++++++++++++++++++++++++++------------ 1 file changed, 59 insertions(+), 25 deletions(-) diff --git a/QuestValidator/Program.cs b/QuestValidator/Program.cs index b7eeefd..498cb29 100644 --- a/QuestValidator/Program.cs +++ b/QuestValidator/Program.cs @@ -21,7 +21,7 @@ namespace QuestValidator var liveQuestData = QuestHelper.GetLiveQuestData(); CheckForMissingQuestsInAkiFile(liveQuestData, questData); - + foreach (var item in questData) { var quest = item.Value; @@ -42,13 +42,20 @@ namespace QuestValidator CheckStartedRewardItems(quest, relatedLiveQuest); CheckAvailableForFinishConditionItems(quest, relatedLiveQuest); - + LoggingHelpers.LogInfo(""); LoggingHelpers.LogInfo("-----"); LoggingHelpers.LogInfo(""); } } + private static void LogQuestDetails(Models.Quest quest) + { + var questName = QuestHelper.GetQuestNameById(quest._id); + LoggingHelpers.LogInfo($"### Quest name: {questName} ({quest._id})"); + LoggingHelpers.LogInfo($"Wiki: https://escapefromtarkov.fandom.com/wiki/{questName.Replace(' ', '_')}"); + } + private static void CheckRootItemValues(Models.Quest quest, Models.Quest relatedLiveQuest) { // Check image id matches @@ -113,7 +120,7 @@ namespace QuestValidator // Check item stack count if (questSuccessRewardItem.items[0] != null && questSuccessRewardItem.items[0].upd != null) { - CheckValuesMatch(questSuccessRewardItem.items[0].upd.StackObjectsCount, relatedLiveRewardItem.items[0].upd.StackObjectsCount, "mismatch for StackObjectsCount", questSuccessRewardItem.items[0]._id); + CheckValuesMatch(questSuccessRewardItem.items[0].upd.StackObjectsCount, questSuccessRewardItem.items[0].upd.StackObjectsCount, "mismatch for success item StackObjectsCount", questSuccessRewardItem.items[0]._id); } } @@ -146,8 +153,16 @@ namespace QuestValidator foreach (var questSuccessRewardItem in quest.rewards.Success.Where(x => x.type == "AssortmentUnlock")) { - var relatedLiveRewardItem = liveQuestSuccessRewardItems.FirstOrDefault(x => x.target == questSuccessRewardItem.target && x.type == "AssortmentUnlock"); - if (!ItemExists(relatedLiveRewardItem, "TraderStanding success reward item", questSuccessRewardItem.index)) + var relatedLiveRewardItem = liveQuestSuccessRewardItems.Find(x => x.id == questSuccessRewardItem.id && x.type == "AssortmentUnlock"); + if (relatedLiveRewardItem == null) + { + relatedLiveRewardItem = liveQuestSuccessRewardItems.Find(x => x.traderId == questSuccessRewardItem.traderId + && x.index == questSuccessRewardItem.index + && x.type == "AssortmentUnlock" + && x.items[0]._tpl == questSuccessRewardItem.items[0]._tpl); + } + + if (!ItemExists(relatedLiveRewardItem, "AssortmentUnlock success reward item", questSuccessRewardItem.index)) { continue; } @@ -159,7 +174,7 @@ namespace QuestValidator CheckValuesMatch(questSuccessRewardItem.traderId, relatedLiveRewardItem.traderId, "traderId value mismatch", questSuccessRewardItem.id); // check target equals items[0].id - CheckValuesMatch(questSuccessRewardItem.target, relatedLiveRewardItem.items[0]._id, "target value does not match items[0].id mismatch", questSuccessRewardItem.id); + CheckValuesMatch(questSuccessRewardItem.target, questSuccessRewardItem.items[0]._id, "target value does not match items[0].id mismatch", questSuccessRewardItem.id); } } @@ -167,42 +182,69 @@ namespace QuestValidator { var liveQuestStartedRewardItems = relatedLiveQuest.rewards.Started; - foreach (var questSuccessRewardItem in quest.rewards.Started.Where(x => x.type == "Item")) + foreach (var questStartedRewardItem in quest.rewards.Started.Where(x => x.type == "Item")) { var errorMessage = string.Empty; // Get live reward item by index and type - var relatedLiveRewardItem = liveQuestStartedRewardItems.Find(x => x.index == questSuccessRewardItem.index && x.type == "Item"); + var relatedLiveRewardItem = liveQuestStartedRewardItems.Find(x => x.index == questStartedRewardItem.index && x.type == "Item"); if (relatedLiveRewardItem == null) { // Get live reward item by templateId and type as we cant find it by index - relatedLiveRewardItem = liveQuestStartedRewardItems.Find(x => x.items != null && x.items[0]?._tpl == questSuccessRewardItem.items[0]?._tpl && x.type == "Item"); + relatedLiveRewardItem = liveQuestStartedRewardItems.Find(x => x.items != null && x.items[0]?._tpl == questStartedRewardItem.items[0]?._tpl && x.type == "Item"); if (relatedLiveRewardItem == null) { - LoggingHelpers.LogError($"ERROR unable to find started reward item in live quest data by index: ({questSuccessRewardItem.index}) OR template id: {questSuccessRewardItem.items[0]._tpl}"); - LoggingHelpers.LogError($"ERROR Skipping quest started item: {questSuccessRewardItem.id}"); + LoggingHelpers.LogError($"ERROR unable to find started reward item in live quest data by index: ({questStartedRewardItem.index}) OR template id: {questStartedRewardItem.items[0]._tpl}"); + LoggingHelpers.LogError($"ERROR Skipping quest started item: {questStartedRewardItem.id}"); continue; } } // Ensure target matches the objects items[0].id value - if (questSuccessRewardItem.items[0]?._id != questSuccessRewardItem.target) + if (questStartedRewardItem.items[0]?._id != questStartedRewardItem.target) { - LoggingHelpers.LogWarning($"WARNING target does not match first item: {questSuccessRewardItem.target}, expected {questSuccessRewardItem.items[0]?._id}"); + LoggingHelpers.LogWarning($"WARNING target does not match first item: {questStartedRewardItem.target}, expected {questStartedRewardItem.items[0]?._id}"); } // Check template ids match - CheckValuesMatch(questSuccessRewardItem.items[0]._tpl, relatedLiveRewardItem.items[0]._tpl, "mismatch for template id", questSuccessRewardItem.items[0]._id, true); + CheckValuesMatch(questStartedRewardItem.items[0]._tpl, relatedLiveRewardItem.items[0]._tpl, "mismatch for template id", questStartedRewardItem.items[0]._id, true); // Check value values match - CheckValuesMatch(questSuccessRewardItem.value, relatedLiveRewardItem.value, "mismatch for success item reward value", questSuccessRewardItem.id); + CheckValuesMatch(questStartedRewardItem.value, relatedLiveRewardItem.value, "mismatch for success item reward value", questStartedRewardItem.id); // Check item stack count - if (questSuccessRewardItem.items[0] != null && questSuccessRewardItem.items[0].upd != null) + if (questStartedRewardItem.items[0] != null && questStartedRewardItem.items[0].upd != null) { - CheckValuesMatch(questSuccessRewardItem.items[0].upd.StackObjectsCount, relatedLiveRewardItem.items[0].upd.StackObjectsCount, "mismatch for StackObjectsCount", questSuccessRewardItem.items[0]._id); + CheckValuesMatch(questStartedRewardItem.items[0].upd.StackObjectsCount, relatedLiveRewardItem.items[0].upd.StackObjectsCount, "mismatch for started item StackObjectsCount", questStartedRewardItem.items[0]._id); } } + + foreach (var questStartedRewardItem in quest.rewards.Started.Where(x => x.type == "AssortmentUnlock")) + { + // Get live reward item by id + var relatedLiveRewardItem = liveQuestStartedRewardItems.FirstOrDefault(x => x.id == questStartedRewardItem.id && x.type == "AssortmentUnlock"); + if (relatedLiveRewardItem == null) + { + // Cant find live reward item by id, get my template id inside items[0] + relatedLiveRewardItem = liveQuestStartedRewardItems.Find(x => x.traderId == questStartedRewardItem.traderId + && x.index == questStartedRewardItem.index + && x.type == "AssortmentUnlock" + && x.items[0]._tpl == questStartedRewardItem.items[0]._tpl); + } + if (!ItemExists(relatedLiveRewardItem, "AssortmentUnlock started reward item", questStartedRewardItem.index)) + { + continue; + } + + // Check loyalty level + CheckValuesMatch(questStartedRewardItem.loyaltyLevel.Value, relatedLiveRewardItem.loyaltyLevel.Value, "loyalty level value mismatch", questStartedRewardItem.id); + + // Check traderId + CheckValuesMatch(questStartedRewardItem.traderId, relatedLiveRewardItem.traderId, "traderId value mismatch", questStartedRewardItem.id); + + // check target equals items[0].id + CheckValuesMatch(questStartedRewardItem.target, questStartedRewardItem.items[0]._id, "target value does not match items[0].id mismatch", questStartedRewardItem.id); + } } private static void CheckAvailableForFinishConditionItems(Models.Quest quest, Models.Quest relatedLiveQuest) @@ -227,14 +269,6 @@ namespace QuestValidator } } - - private static void LogQuestDetails(Models.Quest quest) - { - var questName = QuestHelper.GetQuestNameById(quest._id); - LoggingHelpers.LogInfo($"### Quest name: {questName} ({quest._id})"); - LoggingHelpers.LogInfo($"Wiki: https://escapefromtarkov.fandom.com/wiki/{questName.Replace(' ', '_')}"); - } - private static bool ItemExists(object itemToCheck, string message, int index = -1) { if (itemToCheck == null)