Added ability to configure traders via configs/traders.ts for v1.5.1

This commit is contained in:
VforValens 2022-08-31 21:27:26 -04:00
parent 3d56c6119c
commit 8a0e32a251
5 changed files with 208 additions and 0 deletions

Binary file not shown.

57
config/traders.json Normal file
View File

@ -0,0 +1,57 @@
{
"updateTime": [
{
"traderId": "54cb50c76803fa8b248b4571",
"seconds": 3600
},
{
"traderId": "54cb57776803fa99248b456e",
"seconds": 3600
},
{
"traderId": "579dc571d53a0658a154fbec",
"seconds": 3600
},
{
"traderId": "58330581ace78e27b8b10cee",
"seconds": 3600
},
{
"traderId": "5935c25fb3acc3127c3d8cd9",
"seconds": 3600
},
{
"traderId": "5a7c2eca46aef81a7ca2145d",
"seconds": 3600
},
{
"traderId": "5ac3b934156ae10c4430e83c",
"seconds": 3600
},
{
"traderId": "5c0647fdd443bc2504c2d371",
"seconds": 3600
},
{
"traderId": "ragfair",
"seconds": 3600
}
],
"traderPriceMultipler": 1,
"minDurabilityForSale": 60,
"fence": {
"partialRefreshTimeSeconds": 240,
"partialRefreshChangePercent": 15,
"assortSize": 100,
"maxPresetsPercent": 5,
"presetPriceMult": 2.5,
"blacklist": [
"5661632d4bdc2d903d8b456b",
"543be5e94bdc2df1348b4568",
"543be6674bdc2df1348b4569",
"5448bf274bdc2dfc2f8b456a",
"543be5664bdc2dd4348b4569",
"5447bedf4bdc2d87278b4568"]}
}

20
config/ts/traders.ts Normal file
View File

@ -0,0 +1,20 @@
export interface TradersConfig {
updateTime: UpdateTime[];
traderPriceMultipler: number;
minDurabilityForSale: number;
fence: FenceConfig;
}
export interface UpdateTime {
traderId: string;
seconds: number;
}
export interface FenceConfig {
partialRefreshTimeSeconds: number;
partialRefreshChangePercent: number;
assortSize: number;
maxPresetsPercent: number;
presetPriceMult: number;
blacklist: string[];
}

View File

