Add handling for quest failing while player is at menu

This commit is contained in:
Dev 2024-01-05 15:27:28 +00:00
parent b5951a147b
commit 3979e6ef61
6 changed files with 29 additions and 5 deletions

View File

@ -1,6 +1,7 @@
import { inject, injectable } from "tsyringe"; import { inject, injectable } from "tsyringe";
import { InventoryController } from "@spt-aki/controllers/InventoryController"; import { InventoryController } from "@spt-aki/controllers/InventoryController";
import { QuestController } from "@spt-aki/controllers/QuestController";
import { IPmcData } from "@spt-aki/models/eft/common/IPmcData"; import { IPmcData } from "@spt-aki/models/eft/common/IPmcData";
import { IInventoryBindRequestData } from "@spt-aki/models/eft/inventory/IInventoryBindRequestData"; import { IInventoryBindRequestData } from "@spt-aki/models/eft/inventory/IInventoryBindRequestData";
import { IInventoryCreateMarkerRequestData } from "@spt-aki/models/eft/inventory/IInventoryCreateMarkerRequestData"; import { IInventoryCreateMarkerRequestData } from "@spt-aki/models/eft/inventory/IInventoryCreateMarkerRequestData";
@ -22,11 +23,15 @@ import { IOpenRandomLootContainerRequestData } from "@spt-aki/models/eft/invento
import { IRedeemProfileRequestData } from "@spt-aki/models/eft/inventory/IRedeemProfileRequestData"; import { IRedeemProfileRequestData } from "@spt-aki/models/eft/inventory/IRedeemProfileRequestData";
import { ISetFavoriteItems } from "@spt-aki/models/eft/inventory/ISetFavoriteItems"; import { ISetFavoriteItems } from "@spt-aki/models/eft/inventory/ISetFavoriteItems";
import { IItemEventRouterResponse } from "@spt-aki/models/eft/itemEvent/IItemEventRouterResponse"; import { IItemEventRouterResponse } from "@spt-aki/models/eft/itemEvent/IItemEventRouterResponse";
import { IFailQuestRequestData } from "@spt-aki/models/eft/quests/IFailQuestRequestData";
@injectable() @injectable()
export class InventoryCallbacks export class InventoryCallbacks
{ {
constructor(@inject("InventoryController") protected inventoryController: InventoryController) constructor(
@inject("InventoryController") protected inventoryController: InventoryController,
@inject("QuestController") protected questController: QuestController
)
{} {}
/** Handle Move event */ /** Handle Move event */
@ -173,4 +178,9 @@ export class InventoryCallbacks
{ {
return this.inventoryController.setFavoriteItem(pmcData, body, sessionId); return this.inventoryController.setFavoriteItem(pmcData, body, sessionId);
} }
public failQuest(pmcData: IPmcData, request: IFailQuestRequestData, sessionID: string): IItemEventRouterResponse
{
return this.questController.failQuest(pmcData, request, sessionID);
}
} }

View File

@ -718,7 +718,7 @@ export class QuestController
if (isActiveQuestInPlayerProfile) if (isActiveQuestInPlayerProfile)
{ {
const failBody: IFailQuestRequestData = { const failBody: IFailQuestRequestData = {
Action: "QuestComplete", Action: "QuestFail",
qid: questToFail._id, qid: questToFail._id,
removeExcessItems: true, removeExcessItems: true,
}; };
@ -939,4 +939,16 @@ export class QuestController
type: "HandoverItem", type: "HandoverItem",
value: counterValue }; value: counterValue };
} }
/**
* Handle /client/game/profile/items/moving - QuestFail
* @param pmcData Pmc profile
* @param request Fail qeust request
* @param sessionID Session id
* @returns IItemEventRouterResponse
*/
public failQuest(pmcData: IPmcData, request: IFailQuestRequestData, sessionID: string): IItemEventRouterResponse
{
return this.questHelper.failQuest(pmcData, request, sessionID);
}
} }

View File

@ -317,7 +317,7 @@ export class InRaidHelper
{ {
// Send failed message // Send failed message
const failBody: IFailQuestRequestData = { const failBody: IFailQuestRequestData = {
Action: "QuestComplete", Action: "QuestFail",
qid: postRaidQuest.qid, qid: postRaidQuest.qid,
removeExcessItems: true, removeExcessItems: true,
}; };

View File

@ -1,6 +1,6 @@
export interface IFailQuestRequestData export interface IFailQuestRequestData
{ {
Action: "QuestComplete"; Action: "QuestFail";
qid: string; qid: string;
removeExcessItems: boolean; removeExcessItems: boolean;
} }

View File

@ -24,5 +24,6 @@ export enum ItemEventActions {
SAVE_EQUIPMENT_BUILD = "SaveEquipmentBuild", SAVE_EQUIPMENT_BUILD = "SaveEquipmentBuild",
REMOVE_EQUIPMENT_BUILD = "RemoveEquipmentBuild", REMOVE_EQUIPMENT_BUILD = "RemoveEquipmentBuild",
REDEEM_PROFILE_REWARD = "RedeemProfileReward", REDEEM_PROFILE_REWARD = "RedeemProfileReward",
SET_FAVORITE_ITEMS = "SetFavoriteItems" SET_FAVORITE_ITEMS = "SetFavoriteItems",
QUEST_FAIL = "QuestFail"
} }

View File

@ -42,6 +42,7 @@ export class InventoryItemEventRouter extends ItemEventRouterDefinition
new HandledRoute(ItemEventActions.HIDEOUT_QTE_EVENT, false), new HandledRoute(ItemEventActions.HIDEOUT_QTE_EVENT, false),
new HandledRoute(ItemEventActions.REDEEM_PROFILE_REWARD, false), new HandledRoute(ItemEventActions.REDEEM_PROFILE_REWARD, false),
new HandledRoute(ItemEventActions.SET_FAVORITE_ITEMS, false), new HandledRoute(ItemEventActions.SET_FAVORITE_ITEMS, false),
new HandledRoute(ItemEventActions.QUEST_FAIL, false),
]; ];
} }