diff --git a/Valens-AIO ReadMe.pdf b/Valens-AIO ReadMe.pdf index e4de668..279cf66 100644 Binary files a/Valens-AIO ReadMe.pdf and b/Valens-AIO ReadMe.pdf differ 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