@ -30,6 +30,8 @@ import { Quests } from "./quests";
import { Skills } from "./skills"; import { Skills } from "./skills";
import { Prewipe } from "./prewipe"; import { Prewipe } from "./prewipe";
import { IHideoutConfig } from "@spt-aki/models/spt/config/IHideoutConfig"; import { IHideoutConfig } from "@spt-aki/models/spt/config/IHideoutConfig";
import { Traders } from "./traders";
import { ITraderConfig } from "@spt-aki/models/spt/config/ITraderConfig";
//import { Airdrop } from "./airdrop"; //import { Airdrop } from "./airdrop";
class ValensAIO implements IPostDBLoadMod class ValensAIO implements IPostDBLoadMod
@ -46,6 +48,7 @@ class ValensAIO implements IPostDBLoadMod
private inRaidConfig: IInRaidConfig; private inRaidConfig: IInRaidConfig;
private weightedRandomHelper : WeightedRandomHelper; private weightedRandomHelper : WeightedRandomHelper;
private hideout: IHideoutConfig private hideout: IHideoutConfig
private traderConfig: ITraderConfig;
public postDBLoad(container: DependencyContainer): void public postDBLoad(container: DependencyContainer): void
{ {
@ -61,6 +64,7 @@ class ValensAIO implements IPostDBLoadMod
this.inRaidConfig = this.configServer.getConfig<IInRaidConfig>(ConfigTypes.IN_RAID); this.inRaidConfig = this.configServer.getConfig<IInRaidConfig>(ConfigTypes.IN_RAID);
this.insuranceConfig = this.configServer.getConfig<IInsuranceConfig>(ConfigTypes.INSURANCE); this.insuranceConfig = this.configServer.getConfig<IInsuranceConfig>(ConfigTypes.INSURANCE);
this.hideout = this.configServer.getConfig<IHideoutConfig>(ConfigTypes.HIDEOUT); this.hideout = this.configServer.getConfig<IHideoutConfig>(ConfigTypes.HIDEOUT);
this.traderConfig = this.configServer.getConfig<ITraderConfig>(ConfigTypes.TRADER);
//const airdrop = new Airdrop(this.logger, this.airdropConfig, this.databaseServer) //const airdrop = new Airdrop(this.logger, this.airdropConfig, this.databaseServer)
//airdrop.updateAirdrops(); //airdrop.updateAirdrops();
@ -110,6 +114,9 @@ class ValensAIO implements IPostDBLoadMod
const skills = new Skills(vLogger, this.databaseServer); const skills = new Skills(vLogger, this.databaseServer);
skills.updateSkills(); skills.updateSkills();
const traders = new Traders(vLogger, this.databaseServer, this.traderConfig);
traders.updateTraders();
const weapons = new Weapons(vLogger, this.databaseServer); const weapons = new Weapons(vLogger, this.databaseServer);
weapons.updateWeapons(); weapons.updateWeapons();

124
src/traders.ts Normal file
View File

@ -0,0 +1,124 @@
import { ITraderConfig } from "@spt-aki/models/spt/config/ITraderConfig";
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { TradersConfig } from "config/ts/traders";
import { Logger } from "./logger";
export class Traders
{
private modConfig: TradersConfig = require("../config/traders.json")
private logger: Logger;
private databaseServer: DatabaseServer;
private traderConfig: ITraderConfig;
constructor(logger:Logger, databaseServer: DatabaseServer, traderConfig: ITraderConfig)
{
this.logger = logger;
this.databaseServer = databaseServer;
this.traderConfig = traderConfig;
}
public updateTraders(): void
{
const mod = this.modConfig;
if (mod.updateTime != [
{
"traderId": "54cb50c76803fa8b248b4571",
"seconds": 3600
},
{
"traderId": "54cb57776803fa99248b456e",
"seconds": 3600
},
{
"traderId": "579dc571d53a0658a154fbec",
"seconds": 3600
},
{
"traderId": "58330581ace78e27b8b10cee",
"seconds": 3600
},
{
"traderId": "5935c25fb3acc3127c3d8cd9",
"seconds": 3600
},
{
"traderId": "5a7c2eca46aef81a7ca2145d",
"seconds": 3600
},
{
"traderId": "5ac3b934156ae10c4430e83c",
"seconds": 3600
},
{
"traderId": "5c0647fdd443bc2504c2d371",
"seconds": 3600
},
{
"traderId": "ragfair",
"seconds": 3600
}
])
{
this.updateTime();
}
if (mod.traderPriceMultipler != 1)
{
this.traderPriceMultiplier();
}
if (mod.minDurabilityForSale != 60)
{
this.minDurabilityForSale();
}
if (mod.fence.partialRefreshTimeSeconds != 240 || mod.fence.partialRefreshChangePercent != 15 || mod.fence.assortSize != 100 || mod.fence.maxPresetsPercent != 5 || mod.fence.presetPriceMult != 2.5 || mod.fence.blacklist != [
"5661632d4bdc2d903d8b456b",
"543be5e94bdc2df1348b4568",
"543be6674bdc2df1348b4569",
"5448bf274bdc2dfc2f8b456a",
"543be5664bdc2dd4348b4569",
"5447bedf4bdc2d87278b4568"])
{
this.updateFence();
}
}
private updateTime(): void
{
const mod = this.modConfig;
const trader = this.traderConfig;
trader.updateTime = mod.updateTime;
this.logger.info(`Update Time Set to ${mod.updateTime}`);
}
private traderPriceMultiplier(): void
{
const mod = this.modConfig;
const trader = this.traderConfig;
trader.traderPriceMultipler = mod.traderPriceMultipler;
this.logger.info(`Trader Price Multiplier Set to ${mod.traderPriceMultipler}`);
}
private minDurabilityForSale(): void
{
const mod = this.modConfig;
const trader = this.traderConfig;
trader.minDurabilityForSale = mod.minDurabilityForSale;
this.logger.info(`Min Durability For Sale Set to ${mod.minDurabilityForSale}`);
}
private updateFence(): void
{
const mod = this.modConfig.fence;
const trader = this.traderConfig.fence;
trader.partialRefreshTimeSeconds = mod.partialRefreshTimeSeconds;
trader.partialRefreshChangePercent = mod.partialRefreshChangePercent;
trader.assortSize = mod.assortSize;
trader.maxPresetsPercent = mod.maxPresetsPercent;
trader.presetPriceMult = mod.presetPriceMult;
trader.blacklist = mod.blacklist;
this.logger.info("Fence Has Been Patched");
}
}