From 4cb12456b4485bbbeed579d423e8205bb2d1302d Mon Sep 17 00:00:00 2001 From: Dev Date: Wed, 2 Aug 2023 20:32:57 +0100 Subject: [PATCH] Read missing questAssort prices data and insert into trader assort data --- .../Assets/missingTraderAssortPrices.json | 156 ++++++++++++++++++ .../AssortGenerator.Common.csproj | 3 + AssortGenerator.Common/Helpers/QuestHelper.cs | 22 +++ AssortGenerator/Program.cs | 49 ++++-- 4 files changed, 212 insertions(+), 18 deletions(-) create mode 100644 AssortGenerator.Common/Assets/missingTraderAssortPrices.json diff --git a/AssortGenerator.Common/Assets/missingTraderAssortPrices.json b/AssortGenerator.Common/Assets/missingTraderAssortPrices.json new file mode 100644 index 0000000..b13787b --- /dev/null +++ b/AssortGenerator.Common/Assets/missingTraderAssortPrices.json @@ -0,0 +1,156 @@ +{ + "64764dc585699632555ed176": { + "questId": "64764abcd125ab430a14ccb5", + "itemTpl": "59e0d99486f7744a32234762", + "itemUpd": { + "BuyRestrictionMax": 180, + "StackObjectsCount": 650000 + }, + "barterScheme": [ + { + "count": 1099, + "_tpl": "5449016a4bdc2d6f028b456f" + } + ] + }, + "5ac6699186f77403de1f5cf1": { + "questId": "597a0f5686f774273b74f676", + "itemTpl": "5aa7e4a4e5b5b000137b76f2", + "itemUpd": { + "BuyRestrictionMax": 3, + "StackObjectsCount": 200 + }, + "barterScheme": [ + { + "count": 35000, + "_tpl": "5449016a4bdc2d6f028b456f" + } + ] + }, + "64bf9e93f2dec80e000e69e8": { + "questId": "64b907bd55f4156df8007d14", + "itemTpl": "63a0b2eabea67a6d93009e52", + "itemUpd": { + "BuyRestrictionMax": 5, + "StackObjectsCount": 200 + }, + "barterScheme": [ + { + "count": 20000, + "_tpl": "5449016a4bdc2d6f028b456f" + } + ] + }, + "6491e72ff8040d427a3a5c26": { + "questId": "64916da7ad4e722c106f2345", + "itemTpl": "62e7e7bbe6da9612f743f1e0", + "itemUpd": { + "BuyRestrictionMax": 2, + "StackObjectsCount": 50 + }, + "barterScheme": [ + { + "count": 45607, + "_tpl": "5449016a4bdc2d6f028b456f" + } + ] + }, + "6491e749ad4e722c106f2348": { + "questId": "64916da7ad4e722c106f2345", + "itemTpl": "5656eb674bdc2d35148b457c", + "itemUpd": { + "BuyRestrictionMax": 10, + "StackObjectsCount": 60 + }, + "barterScheme": [ + { + "count": 15120, + "_tpl": "5449016a4bdc2d6f028b456f" + } + ] + }, + "6491e75a3feb0c6db85581c7": { + "questId": "64916da7ad4e722c106f2345", + "itemTpl": "6357c98711fb55120211f7e1", + "itemUpd": { + "BuyRestrictionMax": 2, + "StackObjectsCount": 15 + }, + "barterScheme": [ + { + "count": 55552, + "_tpl": "5449016a4bdc2d6f028b456f" + } + ] + }, + "6491e7730509dd09725d7066": { + "questId": "64916da7ad4e722c106f2345", + "itemTpl": "5ede475b549eed7c6d5c18fb", + "itemUpd": { + "BuyRestrictionMax": 10, + "StackObjectsCount": 60 + }, + "barterScheme": [ + { + "count": 12544, + "_tpl": "5449016a4bdc2d6f028b456f" + } + ] + }, + "62a703ea4de19a4c3422ea67": { + "questId": "", + "itemTpl": "5e85a9f4add9fe03027d9bf1", + "itemUpd": { + "BuyRestrictionMax": 10, + "StackObjectsCount": 20 + }, + "barterScheme": [ + { + "count": 3381, + "_tpl": "5449016a4bdc2d6f028b456f" + } + ] + }, + "649b182a49f5fa538c64e4fb": { + "questId": "649af47d717cb30e7e4b5e26", + "itemTpl": "5b2388675acfc4771e1be0be", + "itemUpd": { + "BuyRestrictionMax": 10, + "StackObjectsCount": 20 + }, + "barterScheme": [ + { + "count": 45000, + "_tpl": "5449016a4bdc2d6f028b456f" + } + ] + }, + "649b18300329282a376bda05": { + "questId": "649af47d717cb30e7e4b5e26", + "itemTpl": "618ba27d9008e4636a67f61d", + "itemUpd": { + "BuyRestrictionMax": 2, + "StackObjectsCount": 20 + }, + "barterScheme": [ + { + "count": 115000, + "_tpl": "5449016a4bdc2d6f028b456f" + } + ] + }, + "649b1836fb67e3338f540ce5": { + "questId": "649af47d717cb30e7e4b5e26", + "itemTpl": "5b3b99475acfc432ff4dcbee", + "itemUpd": { + "BuyRestrictionMax": 2, + "StackObjectsCount": 20 + }, + "barterScheme": [ + { + "count": 80000, + "_tpl": "5449016a4bdc2d6f028b456f" + } + ] + } +} \ No newline at end of file diff --git a/AssortGenerator.Common/AssortGenerator.Common.csproj b/AssortGenerator.Common/AssortGenerator.Common.csproj index 3b2e600..ec8f7f3 100644 --- a/AssortGenerator.Common/AssortGenerator.Common.csproj +++ b/AssortGenerator.Common/AssortGenerator.Common.csproj @@ -12,6 +12,9 @@ Always + + Always + diff --git a/AssortGenerator.Common/Helpers/QuestHelper.cs b/AssortGenerator.Common/Helpers/QuestHelper.cs index 2514593..28610a0 100644 --- a/AssortGenerator.Common/Helpers/QuestHelper.cs +++ b/AssortGenerator.Common/Helpers/QuestHelper.cs @@ -1,5 +1,6 @@ using AssortGenerator.Models.Input; using AssortGenerator.Models.Other; +using AssortGenerator.Models.Output; using System.Collections.Generic; using System.IO; using System.Linq; @@ -11,6 +12,7 @@ namespace AssortGenerator.Common.Helpers { private static QuestRoot _questData; private static List _assortUnlocks; + private static Dictionary _missingTraderQuestPrices; public static QuestRoot GetQuestData() { if (_questData == null) @@ -105,5 +107,25 @@ namespace AssortGenerator.Common.Helpers return _assortUnlocks; } + + public static Dictionary GetMissingTraderQuestPrices() + { + if (_missingTraderQuestPrices == null) + { + var questFilePath = InputFileHelper.GetInputFilePaths().FirstOrDefault(x => x.Contains("missingTraderAssortPrices")); + var questDataJson = File.ReadAllText(questFilePath); + _missingTraderQuestPrices = JsonSerializer.Deserialize>(questDataJson); + } + + return _missingTraderQuestPrices; + } + + public class MissingAssortPrice + { + public string questId { get; set; } + public string itemTpl { get; set; } + public Upd itemUpd { get; set; } + public List barterScheme { get; set; } + } } } diff --git a/AssortGenerator/Program.cs b/AssortGenerator/Program.cs index b681621..a864717 100644 --- a/AssortGenerator/Program.cs +++ b/AssortGenerator/Program.cs @@ -10,6 +10,7 @@ using System.Diagnostics; using System.IO; using System.Linq; using System.Text.Json; +using static AssortGenerator.Common.Helpers.QuestHelper; namespace AssortGenerator { @@ -23,6 +24,7 @@ namespace AssortGenerator // Get trader assort files from assorts input folder var traderAssortFilePaths = InputFileHelper.GetInputFilePaths().Where(x => TraderHelper.GetTraders().Values.Any(x.Contains)).ToList(); var finalisedQuestData = QuestHelper.GetFinalisedQuestData(); + var missingQuestAssortPrices = QuestHelper.GetMissingTraderQuestPrices(); foreach (var trader in TraderHelper.GetTraders()) { // Get relevant trader dump @@ -53,7 +55,7 @@ namespace AssortGenerator var loyaltyLevelItemsJson = data.GetProperty("loyal_level_items").ToString(); var loyaltyLevelItems = JsonSerializer.Deserialize>(loyaltyLevelItemsJson); - WriteOutputFilesForTrader(trader, items, barterSchemeItems, loyaltyLevelItems, finalisedQuestData); + WriteOutputFilesForTrader(trader, items, barterSchemeItems, loyaltyLevelItems, finalisedQuestData, missingQuestAssortPrices); } JsonWriter.WriteJson(finalisedQuestData, "", Directory.GetCurrentDirectory(), "quests"); @@ -131,7 +133,9 @@ namespace AssortGenerator List items, Dictionary>> barterSchemeItems, Dictionary loyaltyLevelItems, - Dictionary finalisedQuestData) + Dictionary finalisedQuestData, + Dictionary missingQuestAssortPrices + ) { var workingPath = Directory.GetCurrentDirectory(); @@ -150,7 +154,7 @@ namespace AssortGenerator var outputBaseFile = traderData.data.Find(x => x._id == trader.Value); QuestAssort questAssort = GenerateQuestAssortForTrader(trader.Key, outputAssortFile, out List missingQuestAssorts); - AttemptToAddMissingQuestAssorts(outputAssortFile, questAssort, missingQuestAssorts); + AttemptToAddMissingQuestAssorts(outputAssortFile, questAssort, missingQuestAssorts, missingQuestAssortPrices); JsonWriter.WriteJson(outputBaseFile, traderFolderPath, workingPath, "base"); JsonWriter.WriteJson(outputAssortFile, traderFolderPath, workingPath, "assort"); @@ -165,7 +169,7 @@ namespace AssortGenerator } } - private static void AttemptToAddMissingQuestAssorts(AssortRoot outputAssortFile, QuestAssort questAssort, List missingQuestAssorts) + private static void AttemptToAddMissingQuestAssorts(AssortRoot outputAssortFile, QuestAssort questAssort, List missingQuestAssorts, Dictionary missingQuestAssortPrices) { // iterate over each missing assort foreach (var missingQuestAssort in missingQuestAssorts) @@ -191,24 +195,33 @@ namespace AssortGenerator _tpl = missingQuestAssort.Items[0]._tpl, _id = missingQuestAssort.Items[0]._id, parentId = "hideout", - slotId = "hideout", - upd = new Upd - { - StackObjectsCount = 10 - } + slotId = "hideout" }; + + var questAssortPriceData = missingQuestAssortPrices.TryGetValue(missingQuestAssort.AssortUnlockId, out var value); + if (questAssortPriceData && value.itemTpl == missingQuestAssort.Items[0]._tpl) + { + item.upd = value.itemUpd; + } + else + { + item.upd = new Upd() { StackObjectsCount = 10 }; + } + outputAssortFile.items.Add(item); - var barterItemListInner = new List - { - // 10,000 Roubles - new BarterObject() { _tpl = "5449016a4bdc2d6f028b456f", count = 25000 } - }; - var barterItemListOuter = new List> - { - barterItemListInner - }; + var barterItemListInner = new List(); + if (questAssortPriceData && value.itemTpl == missingQuestAssort.Items[0]._tpl) + { + barterItemListInner.AddRange(value.barterScheme); + } + else + { + barterItemListInner.Add(new BarterObject() { _tpl = "5449016a4bdc2d6f028b456f", count = 25000 }); + } + + var barterItemListOuter = new List> { barterItemListInner }; outputAssortFile.barter_scheme.Add(missingQuestAssort.Items[0]._id, barterItemListOuter); outputAssortFile.loyal_level_items[missingQuestAssort.Items[0]._id] = missingQuestAssort.LoyaltyLevel;