Implemented pin/lock/free on inventory items

This commit is contained in:
Dev 2024-11-01 10:01:26 +00:00
parent 9dea4a86e9
commit 922adcfb5c
8 changed files with 51 additions and 31 deletions

View File

@ -18,7 +18,7 @@ import { IInventoryTagRequestData } from "@spt/models/eft/inventory/IInventoryTa
import { IInventoryToggleRequestData } from "@spt/models/eft/inventory/IInventoryToggleRequestData";
import { IInventoryTransferRequestData } from "@spt/models/eft/inventory/IInventoryTransferRequestData";
import { IOpenRandomLootContainerRequestData } from "@spt/models/eft/inventory/IOpenRandomLootContainerRequestData";
import { IPinItemRequest } from "@spt/models/eft/inventory/IPinItemRequest";
import { IPinOrLockItemRequest } from "@spt/models/eft/inventory/IPinOrLockItemRequest";
import { IRedeemProfileRequestData } from "@spt/models/eft/inventory/IRedeemProfileRequestData";
import { ISetFavoriteItems } from "@spt/models/eft/inventory/ISetFavoriteItems";
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
@ -238,12 +238,12 @@ export class InventoryCallbacks {
return this.questController.failQuest(pmcData, request, sessionID, output);
}
public pin(
public pinOrLock(
pmcData: IPmcData,
request: IPinItemRequest,
request: IPinOrLockItemRequest,
sessionID: string,
output: IItemEventRouterResponse,
): IItemEventRouterResponse {
return this.questController.pin(pmcData, request, sessionID, output);
return this.inventoryController.pinOrLock(pmcData, request, sessionID, output);
}
}

View File

@ -27,6 +27,7 @@ import { IInventoryTagRequestData } from "@spt/models/eft/inventory/IInventoryTa
import { IInventoryToggleRequestData } from "@spt/models/eft/inventory/IInventoryToggleRequestData";
import { IInventoryTransferRequestData } from "@spt/models/eft/inventory/IInventoryTransferRequestData";
import { IOpenRandomLootContainerRequestData } from "@spt/models/eft/inventory/IOpenRandomLootContainerRequestData";
import { IPinOrLockItemRequest } from "@spt/models/eft/inventory/IPinOrLockItemRequest";
import { IRedeemProfileRequestData } from "@spt/models/eft/inventory/IRedeemProfileRequestData";
import { ISetFavoriteItems } from "@spt/models/eft/inventory/ISetFavoriteItems";
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
@ -947,4 +948,30 @@ export class InventoryController {
}
}
}
/**
* Handle /client/game/profile/items/moving - PinLock
* Requires no response to client, only server change
* @param pmcData Players profile
* @param request Pin/Lock request data
* @param sessionID Session id
* @param output data to send back to client
*/
public pinOrLock(
pmcData: IPmcData,
request: IPinOrLockItemRequest,
sessionID: string,
output: IItemEventRouterResponse,
): IItemEventRouterResponse {
const itemToAdjust = pmcData.Inventory.items.find((item) => item._id === request.Item);
if (!itemToAdjust) {
this.logger.error(`Unable find item: ${request.Item} to: ${request.State} on player ${sessionID} to: `);
return output;
}
itemToAdjust.upd ||= {};
itemToAdjust.upd.PinLockState = request.State;
return output;
}
}

View File

@ -8,7 +8,6 @@ import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { IItem } from "@spt/models/eft/common/tables/IItem";
import { IQuest, IQuestCondition } from "@spt/models/eft/common/tables/IQuest";
import { IPmcDataRepeatableQuest, IRepeatableQuest } from "@spt/models/eft/common/tables/IRepeatableQuests";
import { IPinItemRequest } from "@spt/models/eft/inventory/IPinItemRequest";
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
import { IAcceptQuestRequestData } from "@spt/models/eft/quests/IAcceptQuestRequestData";
import { ICompleteQuestRequestData } from "@spt/models/eft/quests/ICompleteQuestRequestData";
@ -523,20 +522,4 @@ export class QuestController {
return output;
}
/**
* Handle /client/game/profile/items/moving - PinLock
* @param pmcData
* @param request
* @param sessionID
* @param output
*/
public pin(
pmcData: IPmcData,
request: IPinItemRequest,
sessionID: string,
output: IItemEventRouterResponse,
): IItemEventRouterResponse {
throw new Error("Method not implemented.");
}
}

View File

@ -44,6 +44,13 @@ export interface IUpd {
SideEffect?: IUpdSideEffect;
RepairKit?: IUpdRepairKit;
CultistAmulet?: IUpdCultistAmulet;
PinLockState?: PinLockState;
}
export enum PinLockState {
FREE = "Free",
LOCKED = "Locked",
PINNED = "Pinned",
}
export interface IUpdBuff {

View File

@ -1,7 +0,0 @@
export interface IPinItemRequest {
Action: "PinLock";
/** Id of item being pinned */
Item: string;
/** "Pinned"/"" */
State: string;
}

View File

@ -0,0 +1,9 @@
import { PinLockState } from "../common/tables/IItem";
export interface IPinOrLockItemRequest {
Action: "PinLock";
/** Id of item being pinned */
Item: string;
/** "Pinned"/"Locked"/"Free" */
State: PinLockState;
}

View File

@ -26,5 +26,5 @@ export enum ItemEventActions {
REDEEM_PROFILE_REWARD = "RedeemProfileReward",
SET_FAVORITE_ITEMS = "SetFavoriteItems",
QUEST_FAIL = "QuestFail",
PIN = "PinLock",
PIN_LOCK = "PinLock",
}

View File

@ -39,6 +39,7 @@ export class InventoryItemEventRouter extends ItemEventRouterDefinition {
new HandledRoute(ItemEventActions.REDEEM_PROFILE_REWARD, false),
new HandledRoute(ItemEventActions.SET_FAVORITE_ITEMS, false),
new HandledRoute(ItemEventActions.QUEST_FAIL, false),
new HandledRoute(ItemEventActions.PIN_LOCK, false),
];
}
@ -94,8 +95,8 @@ export class InventoryItemEventRouter extends ItemEventRouterDefinition {
return this.inventoryCallbacks.setFavoriteItem(pmcData, body, sessionID, output);
case ItemEventActions.QUEST_FAIL:
return this.inventoryCallbacks.failQuest(pmcData, body, sessionID, output);
case ItemEventActions.PIN:
return this.inventoryCallbacks.pin(pmcData, body, sessionID, output);
case ItemEventActions.PIN_LOCK:
return this.inventoryCallbacks.pinOrLock(pmcData, body, sessionID, output);
default:
throw new Error(`Unhandled event ${url} request: ${JSON.stringify(body)}`);
}