using AssortHelpers.Common.Helpers; using AssortHelpers.Helpers; using AssortUpdater; using AssortValidator.Common; using AssortValidator.Common.Helpers; using AssortValidator.Common.Models; class Program { static void Main(string[] args) { var inputPath = CreateWorkingFolders(); InputFileHelper.SetInputFiles(inputPath); var existingAssortData = AssortHelper.GetAssortData(); var liveAssortData = AssortHelper.GetLiveAssortData(); var questData = QuestHelper.GetQuestData("quests"); var questAssortData = QuestHelper.GetQuestAssortUnlocks(questData.Values.ToList()); foreach (var trader in liveAssortData) { var traderId = TraderHelper.GetTraderIdByName(trader.Key); var traderQuests = questData.Where(x=>x.Value.traderId == traderId); var traderAssortData = questAssortData.Where(x => x.TraderId == traderId); var liveAssortsForTrader = trader.Value; var existingAssortsForTrader = existingAssortData[trader.Key]; var flattenedLiveAssorts = AssortFlattener.FlattenLiveAssorts(liveAssortsForTrader); var flattenedExistingAssorts = AssortFlattener.FlattenExistingAssorts(existingAssortsForTrader); //LogItemsMissingInLiveAssorts(trader.Key.ToString(), flattenedExistingAssorts, flattenedLiveAssorts); //LogItemsMissingInExistingAssorts(trader.Key.ToString(), flattenedExistingAssorts, flattenedLiveAssorts); var flatAssorts = AssortMerger.CreateMergedFlattenedAssorts(trader.Key.ToString(), flattenedLiveAssorts, flattenedExistingAssorts); Assort unflattenedAssorts = AssortFlattener.UnFlatten(flatAssorts); JsonWriter.WriteJson(unflattenedAssorts, traderId, Directory.GetCurrentDirectory(), "assort"); // generate trader specific assort quest data, write out to file var questAssorts = QuestHelper.CreateQuestAssortsList(traderAssortData); //JsonWriter.WriteJson(questAssorts, traderId, Directory.GetCurrentDirectory(), "questassort"); } } private static void LogItemsMissingInExistingAssorts(string traderName, List flattenedExistingAssorts, List flattenedLiveAssorts) { foreach (var liveAssort in flattenedLiveAssorts) { // get live assort, match by level and item tpl var existingAssort = flattenedExistingAssorts.Where(x => x.ItemId == liveAssort.ItemId && x.Level == liveAssort.Level); if (existingAssort.Count() > 1) { // we have multiple matches, lets compare by number of rewards existingAssort = flattenedExistingAssorts.Where(x => x.ItemId == liveAssort.ItemId && x.Level == liveAssort.Level && x.BarterDetails.Count == liveAssort.BarterDetails.Count && x.SubItems.Count == liveAssort.SubItems.Count && x.IsMoney == liveAssort.IsMoney); if (existingAssort is null) { LoggingHelpers.LogError($"{traderName} multiple matches found for item: {liveAssort.ItemId} {liveAssort.ItemName} Level: {liveAssort.Level}"); continue; } } if (liveAssort is null) { LoggingHelpers.LogError($"{traderName} unable to find matching live assort for item: {liveAssort.ItemId} {liveAssort.ItemName} Level: {liveAssort.Level}"); } else { LoggingHelpers.LogSuccess($"{traderName} found matching live assort for item: {liveAssort.ItemId} {liveAssort.ItemName} Level: {liveAssort.Level}"); } } } private static void LogItemsMissingInLiveAssorts(string traderName, List flattenedExistingAssorts, List flattenedLiveAssorts) { foreach (var existingAssort in flattenedExistingAssorts) { // get live assort, match by level and item tpl var liveAssort = flattenedLiveAssorts.Where(x => x.ItemId == existingAssort.ItemId && x.Level == existingAssort.Level); if (liveAssort.Count() > 1) { // we have multiple matches, lets compare by number of rewards liveAssort = flattenedLiveAssorts.Where(x => x.ItemId == existingAssort.ItemId && x.Level == existingAssort.Level && x.BarterDetails.Count == existingAssort.BarterDetails.Count && x.SubItems.Count == existingAssort.SubItems.Count && x.IsMoney == existingAssort.IsMoney); if (liveAssort.Count() > 1) { LoggingHelpers.LogError($"{traderName} multiple matches found for item: {existingAssort.ItemId} {existingAssort.ItemName} Level: {existingAssort.Level}"); continue; } } if (liveAssort is null) { LoggingHelpers.LogError($"{traderName} unable to find matching existing assort for item: {existingAssort.ItemId} {existingAssort.ItemName} Level: {existingAssort.Level}"); } else { LoggingHelpers.LogSuccess($"{traderName} found matching existing assort for item: {existingAssort.ItemId} {existingAssort.ItemName} Level: {existingAssort.Level}"); } } } private static string CreateWorkingFolders() { var workingPath = Directory.GetCurrentDirectory(); // create input folder var inputPath = $"{workingPath}//input"; DiskHelpers.CreateDirIfDoesntExist(inputPath); return inputPath; } }