feat: complete Rising Tide with buying railjack #2922
@ -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;
|
||||
}
|
||||
|
||||
@ -389,7 +389,7 @@ export const addItem = async (
|
||||
};
|
||||
} else if (ExportResources[typeName].productCategory == "CrewShips") {
|
||||
return {
|
||||
...addCrewShip(inventory, typeName),
|
||||
...(await addCrewShip(inventory, typeName)),
|
||||
// fix to unlock railjack modding, item bellow supposed to be obtained from archwing quest
|
||||
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
||||
...(!inventory.CrewShipHarnesses?.length
|
||||
@ -1544,17 +1544,31 @@ export const addCrewShipSalvagedWeaponSkin = (
|
||||
return inventoryChanges;
|
||||
};
|
||||
|
||||
const addCrewShip = (
|
||||
const addCrewShip = async (
|
||||
inventory: TInventoryDatabaseDocument,
|
||||
typeName: string,
|
||||
inventoryChanges: IInventoryChanges = {}
|
||||
): IInventoryChanges => {
|
||||
): Promise<IInventoryChanges> => {
|
||||
if (inventory.CrewShips.length != 0) {
|
||||
logger.warn("refusing to add CrewShip because account already has one");
|
||||
} else {
|
||||
const index = inventory.CrewShips.push({ ItemType: typeName }) - 1;
|
||||
inventoryChanges.CrewShips ??= [];
|
||||
inventoryChanges.CrewShips.push(inventory.CrewShips[index].toJSON<IEquipmentClient>());
|
||||
const railjackQuest = inventory.QuestKeys.find(
|
||||
qk => qk.ItemType === "/Lotus/Types/Keys/RailJackBuildQuest/RailjackBuildQuestKeyChain"
|
||||
);
|
||||
if (!railjackQuest || !railjackQuest.Completed) {
|
||||
const questChanges = await completeQuest(
|
||||
inventory,
|
||||
"/Lotus/Types/Keys/RailJackBuildQuest/RailjackBuildQuestKeyChain",
|
||||
false
|
||||
);
|
||||
if (questChanges) {
|
||||
inventoryChanges.QuestKeys ??= [];
|
||||
inventoryChanges.QuestKeys.push(questChanges);
|
||||
}
|
||||
}
|
||||
}
|
||||
return inventoryChanges;
|
||||
};
|
||||
|
||||
@ -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,17 @@ 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();
|
||||
}
|
||||
|
||||
personalRooms.Ship.Features.push(shipFeature);
|
||||
await personalRooms.save();
|
||||
|
||||
const inventory = await getInventory(accountId);
|
||||
await addItem(inventory, shipFeature, -1);
|
||||
await inventory.save();
|
||||
const miscItem = inventory.MiscItems.find(x => x.ItemType === shipFeature);
|
||||
if (miscItem && miscItem.ItemCount > 0) await addItem(inventory, shipFeature, miscItem.ItemCount * -1);
|
||||
};
|
||||
|
||||
export const createGarden = (): IGardeningDatabase => {
|
||||
|
||||
@ -120,7 +120,7 @@ export const completeQuest = async (
|
||||
inventory: TInventoryDatabaseDocument,
|
||||
questKey: string,
|
||||
sendMessages: boolean = false
|
||||
): Promise<void> => {
|
||||
): Promise<void | IQuestKeyClient> => {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
||||
const chainStages = ExportKeys[questKey]?.chainStages;
|
||||
|
||||
@ -176,6 +176,8 @@ export const completeQuest = async (
|
||||
existingQuestKey.CompletionDate = new Date();
|
||||
await handleQuestCompletion(inventory, questKey, undefined, run > 0);
|
||||
}
|
||||
|
||||
return existingQuestKey.toJSON<IQuestKeyClient>();
|
||||
};
|
||||
|
||||
const getQuestCompletionItems = (questKey: string): ITypeCount[] | undefined => {
|
||||
|
||||
@ -9,7 +9,8 @@ import type {
|
||||
TEquipmentKey,
|
||||
ICrewMemberClient,
|
||||
IKubrowPetPrintClient,
|
||||
IUpgradeClient
|
||||
IUpgradeClient,
|
||||
IQuestKeyClient
|
||||
} from "./inventoryTypes/inventoryTypes.ts";
|
||||
|
||||
export enum PurchaseSource {
|
||||
@ -83,6 +84,7 @@ export type IInventoryChanges = {
|
||||
CrewMembers?: ICrewMemberClient[];
|
||||
KubrowPetPrints?: IKubrowPetPrintClient[];
|
||||
Upgrades?: IUpgradeClient[]; // TOVERIFY
|
||||
QuestKeys?: IQuestKeyClient[];
|
||||
} & Record<
|
||||
Exclude<
|
||||
string,
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user