Add function to allow addition of custom weapons to PMCs

This commit is contained in:
Dev 2023-12-24 16:06:18 +00:00
parent 66f04f194a
commit ea2257c2fb

View File

@ -1,5 +1,6 @@
import { inject, injectable } from "tsyringe";
import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
import { ITemplateItem, Props } from "@spt-aki/models/eft/common/tables/ITemplateItem";
import {
CreateItemResult,
@ -23,6 +24,7 @@ export class CustomItemService
@inject("HashUtil") protected hashUtil: HashUtil,
@inject("JsonUtil") protected jsonUtil: JsonUtil,
@inject("DatabaseServer") protected databaseServer: DatabaseServer,
@inject("ItemHelper") protected itemHelper: ItemHelper,
)
{
this.tables = this.databaseServer.getTables();
@ -197,4 +199,41 @@ export class CustomItemService
{
this.tables.templates.prices[newItemId] = fleaPriceRoubles;
}
/**
* Add a custom weapon to PMCs loadout
* @param weaponTpl Custom weapon tpl to add to PMCs
* @param weaponWeight The weighting for the weapon to be picked vs other weapons
* @param weaponSlot The slot the weapon should be added to (e.g. FirstPrimaryWeapon/SecondPrimaryWeapon/Holster)
*/
public addCustomWeaponToPMCs(weaponTpl: string, weaponWeight: number, weaponSlot: string): void
{
const weapon = this.itemHelper.getItem(weaponTpl);
if (!weapon[0])
{
this.logger.warning(`Unable to add custom weapon ${weaponTpl} to PMCs as it cannot be found in the Item db`);
return;
}
const baseWeaponModObject = {};
// Get all slots weapon has and create a dictionary of them with possible mods that slot into each
const weaponSltos = weapon[1]._props.Slots;
for (const slot of weaponSltos)
{
baseWeaponModObject[slot._name] = slot._props.filters[0].Filter;
}
// Get PMCs
const usec = this.databaseServer.getTables().bots.types.usec;
const bear = this.databaseServer.getTables().bots.types.bear;
// Add weapon base+mods into bear/usec data
usec.inventory.mods[weaponTpl] = baseWeaponModObject;
bear.inventory.mods[weaponTpl] = baseWeaponModObject;
// Add weapon to array of allowed weapons + weighting to be picked
usec.inventory.equipment[weaponSlot][weaponTpl] = weaponWeight;
bear.inventory.equipment[weaponSlot][weaponTpl] = weaponWeight;
}
}