diff --git a/AssortUpdater/Program.cs b/AssortUpdater/Program.cs index 14b0091..4b40f32 100644 --- a/AssortUpdater/Program.cs +++ b/AssortUpdater/Program.cs @@ -40,7 +40,7 @@ class Program AssortMerger.ListDuplicatesInMergedAssorts(flatAssorts); Assort unflattenedAssorts = AssortFlattener.UnFlatten(flatAssorts); - //JsonWriter.WriteJson(unflattenedAssorts, traderId, Directory.GetCurrentDirectory(), "assort"); + JsonWriter.WriteJson(unflattenedAssorts, traderId, Directory.GetCurrentDirectory(), "assort"); var questAssorts = QuestHelper.CreateQuestAssortsList(trader.Key, traderQuestAssortUnlocks, flatAssorts); LogQuestUnlocks(questAssorts, unflattenedAssorts); diff --git a/AssortValidator.Common/Helpers/QuestAssortMappingHelper.cs b/AssortValidator.Common/Helpers/QuestAssortMappingHelper.cs index 3149f79..abc41e2 100644 --- a/AssortValidator.Common/Helpers/QuestAssortMappingHelper.cs +++ b/AssortValidator.Common/Helpers/QuestAssortMappingHelper.cs @@ -42,6 +42,15 @@ namespace AssortValidator.Common.Helpers new QuestAssortMapping { QuestType = QuestEnum.Bullshit, ItemTplId = "606587252535c57a13424cfd", Trader = Trader.Skier, Level = 3, IsMoneyBarter = true }} //mutant mk47 }, + { + "5d25e4ca86f77409dd5cdf2c", + new List + { new QuestAssortMapping { QuestType= QuestEnum.HuntingTrip, ItemTplId= "5bfea6e90db834001b7347f3", Level = 3, IsMoneyBarter = true, Trader= Trader.Jaeger, SubItemCount = 4}, + new QuestAssortMapping { QuestType= QuestEnum.HuntingTrip, ItemTplId= "5bfea6e90db834001b7347f3", Level = 3, IsMoneyBarter = true, Trader= Trader.Jaeger, SubItemCount = 5}, + new QuestAssortMapping { QuestType= QuestEnum.HuntingTrip, ItemTplId= "5bfea6e90db834001b7347f3", Level = 4, IsMoneyBarter = true, Trader= Trader.Jaeger, SubItemCount = 10}, + new QuestAssortMapping { QuestType= QuestEnum.HuntingTrip, ItemTplId= "5bfea6e90db834001b7347f3", Level = 4, IsMoneyBarter = true, Trader= Trader.Jaeger, SubItemCount = 13}, + } + } }; @@ -60,6 +69,6 @@ namespace AssortValidator.Common.Helpers public int Level { get; set; } public CurrencyEnum? CurrencyTypeId { get; set; } - public int SubItemCount { get; set; } + public int? SubItemCount { get; set; } } } diff --git a/AssortValidator.Common/Helpers/QuestHelper.cs b/AssortValidator.Common/Helpers/QuestHelper.cs index ee28d55..d4a54fe 100644 --- a/AssortValidator.Common/Helpers/QuestHelper.cs +++ b/AssortValidator.Common/Helpers/QuestHelper.cs @@ -335,7 +335,6 @@ namespace AssortValidator.Common.Helpers if (associatedAssort is null || !associatedAssort.Any()) { - //throw new System.Exception($"no assort found for quest {questAssortUnlock.QuestName}"); result.success.Add($"MISSING{count}", questAssortUnlock.QuestId); count++; continue; @@ -348,14 +347,14 @@ namespace AssortValidator.Common.Helpers continue; } - // multiple found, time to use hand-made data from QuestAssortMappingHelper + // multiple found, use hand-made data from QuestAssortMappingHelper if (associatedAssort.Count() > 1) { var matchingAssort = GetMatchingAssortUsingManualMapping(trader, associatedAssort, questAssortUnlock); if (matchingAssort.Count == 1) { - result.success.Add(associatedAssort.FirstOrDefault().AssortId, questAssortUnlock.QuestId); + result.success.Add(matchingAssort.Single().AssortId, questAssortUnlock.QuestId); continue; } @@ -375,13 +374,31 @@ namespace AssortValidator.Common.Helpers private static List GetMatchingAssortUsingManualMapping(Trader trader, IEnumerable possibleAssorts, QuestAssortUnlock questToFindAssortFor) { var results = new List(); + List manualAssortMappings = QuestAssortMappingHelper.GetQuestAssortMappingDetails(questToFindAssortFor.QuestId); - var singleMapping = manualAssortMappings.Single(x => x.Trader == trader && x.ItemTplId == questToFindAssortFor.AssortTemplateId && x.Level == questToFindAssortFor.LoyaltyLevel); + var mappings = manualAssortMappings.Where(x => x.Trader == trader + && x.ItemTplId == questToFindAssortFor.AssortTemplateId + && x.Level == questToFindAssortFor.LoyaltyLevel).ToList(); + QuestAssortMapping singleMapping; + if (mappings.Count != 1) + { + // last resort, find by sub item count + singleMapping = mappings.Single(x => (x.SubItemCount ?? 0) == questToFindAssortFor.AssortItems.Count - 1); + } + else + { + singleMapping = mappings[0]; + } + results = possibleAssorts.Where(x => x.IsMoney == singleMapping.IsMoneyBarter && trader == singleMapping.Trader && x.Level == singleMapping.Level - && x.RawItem._tpl == singleMapping.ItemTplId - ).ToList(); + && x.RawItem._tpl == singleMapping.ItemTplId).ToList(); + + if (results.Any(x => x.AssortId == "61e0a291033bdc459438c2b7")) + { + var x = 2; + } if (results.Count > 1) {