From 8a0e32a251bb5896bc39f3f7fb71c8ba86dab1a2 Mon Sep 17 00:00:00 2001 From: VforValens Date: Wed, 31 Aug 2022 21:27:26 -0400 Subject: [PATCH] Added ability to configure traders via configs/traders.ts for v1.5.1 --- Valens-AIO ReadMe.pdf | Bin 1762241 -> 1766968 bytes config/traders.json | 57 +++++++++++++++++++ config/ts/traders.ts | 20 +++++++ src/mod.ts | 7 +++ src/traders.ts | 124 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 208 insertions(+) create mode 100644 config/traders.json create mode 100644 config/ts/traders.ts create mode 100644 src/traders.ts diff --git a/Valens-AIO ReadMe.pdf b/Valens-AIO ReadMe.pdf index e4de668f4bb1ca1b255587f38d3d1d63ce9f11db..279cf66d130bac8e78d5b06c8b322f707e3b1de4 100644 GIT binary patch delta 10800 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 OGhieoAD_Is!v6#8<2bGW delta 6757 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 diff --git a/config/traders.json b/config/traders.json new file mode 100644 index 0000000..f198fda --- /dev/null +++ b/config/traders.json @@ -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"]} +} \ No newline at end of file diff --git a/config/ts/traders.ts b/config/ts/traders.ts new file mode 100644 index 0000000..c256892 --- /dev/null +++ b/config/ts/traders.ts @@ -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[]; +} diff --git a/src/mod.ts b/src/mod.ts index 1371353..bd78689 100644 --- a/src/mod.ts +++ b/src/mod.ts @@ -30,6 +30,8 @@ import { Quests } from "./quests"; import { Skills } from "./skills"; import { Prewipe } from "./prewipe"; 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"; class ValensAIO implements IPostDBLoadMod @@ -46,6 +48,7 @@ class ValensAIO implements IPostDBLoadMod private inRaidConfig: IInRaidConfig; private weightedRandomHelper : WeightedRandomHelper; private hideout: IHideoutConfig + private traderConfig: ITraderConfig; public postDBLoad(container: DependencyContainer): void { @@ -61,6 +64,7 @@ class ValensAIO implements IPostDBLoadMod this.inRaidConfig = this.configServer.getConfig(ConfigTypes.IN_RAID); this.insuranceConfig = this.configServer.getConfig(ConfigTypes.INSURANCE); this.hideout = this.configServer.getConfig(ConfigTypes.HIDEOUT); + this.traderConfig = this.configServer.getConfig(ConfigTypes.TRADER); //const airdrop = new Airdrop(this.logger, this.airdropConfig, this.databaseServer) //airdrop.updateAirdrops(); @@ -110,6 +114,9 @@ class ValensAIO implements IPostDBLoadMod const skills = new Skills(vLogger, this.databaseServer); skills.updateSkills(); + const traders = new Traders(vLogger, this.databaseServer, this.traderConfig); + traders.updateTraders(); + const weapons = new Weapons(vLogger, this.databaseServer); weapons.updateWeapons(); diff --git a/src/traders.ts b/src/traders.ts new file mode 100644 index 0000000..09b45d3 --- /dev/null +++ b/src/traders.ts @@ -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"); + } +} \ No newline at end of file