import { DependencyContainer, Lifecycle } from "tsyringe"; import type { StaticRouterModService } from "@spt-aki/services/mod/staticRouter/StaticRouterModService"; import type { IMod } from "@spt-aki/models/external/mod"; import type { ILogger } from "@spt-aki/models/spt/utils/ILogger"; import { Other } from "./other"; import { Items } from "./items"; import { Raids } from "./raids"; import { Traders } from "./traders"; import { Player } from "./player"; import { Notifications } from "./Notifications"; import { Fixes } from "./fixes"; import { AIOConfigHandler } from "./AIOConfigHandler"; class AIOMod implements IMod { private logger: ILogger; private pkg; public load(container: DependencyContainer): void { container.register("AIOConfigHandler", AIOConfigHandler, {lifecycle:Lifecycle.Singleton}); container.register("AIOOther", Other, {lifecycle:Lifecycle.Singleton}); container.register("AIOFixes", Fixes); container.register("AIORaids", Raids); container.register("AIOItems", Items); container.register("AIOTraders", Traders); container.register("AIOPlayer", Player); container.register("AIONotifications", Notifications); const staticRoute = container.resolve("StaticRouterModService"); this.logger = container.resolve("WinstonLogger"); if (container.resolve("AIOConfigHandler").getConfig().player.allSkillsMaster) { staticRoute.registerStaticRouter( "AIOModGameVersion", [ { url: "/client/game/version/validate", action: (url: string, info: any, sessionID: string, output: string): any => { this.logger.info(sessionID); return container.resolve("AIOPlayer").maxSkills(sessionID); } } ], "aki" ) } if (container.resolve("AIOConfigHandler").getConfig().other.preWipeEvents.raidersOnAllMaps) { staticRoute.registerStaticRouter( "AIOModBotGen", [ { url: "/client/game/bot/generate", action: (url: string, info: any, sessionID: string, output: string): any => { return container.resolve("AIOOther").spawnRaidersEverywhere(info); } } ], "aki" ) } this.pkg = require("../package.json"); this.logger.info(`Loading: ${this.pkg.name} ${this.pkg.version}`); } public delayedLoad(container: DependencyContainer): void { container.resolve("AIOOther").applyChanges(); container.resolve("AIOFixes").applyChanges(); container.resolve("AIORaids").applyChanges(); container.resolve("AIOItems").applyChanges(); container.resolve("AIOTraders").applyChanges(); container.resolve("AIOPlayer").applyChanges(); if (container.resolve("AIOConfigHandler").getConfig().other.showModLogs) { container.resolve("AIONotifications").sendNotifications() } } } module.exports = { mod: new AIOMod() };