initial commit
This commit is contained in:
commit
efe77e33a1
12
config/config.json
Normal file
12
config/config.json
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"traders": [
|
||||
{
|
||||
"name": "lotus",
|
||||
"discount": 0
|
||||
},
|
||||
{
|
||||
"name": "scorpion",
|
||||
"discount": 0
|
||||
}
|
||||
]
|
||||
}
|
26
package.json
Normal file
26
package.json
Normal file
@ -0,0 +1,26 @@
|
||||
{
|
||||
"name": "average custom traders price",
|
||||
"version": "0.0.3",
|
||||
"main": "src/mod.js",
|
||||
"license": "MIT",
|
||||
"author": "robinxb",
|
||||
"sptVersion": "~3.9",
|
||||
"scripts": {
|
||||
"setup": "npm i",
|
||||
"build": "node ./build.mjs",
|
||||
"buildinfo": "node ./build.mjs --verbose"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "20.11",
|
||||
"@typescript-eslint/eslint-plugin": "7.2",
|
||||
"@typescript-eslint/parser": "7.2",
|
||||
"archiver": "^6.0",
|
||||
"eslint": "8.57",
|
||||
"fs-extra": "11.2",
|
||||
"ignore": "^5.2",
|
||||
"os": "^0.1",
|
||||
"tsyringe": "4.8.0",
|
||||
"typescript": "5.4",
|
||||
"winston": "3.12"
|
||||
}
|
||||
}
|
76
src/mod.ts
Normal file
76
src/mod.ts
Normal file
@ -0,0 +1,76 @@
|
||||
import type { DependencyContainer } from "tsyringe";
|
||||
import { DatabaseServer } from "@spt/servers/DatabaseServer";
|
||||
import type { IPostDBLoadMod } from "@spt/models/external/IPostDBLoadMod";
|
||||
import type { IDatabaseTables } from "@spt/models/spt/server/IDatabaseTables";
|
||||
import type { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
const modConfig = require("../config/config.json");
|
||||
|
||||
const traderIds = [
|
||||
"54cb50c76803fa8b248b4571", // Prapor
|
||||
"54cb57776803fa99248b456e", // Therapist
|
||||
"58330581ace78e27b8b10cee", // Fence
|
||||
"5935c25fb3acc3127c3d8cd9", // Skier
|
||||
"5a7c2eca46aef81a7ca2145d", // Peacekeeper
|
||||
"5ac3b934156ae10c4430e83c", // Mechanic
|
||||
"5c0647fdd443bc2504c2d371" // Ragman
|
||||
];
|
||||
|
||||
class Mod implements IPostDBLoadMod {
|
||||
private tables: IDatabaseTables;
|
||||
private logger: ILogger;
|
||||
|
||||
private calculateAndPrintAverages() {
|
||||
const averages = [];
|
||||
const loyaltyLevels = Object.keys(this.tables.traders[traderIds[0]].base.loyaltyLevels);
|
||||
|
||||
this.logger.log("[ACTP] Average Custom Trader Prices starting to apply trader changes...", "yellow");
|
||||
|
||||
loyaltyLevels.forEach(ll => {
|
||||
let accumCoef = 0;
|
||||
traderIds.forEach(id => {
|
||||
const buyPriceCoef = this.tables.traders[id].base.loyaltyLevels[ll].buy_price_coef;
|
||||
accumCoef += buyPriceCoef;
|
||||
});
|
||||
const avg = Math.round(accumCoef / traderIds.length);
|
||||
averages[ll] = avg;
|
||||
});
|
||||
|
||||
this.logger.log(`[ACTP] Averages: ${loyaltyLevels.map(ll => `LL${parseInt(ll) + 1} - ${averages[ll]}`).join(' | ')}`, "white");
|
||||
|
||||
return averages;
|
||||
}
|
||||
|
||||
private applyTradersChange(averages: number[]) {
|
||||
for (let i in modConfig['traders']) {
|
||||
const traderConfig = modConfig['traders'][i];
|
||||
const name = traderConfig.name;
|
||||
const discount = traderConfig.discount || 0;
|
||||
const finalValues = [];
|
||||
|
||||
if (this.tables.traders[name]) {
|
||||
for (let ll in this.tables.traders[name].base.loyaltyLevels) {
|
||||
let avg = averages[ll];
|
||||
avg += avg * (discount / 100);
|
||||
const finalValue = Math.floor(avg);
|
||||
this.tables.traders[name].base.loyaltyLevels[ll].buy_price_coef = finalValue;
|
||||
finalValues.push(`LL${parseInt(ll) + 1} - ${finalValue}`);
|
||||
}
|
||||
this.logger.log(`[ACTP] Changed trader ${name} with discount ${discount}%: ${finalValues.join(' | ')}`, "white");
|
||||
} else {
|
||||
this.logger.log(`[ACTP] Trader ${name} not found in database.`, "red");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
postDBLoad(container: DependencyContainer): void {
|
||||
this.logger = container.resolve<ILogger>("WinstonLogger");
|
||||
this.tables = container.resolve<DatabaseServer>("DatabaseServer").getTables();
|
||||
|
||||
const averages = this.calculateAndPrintAverages();
|
||||
this.applyTradersChange(averages);
|
||||
|
||||
this.logger.log("[ACTP] Finished applying trader changes.", "yellow");
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { mod: new Mod() };
|
Loading…
x
Reference in New Issue
Block a user