Adding Mods w/Symlink

This commit is contained in:
2025-01-02 20:23:50 -05:00
parent 88fc2c3c93
commit 404890ecbb
10218 changed files with 3191380 additions and 0 deletions
+28
View File
@@ -0,0 +1,28 @@
[General]
gameName=spt
modid=0
version=d2024.12.27.0
newestVersion=
category="2,"
nexusFileStatus=1
installationFile=MergeConsumables.zip
repository=Nexus
ignoredVersion=
comments=
notes=
nexusDescription=
url=
hasCustomURL=false
lastNexusQuery=
lastNexusUpdate=
nexusLastModified=2024-12-27T21:52:35Z
nexusCategory=0
converted=false
validated=false
color=@Variant(\0\0\0\x43\0\xff\xff\0\0\0\0\0\0\0\0)
tracked=0
[installedFiles]
1\modid=0
1\fileid=0
size=1
@@ -0,0 +1,31 @@
{
"name": "MergeConsumables",
"version": "1.2.0",
"sptVersion": "~3.10",
"loadBefore": [],
"loadAfter": [],
"incompatibilities": [],
"isBundleMod": false,
"main": "src/mod.js",
"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",
"tsyringe": "4.8.0",
"typescript": "5.4",
"winston": "3.12",
"@biomejs/biome": "^1.7.1"
},
"author": "Lacyway",
"contributors": [],
"license": "CC BY-NC-ND 4.0"
}
@@ -0,0 +1,81 @@
import { inject, injectable } from "tsyringe";
import { HandledRoute, ItemEventRouterDefinition } from "@spt/di/Router"
import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
import { EventOutputHolder } from "@spt/routers/EventOutputHolder";
import { InventoryHelper } from "@spt/helpers/InventoryHelper";
import { ILogger } from "@spt/models/spt/utils/ILogger";
@injectable()
export class CustomInventoryItemEventRouter extends ItemEventRouterDefinition {
constructor(
@inject("WinstonLogger") protected logger: ILogger,
@inject("EventOutputHolder") protected eventOutputHolder: EventOutputHolder,
@inject("InventoryHelper") protected inventoryHelper: InventoryHelper,
) {
super();
}
public override getHandledRoutes(): HandledRoute[] {
return [
new HandledRoute("Combine", false)
];
}
public override async handleItemEvent(
url: string,
pmcData: IPmcData,
body: any,
sessionID: string,
output: IItemEventRouterResponse,
): Promise<IItemEventRouterResponse> {
switch (url) {
case "Combine":
output = this.eventOutputHolder.getOutput(sessionID);
this.HandleCombine(pmcData, body.sourceItem, body.targetItem, body.sourceAmount, body.targetAmount, body.type, sessionID, output);
return output;
}
return output;
}
private HandleCombine(pmcData: IPmcData, sourceItem: string, targetItem: string, sourceAmount: number, targetAmount: number, type: string, sessionID: string, output: IItemEventRouterResponse) {
const sItem = pmcData.Inventory.items.find((item) => item._id === sourceItem);
const tItem = pmcData.Inventory.items.find((item) => item._id === targetItem);
if (!sItem || !tItem) {
this.logger.error(`Could not find source or target item! Source: ${sourceItem}, Target: ${targetItem}`);
return;
}
switch (type) {
case "medical":
if (sItem.upd?.MedKit && tItem.upd?.MedKit) {
sItem.upd.MedKit.HpResource = sourceAmount;
tItem.upd.MedKit.HpResource = targetAmount;
}
else {
this.logger.error("MedKit was missing on source or target item!");
return;
}
break;
case "food":
if (sItem.upd?.FoodDrink && tItem?.upd.FoodDrink) {
sItem.upd.FoodDrink.HpPercent = sourceAmount;
tItem.upd.FoodDrink.HpPercent = targetAmount;
}
else {
this.logger.error("FoodDrink was missing on source or target item!");
return;
}
break;
default:
this.logger.warning(`Unknown type: ${type}`);
break;
}
if (sourceAmount == 0) {
this.inventoryHelper.removeItem(pmcData, sourceItem, sessionID, output);
}
}
}
@@ -0,0 +1,17 @@
import { DependencyContainer } from "tsyringe";
import { CustomInventoryItemEventRouter } from "./CustomItemEventRouter";
import { IPreSptLoadMod } from "@spt/models/external/IPreSptLoadMod";
class Mod implements IPreSptLoadMod {
preSptLoad(container: DependencyContainer): void {
container.registerType("IERouters", "CustomInventoryItemEventRouter");
container.register<CustomInventoryItemEventRouter>("CustomInventoryItemEventRouter", {
useClass: CustomInventoryItemEventRouter
})
}
}
export const mod = new Mod();