Updated example

This commit is contained in:
Chomp
2025-02-10 21:12:20 +00:00
parent da75cb842b
commit 0123675254
7 changed files with 205 additions and 193 deletions
@@ -15,12 +15,12 @@ namespace _13._1AddTraderWithDynamicAssorts
* @param refreshTimeSecondsMin How many seconds between trader stock refresh min time
* @param refreshTimeSecondsMax How many seconds between trader stock refresh max time
*/
public void SetTraderUpdateTime(TraderConfig traderConfig, dynamic baseJson, int refreshTimeSecondsMin, int refreshTimeSecondsMax)
public void SetTraderUpdateTime(TraderConfig traderConfig, TraderBase baseJson, int refreshTimeSecondsMin, int refreshTimeSecondsMax)
{
// Add refresh time in seconds to config
var traderRefreshRecord = new UpdateTime
{
TraderId = baseJson.id,
TraderId = baseJson.Id,
Seconds = new MinMax<int>(refreshTimeSecondsMin, refreshTimeSecondsMax)
};
@@ -34,7 +34,7 @@ namespace _13._1AddTraderWithDynamicAssorts
* @param tables database
* @param jsonUtil json utility class
*/
public void AddTraderToDb(dynamic traderDetailsToAdd, DatabaseTables tables, JsonUtil jsonUtil, object assortJson)
public void AddTraderToDb(TraderBase traderDetailsToAdd, DatabaseTables tables, JsonUtil jsonUtil, object assortJson)
{
// Create trader data ready to add to database
var traderDataToAdd = new Trader
@@ -54,7 +54,7 @@ namespace _13._1AddTraderWithDynamicAssorts
};
// Add trader to trader table, key is the traders id
tables.Traders.Add(traderDetailsToAdd._id, traderDataToAdd);
tables.Traders.Add(traderDetailsToAdd.Id, traderDataToAdd);
}
/**
@@ -67,17 +67,17 @@ namespace _13._1AddTraderWithDynamicAssorts
* @param location Location of trader (e.g. "Here in the cat shop")
* @param description Description of trader
*/
public void AddTraderToLocales(dynamic baseJson, DatabaseTables tables, string fullName, string firstName, string nickName, string location, string description)
public void AddTraderToLocales(TraderBase baseJson, DatabaseTables tables, string fullName, string firstName, string nickName, string location, string description)
{
// For each language, add locale for the new trader
var locales = tables.Locales.Global;
foreach (var (key, value) in locales) {
value.Value[$"{baseJson._id} FullName"] = fullName;
value.Value[$"{baseJson._id} FirstName"] = firstName;
value.Value[$"{baseJson._id} Nickname"] = nickName;
value.Value[$"{baseJson._id} Location"] = location;
value.Value[$"{baseJson._id} Description"] = description;
value.Value[$"{baseJson.Id} FullName"] = fullName;
value.Value[$"{baseJson.Id} FirstName"] = firstName;
value.Value[$"{baseJson.Id} Nickname"] = nickName;
value.Value[$"{baseJson.Id} Location"] = location;
value.Value[$"{baseJson.Id} Description"] = description;
}
}
@@ -89,7 +89,7 @@ namespace _13._1AddTraderWithDynamicAssorts
// Add the base first
glock.Add(new Item { // Add the base weapon first
Id =
NewItemIds.GLOCK_BASE, // Ids matter, MUST BE UNIQUE See mod.ts for more details
NewItemIds.GLOCK_BASE, // Ids matter, MUST BE UNIQUE
Template =
"5a7ae0c351dfba0017554310", // This is the weapons tpl, found on: https://db.sp-tarkov.com/search
});
@@ -7,119 +7,130 @@ using Core.Routers;
using Core.Servers;
using Core.Services;
using Core.Utils;
using SptCommon.Annotations;
namespace _13._1AddTraderWithDynamicAssorts
namespace _13._1AddTraderWithDynamicAssorts;
[Injectable]
public class AddTraderWithDynamicAssorts : IPostDBLoadMod
{
public class AddTraderWithDynamicAssorts : IPostDBLoadMod
private readonly ISptLogger<AddTraderWithDynamicAssorts> _logger;
private readonly HashUtil _hashUtil;
private readonly JsonUtil _jsonUtil;
private readonly FileUtil _fileUtil;
private readonly DatabaseService _databaseService;
private readonly ImageRouter _imageRouter;
private readonly ConfigServer _configServer;
private readonly TraderConfig _traderConfig;
private readonly RagfairConfig _ragfairConfig;
// This MUST match the folder name of the mod in the user/mods folder
private const string _modName = "13.1AddTraderWithDynamicAssorts";
public AddTraderWithDynamicAssorts(
ISptLogger<AddTraderWithDynamicAssorts> logger,
HashUtil hashUtil,
JsonUtil jsonUtil,
FileUtil fileUtil,
DatabaseService databaseService,
ImageRouter imageRouter,
ConfigServer configServer)
{
private readonly ISptLogger<AddTraderWithDynamicAssorts> _logger;
private readonly HashUtil _hashUtil;
private readonly JsonUtil _jsonUtil;
private readonly FileUtil _fileUtil;
private readonly DatabaseService _databaseService;
private readonly ImageRouter _imageRouter;
private readonly ConfigServer _configServer;
private readonly TraderConfig _traderConfig;
private readonly RagfairConfig _ragfairConfig;
_logger = logger;
_hashUtil = hashUtil;
_jsonUtil = jsonUtil;
_fileUtil = fileUtil;
_databaseService = databaseService;
_imageRouter = imageRouter;
_configServer = configServer;
public AddTraderWithDynamicAssorts(
ISptLogger<AddTraderWithDynamicAssorts> logger,
HashUtil hashUtil,
JsonUtil jsonUtil,
FileUtil fileUtil,
DatabaseService databaseService,
ImageRouter imageRouter,
ConfigServer configServer)
{
_logger = logger;
_hashUtil = hashUtil;
_jsonUtil = jsonUtil;
_fileUtil = fileUtil;
_databaseService = databaseService;
_imageRouter = imageRouter;
_configServer = configServer;
_traderConfig = _configServer.GetConfig<TraderConfig>();
_ragfairConfig = _configServer.GetConfig<RagfairConfig>();
}
public void PostDBLoad()
{
var traderImagePath = "./db/cat.jpg";
var baseJson = _fileUtil.ReadFile("./db/base.json");
var traderBase = _jsonUtil.Deserialize<TraderBase>(baseJson);
// Create helper class and use it to register our traders image/icon + set its stock refresh time
var addTraderHelper = new AddTraderHelper();
_imageRouter.AddRoute(traderBase.Avatar.Replace(".jpg", ""), System.IO.Path.GetFullPath(traderImagePath));
addTraderHelper.SetTraderUpdateTime(_traderConfig, traderBase, 3600, 4000);
// Add trader to flea market
_ragfairConfig.Traders[traderBase.Id] = true;
// Get a reference to the database tables
var tables = _databaseService.GetTables();
var fluentAssortCreator = new FluentTraderAssortCreator(_logger, _hashUtil);
// Add milk
var milkAssort = fluentAssortCreator
.CreateSingleAssortItem(ItemTpl.DRINK_PACK_OF_MILK)
.AddStackCount(200)
.AddBuyRestriction(10)
.AddMoneyCost(Money.ROUBLES, 2000)
.AddLoyaltyLevel(1)
.Export(tables.Traders[traderBase.Id]);
// Add 3x bitcoin + salewa for milk barter
fluentAssortCreator
.CreateSingleAssortItem(ItemTpl.DRINK_PACK_OF_MILK)
.AddStackCount(100)
.AddBarterCost(ItemTpl.BARTER_PHYSICAL_BITCOIN, 3)
.AddBarterCost(ItemTpl.MEDKIT_SALEWA_FIRST_AID_KIT, 1)
.AddLoyaltyLevel(1)
.Export(tables.Traders[traderBase.Id]);
// Add glock as a money purchase
fluentAssortCreator
.CreateComplexAssortItem(addTraderHelper.CreateGlock())
.AddUnlimitedStackCount()
.AddMoneyCost(Money.ROUBLES, 20000)
.AddBuyRestriction(3)
.AddLoyaltyLevel(1)
.Export(tables.Traders[traderBase.Id]);
// Add mp133 preset as a barter for mayonase
fluentAssortCreator
.CreateComplexAssortItem(tables.Globals.ItemPresets["584148f2245977598f1ad387"].Items) // Weapon preset id comes from globals.json
.AddStackCount(200)
.AddBarterCost(ItemTpl.FOOD_JAR_OF_DEVILDOG_MAYO, 1)
.AddBuyRestriction(3)
.AddLoyaltyLevel(1)
.Export(tables.Traders[traderBase.Id]);
addTraderHelper.AddTraderToLocales(
baseJson,
_databaseService.GetTables(),
traderBase.Name,
"Cat",
traderBase.Nickname,
traderBase.Location,
"This is the cat shop. Meow.");
}
_traderConfig = _configServer.GetConfig<TraderConfig>();
_ragfairConfig = _configServer.GetConfig<RagfairConfig>();
}
public static class NewItemIds
public void PostDBLoad()
{
public static string GLOCK_BASE = "66eeef3b2a166b73d2066a74";
public static string GLOCK_BARREL = "66eeef3b2a166b73d2066a75";
public static string GLOCK_RECIEVER = "66eeef3b2a166b73d2066a76";
public static string GLOCK_COMPENSATOR = "66eeef3b2a166b73d2066a77";
public static string GLOCK_PISTOL_GRIP = "66eeef3b2a166b73d2066a78";
public static string GLOCK_REAR_SIGHT = "66eeef3b2a166b73d2066a79";
public static string GLOCK_FRONT_SIGHT = "66eeef3b2a166b73d2066a7a";
public static string GLOCK_MAGAZINE = "66eeef3b2a166b73d2066a7b";
var modPath = _fileUtil.GetModPath(_modName);
var traderImagePath = $"{modPath}/db/cat.jpg";
var baseJson = _fileUtil.ReadFile($"{modPath}/db/base.json");
var traderBase = _jsonUtil.Deserialize<TraderBase>(baseJson);
// Create helper class and use it to register our traders image/icon + set its stock refresh time
var addTraderHelper = new AddTraderHelper();
_imageRouter.AddRoute(traderBase.Avatar.Replace(".jpg", ""), System.IO.Path.GetFullPath(traderImagePath));
addTraderHelper.SetTraderUpdateTime(_traderConfig, traderBase, 3600, 4000);
// Add trader to flea market
_ragfairConfig.Traders[traderBase.Id] = true;
// Get a reference to the database tables
var tables = _databaseService.GetTables();
addTraderHelper.AddTraderToDb(
traderBase,
_databaseService.GetTables(),
_jsonUtil,
new TraderAssort() {Items = new List<Item>(), BarterScheme = new Dictionary<string, List<List<BarterScheme>>>(), LoyalLevelItems = new Dictionary<string, int>()});
_logger.Success("added trader base");
var fluentAssortCreator = new FluentTraderAssortCreator(_logger, _hashUtil);
// Add milk
fluentAssortCreator
.CreateSingleAssortItem(ItemTpl.DRINK_PACK_OF_MILK)
.AddStackCount(200)
.AddBuyRestriction(10)
.AddMoneyCost(Money.ROUBLES, 2000)
.AddLoyaltyLevel(1)
.Export(tables.Traders[traderBase.Id]);
// Add 3x bitcoin + salewa for milk barter
fluentAssortCreator
.CreateSingleAssortItem(ItemTpl.DRINK_PACK_OF_MILK)
.AddStackCount(100)
.AddBarterCost(ItemTpl.BARTER_PHYSICAL_BITCOIN, 3)
.AddBarterCost(ItemTpl.MEDKIT_SALEWA_FIRST_AID_KIT, 1)
.AddLoyaltyLevel(1)
.Export(tables.Traders[traderBase.Id]);
// Add glock as a money purchase
fluentAssortCreator
.CreateComplexAssortItem(addTraderHelper.CreateGlock())
.AddUnlimitedStackCount()
.AddMoneyCost(Money.ROUBLES, 20000)
.AddBuyRestriction(3)
.AddLoyaltyLevel(1)
.Export(tables.Traders[traderBase.Id]);
// Add mp133 preset as a barter for mayonase
fluentAssortCreator
.CreateComplexAssortItem(tables.Globals.ItemPresets["584148f2245977598f1ad387"].Items) // Weapon preset id comes from globals.json
.AddStackCount(200)
.AddBarterCost(ItemTpl.FOOD_JAR_OF_DEVILDOG_MAYO, 1)
.AddBuyRestriction(3)
.AddLoyaltyLevel(1)
.Export(tables.Traders[traderBase.Id]);
addTraderHelper.AddTraderToLocales(
traderBase,
_databaseService.GetTables(),
traderBase.Name,
"Cat",
traderBase.Nickname,
traderBase.Location,
"This is the cat shop. Meow.");
}
}
public static class NewItemIds
{
public static string GLOCK_BASE = "66eeef3b2a166b73d2066a74";
public static string GLOCK_BARREL = "66eeef3b2a166b73d2066a75";
public static string GLOCK_RECIEVER = "66eeef3b2a166b73d2066a76";
public static string GLOCK_COMPENSATOR = "66eeef3b2a166b73d2066a77";
public static string GLOCK_PISTOL_GRIP = "66eeef3b2a166b73d2066a78";
public static string GLOCK_REAR_SIGHT = "66eeef3b2a166b73d2066a79";
public static string GLOCK_FRONT_SIGHT = "66eeef3b2a166b73d2066a7a";
public static string GLOCK_MAGAZINE = "66eeef3b2a166b73d2066a7b";
}