use inventory in unlockShipFeature

This commit is contained in:
AMelonInsideLemon 2025-10-21 05:57:15 +02:00
parent a974bcb9fa
commit 23bef17ce1
4 changed files with 29 additions and 27 deletions

View File

@ -1,11 +1,20 @@
import type { RequestHandler } from "express";
import { updateShipFeature } from "../../services/personalRoomsService.ts";
import type { IUnlockShipFeatureRequest } from "../../types/requestTypes.ts";
import { parseString } from "../../helpers/general.ts";
import { getAccountIdForRequest } from "../../services/loginService.ts";
import { getInventory } from "../../services/inventoryService.ts";
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
import { unlockShipFeature } from "../../services/personalRoomsService.ts";
export const unlockShipFeatureController: RequestHandler = async (req, res) => {
const accountId = parseString(req.query.accountId);
const shipFeatureRequest = JSON.parse((req.body as string).toString()) as IUnlockShipFeatureRequest;
await updateShipFeature(accountId, shipFeatureRequest.Feature);
const accountId = await getAccountIdForRequest(req);
const inventory = await getInventory(accountId, "MiscItems accountOwnerId");
const request = getJSONfromString<IUnlockShipFeatureRequest>(String(req.body));
await unlockShipFeature(inventory, request.Feature);
await inventory.save();
res.send([]);
};
interface IUnlockShipFeatureRequest {
Feature: string;
KeyChain: string;
ChainStage: number;
}

View File

@ -1,7 +1,9 @@
import { PersonalRooms } from "../models/personalRoomsModel.ts";
import { addItem, getInventory } from "./inventoryService.ts";
import { addItem } from "./inventoryService.ts";
import type { IGardeningDatabase, TPersonalRoomsDatabaseDocument } from "../types/personalRoomsTypes.ts";
import { getRandomElement } from "./rngService.ts";
import type { TInventoryDatabaseDocument } from "../models/inventoryModels/inventoryModel.ts";
import { logger } from "../utils/logger.ts";
export const getPersonalRooms = async (
accountId: string,
@ -15,19 +17,18 @@ export const getPersonalRooms = async (
return personalRooms;
};
export const updateShipFeature = async (accountId: string, shipFeature: string): Promise<void> => {
const personalRooms = await getPersonalRooms(accountId);
export const unlockShipFeature = async (inventory: TInventoryDatabaseDocument, shipFeature: string): Promise<void> => {
const personalRooms = await getPersonalRooms(inventory.accountOwnerId.toString());
if (personalRooms.Ship.Features.includes(shipFeature)) {
throw new Error(`ship feature ${shipFeature} already unlocked`);
logger.warn(`ship feature ${shipFeature} already unlocked`);
} else {
personalRooms.Ship.Features.push(shipFeature);
await personalRooms.save();
const miscItem = inventory.MiscItems.find(x => x.ItemType === shipFeature);
if (miscItem && miscItem.ItemCount > 0) await addItem(inventory, shipFeature, -1);
}
personalRooms.Ship.Features.push(shipFeature);
await personalRooms.save();
const inventory = await getInventory(accountId);
await addItem(inventory, shipFeature, -1);
await inventory.save();
};
export const createGarden = (): IGardeningDatabase => {

View File

@ -11,7 +11,7 @@ import { addFixedLevelRewards } from "./missionInventoryUpdateService.ts";
import type { IInventoryChanges } from "../types/purchaseTypes.ts";
import questCompletionItems from "../../static/fixed_responses/questCompletionRewards.json" with { type: "json" };
import type { ITypeCount } from "../types/commonTypes.ts";
import { updateShipFeature } from "./personalRoomsService.ts";
import { unlockShipFeature } from "./personalRoomsService.ts";
export interface IUpdateQuestRequest {
QuestKeys: IQuestKeyClient[];
@ -298,10 +298,7 @@ const handleQuestCompletion = async (
// Unfaitful fix for "Examine the Reliquary on the Railjack"
if (questKey == "/Lotus/Types/Keys/RailJackBuildQuest/RailjackBuildQuestKeyChain") {
await updateShipFeature(
inventory.accountOwnerId.toString(),
"/Lotus/Types/Items/ShipFeatureItems/RailjackKeyShipFeatureItem"
); // only works with relog
await unlockShipFeature(inventory, "/Lotus/Types/Items/ShipFeatureItems/RailjackKeyShipFeatureItem"); // only works with relog
await addItems(inventory, ["/Lotus/Types/Items/ShipFeatureItems/RailjackKeyShipFeatureItem"], inventoryChanges); // required item to trigger cutscene
}

View File

@ -234,11 +234,6 @@ export interface IUpgradeOperation {
PolarizeValue: ArtifactPolarity;
PolarityRemap: IPolarity[];
}
export interface IUnlockShipFeatureRequest {
Feature: string;
KeyChain: string;
ChainStage: number;
}
export interface IVoidTearParticipantInfo {
AccountId: string;