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;