diff --git a/TypeScript/10ScopesAndTypes/src/MyMod.ts b/TypeScript/10ScopesAndTypes/src/MyMod.ts index 30da7a6..1d61892 100644 --- a/TypeScript/10ScopesAndTypes/src/MyMod.ts +++ b/TypeScript/10ScopesAndTypes/src/MyMod.ts @@ -1,9 +1,10 @@ import { inject, injectable } from "tsyringe"; + import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { Processing } from "./Processing"; @injectable() -export class MyMod +export class MyMod { // Since this is a singleton this class will only have 1 object/bean private calls = 0; @@ -11,11 +12,11 @@ export class MyMod // All these types are automatically wired when the container resolves the bean creation constructor( @inject("Processing") private processing: Processing, - @inject("WinstonLogger") private logger: ILogger + @inject("WinstonLogger") private logger: ILogger, ) {} - public runModLogic(): void + public runModLogic(): void { this.processing.doProcess(); this.logger.info(`This is a singleton bean, so everytime its called the same entity will be returned. This is the call number: ${this.calls}`); diff --git a/TypeScript/10ScopesAndTypes/src/Processing.ts b/TypeScript/10ScopesAndTypes/src/Processing.ts index 183ed92..02a761c 100644 --- a/TypeScript/10ScopesAndTypes/src/Processing.ts +++ b/TypeScript/10ScopesAndTypes/src/Processing.ts @@ -1,19 +1,20 @@ import { inject, injectable } from "tsyringe"; + import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; @injectable() -export class Processing +export class Processing { // Since this is a transient type, this class will have many of this type // Anything left in variables will always be discarded private calls = 0; constructor( - @inject("WinstonLogger") private logger: ILogger + @inject("WinstonLogger") private logger: ILogger, ) {} - public doProcess(): void + public doProcess(): void { this.logger.info(`Process was triggered, since this is a singleton the calls value is always 0: ${this.calls}`); } diff --git a/TypeScript/10ScopesAndTypes/src/mod.ts b/TypeScript/10ScopesAndTypes/src/mod.ts index bfa258d..36c9954 100644 --- a/TypeScript/10ScopesAndTypes/src/mod.ts +++ b/TypeScript/10ScopesAndTypes/src/mod.ts @@ -1,4 +1,5 @@ import { DependencyContainer, Lifecycle } from "tsyringe"; + import { IPreAkiLoadMod } from "@spt-aki/models/external/IPreAkiLoadMod"; import { IPostAkiLoadMod } from "@spt-aki/models/external/IPostAkiLoadMod"; import { MyMod } from "./MyMod"; @@ -12,16 +13,16 @@ class Mod implements IPreAkiLoadMod, IPostAkiLoadMod // This class is registered as a singleton. This means ONE and only ONE bean // of this class will ever exist. container.register("MyMod", MyMod, {lifecycle: Lifecycle.Singleton}); - + // This class is being registered as default or transient. This means that // every time a class requests a bean of this type a new one will be created container.register("Processing", Processing); } - public postAkiLoad(container: DependencyContainer): void + public postAkiLoad(container: DependencyContainer): void { // We will run this in a quick 5 loop to show how singletons and transients work - for (let i = 0; i < 5; i++) + for (let i = 0; i < 5; i++) { // every resolution will return the same MyMod bean container.resolve("MyMod").runModLogic(); diff --git a/TypeScript/11BundleLoadingSample/bundles.json b/TypeScript/11BundleLoadingSample/bundles.json index dc29c92..536c404 100644 --- a/TypeScript/11BundleLoadingSample/bundles.json +++ b/TypeScript/11BundleLoadingSample/bundles.json @@ -1,8 +1,8 @@ { - "manifest": [ - { - "key": "assets/content/weapons/usable_items/item_bottle/textures/client_assets.bundle", - "dependencyKeys": [] - } - ] + "manifest": [ + { + "key": "assets/content/weapons/usable_items/item_bottle/textures/client_assets.bundle", + "dependencyKeys": [] + } + ] } diff --git a/TypeScript/11BundleLoadingSample/src/mod.ts b/TypeScript/11BundleLoadingSample/src/mod.ts index af50b01..40d1f9e 100644 --- a/TypeScript/11BundleLoadingSample/src/mod.ts +++ b/TypeScript/11BundleLoadingSample/src/mod.ts @@ -1,16 +1,17 @@ import { DependencyContainer } from "tsyringe"; + import { IPostAkiLoadMod } from "@spt-aki/models/external/IPostAkiLoadMod"; import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; class Mod implements IPostAkiLoadMod { - public postAkiLoad(container: DependencyContainer): void + public postAkiLoad(container: DependencyContainer): void { - // get the logger from the server container + // get the logger from the server container const logger = container.resolve("WinstonLogger"); - + logger.info("Loading: Bundle Loading Sample"); - } + } } export const mod = new Mod(); diff --git a/TypeScript/12ClassExtensionOverride/src/MyCustomLauncherCallbacks.ts b/TypeScript/12ClassExtensionOverride/src/MyCustomLauncherCallbacks.ts index 3466676..34fdbd5 100644 --- a/TypeScript/12ClassExtensionOverride/src/MyCustomLauncherCallbacks.ts +++ b/TypeScript/12ClassExtensionOverride/src/MyCustomLauncherCallbacks.ts @@ -1,3 +1,5 @@ +import { inject, injectable } from "tsyringe"; + import { LauncherCallbacks } from "@spt-aki/callbacks/LauncherCallbacks"; import { LauncherController } from "@spt-aki/controllers/LauncherController"; import { IEmptyRequestData } from "@spt-aki/models/eft/common/IEmptyRequestData"; @@ -5,7 +7,6 @@ import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { SaveServer } from "@spt-aki/servers/SaveServer"; import { HttpResponseUtil } from "@spt-aki/utils/HttpResponseUtil"; import { Watermark } from "@spt-aki/utils/Watermark"; -import { inject, injectable } from "tsyringe"; // We need to declare this class as injectable, this will add the container // metadata @@ -15,12 +16,12 @@ export class MyCustomLauncherCallbacks extends LauncherCallbacks // <<<<=== This { // We need to make sure we use the constructor and pass the dependencies to the parent class! constructor( - // @inject() will make sure to find the component with the right token and put them there - @inject("HttpResponseUtil") httpResponse: HttpResponseUtil, + // @inject() will make sure to find the component with the right token and put them there + @inject("HttpResponseUtil") httpResponse: HttpResponseUtil, @inject("LauncherController") launcherController: LauncherController, @inject("SaveServer") saveServer: SaveServer, @inject("Watermark") watermark: Watermark, - @inject("WinstonLogger") private logger: ILogger + @inject("WinstonLogger") private logger: ILogger, ) { // Pass the parent class (LauncherCallbacks) the dependencies it needs to work @@ -28,7 +29,7 @@ export class MyCustomLauncherCallbacks extends LauncherCallbacks // <<<<=== This } // We override the parent method with the EXACT same signature - public override ping(url: string, info: IEmptyRequestData, sessionID: string): string + public override ping(url: string, info: IEmptyRequestData, sessionID: string): string { // We are overriding the parent method, so ONLY this method will run, not the parent! // If we wanted to run both, you can always write: diff --git a/TypeScript/12ClassExtensionOverride/src/mod.ts b/TypeScript/12ClassExtensionOverride/src/mod.ts index 7899533..45aea7a 100644 --- a/TypeScript/12ClassExtensionOverride/src/mod.ts +++ b/TypeScript/12ClassExtensionOverride/src/mod.ts @@ -1,4 +1,5 @@ import { DependencyContainer } from "tsyringe"; + import { IPreAkiLoadMod } from "@spt-aki/models/external/IPreAkiLoadMod" import { MyCustomLauncherCallbacks } from "./MyCustomLauncherCallbacks"; @@ -9,7 +10,7 @@ class Mod implements IPreAkiLoadMod // you own custom implementations the server will then use. // In this example we will take the LauncherCallbacks class and override the ping() method // for our own custom method that will return "Lets dance" instead of "pong!" - + // Perform these actions before server fully loads public preAkiLoad(container: DependencyContainer): void { // Here we register our override for the component and we NEED to use the same @@ -18,14 +19,13 @@ class Mod implements IPreAkiLoadMod // https://dev.sp-tarkov.com/SPT-AKI/Server/src/branch/development/project/src/di/Container.ts // In this scenario we want to override LauncherCallbacks, so we find the proper registry: // - // depContainer.register("LauncherCallbacks", {useClass: LauncherCallbacks}); + // depContainer.register("LauncherCallbacks", { useClass: LauncherCallbacks }); // // So what we want to do is register it with EXACTLY the same token container.register("MyCustomLauncherCallbacks", MyCustomLauncherCallbacks); - container.register("LauncherCallbacks", {useToken: "MyCustomLauncherCallbacks"}); - - // Now that its registered, the server will automatically find this dependency and use it where ever its needed + container.register("LauncherCallbacks", { useToken: "MyCustomLauncherCallbacks" }); + // Now that its registered, the server will automatically find this dependency and use it where ever its needed } } diff --git a/TypeScript/13AddTrader/src/fluentTraderAssortCreator.ts b/TypeScript/13AddTrader/src/fluentTraderAssortCreator.ts index df47919..c98fef0 100644 --- a/TypeScript/13AddTrader/src/fluentTraderAssortCreator.ts +++ b/TypeScript/13AddTrader/src/fluentTraderAssortCreator.ts @@ -17,24 +17,24 @@ export class FluentAssortConstructor this.hashUtil = hashutil this.logger = logger; } - + /** * Start selling item with tpl * @param itemTpl Tpl id of the item you want trader to sell * @param itemId Optional - set your own Id, otherwise unique id will be generated */ - public createSingleAssortItem(itemTpl: string, itemId = undefined): FluentAssortConstructor + public createSingleAssortItem(itemTpl: string, itemId: string = undefined): FluentAssortConstructor { // Create item ready for insertion into assort table const newItemToAdd: Item = { - _id: !itemId ? this.hashUtil.generate(): itemId, + _id: itemId ?? this.hashUtil.generate(), _tpl: itemTpl, parentId: "hideout", // Should always be "hideout" slotId: "hideout", // Should always be "hideout" upd: { UnlimitedCount: false, - StackObjectsCount: 100 - } + StackObjectsCount: 100, + }, }; this.itemsToSell.push(newItemToAdd); @@ -47,10 +47,7 @@ export class FluentAssortConstructor items[0].parentId = "hideout"; items[0].slotId = "hideout"; - if (!items[0].upd) - { - items[0].upd = {} - } + items[0].upd ??= {}; items[0].upd.UnlimitedCount = false; items[0].upd.StackObjectsCount = 100; @@ -99,14 +96,12 @@ export class FluentAssortConstructor public addMoneyCost(currencyType: Money, amount: number): FluentAssortConstructor { - this.barterScheme[this.itemsToSell[0]._id] = [ - [ - { - count: amount, - _tpl: currencyType - } - ] - ]; + this.barterScheme[this.itemsToSell[0]._id] = [[ + { + count: amount, + _tpl: currencyType, + }, + ]]; return this; } @@ -121,8 +116,8 @@ export class FluentAssortConstructor this.barterScheme[sellableItemId] = [[ { count: count, - _tpl: itemTpl - } + _tpl: itemTpl, + }, ]]; } else @@ -139,10 +134,9 @@ export class FluentAssortConstructor // No barter for item, add it fresh this.barterScheme[sellableItemId][0].push({ count: count, - _tpl: itemTpl - }) + _tpl: itemTpl, + }); } - } return this; @@ -150,7 +144,7 @@ export class FluentAssortConstructor /** * Reset objet ready for reuse - * @returns + * @returns */ public export(data: ITrader): FluentAssortConstructor { diff --git a/TypeScript/13AddTrader/src/mod.ts b/TypeScript/13AddTrader/src/mod.ts index a98a505..279dabc 100644 --- a/TypeScript/13AddTrader/src/mod.ts +++ b/TypeScript/13AddTrader/src/mod.ts @@ -12,21 +12,22 @@ import { ConfigTypes } from "@spt-aki/models/enums/ConfigTypes"; import { ITraderConfig } from "@spt-aki/models/spt/config/ITraderConfig"; import { IRagfairConfig } from "@spt-aki/models/spt/config/IRagfairConfig"; import { JsonUtil } from "@spt-aki/utils/JsonUtil"; - -// New trader settings -import * as baseJson from "../db/base.json"; -import { TraderHelper } from "./traderHelpers"; -import { FluentAssortConstructor as FluentAssortCreator } from "./fluentTraderAssortCreator"; import { Money } from "@spt-aki/models/enums/Money"; import { Traders } from "@spt-aki/models/enums/Traders"; import { HashUtil } from "@spt-aki/utils/HashUtil"; +// New trader settings +import * as baseJson from "../db/base.json"; + +import { TraderHelper } from "./traderHelpers"; +import { FluentAssortConstructor as FluentAssortCreator } from "./fluentTraderAssortCreator"; + class SampleTrader implements IPreAkiLoadMod, IPostDBLoadMod { - private mod: string - private logger: ILogger - private traderHelper: TraderHelper - private fluentAssortCreator: FluentAssortCreator + private mod: string; + private logger: ILogger; + private traderHelper: TraderHelper; + private fluentAssortCreator: FluentAssortCreator; constructor() { this.mod = "13AddTrader"; // Set name of mod so we can log it to console later @@ -64,7 +65,7 @@ class SampleTrader implements IPreAkiLoadMod, IPostDBLoadMod this.logger.debug(`[${this.mod}] preAki Loaded`); } - + /** * Majority of trader-related work occurs after the aki database has been loaded but prior to SPT code being run * @param container Dependency container @@ -86,39 +87,43 @@ class SampleTrader implements IPreAkiLoadMod, IPostDBLoadMod // 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) - .addStackCount(200) - .addBuyRestriction(10) - .addMoneyCost(Money.ROUBLES, 2000) - .addLoyaltyLevel(1) - .export(tables.traders[baseJson._id]); + this.fluentAssortCreator + .createSingleAssortItem(MILK_ID) + .addStackCount(200) + .addBuyRestriction(10) + .addMoneyCost(Money.ROUBLES, 2000) + .addLoyaltyLevel(1) + .export(tables.traders[baseJson._id]); // Add 3x bitcoin + salewa for milk barter - const BITCOIN_ID = "59faff1d86f7746c51718c9c" + const BITCOIN_ID = "59faff1d86f7746c51718c9c"; const SALEWA_ID = "544fb45d4bdc2dee738b4568"; - this.fluentAssortCreator.createSingleAssortItem(MILK_ID) - .addStackCount(100) - .addBarterCost(BITCOIN_ID, 3) - .addBarterCost(SALEWA_ID, 1) - .addLoyaltyLevel(1) - .export(tables.traders[baseJson._id]); + this.fluentAssortCreator + .createSingleAssortItem(MILK_ID) + .addStackCount(100) + .addBarterCost(BITCOIN_ID, 3) + .addBarterCost(SALEWA_ID, 1) + .addLoyaltyLevel(1) + .export(tables.traders[baseJson._id]); // Add glock as money purchase - this.fluentAssortCreator.createComplexAssortItem(this.traderHelper.createGlock()) - .addUnlimitedStackCount() - .addMoneyCost(Money.ROUBLES, 20000) - .addBuyRestriction(3) - .addLoyaltyLevel(1) - .export(tables.traders[baseJson._id]); + this.fluentAssortCreator + .createComplexAssortItem(this.traderHelper.createGlock()) + .addUnlimitedStackCount() + .addMoneyCost(Money.ROUBLES, 20000) + .addBuyRestriction(3) + .addLoyaltyLevel(1) + .export(tables.traders[baseJson._id]); // Add mp133 preset as mayo barter - this.fluentAssortCreator.createComplexAssortItem(tables.globals.ItemPresets["584148f2245977598f1ad387"]._items) - .addStackCount(200) - .addBarterCost("5bc9b156d4351e00367fbce9", 1) - .addBuyRestriction(3) - .addLoyaltyLevel(1) - .export(tables.traders[baseJson._id]); + this.fluentAssortCreator + .createComplexAssortItem(tables.globals.ItemPresets["584148f2245977598f1ad387"]._items) + .addStackCount(200) + .addBarterCost("5bc9b156d4351e00367fbce9", 1) + .addBuyRestriction(3) + .addLoyaltyLevel(1) + .export(tables.traders[baseJson._id]); // Add trader to locale file, ensures trader text shows properly on screen // WARNING: adds the same text to ALL locales (e.g. chinese/french/english) diff --git a/TypeScript/13AddTrader/src/traderHelpers.ts b/TypeScript/13AddTrader/src/traderHelpers.ts index d4aff03..3f969f4 100644 --- a/TypeScript/13AddTrader/src/traderHelpers.ts +++ b/TypeScript/13AddTrader/src/traderHelpers.ts @@ -11,6 +11,7 @@ export class TraderHelper /** * Add profile picture to our trader * @param baseJson json file for trader (db/base.json) + * @param modName mod folder name * @param preAkiModLoader mod loader class - used to get the mods file path * @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 @@ -19,7 +20,7 @@ export class TraderHelper { // Reference the mod "res" folder const imageFilepath = `./${preAkiModLoader.getModPath(modName)}res`; - + // Register a route to point to the profile picture - remember to remove the .jpg from it imageRouter.addRoute(baseJson.avatar.replace(".jpg", ""), `${imageFilepath}/${traderImageName}`); } @@ -38,8 +39,9 @@ export class TraderHelper traderId: baseJson._id, seconds: { min: refreshTimeSecondsMin, - max: refreshTimeSecondsMax - } }; + max: refreshTimeSecondsMax, + }, + }; traderConfig.updateTime.push(traderRefreshRecord); } @@ -60,15 +62,13 @@ export class TraderHelper questassort: { started: {}, success: {}, - fail: {} - } // questassort is empty as trader has no assorts unlocked by quests + fail: {}, + }, // questassort is empty as trader has no assorts unlocked by quests }; } /** * Create basic data for trader + add empty assorts table for trader - * @param tables SPT db - * @param jsonUtil SPT JSON utility class * @returns ITraderAssort */ private createAssortTable(): ITraderAssort @@ -78,8 +78,8 @@ export class TraderHelper nextResupply: 0, items: [], barter_scheme: {}, - loyal_level_items: {} - } + loyal_level_items: {}, + }; return assortTable; } @@ -96,7 +96,7 @@ export class TraderHelper // Add the base first glock.push({ // Add the base weapon first _id: "glockBase", // Ids dont matter, as long as they are unique (can use hashUtil.generate() if you dont want to type every id by hand) - _tpl: "5a7ae0c351dfba0017554310" // This is the weapons tpl, found on: https://db.sp-tarkov.com/search + _tpl: "5a7ae0c351dfba0017554310", // This is the weapons tpl, found on: https://db.sp-tarkov.com/search }); // Add barrel @@ -104,7 +104,7 @@ export class TraderHelper _id: "glockbarrel", _tpl: "5a6b60158dc32e000a31138b", parentId: "glockBase", // This is a sub item, you need to define its parent its attached to / inserted into - slotId: "mod_barrel" // Required for mods, you need to define what 'role' they have + slotId: "mod_barrel", // Required for mods, you need to define what 'role' they have }); // Add reciever @@ -112,7 +112,7 @@ export class TraderHelper _id: "glockReciever", _tpl:"5a9685b1a2750c0032157104", parentId: "glockBase", - slotId: "mod_reciever" + slotId: "mod_reciever", }); // Add compensator @@ -120,7 +120,7 @@ export class TraderHelper _id: "glockCompensator", _tpl:"5a7b32a2e899ef00135e345a", parentId: "glockReciever", // The parent of this mod is the reciever NOT weapon, be careful to get the correct parent - slotId: "mod_muzzle" + slotId: "mod_muzzle", }); // Add Pistol grip @@ -128,7 +128,7 @@ export class TraderHelper _id: "glockPistolGrip", _tpl:"5a7b4960e899ef197b331a2d", parentId: "glockBase", - slotId: "mod_pistol_grip" + slotId: "mod_pistol_grip", }); // Add front sight @@ -136,7 +136,7 @@ export class TraderHelper _id: "glockRearSight", _tpl: "5a6f5d528dc32e00094b97d9", parentId: "glockReciever", - slotId: "mod_sight_rear" + slotId: "mod_sight_rear", }); // Add rear sight @@ -144,7 +144,7 @@ export class TraderHelper _id: "glockFrontSight", _tpl: "5a6f58f68dc32e000a311390", parentId: "glockReciever", - slotId: "mod_sight_front" + slotId: "mod_sight_front", }); // Add magazine @@ -152,7 +152,7 @@ export class TraderHelper _id: "glockMagazine", _tpl: "630769c4962d0247b029dc60", parentId: "glockBase", - slotId: "mod_magazine" + slotId: "mod_magazine", }); return glock; @@ -171,7 +171,8 @@ export class TraderHelper 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) as Record[]; + const locales = Object.values(tables.locales.global); + for (const locale of locales) { locale[`${baseJson._id} FullName`] = fullName; locale[`${baseJson._id} FirstName`] = firstName; diff --git a/TypeScript/14AfterDBLoadHook/src/mod.ts b/TypeScript/14AfterDBLoadHook/src/mod.ts index 41afa58..1f4ee95 100644 --- a/TypeScript/14AfterDBLoadHook/src/mod.ts +++ b/TypeScript/14AfterDBLoadHook/src/mod.ts @@ -17,7 +17,7 @@ class Mod implements IPreAkiLoadMod, IPostAkiLoadMod, IPostDBLoadMod const logger = container.resolve("WinstonLogger"); logger.logWithColor(`Database item table state: ${databaseServer.getTables().templates} (<<< should be undefined)`, LogTextColor.RED, LogBackgroundColor.YELLOW); } - + public postDBLoad(container: DependencyContainer): void { // Database will be loaded, this is the fresh state of the DB so NOTHING from the AKI // logic has modified anything yet. This is the DB loaded straight from the JSON files @@ -25,7 +25,7 @@ class Mod implements IPreAkiLoadMod, IPostAkiLoadMod, IPostDBLoadMod const logger = container.resolve("WinstonLogger"); logger.logWithColor(`Database item size: ${Object.entries(databaseServer.getTables().templates.items).length}`, LogTextColor.RED, LogBackgroundColor.YELLOW); // lets do a quick modification and see how this reflect later on, on the postAkiLoad() - + // find the nvgs item by its Id const nvgs = databaseServer.getTables().templates.items["5c0558060db834001b735271"]; // Lets log the state before the modification: diff --git a/TypeScript/15HttpListenerExample/src/Type2HttpListener.ts b/TypeScript/15HttpListenerExample/src/Type2HttpListener.ts index b9c5dc2..d87d66c 100644 --- a/TypeScript/15HttpListenerExample/src/Type2HttpListener.ts +++ b/TypeScript/15HttpListenerExample/src/Type2HttpListener.ts @@ -1,13 +1,15 @@ +import { IncomingMessage, ServerResponse } from "node:http"; + import { IHttpListener } from "@spt-aki/servers/http/IHttpListener"; -import { IncomingMessage, ServerResponse } from "http"; export class Type2HttpListener implements IHttpListener { - public canHandle(sessionId: string, req: IncomingMessage): boolean + public canHandle(sessionId: string, req: IncomingMessage): boolean { return req.method === "GET" && req.url?.includes("/type2-custom-url"); } - public handle(sessionId: string, req: IncomingMessage, resp: ServerResponse): void + + public async handle(sessionId: string, req: IncomingMessage, resp: ServerResponse): Promise { resp.writeHead(200, "OK"); resp.end("[2] This is the second example of a mod hooking into the HttpServer"); diff --git a/TypeScript/15HttpListenerExample/src/mod.ts b/TypeScript/15HttpListenerExample/src/mod.ts index 3418da2..3158494 100644 --- a/TypeScript/15HttpListenerExample/src/mod.ts +++ b/TypeScript/15HttpListenerExample/src/mod.ts @@ -1,13 +1,14 @@ +import { IncomingMessage, ServerResponse } from "node:http"; import { DependencyContainer } from "tsyringe"; + import { IPreAkiLoadMod } from "@spt-aki/models/external/IPreAkiLoadMod"; import { HttpListenerModService } from "@spt-aki/services/mod/httpListener/HttpListenerModService"; -import { IncomingMessage, ServerResponse } from "http"; import { Type2HttpListener } from "./Type2HttpListener"; class Mod implements IPreAkiLoadMod { // Code added here will load BEFORE the server has started loading - public preAkiLoad(container: DependencyContainer): void + public preAkiLoad(container: DependencyContainer): void { const httpListenerService = container.resolve("HttpListenerModService"); httpListenerService.registerHttpListener("Type1HttpListener", this.canHandleOverride, this.handleOverride) diff --git a/TypeScript/16ImporterUtil/config/config.json b/TypeScript/16ImporterUtil/config/config.json index 14b4552..8333f59 100644 --- a/TypeScript/16ImporterUtil/config/config.json +++ b/TypeScript/16ImporterUtil/config/config.json @@ -1,3 +1,3 @@ { - "myProperty": "wow" + "myProperty": "wow" } diff --git a/TypeScript/16ImporterUtil/config/db/config.json b/TypeScript/16ImporterUtil/config/db/config.json index 4ace981..6870cbd 100644 --- a/TypeScript/16ImporterUtil/config/db/config.json +++ b/TypeScript/16ImporterUtil/config/db/config.json @@ -1,3 +1,3 @@ { - "myProperty": "wow inside db" + "myProperty": "wow inside db" } diff --git a/TypeScript/16ImporterUtil/config/db/moredb/config.json b/TypeScript/16ImporterUtil/config/db/moredb/config.json index f2d8c7a..b9feb92 100644 --- a/TypeScript/16ImporterUtil/config/db/moredb/config.json +++ b/TypeScript/16ImporterUtil/config/db/moredb/config.json @@ -1,3 +1,3 @@ { - "myProperty": "wow inside db inside moredb" + "myProperty": "wow inside db inside moredb" } diff --git a/TypeScript/16ImporterUtil/src/mod.ts b/TypeScript/16ImporterUtil/src/mod.ts index 7f7e148..651a43b 100644 --- a/TypeScript/16ImporterUtil/src/mod.ts +++ b/TypeScript/16ImporterUtil/src/mod.ts @@ -1,25 +1,26 @@ +import { DependencyContainer } from "tsyringe"; + import { PreAkiModLoader } from "@spt-aki/loaders/PreAkiModLoader"; import { IPreAkiLoadMod } from "@spt-aki/models/external/IPreAkiLoadMod"; import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { ImporterUtil } from "@spt-aki/utils/ImporterUtil"; -import { DependencyContainer } from "tsyringe"; import { ConfigsModelBase } from "./model/ConfigsModel"; class Mod implements IPreAkiLoadMod { - public preAkiLoad(container: DependencyContainer): void { - // get logger - const logger = container.resolve("WinstonLogger"); + public preAkiLoad(container: DependencyContainer): void { + // get logger + const logger = container.resolve("WinstonLogger"); - const importerUtil = container.resolve("ImporterUtil"); - const modImporter = container.resolve("PreAkiModLoader"); - const path = modImporter.getModPath("16ImporterUtil"); + const importerUtil = container.resolve("ImporterUtil"); + const modImporter = container.resolve("PreAkiModLoader"); + const path = modImporter.getModPath("16ImporterUtil"); - const configPath = `${path}config/`; - const configs = importerUtil.loadRecursive(configPath); - logger.info( - `16ImporterUtil Configurations found: ${JSON.stringify(configs)}`, - ); - } + const configPath = `${path}config/`; + const configs = importerUtil.loadRecursive(configPath); + logger.info( + `16ImporterUtil Configurations found: ${JSON.stringify(configs)}`, + ); + } } export const mod = new Mod(); diff --git a/TypeScript/16ImporterUtil/src/model/ConfigsModel.ts b/TypeScript/16ImporterUtil/src/model/ConfigsModel.ts index 07c5138..a6f1ee9 100644 --- a/TypeScript/16ImporterUtil/src/model/ConfigsModel.ts +++ b/TypeScript/16ImporterUtil/src/model/ConfigsModel.ts @@ -1,17 +1,17 @@ export class ConfigsModelBase { - db: ConfigsModelDb; - config: ConfigModel; + db: ConfigsModelDb; + config: ConfigModel; } export class ConfigsModelDb { - moredb: ConfigsModelMoreDb; - config: ConfigModel; + moredb: ConfigsModelMoreDb; + config: ConfigModel; } export class ConfigsModelMoreDb { - config: ConfigModel; + config: ConfigModel; } export class ConfigModel { - myProperty: string; + myProperty: string; } diff --git a/TypeScript/17AsyncImporterWithDependency1/config/config.json b/TypeScript/17AsyncImporterWithDependency1/config/config.json index 14b4552..8333f59 100644 --- a/TypeScript/17AsyncImporterWithDependency1/config/config.json +++ b/TypeScript/17AsyncImporterWithDependency1/config/config.json @@ -1,3 +1,3 @@ { - "myProperty": "wow" + "myProperty": "wow" } diff --git a/TypeScript/17AsyncImporterWithDependency1/config/db/config.json b/TypeScript/17AsyncImporterWithDependency1/config/db/config.json index 4ace981..6870cbd 100644 --- a/TypeScript/17AsyncImporterWithDependency1/config/db/config.json +++ b/TypeScript/17AsyncImporterWithDependency1/config/db/config.json @@ -1,3 +1,3 @@ { - "myProperty": "wow inside db" + "myProperty": "wow inside db" } diff --git a/TypeScript/17AsyncImporterWithDependency1/config/db/moredb/config.json b/TypeScript/17AsyncImporterWithDependency1/config/db/moredb/config.json index f2d8c7a..b9feb92 100644 --- a/TypeScript/17AsyncImporterWithDependency1/config/db/moredb/config.json +++ b/TypeScript/17AsyncImporterWithDependency1/config/db/moredb/config.json @@ -1,3 +1,3 @@ { - "myProperty": "wow inside db inside moredb" + "myProperty": "wow inside db inside moredb" } diff --git a/TypeScript/17AsyncImporterWithDependency1/src/mod.ts b/TypeScript/17AsyncImporterWithDependency1/src/mod.ts index 8f15c03..a34a004 100644 --- a/TypeScript/17AsyncImporterWithDependency1/src/mod.ts +++ b/TypeScript/17AsyncImporterWithDependency1/src/mod.ts @@ -1,30 +1,31 @@ +import { DependencyContainer } from "tsyringe"; + import { PreAkiModLoader } from "@spt-aki/loaders/PreAkiModLoader"; import { IPreAkiLoadModAsync } from "@spt-aki/models/external/IPreAkiLoadModAsync"; import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { ImporterUtil } from "@spt-aki/utils/ImporterUtil"; -import { DependencyContainer } from "tsyringe"; import { ConfigsModelBase } from "./model/ConfigsModel"; class Mod implements IPreAkiLoadModAsync { - public async preAkiLoadAsync(container: DependencyContainer): Promise { - // get logger - const logger = container.resolve("WinstonLogger"); + public async preAkiLoadAsync(container: DependencyContainer): Promise { + // get logger + const logger = container.resolve("WinstonLogger"); - const importerUtil = container.resolve("ImporterUtil"); - const modImporter = container.resolve("PreAkiModLoader"); - const path = modImporter.getModPath("16ImporterUtil"); + const importerUtil = container.resolve("ImporterUtil"); + const modImporter = container.resolve("PreAkiModLoader"); + const path = modImporter.getModPath("16ImporterUtil"); - const configPath = `${path}config/`; - return importerUtil - .loadAsync(configPath) - .then((configs) => { - logger.info( - `17ImporterWithDependency1 Configurations found: ${JSON.stringify( - configs, - )}`, - ); - }); - } + const configPath = `${path}config/`; + return importerUtil + .loadAsync(configPath) + .then((configs) => { + logger.info( + `17ImporterWithDependency1 Configurations found: ${JSON.stringify( + configs, + )}`, + ); + }); + } } export const mod = new Mod(); diff --git a/TypeScript/17AsyncImporterWithDependency1/src/model/ConfigsModel.ts b/TypeScript/17AsyncImporterWithDependency1/src/model/ConfigsModel.ts index 07c5138..a6f1ee9 100644 --- a/TypeScript/17AsyncImporterWithDependency1/src/model/ConfigsModel.ts +++ b/TypeScript/17AsyncImporterWithDependency1/src/model/ConfigsModel.ts @@ -1,17 +1,17 @@ export class ConfigsModelBase { - db: ConfigsModelDb; - config: ConfigModel; + db: ConfigsModelDb; + config: ConfigModel; } export class ConfigsModelDb { - moredb: ConfigsModelMoreDb; - config: ConfigModel; + moredb: ConfigsModelMoreDb; + config: ConfigModel; } export class ConfigsModelMoreDb { - config: ConfigModel; + config: ConfigModel; } export class ConfigModel { - myProperty: string; + myProperty: string; } diff --git a/TypeScript/17AsyncImporterWithDependency2/config/config.json b/TypeScript/17AsyncImporterWithDependency2/config/config.json index 14b4552..8333f59 100644 --- a/TypeScript/17AsyncImporterWithDependency2/config/config.json +++ b/TypeScript/17AsyncImporterWithDependency2/config/config.json @@ -1,3 +1,3 @@ { - "myProperty": "wow" + "myProperty": "wow" } diff --git a/TypeScript/17AsyncImporterWithDependency2/config/db/config.json b/TypeScript/17AsyncImporterWithDependency2/config/db/config.json index 4ace981..6870cbd 100644 --- a/TypeScript/17AsyncImporterWithDependency2/config/db/config.json +++ b/TypeScript/17AsyncImporterWithDependency2/config/db/config.json @@ -1,3 +1,3 @@ { - "myProperty": "wow inside db" + "myProperty": "wow inside db" } diff --git a/TypeScript/17AsyncImporterWithDependency2/config/db/moredb/config.json b/TypeScript/17AsyncImporterWithDependency2/config/db/moredb/config.json index f2d8c7a..b9feb92 100644 --- a/TypeScript/17AsyncImporterWithDependency2/config/db/moredb/config.json +++ b/TypeScript/17AsyncImporterWithDependency2/config/db/moredb/config.json @@ -1,3 +1,3 @@ { - "myProperty": "wow inside db inside moredb" + "myProperty": "wow inside db inside moredb" } diff --git a/TypeScript/17AsyncImporterWithDependency2/src/mod.ts b/TypeScript/17AsyncImporterWithDependency2/src/mod.ts index 5d822ed..815a944 100644 --- a/TypeScript/17AsyncImporterWithDependency2/src/mod.ts +++ b/TypeScript/17AsyncImporterWithDependency2/src/mod.ts @@ -1,30 +1,31 @@ +import { DependencyContainer } from "tsyringe"; + import { PreAkiModLoader } from "@spt-aki/loaders/PreAkiModLoader"; import { IPreAkiLoadModAsync } from "@spt-aki/models/external/IPreAkiLoadModAsync"; import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { ImporterUtil } from "@spt-aki/utils/ImporterUtil"; -import { DependencyContainer } from "tsyringe"; import { ConfigsModelBase } from "./model/ConfigsModel"; class Mod implements IPreAkiLoadModAsync { - public async preAkiLoadAsync(container: DependencyContainer): Promise { - // get logger - const logger = container.resolve("WinstonLogger"); + public async preAkiLoadAsync(container: DependencyContainer): Promise { + // get logger + const logger = container.resolve("WinstonLogger"); - const importerUtil = container.resolve("ImporterUtil"); - const modImporter = container.resolve("PreAkiModLoader"); - const path = modImporter.getModPath("16ImporterUtil"); + const importerUtil = container.resolve("ImporterUtil"); + const modImporter = container.resolve("PreAkiModLoader"); + const path = modImporter.getModPath("16ImporterUtil"); - const configPath = `${path}config/`; - return importerUtil - .loadAsync(configPath) - .then((configs) => { - logger.info( - `17ImporterWithDependency2 Configurations found: ${JSON.stringify( - configs, - )}`, - ); - }); - } + const configPath = `${path}config/`; + return importerUtil + .loadAsync(configPath) + .then((configs) => { + logger.info( + `17ImporterWithDependency2 Configurations found: ${JSON.stringify( + configs, + )}`, + ); + }); + } } export const mod = new Mod(); diff --git a/TypeScript/17AsyncImporterWithDependency2/src/model/ConfigsModel.ts b/TypeScript/17AsyncImporterWithDependency2/src/model/ConfigsModel.ts index 07c5138..a6f1ee9 100644 --- a/TypeScript/17AsyncImporterWithDependency2/src/model/ConfigsModel.ts +++ b/TypeScript/17AsyncImporterWithDependency2/src/model/ConfigsModel.ts @@ -1,17 +1,17 @@ export class ConfigsModelBase { - db: ConfigsModelDb; - config: ConfigModel; + db: ConfigsModelDb; + config: ConfigModel; } export class ConfigsModelDb { - moredb: ConfigsModelMoreDb; - config: ConfigModel; + moredb: ConfigsModelMoreDb; + config: ConfigModel; } export class ConfigsModelMoreDb { - config: ConfigModel; + config: ConfigModel; } export class ConfigModel { - myProperty: string; + myProperty: string; } diff --git a/TypeScript/18CustomItemService/src/mod.ts b/TypeScript/18CustomItemService/src/mod.ts index 7335a4f..100d342 100644 --- a/TypeScript/18CustomItemService/src/mod.ts +++ b/TypeScript/18CustomItemService/src/mod.ts @@ -8,7 +8,7 @@ import { DatabaseServer } from "@spt-aki/servers/DatabaseServer"; class Mod implements IPostDBLoadMod, IPostAkiLoadMod { - public postDBLoad(container: DependencyContainer): void + public postDBLoad(container: DependencyContainer): void { // Resolve the CustomItemService container const CustomItem = container.resolve("CustomItemService"); @@ -19,13 +19,13 @@ class Mod implements IPostDBLoadMod, IPostAkiLoadMod overrideProperties: { Chambers: [ { - "_name": "patron_in_weapon_000", - "_id": "61f7c9e189e6fb1a5e3ea791", - "_parent": "CustomMP18", - "_props": { - "filters": [ + _name: "patron_in_weapon_000", + _id: "61f7c9e189e6fb1a5e3ea791", + _parent: "CustomMP18", + _props: { + filters: [ { - "Filter": [ + Filter: [ "560d5e524bdc2d25448b4571", "5d6e6772a4b936088465b17c", "5d6e67fba4b9361bc73bc779", @@ -41,16 +41,16 @@ class Mod implements IPostDBLoadMod, IPostAkiLoadMod "5d6e68b3a4b9361bca7e50b5", "5d6e6891a4b9361bd473feea", "5d6e689ca4b9361bc8618956", - "5d6e68d1a4b93622fe60e845" - ] - } - ] + "5d6e68d1a4b93622fe60e845", + ], + }, + ], }, - "_required": false, - "_mergeSlotWithChildren": false, - "_proto": "55d4af244bdc2d962f8b4571" - } - ] + _required: false, + _mergeSlotWithChildren: false, + _proto: "55d4af244bdc2d962f8b4571", + }, + ], }, //Overried properties basically tell the server on what data inside _props to be modified from the cloned item, in this example i am modifying the ammo used to be 12G parentId: "5447b6094bdc2dc3278b4567", //ParentId refers to the Node item the gun will be under, you can check it in https://db.sp-tarkov.com/search newId: "CustomMP18", //The new id of our cloned item @@ -59,21 +59,23 @@ class Mod implements IPostDBLoadMod, IPostAkiLoadMod handbookParentId: "5b5f78e986f77447ed5636b1", //Handbook Parent Id refers to the category the gun will be under //you see those side box tab thing that only select gun under specific icon? Handbook parent can be found in Aki_Data\Server\database\templates. locales: { - "en": { + en: { name: "MP-18 12g", shortName: "Custom MP18", - description: "A custom MP18 chambered in 12G" - } - } - } + description: "A custom MP18 chambered in 12G", + }, + }, + }; + CustomItem.createItemFromClone(ExampleCloneItem); //Basically calls the function and tell the server to add our Cloned new item into the server } + //Check if our item is in the server or not public postAkiLoad(container: DependencyContainer): void { const db = container.resolve("DatabaseServer"); const item = db.getTables().templates.items; - console.log(item["CustomMP18"]._props) + console.log(item["CustomMP18"]._props); } } diff --git a/TypeScript/19UseExternalLibraries/src/mod.ts b/TypeScript/19UseExternalLibraries/src/mod.ts index ce45c99..13bd96b 100644 --- a/TypeScript/19UseExternalLibraries/src/mod.ts +++ b/TypeScript/19UseExternalLibraries/src/mod.ts @@ -1,41 +1,41 @@ -import { DependencyContainer } from 'tsyringe'; +import path from "node:path"; +import { DependencyContainer } from "tsyringe"; import { IPostAkiLoadMod } from "@spt-aki/models/external/IPostAkiLoadMod"; import { IPreAkiLoadMod } from "@spt-aki/models/external/IPreAkiLoadMod"; import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { VFS } from "@spt-aki/utils/VFS"; -import { jsonc } from 'jsonc'; +import { jsonc } from "jsonc"; // Our dynamically imported package (via pnpm) not bundled into the server import ora from "ora-classic"; -import path from "path"; class Mod implements IPreAkiLoadMod, IPostAkiLoadMod { - public preAkiLoad(container: DependencyContainer): void { - const VFS = container.resolve("VFS"); - const logger = container.resolve("WinstonLogger"); + public preAkiLoad(container: DependencyContainer): void { + const vfs = container.resolve("VFS"); + const logger = container.resolve("WinstonLogger"); - const parsedJsonC = jsonc.parse(VFS.readFile(path.resolve(__dirname, "../test.jsonc"))); + const parsedJsonC = jsonc.parse(vfs.readFile(path.resolve(__dirname, "../test.jsonc"))); - logger.success(jsonc.stringify(parsedJsonC, null, "\t")); // you could use the built in JSON api here if you really wanted too aswell, i used jsonc to really drive home the point that it works - } + logger.success(jsonc.stringify(parsedJsonC, null, "\t")); // you could use the built in JSON api here if you really wanted too aswell, i used jsonc to really drive home the point that it works + } - public postAkiLoad(container: DependencyContainer): void { - // this first timeout is just to prevent a weird formatting problem on the console, you can ignore it, you don't really need it anyways, it's just so that it looks right on the console - setTimeout(() => { - const spinner = ora({ - text: "Hacking into the mainframe...", - spinner: "line", - hideCursor: false, - discardStdin: false - }).start(); + public postAkiLoad(container: DependencyContainer): void { + // this first timeout is just to prevent a weird formatting problem on the console, you can ignore it, you don't really need it anyways, it's just so that it looks right on the console + setTimeout(() => { + const spinner = ora({ + text: "Hacking into the mainframe...", + spinner: "line", + hideCursor: false, + discardStdin: false + }).start(); - // this second timeout is to simulate the time it takes to hack into the mainframe, as it turns out, not a lot! - setTimeout(() => { - spinner.succeed("Successfully hacked into the mainframe!"); - }, 3000); - }, 1000); - } + // this second timeout is to simulate the time it takes to hack into the mainframe, as it turns out, not a lot! + setTimeout(() => { + spinner.succeed("Successfully hacked into the mainframe!"); + }, 3000); + }, 1000); + } } export const mod = new Mod(); diff --git a/TypeScript/19UseExternalLibraries/test.jsonc b/TypeScript/19UseExternalLibraries/test.jsonc index 5bc6ea6..c330460 100644 --- a/TypeScript/19UseExternalLibraries/test.jsonc +++ b/TypeScript/19UseExternalLibraries/test.jsonc @@ -1,4 +1,4 @@ // comment { - "data": /* comment */ "value" + "data": /* comment */ "value" } diff --git a/TypeScript/1LogToConsole/src/mod.ts b/TypeScript/1LogToConsole/src/mod.ts index e1e2fee..ccbb988 100644 --- a/TypeScript/1LogToConsole/src/mod.ts +++ b/TypeScript/1LogToConsole/src/mod.ts @@ -1,4 +1,5 @@ import { DependencyContainer } from "tsyringe"; + import { IPreAkiLoadMod } from "@spt-aki/models/external/IPreAkiLoadMod"; import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { LogTextColor } from "@spt-aki/models/spt/logging/LogTextColor"; @@ -7,11 +8,11 @@ import { LogBackgroundColor } from "@spt-aki/models/spt/logging/LogBackgroundCol class Mod implements IPreAkiLoadMod { // Code added here will load BEFORE the server has started loading - preAkiLoad(container: DependencyContainer): void + public preAkiLoad(container: DependencyContainer): void { // get the logger from the server container const logger = container.resolve("WinstonLogger"); - + logger.info("I am logging info!"); logger.warning("I am logging a warning!"); logger.error("I am logging an error!"); diff --git a/TypeScript/20CustomChatBot/src/CustomChatBot.ts b/TypeScript/20CustomChatBot/src/CustomChatBot.ts index fcbe2eb..ff40aac 100644 --- a/TypeScript/20CustomChatBot/src/CustomChatBot.ts +++ b/TypeScript/20CustomChatBot/src/CustomChatBot.ts @@ -1,25 +1,26 @@ +import { inject, injectable } from "tsyringe"; + import { IDialogueChatBot } from "@spt-aki/helpers/Dialogue/IDialogueChatBot"; import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest"; import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile"; import { MemberCategory } from "@spt-aki/models/enums/MemberCategory"; import { MailSendService } from "@spt-aki/services/MailSendService"; -import { inject, injectable } from "tsyringe"; // \/ dont forger this annotation here! @injectable() export class CustomChatBot implements IDialogueChatBot { - public constructor( + constructor( @inject("MailSendService") protected mailSendService: MailSendService, ) - { - } + {} public getChatBot(): IUserDialogInfo { return { _id: "modderBuddy", - info: { + aid: 9999999, + Info: { Level: 1, MemberCategory: MemberCategory.SHERPA, Nickname: "Buddy", @@ -37,5 +38,4 @@ export class CustomChatBot implements IDialogueChatBot ); return request.dialogId; } - } diff --git a/TypeScript/20CustomChatBot/src/mod.ts b/TypeScript/20CustomChatBot/src/mod.ts index 267082e..f5ad0bf 100644 --- a/TypeScript/20CustomChatBot/src/mod.ts +++ b/TypeScript/20CustomChatBot/src/mod.ts @@ -1,15 +1,15 @@ -import { DependencyContainer } from 'tsyringe'; +import { DependencyContainer } from "tsyringe"; import { IPostDBLoadMod } from "@spt-aki/models/external/IPostDBLoadMod"; import { DialogueController } from "@spt-aki/controllers/DialogueController"; -import { CustomChatBot } from './CustomChatBot'; +import { CustomChatBot } from "./CustomChatBot"; class Mod implements IPostDBLoadMod { - public postDBLoad(container: DependencyContainer): void { + public postDBLoad(container: DependencyContainer): void { // We register and re-resolve the dependency so the container takes care of filling in the command dependencies container.register("CustomChatBot", CustomChatBot); container.resolve("DialogueController").registerChatBot(container.resolve("CustomChatBot")); - } + } } export const mod = new Mod(); diff --git a/TypeScript/21CustomCommandoCommand/src/CustomCommandoCommand.ts b/TypeScript/21CustomCommandoCommand/src/CustomCommandoCommand.ts index 6594aca..beffa2c 100644 --- a/TypeScript/21CustomCommandoCommand/src/CustomCommandoCommand.ts +++ b/TypeScript/21CustomCommandoCommand/src/CustomCommandoCommand.ts @@ -1,15 +1,16 @@ +import { inject, injectable } from "tsyringe"; + import { IChatCommand } from "@spt-aki/helpers/Dialogue/Commando/IChatCommand"; import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest"; import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile"; import { DatabaseServer } from "@spt-aki/servers/DatabaseServer"; import { MailSendService } from "@spt-aki/services/MailSendService"; -import { inject, injectable } from "tsyringe"; // \/ dont forger this annotation here! @injectable() export class CustomCommandoCommand implements IChatCommand { - public constructor( + constructor( @inject("MailSendService") protected mailSendService: MailSendService, @inject("DatabaseServer") protected databaseServer: DatabaseServer, ) diff --git a/TypeScript/21CustomCommandoCommand/src/mod.ts b/TypeScript/21CustomCommandoCommand/src/mod.ts index faee472..98e3edd 100644 --- a/TypeScript/21CustomCommandoCommand/src/mod.ts +++ b/TypeScript/21CustomCommandoCommand/src/mod.ts @@ -1,15 +1,15 @@ -import { DependencyContainer } from 'tsyringe'; +import { DependencyContainer } from "tsyringe"; import { IPostDBLoadMod } from "@spt-aki/models/external/IPostDBLoadMod"; import { CommandoDialogueChatBot } from "@spt-aki/helpers/Dialogue/CommandoDialogueChatBot"; -import { CustomCommandoCommand } from './CustomCommandoCommand'; +import { CustomCommandoCommand } from "./CustomCommandoCommand"; class Mod implements IPostDBLoadMod { - public postDBLoad(container: DependencyContainer): void { + public postDBLoad(container: DependencyContainer): void { // We register and re-resolve the dependency so the container takes care of filling in the command dependencies container.register("CustomCommandoCommand", CustomCommandoCommand); container.resolve("CommandoDialogueChatBot").registerCommandoCommand(container.resolve("CustomCommandoCommand")); - } + } } export const mod = new Mod(); diff --git a/TypeScript/22CustomAkiCommand/src/CustomAkiCommand.ts b/TypeScript/22CustomAkiCommand/src/CustomAkiCommand.ts index 9da52f2..7b2fff1 100644 --- a/TypeScript/22CustomAkiCommand/src/CustomAkiCommand.ts +++ b/TypeScript/22CustomAkiCommand/src/CustomAkiCommand.ts @@ -1,20 +1,20 @@ +import { inject, injectable } from "tsyringe"; + import { ISptCommand } from "@spt-aki/helpers/Dialogue/Commando/SptCommands/ISptCommand"; import { ItemHelper } from "@spt-aki/helpers/ItemHelper"; import { MailSendService } from "@spt-aki/services/MailSendService"; import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest"; import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile"; -import { inject, injectable } from "tsyringe"; // \/ dont forger this annotation here! @injectable() export class CustomAkiCommand implements ISptCommand { - public constructor( + constructor( @inject("ItemHelper") protected itemHelper: ItemHelper, @inject("MailSendService") protected mailSendService: MailSendService, ) - { - } + {} public getCommand(): string { @@ -23,7 +23,7 @@ export class CustomAkiCommand implements ISptCommand public getCommandHelp(): string { - return "Usage: spt getName tplId" + return "Usage: spt getName tplId"; } public performAction(commandHandler: IUserDialogInfo, sessionId: string, request: ISendMessageRequest): string diff --git a/TypeScript/22CustomAkiCommand/src/mod.ts b/TypeScript/22CustomAkiCommand/src/mod.ts index 3fe2462..fa4c351 100644 --- a/TypeScript/22CustomAkiCommand/src/mod.ts +++ b/TypeScript/22CustomAkiCommand/src/mod.ts @@ -1,16 +1,15 @@ -import { DependencyContainer } from 'tsyringe'; +import { DependencyContainer } from "tsyringe"; import { IPostDBLoadMod } from "@spt-aki/models/external/IPostDBLoadMod"; import { SptCommandoCommands } from "@spt-aki/helpers/Dialogue/Commando/SptCommandoCommands"; -import { CustomAkiCommand } from './CustomAkiCommand'; +import { CustomAkiCommand } from "./CustomAkiCommand"; class Mod implements IPostDBLoadMod { - public postDBLoad(container: DependencyContainer): void { + public postDBLoad(container: DependencyContainer): void { // We register and re-resolve the dependency so the container takes care of filling in the command dependencies container.register("CustomAkiCommand", CustomAkiCommand); - container.resolve("SptCommandoCommands").registerSptCommandoCommand(container.resolve("CustomAkiCommand")) - } - + container.resolve("SptCommandoCommands").registerSptCommandoCommand(container.resolve("CustomAkiCommand")); + } } export const mod = new Mod(); diff --git a/TypeScript/23CustomAbstractChatBot/src/AnotherCoolCommand.ts b/TypeScript/23CustomAbstractChatBot/src/AnotherCoolCommand.ts index 05a5bfa..b598ea7 100644 --- a/TypeScript/23CustomAbstractChatBot/src/AnotherCoolCommand.ts +++ b/TypeScript/23CustomAbstractChatBot/src/AnotherCoolCommand.ts @@ -1,15 +1,16 @@ +import { inject, injectable } from "tsyringe"; + import { IChatCommand } from "@spt-aki/helpers/Dialogue/Commando/IChatCommand"; import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest"; import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile"; import { MailSendService } from "@spt-aki/services/MailSendService"; -import { inject, injectable } from "tsyringe"; // \/ dont forger this annotation here! @injectable() export class AnotherCoolCommand implements IChatCommand { constructor( - @inject("MailSendService") protected mailSendService: MailSendService + @inject("MailSendService") protected mailSendService: MailSendService, ) {} @@ -25,7 +26,7 @@ export class AnotherCoolCommand implements IChatCommand return "Usage: anotherExample test"; } } - + public getCommands(): Set { return new Set(["test"]); @@ -39,5 +40,4 @@ export class AnotherCoolCommand implements IChatCommand return request.dialogId; } } - } diff --git a/TypeScript/23CustomAbstractChatBot/src/CustomSimpleChatBot.ts b/TypeScript/23CustomAbstractChatBot/src/CustomSimpleChatBot.ts index 57ee067..d8fe7aa 100644 --- a/TypeScript/23CustomAbstractChatBot/src/CustomSimpleChatBot.ts +++ b/TypeScript/23CustomAbstractChatBot/src/CustomSimpleChatBot.ts @@ -1,16 +1,17 @@ +import { inject, injectAll, injectable } from "tsyringe"; + import { AbstractDialogueChatBot } from "@spt-aki/helpers/Dialogue/AbstractDialogueChatBot"; import { IChatCommand } from "@spt-aki/helpers/Dialogue/Commando/IChatCommand"; import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile"; import { MemberCategory } from "@spt-aki/models/enums/MemberCategory"; import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { MailSendService } from "@spt-aki/services/MailSendService"; -import { inject, injectAll, injectable } from "tsyringe"; // \/ dont forger this annotation here! @injectable() export class CustomSimpleChatBot extends AbstractDialogueChatBot { - public constructor( + constructor( @inject("WinstonLogger") logger: ILogger, @inject("MailSendService") mailSendService: MailSendService, // Remember to replace MyCommand for something unique to your mod! @@ -19,7 +20,7 @@ export class CustomSimpleChatBot extends AbstractDialogueChatBot @injectAll("MyCommand") chatCommands: IChatCommand[], ) { - super(logger, mailSendService, chatCommands) + super(logger, mailSendService, chatCommands); } public getChatBot(): IUserDialogInfo @@ -37,7 +38,6 @@ export class CustomSimpleChatBot extends AbstractDialogueChatBot protected getUnrecognizedCommandMessage(): string { - return "No clue what you are talking about bud!" + return "No clue what you are talking about bud!"; } - } diff --git a/TypeScript/23CustomAbstractChatBot/src/MyCoolCommand.ts b/TypeScript/23CustomAbstractChatBot/src/MyCoolCommand.ts index 17143bd..49696e2 100644 --- a/TypeScript/23CustomAbstractChatBot/src/MyCoolCommand.ts +++ b/TypeScript/23CustomAbstractChatBot/src/MyCoolCommand.ts @@ -1,15 +1,16 @@ +import { inject, injectable } from "tsyringe"; + import { IChatCommand } from "@spt-aki/helpers/Dialogue/Commando/IChatCommand"; import { ISendMessageRequest } from "@spt-aki/models/eft/dialog/ISendMessageRequest"; import { IUserDialogInfo } from "@spt-aki/models/eft/profile/IAkiProfile"; import { MailSendService } from "@spt-aki/services/MailSendService"; -import { inject, injectable } from "tsyringe"; // \/ dont forger this annotation here! @injectable() export class MyCoolCommand implements IChatCommand { constructor( - @inject("MailSendService") protected mailSendService: MailSendService + @inject("MailSendService") protected mailSendService: MailSendService, ) {} @@ -39,5 +40,4 @@ export class MyCoolCommand implements IChatCommand return request.dialogId; } } - } diff --git a/TypeScript/23CustomAbstractChatBot/src/mod.ts b/TypeScript/23CustomAbstractChatBot/src/mod.ts index 585a1eb..cea8a8c 100644 --- a/TypeScript/23CustomAbstractChatBot/src/mod.ts +++ b/TypeScript/23CustomAbstractChatBot/src/mod.ts @@ -1,13 +1,13 @@ -import { DependencyContainer } from 'tsyringe'; +import { DependencyContainer } from "tsyringe"; import { IPostDBLoadMod } from "@spt-aki/models/external/IPostDBLoadMod"; import { DialogueController } from "@spt-aki/controllers/DialogueController"; -import { CustomSimpleChatBot } from './CustomSimpleChatBot'; -import { MyCoolCommand } from './MyCoolCommand'; -import { AnotherCoolCommand } from './AnotherCoolCommand'; +import { CustomSimpleChatBot } from "./CustomSimpleChatBot"; +import { MyCoolCommand } from "./MyCoolCommand"; +import { AnotherCoolCommand } from "./AnotherCoolCommand"; class Mod implements IPostDBLoadMod { - public postDBLoad(container: DependencyContainer): void { + public postDBLoad(container: DependencyContainer): void { // We register our commands so they get resolved by our chat bot: container.register("MyCoolCommand", MyCoolCommand); container.register("AnotherCoolCommand", AnotherCoolCommand); @@ -18,7 +18,7 @@ class Mod implements IPostDBLoadMod { // We register and re-resolve the dependency so the container takes care of filling in the command dependencies container.register("CustomSimpleChatBot", CustomSimpleChatBot); container.resolve("DialogueController").registerChatBot(container.resolve("CustomSimpleChatBot")); - } + } } export const mod = new Mod(); diff --git a/TypeScript/24WebSocket/src/CustomAkiWebSocketMessageHandler.ts b/TypeScript/24WebSocket/src/CustomAkiWebSocketMessageHandler.ts index 834ae0f..a817a10 100644 --- a/TypeScript/24WebSocket/src/CustomAkiWebSocketMessageHandler.ts +++ b/TypeScript/24WebSocket/src/CustomAkiWebSocketMessageHandler.ts @@ -1,17 +1,20 @@ import { inject, injectable } from "tsyringe"; -import { IAkiWebSocketMessageHandler } from "@spt-aki/servers/ws/message/IAkiWebSocketMessageHandler"; import { WebSocket, RawData } from "ws"; + +import { IAkiWebSocketMessageHandler } from "@spt-aki/servers/ws/message/IAkiWebSocketMessageHandler"; import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; // \/ dont forger this annotation here! @injectable() export class CustomAkiWebSocketMessageHandler implements IAkiWebSocketMessageHandler { - constructor(@inject("WinstonLogger") protected logger: ILogger) + constructor( + @inject("WinstonLogger") protected logger: ILogger, + ) {} - + public onAkiMessage(sessionID: string, client: WebSocket, message: RawData): void { - this.logger.info(`Custom AKI WebSocket Message handler received a message for ${sessionID}: ${message.toString()}`) + this.logger.info(`Custom AKI WebSocket Message handler received a message for ${sessionID}: ${message.toString()}`); } } diff --git a/TypeScript/24WebSocket/src/CustomWebSocketConnectionHandler.ts b/TypeScript/24WebSocket/src/CustomWebSocketConnectionHandler.ts index 6fd899b..9dd0ec8 100644 --- a/TypeScript/24WebSocket/src/CustomWebSocketConnectionHandler.ts +++ b/TypeScript/24WebSocket/src/CustomWebSocketConnectionHandler.ts @@ -1,16 +1,18 @@ +import { IncomingMessage } from "node:http"; +import { inject, injectable } from "tsyringe"; +import { WebSocket } from "ws"; + import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { IWebSocketConnectionHandler } from "@spt-aki/servers/ws/IWebSocketConnectionHandler"; -import { IncomingMessage } from "http"; -import { inject, injectable } from "tsyringe"; -import { WebSocket, RawData } from "ws"; // \/ dont forger this annotation here! @injectable() export class CustomWebSocketConnectionHandler implements IWebSocketConnectionHandler { - constructor(@inject("WinstonLogger") protected logger: ILogger) - { - } + constructor( + @inject("WinstonLogger") protected logger: ILogger, + ) + {} public getSocketId(): string { @@ -25,11 +27,11 @@ export class CustomWebSocketConnectionHandler implements IWebSocketConnectionHan public onConnection(ws: WebSocket, req: IncomingMessage): void { this.logger.info("Custom web socket is now connected!"); - ws.on("message", (msg) => + ws.on("message", (msg) => { if (msg.toString() === "toodaloo") { - ws.send("toodaloo back!") + ws.send("toodaloo back!"); } }); } diff --git a/TypeScript/24WebSocket/src/mod.ts b/TypeScript/24WebSocket/src/mod.ts index 3a34cf1..e1f9e1b 100644 --- a/TypeScript/24WebSocket/src/mod.ts +++ b/TypeScript/24WebSocket/src/mod.ts @@ -1,11 +1,10 @@ -import { DependencyContainer } from 'tsyringe'; +import { DependencyContainer } from "tsyringe"; import { IPreAkiLoadMod } from "@spt-aki/models/external/IPreAkiLoadMod"; -import { CustomWebSocketConnectionHandler } from './CustomWebSocketConnectionHandler'; -import { IWebSocketConnectionHandler } from '@spt-aki/servers/ws/IWebSocketConnectionHandler'; -import { CustomAkiWebSocketMessageHandler } from './CustomAkiWebSocketMessageHandler'; -import { IAkiWebSocketMessageHandler } from '@spt-aki/servers/ws/message/IAkiWebSocketMessageHandler'; - +import { CustomWebSocketConnectionHandler } from "./CustomWebSocketConnectionHandler"; +import { IWebSocketConnectionHandler } from "@spt-aki/servers/ws/IWebSocketConnectionHandler"; +import { CustomAkiWebSocketMessageHandler } from "./CustomAkiWebSocketMessageHandler"; +import { IAkiWebSocketMessageHandler } from "@spt-aki/servers/ws/message/IAkiWebSocketMessageHandler"; class Mod implements IPreAkiLoadMod { public preAkiLoad(container: DependencyContainer): void { diff --git a/TypeScript/2EditDatabase/src/mod.ts b/TypeScript/2EditDatabase/src/mod.ts index d891b06..651c628 100644 --- a/TypeScript/2EditDatabase/src/mod.ts +++ b/TypeScript/2EditDatabase/src/mod.ts @@ -8,11 +8,10 @@ import { BaseClasses } from "@spt-aki/models/enums/BaseClasses"; class Mod implements IPostDBLoadMod { - public postDBLoad(container: DependencyContainer): void + public postDBLoad(container: DependencyContainer): void { // get database from server const databaseServer = container.resolve("DatabaseServer"); - // Get all the in-memory json found in /assets/database const tables: IDatabaseTables = databaseServer.getTables(); @@ -62,4 +61,4 @@ class Mod implements IPostDBLoadMod } } -module.exports = { mod: new Mod() } +export const mod = new Mod(); diff --git a/TypeScript/3GetSptConfigFile/src/mod.ts b/TypeScript/3GetSptConfigFile/src/mod.ts index b3398ff..a4b444b 100644 --- a/TypeScript/3GetSptConfigFile/src/mod.ts +++ b/TypeScript/3GetSptConfigFile/src/mod.ts @@ -1,6 +1,6 @@ import { DependencyContainer } from "tsyringe"; -import { IPostAkiLoadMod } from "@spt-aki/models/external/IPostAkiLoadMod"; +import { IPostAkiLoadMod } from "@spt-aki/models/external/IPostAkiLoadMod"; import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { ConfigServer } from "@spt-aki/servers/ConfigServer"; import { ConfigTypes } from "@spt-aki/models/enums/ConfigTypes"; @@ -9,7 +9,7 @@ import { ILocationConfig } from "@spt-aki/models/spt/config/ILocationConfig"; class Mod implements IPostAkiLoadMod { public postAkiLoad(container: DependencyContainer): void - { + { // get logger const logger = container.resolve("WinstonLogger"); @@ -21,13 +21,13 @@ class Mod implements IPostAkiLoadMod const locationConfig: ILocationConfig = configServer.getConfig(ConfigTypes.LOCATION); // Log the original customs loose loot multipler - logger.info(`Here is the original customs map loose loot multipler: ${locationConfig.looseLootMultiplier.bigmap}`) + logger.info(`Here is the original customs map loose loot multipler: ${locationConfig.looseLootMultiplier.bigmap}`); // Adjust the multipler (customs is called bigmap in bsg land) locationConfig.looseLootMultiplier.bigmap = 10; // Log the new multipler - logger.info(`Here is the altered customs map loose loot multipler: ${locationConfig.looseLootMultiplier.bigmap}`) + logger.info(`Here is the altered customs map loose loot multipler: ${locationConfig.looseLootMultiplier.bigmap}`); } } diff --git a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/config/config.json5 b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/config/config.json5 index a839081..a0e8b7b 100644 --- a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/config/config.json5 +++ b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/config/config.json5 @@ -1,3 +1,3 @@ { - "myProperty": "i love json5" + myProperty: "i love json5" } diff --git a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/config/config.jsonc b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/config/config.jsonc index 08a4812..83bbd56 100644 --- a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/config/config.jsonc +++ b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/config/config.jsonc @@ -1,3 +1,3 @@ { - "myProperty": "i love jsonc" + "myProperty": "i love jsonc" } diff --git a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/src/mod.ts b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/src/mod.ts index 5394348..1439e17 100644 --- a/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/src/mod.ts +++ b/TypeScript/4.1UseACustomJson5OrJsonCConfigFile/src/mod.ts @@ -1,3 +1,4 @@ +import path from "node:path"; import { DependencyContainer } from "tsyringe"; import { IPostAkiLoadMod } from "@spt-aki/models/external/IPostAkiLoadMod"; @@ -7,10 +8,8 @@ import { VFS } from "@spt-aki/utils/VFS"; import JSON5 from "json5"; import { jsonc } from "jsonc"; -import path from "path"; - class Mod implements IPostAkiLoadMod -{ +{ public postAkiLoad(container: DependencyContainer): void { // get logger const logger = container.resolve("WinstonLogger"); diff --git a/TypeScript/4UseACustomConfigFile/config/config.json b/TypeScript/4UseACustomConfigFile/config/config.json index 14b4552..8333f59 100644 --- a/TypeScript/4UseACustomConfigFile/config/config.json +++ b/TypeScript/4UseACustomConfigFile/config/config.json @@ -1,3 +1,3 @@ { - "myProperty": "wow" + "myProperty": "wow" } diff --git a/TypeScript/4UseACustomConfigFile/src/mod.ts b/TypeScript/4UseACustomConfigFile/src/mod.ts index afc8db5..c33274e 100644 --- a/TypeScript/4UseACustomConfigFile/src/mod.ts +++ b/TypeScript/4UseACustomConfigFile/src/mod.ts @@ -6,7 +6,7 @@ import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; class Mod implements IPostAkiLoadMod { private modConfig = require("../config/config.json"); - + public postAkiLoad(container: DependencyContainer): void { // get logger const logger = container.resolve("WinstonLogger"); diff --git a/TypeScript/5ReplaceMethod/src/mod.ts b/TypeScript/5ReplaceMethod/src/mod.ts index cfc0d8f..e10244f 100644 --- a/TypeScript/5ReplaceMethod/src/mod.ts +++ b/TypeScript/5ReplaceMethod/src/mod.ts @@ -1,4 +1,5 @@ import { DependencyContainer } from "tsyringe"; + import { IPreAkiLoadMod } from "@spt-aki/models/external/IPreAkiLoadMod"; import { LauncherController } from "@spt-aki/controllers/LauncherController"; import { DatabaseServer } from "@spt-aki/servers/DatabaseServer"; @@ -12,20 +13,20 @@ class Mod implements IPreAkiLoadMod // ALWAYS use the container to resolve dependencies // ****** ALWAYS ******* private static container: DependencyContainer; - + // Perform these actions before server fully loads - public preAkiLoad(container: DependencyContainer): void + public preAkiLoad(container: DependencyContainer): void { // We will save a reference to the dependency container to resolve dependencies // that we may need down the line Mod.container = container; - // Wait until LauncherController gets resolved by the server and run code afterwards to replace + // Wait until LauncherController gets resolved by the server and run code afterwards to replace // the login() function with the one below called 'replacementFunction() - container.afterResolution("LauncherController", (_t, result: LauncherController) => + container.afterResolution("LauncherController", (_t, result: LauncherController) => { // We want to replace the original method logic with something different - result.login = (info: ILoginRequestData) => + result.login = (info: ILoginRequestData) => { return this.replacementFunction(info); } @@ -55,7 +56,7 @@ class Mod implements IPreAkiLoadMod // We resolve 2 more dependencies: The logger and the DatabaseServer const logger = Mod.container.resolve("WinstonLogger"); const dbServer = Mod.container.resolve("DatabaseServer"); - + // As an example Im counting the amount of loaded items on the DB const loadedItems = Object.entries(dbServer.getTables().templates.items).length; // Lets do a few informational messages diff --git a/TypeScript/6ReferenceAnotherClass/src/mod.ts b/TypeScript/6ReferenceAnotherClass/src/mod.ts index f65efc6..035fcc8 100644 --- a/TypeScript/6ReferenceAnotherClass/src/mod.ts +++ b/TypeScript/6ReferenceAnotherClass/src/mod.ts @@ -6,8 +6,8 @@ import { MoreCode } from "./MoreCode"; class Mod implements IPostAkiLoadMod { - public postAkiLoad(container: DependencyContainer): void - { + public postAkiLoad(container: DependencyContainer): void + { // get logger const logger = container.resolve("WinstonLogger"); diff --git a/TypeScript/7OnLoadHook/src/mod.ts b/TypeScript/7OnLoadHook/src/mod.ts index a4b55ec..e8fd335 100644 --- a/TypeScript/7OnLoadHook/src/mod.ts +++ b/TypeScript/7OnLoadHook/src/mod.ts @@ -1,24 +1,25 @@ import { DependencyContainer } from "tsyringe"; -import { IPreAkiLoadMod } from "@spt-aki/models/external/IPreAkiLoadMod" -import { ILogger } from "@spt-aki/models/spt/utils/ILogger" -import { OnLoadModService } from "@spt-aki/services/mod/onLoad/OnLoadModService" + +import { IPreAkiLoadMod } from "@spt-aki/models/external/IPreAkiLoadMod"; +import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; +import { OnLoadModService } from "@spt-aki/services/mod/onLoad/OnLoadModService"; class Mod implements IPreAkiLoadMod { - public preAkiLoad(container: DependencyContainer): void + public preAkiLoad(container: DependencyContainer): void { const logger = container.resolve("WinstonLogger"); const onLoadModService = container.resolve("OnLoadModService"); onLoadModService.registerOnLoad( "MyCustomMod", // route key - () => this.customFunctionThatRunsOnLoad(logger), + () => this.customFunctionThatRunsOnLoad(logger), () => "custom-mod" // new route name - ) + ); } public customFunctionThatRunsOnLoad(logger: ILogger): void { - logger.info("MyCustomMod custom function is loading right now") + logger.info("MyCustomMod custom function is loading right now"); } } diff --git a/TypeScript/8OnUpdateHook/src/mod.ts b/TypeScript/8OnUpdateHook/src/mod.ts index 6463c21..9f9f11b 100644 --- a/TypeScript/8OnUpdateHook/src/mod.ts +++ b/TypeScript/8OnUpdateHook/src/mod.ts @@ -1,7 +1,8 @@ import { DependencyContainer } from "tsyringe"; -import { IPreAkiLoadMod } from "@spt-aki/models/external/IPreAkiLoadMod" -import { ILogger } from "@spt-aki/models/spt/utils/ILogger" -import { OnUpdateModService } from "@spt-aki/services/mod/onUpdate/OnUpdateModService" + +import { IPreAkiLoadMod } from "@spt-aki/models/external/IPreAkiLoadMod"; +import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; +import { OnUpdateModService } from "@spt-aki/services/mod/onUpdate/OnUpdateModService"; class Mod implements IPreAkiLoadMod { @@ -10,17 +11,17 @@ class Mod implements IPreAkiLoadMod const onUpdateModService = container.resolve("OnUpdateModService"); onUpdateModService.registerOnUpdate( - "MyCustomOnUpdateMod", - (timeSinceLastRun: number) => this.customFunctionThatRunsOnLoad(timeSinceLastRun, logger), + "MyCustomOnUpdateMod", + (timeSinceLastRun: number) => this.customFunctionThatRunsOnLoad(timeSinceLastRun, logger), () => "custom-onupdate-mod" // new route name - ) + ); } public customFunctionThatRunsOnLoad(timeSinceLastRun: number, logger: ILogger): boolean { if (timeSinceLastRun > 30) { - logger.info("MyCustomMod onupdate custom function is called right now") + logger.info("MyCustomMod onupdate custom function is called right now"); return true; // we did something } diff --git a/TypeScript/9RouterHooks/src/mod.ts b/TypeScript/9RouterHooks/src/mod.ts index c1c6db3..36ccde9 100644 --- a/TypeScript/9RouterHooks/src/mod.ts +++ b/TypeScript/9RouterHooks/src/mod.ts @@ -1,4 +1,5 @@ import { DependencyContainer } from "tsyringe"; + import type { IPreAkiLoadMod } from "@spt-aki/models/external/IPreAkiLoadMod"; import type { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import type {DynamicRouterModService} from "@spt-aki/services/mod/dynamicRouter/DynamicRouterModService"; @@ -10,16 +11,16 @@ class Mod implements IPreAkiLoadMod const logger = container.resolve("WinstonLogger"); const dynamicRouterModService = container.resolve("DynamicRouterModService"); const staticRouterModService = container.resolve("StaticRouterModService"); - + // Hook up a new dynamic route dynamicRouterModService.registerDynamicRouter( "MyDynamicModRouter", [ { url: "/my-dynamic-mod/", - action: (url, info, sessionId, output) => + action: (url, info, sessionId, output) => { - logger.info("Custom dynamic route hit") + logger.info("Custom dynamic route hit"); return JSON.stringify({response: "OK"}); } } @@ -33,9 +34,9 @@ class Mod implements IPreAkiLoadMod [ { url: "/my-static-route-mod/", - action: (url, info, sessionId, output) => + action: (url, info, sessionId, output) => { - logger.info("Custom static route hit") + logger.info("Custom static route hit"); return JSON.stringify({response: "OK"}); } } @@ -49,32 +50,31 @@ class Mod implements IPreAkiLoadMod [ { url: "/client/menu/locale/", - action: (url, info, sessionId, output) => + action: (url, info, sessionId, output) => { - logger.info("/client/menu/locale/ data was: " + JSON.stringify(output)) + logger.info("/client/menu/locale/ data was: " + JSON.stringify(output)); return output; } } ], "aki" ); - + // Hook up to existing AKI static route staticRouterModService.registerStaticRouter( "StaticRoutePeekingAki", [ { url: "/launcher/ping", - action: (url, info, sessionId, output) => + action: (url, info, sessionId, output) => { - logger.info("/launcher/ping data was: " + JSON.stringify(output)) + logger.info("/launcher/ping data was: " + JSON.stringify(output)); return output; } } ], "aki" ); - } }