Archived
Adding Mods w/Symlink
This commit is contained in:
Binary file not shown.
@@ -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"
|
||||
}
|
||||
+81
@@ -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();
|
||||
Reference in New Issue
Block a user