feat: handle railjack armaments, crew, & customizations in saveLoadout #1706
@ -39,10 +39,9 @@ import {
|
|||||||
ILoreFragmentScan,
|
ILoreFragmentScan,
|
||||||
IEvolutionProgress,
|
IEvolutionProgress,
|
||||||
IEndlessXpProgress,
|
IEndlessXpProgress,
|
||||||
ICrewShipPortGuns,
|
|
||||||
ICrewShipCustomization,
|
ICrewShipCustomization,
|
||||||
ICrewShipWeapon,
|
ICrewShipWeapon,
|
||||||
ICrewShipPilotWeapon,
|
ICrewShipWeaponEmplacements,
|
||||||
IShipExterior,
|
IShipExterior,
|
||||||
IHelminthFoodRecord,
|
IHelminthFoodRecord,
|
||||||
ICrewShipMembersDatabase,
|
ICrewShipMembersDatabase,
|
||||||
@ -719,25 +718,23 @@ const endlessXpProgressSchema = new Schema<IEndlessXpProgress>(
|
|||||||
{ _id: false }
|
{ _id: false }
|
||||||
);
|
);
|
||||||
|
|
||||||
const crewShipPilotWeaponSchema = new Schema<ICrewShipPilotWeapon>(
|
const crewShipWeaponEmplacementsSchema = new Schema<ICrewShipWeaponEmplacements>(
|
||||||
{
|
{
|
||||||
PRIMARY_A: EquipmentSelectionSchema,
|
PRIMARY_A: EquipmentSelectionSchema,
|
||||||
SECONDARY_A: EquipmentSelectionSchema
|
PRIMARY_B: EquipmentSelectionSchema,
|
||||||
},
|
SECONDARY_A: EquipmentSelectionSchema,
|
||||||
{ _id: false }
|
SECONDARY_B: EquipmentSelectionSchema
|
||||||
);
|
|
||||||
|
|
||||||
const crewShipPortGunsSchema = new Schema<ICrewShipPortGuns>(
|
|
||||||
{
|
|
||||||
PRIMARY_A: EquipmentSelectionSchema
|
|
||||||
},
|
},
|
||||||
{ _id: false }
|
{ _id: false }
|
||||||
);
|
);
|
||||||
|
|
||||||
const crewShipWeaponSchema = new Schema<ICrewShipWeapon>(
|
const crewShipWeaponSchema = new Schema<ICrewShipWeapon>(
|
||||||
{
|
{
|
||||||
PILOT: crewShipPilotWeaponSchema,
|
PILOT: crewShipWeaponEmplacementsSchema,
|
||||||
PORT_GUNS: crewShipPortGunsSchema
|
PORT_GUNS: crewShipWeaponEmplacementsSchema,
|
||||||
|
STARBOARD_GUNS: crewShipWeaponEmplacementsSchema,
|
||||||
|
ARTILLERY: crewShipWeaponEmplacementsSchema,
|
||||||
|
SCANNER: crewShipWeaponEmplacementsSchema
|
||||||
},
|
},
|
||||||
{ _id: false }
|
{ _id: false }
|
||||||
);
|
);
|
||||||
@ -761,7 +758,7 @@ const crewShipCustomizationSchema = new Schema<ICrewShipCustomization>(
|
|||||||
const crewShipMemberSchema = new Schema<ICrewShipMemberDatabase>(
|
const crewShipMemberSchema = new Schema<ICrewShipMemberDatabase>(
|
||||||
{
|
{
|
||||||
ItemId: { type: Schema.Types.ObjectId, required: false },
|
ItemId: { type: Schema.Types.ObjectId, required: false },
|
||||||
NemesisFingerprint: { type: Number, required: false }
|
NemesisFingerprint: { type: BigInt, required: false }
|
||||||
},
|
},
|
||||||
{ _id: false }
|
{ _id: false }
|
||||||
);
|
);
|
||||||
|
@ -104,18 +104,18 @@ const replaceSlots = (db: ISlots, client: ISlots): void => {
|
|||||||
db.Slots = client.Slots;
|
db.Slots = client.Slots;
|
||||||
};
|
};
|
||||||
|
|
||||||
const convertCrewShipMember = (client: ICrewShipMemberClient): ICrewShipMemberDatabase => {
|
export const importCrewMemberId = (crewMemberId: ICrewShipMemberClient): ICrewShipMemberDatabase => {
|
||||||
return {
|
if (crewMemberId.ItemId) {
|
||||||
...client,
|
return { ItemId: new Types.ObjectId(crewMemberId.ItemId.$oid) };
|
||||||
ItemId: client.ItemId ? new Types.ObjectId(client.ItemId.$oid) : undefined
|
}
|
||||||
};
|
return { NemesisFingerprint: BigInt(crewMemberId.NemesisFingerprint ?? 0) };
|
||||||
};
|
};
|
||||||
|
|
||||||
const convertCrewShipMembers = (client: ICrewShipMembersClient): ICrewShipMembersDatabase => {
|
const convertCrewShipMembers = (client: ICrewShipMembersClient): ICrewShipMembersDatabase => {
|
||||||
return {
|
return {
|
||||||
SLOT_A: client.SLOT_A ? convertCrewShipMember(client.SLOT_A) : undefined,
|
SLOT_A: client.SLOT_A ? importCrewMemberId(client.SLOT_A) : undefined,
|
||||||
SLOT_B: client.SLOT_B ? convertCrewShipMember(client.SLOT_B) : undefined,
|
SLOT_B: client.SLOT_B ? importCrewMemberId(client.SLOT_B) : undefined,
|
||||||
SLOT_C: client.SLOT_C ? convertCrewShipMember(client.SLOT_C) : undefined
|
SLOT_C: client.SLOT_C ? importCrewMemberId(client.SLOT_C) : undefined
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -13,6 +13,8 @@ import { Types } from "mongoose";
|
|||||||
import { isEmptyObject } from "@/src/helpers/general";
|
import { isEmptyObject } from "@/src/helpers/general";
|
||||||
import { logger } from "@/src/utils/logger";
|
import { logger } from "@/src/utils/logger";
|
||||||
import { equipmentKeys, TEquipmentKey } from "@/src/types/inventoryTypes/inventoryTypes";
|
import { equipmentKeys, TEquipmentKey } from "@/src/types/inventoryTypes/inventoryTypes";
|
||||||
|
import { IItemConfig } from "../types/inventoryTypes/commonInventoryTypes";
|
||||||
|
import { importCrewMemberId } from "./importService";
|
||||||
|
|
||||||
//TODO: setup default items on account creation or like originally in giveStartingItems.php
|
//TODO: setup default items on account creation or like originally in giveStartingItems.php
|
||||||
|
|
||||||
@ -174,8 +176,8 @@ export const handleInventoryItemConfigChange = async (
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (const [configId, config] of Object.entries(itemConfigEntries)) {
|
for (const [configId, config] of Object.entries(itemConfigEntries)) {
|
||||||
if (typeof config !== "boolean") {
|
if (/^[0-9]+$/.test(configId)) {
|
||||||
inventoryItem.Configs[parseInt(configId)] = config;
|
inventoryItem.Configs[parseInt(configId)] = config as IItemConfig;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ("Favorite" in itemConfigEntries) {
|
if ("Favorite" in itemConfigEntries) {
|
||||||
@ -184,6 +186,26 @@ export const handleInventoryItemConfigChange = async (
|
|||||||
if ("IsNew" in itemConfigEntries) {
|
if ("IsNew" in itemConfigEntries) {
|
||||||
inventoryItem.IsNew = itemConfigEntries.IsNew;
|
inventoryItem.IsNew = itemConfigEntries.IsNew;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ("ItemName" in itemConfigEntries) {
|
||||||
|
inventoryItem.ItemName = itemConfigEntries.ItemName;
|
||||||
|
}
|
||||||
|
if ("RailjackImage" in itemConfigEntries) {
|
||||||
|
inventoryItem.RailjackImage = itemConfigEntries.RailjackImage;
|
||||||
|
}
|
||||||
|
if ("Customization" in itemConfigEntries) {
|
||||||
|
inventoryItem.Customization = itemConfigEntries.Customization;
|
||||||
|
}
|
||||||
|
if ("Weapon" in itemConfigEntries) {
|
||||||
|
inventoryItem.Weapon = itemConfigEntries.Weapon;
|
||||||
|
}
|
||||||
|
if (itemConfigEntries.CrewMembers) {
|
||||||
|
inventoryItem.CrewMembers = {
|
||||||
|
SLOT_A: importCrewMemberId(itemConfigEntries.CrewMembers.SLOT_A ?? {}),
|
||||||
|
SLOT_B: importCrewMemberId(itemConfigEntries.CrewMembers.SLOT_B ?? {}),
|
||||||
|
SLOT_C: importCrewMemberId(itemConfigEntries.CrewMembers.SLOT_C ?? {})
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
|
@ -532,12 +532,12 @@ export interface ICrewShipMembersDatabase {
|
|||||||
|
|
||||||
export interface ICrewShipMemberClient {
|
export interface ICrewShipMemberClient {
|
||||||
ItemId?: IOid;
|
ItemId?: IOid;
|
||||||
NemesisFingerprint?: number;
|
NemesisFingerprint?: number | bigint;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ICrewShipMemberDatabase {
|
export interface ICrewShipMemberDatabase {
|
||||||
ItemId?: Types.ObjectId;
|
ItemId?: Types.ObjectId;
|
||||||
NemesisFingerprint?: number;
|
NemesisFingerprint?: bigint;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ICrewShipCustomization {
|
export interface ICrewShipCustomization {
|
||||||
@ -562,17 +562,18 @@ export type IMiscItem = ITypeCount;
|
|||||||
|
|
||||||
// inventory.CrewShips[0].Weapon
|
// inventory.CrewShips[0].Weapon
|
||||||
export interface ICrewShipWeapon {
|
export interface ICrewShipWeapon {
|
||||||
PILOT: ICrewShipPilotWeapon;
|
PILOT?: ICrewShipWeaponEmplacements;
|
||||||
PORT_GUNS: ICrewShipPortGuns;
|
PORT_GUNS?: ICrewShipWeaponEmplacements;
|
||||||
|
STARBOARD_GUNS?: ICrewShipWeaponEmplacements;
|
||||||
|
ARTILLERY?: ICrewShipWeaponEmplacements;
|
||||||
|
SCANNER?: ICrewShipWeaponEmplacements;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ICrewShipPilotWeapon {
|
export interface ICrewShipWeaponEmplacements {
|
||||||
PRIMARY_A: IEquipmentSelection;
|
PRIMARY_A?: IEquipmentSelection;
|
||||||
SECONDARY_A: IEquipmentSelection;
|
PRIMARY_B?: IEquipmentSelection;
|
||||||
}
|
SECONDARY_A?: IEquipmentSelection;
|
||||||
|
SECONDARY_B?: IEquipmentSelection;
|
||||||
export interface ICrewShipPortGuns {
|
|
||||||
PRIMARY_A: IEquipmentSelection;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IDiscoveredMarker {
|
export interface IDiscoveredMarker {
|
||||||
|
@ -1,7 +1,13 @@
|
|||||||
import { IOid } from "@/src/types/commonTypes";
|
import { IOid } from "@/src/types/commonTypes";
|
||||||
import { IItemConfig, IOperatorConfigClient } from "@/src/types/inventoryTypes/commonInventoryTypes";
|
import { IItemConfig, IOperatorConfigClient } from "@/src/types/inventoryTypes/commonInventoryTypes";
|
||||||
import { Types } from "mongoose";
|
import { Types } from "mongoose";
|
||||||
import { ILoadoutConfigClient } from "./inventoryTypes/inventoryTypes";
|
import {
|
||||||
|
ICrewShipCustomization,
|
||||||
|
ICrewShipMembersClient,
|
||||||
|
ICrewShipWeapon,
|
||||||
|
IFlavourItem,
|
||||||
|
ILoadoutConfigClient
|
||||||
|
} from "./inventoryTypes/inventoryTypes";
|
||||||
|
|
||||||
export interface ISaveLoadoutRequest {
|
export interface ISaveLoadoutRequest {
|
||||||
LoadOuts: ILoadoutClient;
|
LoadOuts: ILoadoutClient;
|
||||||
@ -51,7 +57,16 @@ export interface IItemEntry {
|
|||||||
|
|
||||||
export type IConfigEntry = {
|
export type IConfigEntry = {
|
||||||
[configId in "0" | "1" | "2" | "3" | "4" | "5"]: IItemConfig;
|
[configId in "0" | "1" | "2" | "3" | "4" | "5"]: IItemConfig;
|
||||||
} & { Favorite?: boolean; IsNew?: boolean };
|
} & {
|
||||||
|
Favorite?: boolean;
|
||||||
|
IsNew?: boolean;
|
||||||
|
// Railjack
|
||||||
|
ItemName?: string;
|
||||||
|
RailjackImage?: IFlavourItem;
|
||||||
|
Customization?: ICrewShipCustomization;
|
||||||
|
Weapon?: ICrewShipWeapon;
|
||||||
|
CrewMembers?: ICrewShipMembersClient;
|
||||||
|
};
|
||||||
|
|
||||||
export type ILoadoutClient = Omit<ILoadoutDatabase, "_id" | "loadoutOwnerId">;
|
export type ILoadoutClient = Omit<ILoadoutDatabase, "_id" | "loadoutOwnerId">;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user