updated setFindInRaidStatusForItem() to be protected + added return type

Improve comments inside `InventoryHelper`
This commit is contained in:
Dev 2024-02-27 12:12:46 +00:00
parent 3bc9833e57
commit bf317b6c2f

View File

@ -21,6 +21,7 @@ import { IInventorySplitRequestData } from "@spt-aki/models/eft/inventory/IInven
import { IInventoryTransferRequestData } from "@spt-aki/models/eft/inventory/IInventoryTransferRequestData"; import { IInventoryTransferRequestData } from "@spt-aki/models/eft/inventory/IInventoryTransferRequestData";
import { IItemEventRouterResponse } from "@spt-aki/models/eft/itemEvent/IItemEventRouterResponse"; import { IItemEventRouterResponse } from "@spt-aki/models/eft/itemEvent/IItemEventRouterResponse";
import { BaseClasses } from "@spt-aki/models/enums/BaseClasses"; import { BaseClasses } from "@spt-aki/models/enums/BaseClasses";
import { BonusType } from "@spt-aki/models/enums/BonusType";
import { ConfigTypes } from "@spt-aki/models/enums/ConfigTypes"; import { ConfigTypes } from "@spt-aki/models/enums/ConfigTypes";
import { Traders } from "@spt-aki/models/enums/Traders"; import { Traders } from "@spt-aki/models/enums/Traders";
import { IInventoryConfig, RewardDetails } from "@spt-aki/models/spt/config/IInventoryConfig"; import { IInventoryConfig, RewardDetails } from "@spt-aki/models/spt/config/IInventoryConfig";
@ -187,7 +188,7 @@ export class InventoryHelper
* @param itemWithChildren An item * @param itemWithChildren An item
* @param foundInRaid Item was found in raid * @param foundInRaid Item was found in raid
*/ */
private setFindInRaidStatusForItem(itemWithChildren: Item[], foundInRaid: boolean) protected setFindInRaidStatusForItem(itemWithChildren: Item[], foundInRaid: boolean): void
{ {
for (const item of itemWithChildren) for (const item of itemWithChildren)
{ {
@ -212,7 +213,7 @@ export class InventoryHelper
} }
/** /**
* Remove properties from a Upd object used by a trader/ragfair * Remove properties from a Upd object used by a trader/ragfair that are unnecessary to a player
* @param upd Object to update * @param upd Object to update
*/ */
protected removeTraderRagfairRelatedUpdProperties(upd: Upd): void protected removeTraderRagfairRelatedUpdProperties(upd: Upd): void
@ -479,9 +480,10 @@ export class InventoryHelper
} }
/** /**
* Split an items stack size based on its StackMaxSize value
* @param assortItems Items to add to inventory * @param assortItems Items to add to inventory
* @param requestItem Details of purchased item to add to inventory * @param requestItem Details of purchased item to add to inventory
* @param result Array split stacks are added to * @param result Array split stacks are appended to
*/ */
protected splitStackIntoSmallerChildStacks( protected splitStackIntoSmallerChildStacks(
assortItems: Item[], assortItems: Item[],
@ -605,10 +607,16 @@ export class InventoryHelper
} }
} }
/**
* Delete desired item from a player profiles mail
* @param sessionId Session id
* @param removeRequest Remove request
* @param output OPTIONAL - IItemEventRouterResponse
*/
public removeItemAndChildrenFromMailRewards( public removeItemAndChildrenFromMailRewards(
sessionId: string, sessionId: string,
removeRequest: IInventoryRemoveRequestData, removeRequest: IInventoryRemoveRequestData,
output: IItemEventRouterResponse, output: IItemEventRouterResponse = undefined,
): void ): void
{ {
const fullProfile = this.profileHelper.getFullProfile(sessionId); const fullProfile = this.profileHelper.getFullProfile(sessionId);
@ -647,10 +655,19 @@ export class InventoryHelper
} }
} }
/**
* Find item by id in player inventory and remove x of its count
* @param pmcData player profile
* @param itemId Item id to decrement StackObjectsCount of
* @param countToRemove Number of item to remove
* @param sessionID Session id
* @param output IItemEventRouterResponse
* @returns IItemEventRouterResponse
*/
public removeItemByCount( public removeItemByCount(
pmcData: IPmcData, pmcData: IPmcData,
itemId: string, itemId: string,
count: number, countToRemove: number,
sessionID: string, sessionID: string,
output: IItemEventRouterResponse = undefined, output: IItemEventRouterResponse = undefined,
): IItemEventRouterResponse ): IItemEventRouterResponse
@ -660,16 +677,17 @@ export class InventoryHelper
return output; return output;
} }
// Goal is to keep removing items until we can remove part of an items stack
const itemsToReduce = this.itemHelper.findAndReturnChildrenAsItems(pmcData.Inventory.items, itemId); const itemsToReduce = this.itemHelper.findAndReturnChildrenAsItems(pmcData.Inventory.items, itemId);
let remainingCount = count; let remainingCount = countToRemove;
for (const itemToReduce of itemsToReduce) for (const itemToReduce of itemsToReduce)
{ {
const itemCount = this.itemHelper.getItemStackSize(itemToReduce); const itemStackSize = this.itemHelper.getItemStackSize(itemToReduce);
// remove whole stack // Remove whole stack
if (remainingCount >= itemCount) if (remainingCount >= itemStackSize)
{ {
remainingCount -= itemCount; remainingCount -= itemStackSize;
this.removeItem(pmcData, itemToReduce._id, sessionID, output); this.removeItem(pmcData, itemToReduce._id, sessionID, output);
} }
else else
@ -684,6 +702,7 @@ export class InventoryHelper
if (remainingCount === 0) if (remainingCount === 0)
{ {
// Desired count of item has been removed / we ran out of items to remove
break; break;
} }
} }
@ -691,9 +710,12 @@ export class InventoryHelper
return output; return output;
} }
/* Calculate Size of item input /**
* inputs Item template ID, Item Id, InventoryItem (item from inventory having _id and _tpl) * Get the height and width of an item - can have children that alter size
* outputs [width, height] * @param itemTpl Item to get size of
* @param itemID Items id to get size of
* @param inventoryItems
* @returns [width, height]
*/ */
public getItemSize(itemTpl: string, itemID: string, inventoryItems: Item[]): number[] public getItemSize(itemTpl: string, itemID: string, inventoryItems: Item[]): number[]
{ {
@ -835,33 +857,24 @@ export class InventoryHelper
]; ];
} }
protected getInventoryItemHash(inventoryItem: Item[]): InventoryHelper.InventoryItemHash /**
{ * Get a blank two-dimentional representation of a container
const inventoryItemHash: InventoryHelper.InventoryItemHash = { byItemId: {}, byParentId: {} }; * @param containerH Horizontal size of container
* @param containerY Vertical size of container
for (const item of inventoryItem) * @returns Two-dimensional representation of container
{ */
inventoryItemHash.byItemId[item._id] = item;
if (!("parentId" in item))
{
continue;
}
if (!(item.parentId in inventoryItemHash.byParentId))
{
inventoryItemHash.byParentId[item.parentId] = [];
}
inventoryItemHash.byParentId[item.parentId].push(item);
}
return inventoryItemHash;
}
protected getBlankContainerMap(containerH: number, containerY: number): number[][] protected getBlankContainerMap(containerH: number, containerY: number): number[][]
{ {
return Array(containerY).fill(0).map(() => Array(containerH).fill(0)); return Array(containerY).fill(0).map(() => Array(containerH).fill(0));
} }
/**
* @param containerH Horizontal size of container
* @param containerV Vertical size of container
* @param itemList
* @param containerId Id of the container
* @returns Two-dimensional representation of container
*/
public getContainerMap(containerH: number, containerV: number, itemList: Item[], containerId: string): number[][] public getContainerMap(containerH: number, containerV: number, itemList: Item[], containerId: string): number[][]
{ {
const container2D: number[][] = this.getBlankContainerMap(containerH, containerV); const container2D: number[][] = this.getBlankContainerMap(containerH, containerV);
@ -917,6 +930,27 @@ export class InventoryHelper
return container2D; return container2D;
} }
protected getInventoryItemHash(inventoryItem: Item[]): InventoryHelper.InventoryItemHash
{
const inventoryItemHash: InventoryHelper.InventoryItemHash = { byItemId: {}, byParentId: {} };
for (const item of inventoryItem)
{
inventoryItemHash.byItemId[item._id] = item;
if (!("parentId" in item))
{
continue;
}
if (!(item.parentId in inventoryItemHash.byParentId))
{
inventoryItemHash.byParentId[item.parentId] = [];
}
inventoryItemHash.byParentId[item.parentId].push(item);
}
return inventoryItemHash;
}
/** /**
* Return the inventory that needs to be modified (scav/pmc etc) * Return the inventory that needs to be modified (scav/pmc etc)
* Changes made to result apply to character inventory * Changes made to result apply to character inventory
@ -983,10 +1017,11 @@ export class InventoryHelper
} }
/** /**
* Made a 2d array table with 0 - free slot and 1 - used slot * Get a two dimensional array to represent stash slots
* @param {Object} pmcData * 0 value = free, 1 = taken
* @param {string} sessionID * @param pmcData Player profile
* @returns Array * @param sessionID session id
* @returns 2-dimensional array
*/ */
protected getStashSlotMap(pmcData: IPmcData, sessionID: string): number[][] protected getStashSlotMap(pmcData: IPmcData, sessionID: string): number[][]
{ {
@ -999,6 +1034,11 @@ export class InventoryHelper
); );
} }
/**
* Get a blank two-dimensional array representation of a container
* @param containerTpl Container to get data for
* @returns blank two-dimensional array
*/
public getContainerSlotMap(containerTpl: string): number[][] public getContainerSlotMap(containerTpl: string): number[][]
{ {
const containerTemplate = this.itemHelper.getItem(containerTpl)[1]; const containerTemplate = this.itemHelper.getItem(containerTpl)[1];
@ -1009,6 +1049,11 @@ export class InventoryHelper
return this.getBlankContainerMap(containerH, containerV); return this.getBlankContainerMap(containerH, containerV);
} }
/**
* Get a two-dimensional array representation of the players sorting table
* @param pmcData Player profile
* @returns two-dimensional array
*/
protected getSortingTableSlotMap(pmcData: IPmcData): number[][] protected getSortingTableSlotMap(pmcData: IPmcData): number[][]
{ {
return this.getContainerMap(10, 45, pmcData.Inventory.items, pmcData.Inventory.sortingTable); return this.getContainerMap(10, 45, pmcData.Inventory.items, pmcData.Inventory.sortingTable);