Replaced magic strings with use of ItemTpl enum

This commit is contained in:
Dev 2024-07-29 10:19:02 +01:00
parent 3099403181
commit 530aad88b9
2 changed files with 46 additions and 57 deletions

View File

@ -21,9 +21,9 @@ import * as baseJson from "../db/base.json";
import { TraderHelper } from "./traderHelpers";
import { FluentAssortConstructor as FluentAssortCreator } from "./fluentTraderAssortCreator";
import { ItemTpl } from "@spt/models/enums/ItemTpl";
class SampleTrader implements IPreSptLoadMod, IPostDBLoadMod
{
class SampleTrader implements IPreSptLoadMod, IPostDBLoadMod {
private mod: string;
private logger: ILogger;
private traderHelper: TraderHelper;
@ -37,8 +37,7 @@ class SampleTrader implements IPreSptLoadMod, IPostDBLoadMod
* Some work needs to be done prior to SPT code being loaded, registering the profile image + setting trader update time inside the trader config json
* @param container Dependency container
*/
public preSptLoad(container: DependencyContainer): void
{
public preSptLoad(container: DependencyContainer): void {
// Get a logger
this.logger = container.resolve<ILogger>("WinstonLogger");
this.logger.debug(`[${this.mod}] preSpt Loading... `);
@ -70,8 +69,7 @@ class SampleTrader implements IPreSptLoadMod, IPostDBLoadMod
* Majority of trader-related work occurs after the aki database has been loaded but prior to SPT code being run
* @param container Dependency container
*/
public postDBLoad(container: DependencyContainer): void
{
public postDBLoad(container: DependencyContainer): void {
this.logger.debug(`[${this.mod}] postDb Loading... `);
// Resolve SPT classes we'll use
@ -86,9 +84,9 @@ class SampleTrader implements IPreSptLoadMod, IPostDBLoadMod
this.traderHelper.addTraderToDb(baseJson, tables, jsonUtil);
// Add milk
const MILK_ID = "575146b724597720a27126d5"; // Can find item ids in `database\templates\items.json` or with https://db.sp-tarkov.com/search
this.fluentAssortCreator
.createSingleAssortItem(MILK_ID)
.createSingleAssortItem(ItemTpl.DRINK_PACK_OF_MILK)
.addStackCount(200)
.addBuyRestriction(10)
.addMoneyCost(Money.ROUBLES, 2000)
@ -96,13 +94,11 @@ class SampleTrader implements IPreSptLoadMod, IPostDBLoadMod
.export(tables.traders[baseJson._id]);
// Add 3x bitcoin + salewa for milk barter
const BITCOIN_ID = "59faff1d86f7746c51718c9c";
const SALEWA_ID = "544fb45d4bdc2dee738b4568";
this.fluentAssortCreator
.createSingleAssortItem(MILK_ID)
.createSingleAssortItem(ItemTpl.DRINK_PACK_OF_MILK)
.addStackCount(100)
.addBarterCost(BITCOIN_ID, 3)
.addBarterCost(SALEWA_ID, 1)
.addBarterCost(ItemTpl.BARTER_PHYSICAL_BITCOIN, 3)
.addBarterCost(ItemTpl.MEDKIT_SALEWA_FIRST_AID_KIT, 1)
.addLoyaltyLevel(1)
.export(tables.traders[baseJson._id]);
@ -118,9 +114,9 @@ class SampleTrader implements IPreSptLoadMod, IPostDBLoadMod
// Add mp133 preset as mayo barter
this.fluentAssortCreator
.createComplexAssortItem(tables.globals.ItemPresets["584148f2245977598f1ad387"]._items)
.createComplexAssortItem(tables.globals.ItemPresets["584148f2245977598f1ad387"]._items) // Weapon preset id comes from globals.json
.addStackCount(200)
.addBarterCost("5bc9b156d4351e00367fbce9", 1)
.addBarterCost(ItemTpl.FOOD_JAR_OF_DEVILDOG_MAYO, 1)
.addBuyRestriction(3)
.addLoyaltyLevel(1)
.export(tables.traders[baseJson._id]);

View File

@ -6,8 +6,7 @@ import { IDatabaseTables } from "@spt/models/spt/server/IDatabaseTables";
import { ImageRouter } from "@spt/routers/ImageRouter";
import { JsonUtil } from "@spt/utils/JsonUtil";
export class TraderHelper
{
export class TraderHelper {
/**
* Add profile picture to our trader
* @param baseJson json file for trader (db/base.json)
@ -16,8 +15,7 @@ export class TraderHelper
* @param imageRouter image router class - used to register the trader image path so we see their image on trader page
* @param traderImageName Filename of the trader icon to use
*/
public registerProfileImage(baseJson: any, modName: string, preSptModLoader: PreSptModLoader, imageRouter: ImageRouter, traderImageName: string): void
{
public registerProfileImage(baseJson: any, modName: string, preSptModLoader: PreSptModLoader, imageRouter: ImageRouter, traderImageName: string): void {
// Reference the mod "res" folder
const imageFilepath = `./${preSptModLoader.getModPath(modName)}res`;
@ -32,8 +30,7 @@ export class TraderHelper
* @param refreshTimeSecondsMin How many seconds between trader stock refresh min time
* @param refreshTimeSecondsMax How many seconds between trader stock refresh max time
*/
public setTraderUpdateTime(traderConfig: ITraderConfig, baseJson: any, refreshTimeSecondsMin: number, refreshTimeSecondsMax: number): void
{
public setTraderUpdateTime(traderConfig: ITraderConfig, baseJson: any, refreshTimeSecondsMin: number, refreshTimeSecondsMax: number): void {
// Add refresh time in seconds to config
const traderRefreshRecord: UpdateTime = {
traderId: baseJson._id,
@ -53,8 +50,7 @@ export class TraderHelper
* @param jsonUtil json utility class
*/
// rome-ignore lint/suspicious/noExplicitAny: traderDetailsToAdd comes from base.json, so no type
public addTraderToDb(traderDetailsToAdd: any, tables: IDatabaseTables, jsonUtil: JsonUtil): void
{
public addTraderToDb(traderDetailsToAdd: any, tables: IDatabaseTables, jsonUtil: JsonUtil): void {
// Add trader to trader table, key is the traders id
tables.traders[traderDetailsToAdd._id] = {
assort: this.createAssortTable(), // assorts are the 'offers' trader sells, can be a single item (e.g. carton of milk) or multiple items as a collection (e.g. a gun)
@ -71,8 +67,7 @@ export class TraderHelper
* Create basic data for trader + add empty assorts table for trader
* @returns ITraderAssort
*/
private createAssortTable(): ITraderAssort
{
private createAssortTable(): ITraderAssort {
// Create a blank assort object, ready to have items added
const assortTable: ITraderAssort = {
nextResupply: 0,
@ -88,8 +83,7 @@ export class TraderHelper
* Create a weapon from scratch, ready to be added to trader
* @returns Item[]
*/
public createGlock(): Item[]
{
public createGlock(): Item[] {
// Create an array ready to hold weapon + all mods
const glock: Item[] = [];
@ -110,7 +104,7 @@ export class TraderHelper
// Add reciever
glock.push({
_id: "glockReciever",
_tpl:"5a9685b1a2750c0032157104",
_tpl: "5a9685b1a2750c0032157104",
parentId: "glockBase",
slotId: "mod_reciever",
});
@ -118,7 +112,7 @@ export class TraderHelper
// Add compensator
glock.push({
_id: "glockCompensator",
_tpl:"5a7b32a2e899ef00135e345a",
_tpl: "5a7b32a2e899ef00135e345a",
parentId: "glockReciever", // The parent of this mod is the reciever NOT weapon, be careful to get the correct parent
slotId: "mod_muzzle",
});
@ -126,7 +120,7 @@ export class TraderHelper
// Add Pistol grip
glock.push({
_id: "glockPistolGrip",
_tpl:"5a7b4960e899ef197b331a2d",
_tpl: "5a7b4960e899ef197b331a2d",
parentId: "glockBase",
slotId: "mod_pistol_grip",
});
@ -168,8 +162,7 @@ export class TraderHelper
* @param location Location of trader (e.g. "Here in the cat shop")
* @param description Description of trader
*/
public addTraderToLocales(baseJson: any, tables: IDatabaseTables, fullName: string, firstName: string, nickName: string, location: string, description: string)
{
public addTraderToLocales(baseJson: any, tables: IDatabaseTables, fullName: string, firstName: string, nickName: string, location: string, description: string) {
// For each language, add locale for the new trader
const locales = Object.values(tables.locales.global);