XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESpaceNinjaServer

A simple server for a small space ninja game

公开
关注 0 Fork 0 Star 0
UTF-8
import type { IOid, IOidWithLegacySupport } from "./commonTypes.ts";
import type {
    ICrewShipCustomization,
    IFlavourItem,
    IItemConfig,
    IItemConfigCustomizationsLegacy,
    ILotusCustomization,
    IOperatorConfigClient
} from "./inventoryTypes/commonInventoryTypes.ts";
import type { Types } from "mongoose";
import type {
    ICrewShipMembersClient,
    ICrewShipWeaponClient,
    IEquipmentSelectionClient,
    IEquipmentSelectionDatabase
} from "./equipmentTypes.ts";
import type { IFocusLoadoutClient, ISketch } from "./inventoryTypes/inventoryTypes.ts";

export interface ISaveLoadoutRequest {
    LoadOuts: ILoadoutClient | ILoadoutConfigClientLegacy;
    LoadOut?: ILoadoutPresetClientLegacy[]; // U10-U13
    Presets?: ILoadoutPresetClientLegacy[]; // U8
    LongGuns: IItemEntry;
    OperatorAmps: IItemEntry;
    Antiques: IItemEntry;
    OperatorSuits: IItemEntry;
    Pistols: IItemEntry;
    Suits: IItemEntry;
    Melee: IItemEntry;
    Sentinels: IItemEntry;
    SentinelWeapons: IItemEntry;
    KubrowPets: IItemEntry;
    SpaceSuits: IItemEntry;
    SpaceGuns: IItemEntry;
    SpaceMelee: IItemEntry;
    Scoops: IItemEntry;
    SpecialItems: IItemEntry;
    MoaPets: IItemEntry;
    Hoverboards: IItemEntry;
    DataKnives: IItemEntry;
    Motorcycles: IItemEntry;
    MechSuits: IItemEntry;
    CrewShipHarnesses: IItemEntry;
    Horses: IItemEntry;
    DrifterMelee: IItemEntry;
    UpgradeVer: number;
    AdultOperatorLoadOuts: IOperatorConfigEntry;
    OperatorLoadOuts: IOperatorConfigEntry;
    KahlLoadOuts: IOperatorConfigEntry;
    CrewShips: IItemEntry;
    CurrentLoadout: string; // U14-U15
    CurrentLoadOutIds: IOid[];
    ValidNewLoadoutId: string;
    ActiveCrewShip: IOid;
    EquippedGear: string[];
    EquippedEmotes: string[];
    UseAdultOperatorLoadout: boolean;
    WeaponSkins: IItemEntry;
    LotusCustomization: ILotusCustomization;
    FocusLoadouts?: IFocusLoadoutClient[];
    Sketches?: ISketch[];
}

export type ISaveLoadoutRequestNoUpgradeVer = Omit<ISaveLoadoutRequest, "UpgradeVer">;

export interface IOperatorConfigEntry {
    [configId: string]: IOperatorConfigClient;
}

// client
export interface IItemEntry {
    [itemId: string]: IConfigEntry;
}

// client
type IConfigEntry = {
    [configId in "0" | "1" | "2" | "3" | "4" | "5"]: IItemConfig;
} & {
    Favorite?: boolean;
    IsNew?: boolean;
    // Railjack
    ItemName?: string;
    RailjackImage?: IFlavourItem;
    Customization?: ICrewShipCustomization;
    Weapon?: ICrewShipWeaponClient;
    CrewMembers?: ICrewShipMembersClient;
};

export type ILoadoutClient = ILoadOutPresets;

export interface ILoadoutDatabase {
    NORMAL: ILoadoutConfigDatabase[];
    SENTINEL: ILoadoutConfigDatabase[];
    ARCHWING: ILoadoutConfigDatabase[];
    NORMAL_PVP: ILoadoutConfigDatabase[];
    LUNARO: ILoadoutConfigDatabase[];
    OPERATOR: ILoadoutConfigDatabase[];
    GEAR?: ILoadoutConfigDatabase[];
    KDRIVE: ILoadoutConfigDatabase[];
    DATAKNIFE: ILoadoutConfigDatabase[];
    MECH: ILoadoutConfigDatabase[];
    OPERATOR_ADULT: ILoadoutConfigDatabase[];
    DRIFTER: ILoadoutConfigDatabase[];
    _id: Types.ObjectId;
    loadoutOwnerId: Types.ObjectId;
}

export interface ILoadOutPresets {
    NORMAL: ILoadoutConfigClient[];
    NORMAL_PVP: ILoadoutConfigClient[];
    LUNARO: ILoadoutConfigClient[];
    ARCHWING: ILoadoutConfigClient[];
    SENTINEL: ILoadoutConfigClient[];
    OPERATOR: ILoadoutConfigClient[];
    GEAR?: ILoadoutConfigClient[];
    KDRIVE: ILoadoutConfigClient[];
    DATAKNIFE: ILoadoutConfigClient[];
    MECH: ILoadoutConfigClient[];
    OPERATOR_ADULT: ILoadoutConfigClient[];
    DRIFTER: ILoadoutConfigClient[];
}

export interface ILoadoutEntry {
    [key: string]: ILoadoutConfigClient;
}

type TFocusSchool = "AP_ATTACK" | "AP_DEFENSE" | "AP_POWER" | "AP_TACTIC" | "AP_WARD";

export interface ILoadoutConfigClient {
    FocusSchool?: TFocusSchool;
    PresetIcon?: string;
    Favorite?: boolean;
    n?: string; // Loadout name
    s?: IEquipmentSelectionClient; // Suit
    p?: IEquipmentSelectionClient; // Secondary weapon
    l?: IEquipmentSelectionClient; // Primary weapon
    m?: IEquipmentSelectionClient; // Melee weapon
    h?: IEquipmentSelectionClient; // Gravimag weapon
    a?: IEquipmentSelectionClient; // Necromech exalted weapon
    ItemId: IOidWithLegacySupport;
    Remove?: boolean; // when client wants to remove a config, it only includes ItemId & Remove.
}

export interface ILoadoutConfigDatabase extends Omit<
    ILoadoutConfigClient,
    "ItemId" | "s" | "p" | "l" | "m" | "h" | "a"
> {
    _id: Types.ObjectId;
    s?: IEquipmentSelectionDatabase;
    p?: IEquipmentSelectionDatabase;
    l?: IEquipmentSelectionDatabase;
    m?: IEquipmentSelectionDatabase;
    h?: IEquipmentSelectionDatabase;
    a?: IEquipmentSelectionDatabase;
}

export interface ILoadoutConfigClientLegacy {
    ItemId: IOidWithLegacySupport;
    Name: string;
    Presets: ILoadoutPresetClientLegacy[];
}
export interface ILoadoutPresetClientLegacy {
    ItemId: IOidWithLegacySupport;
    ModSlot?: number;
    CustSlot?: number;
    Customization?: IItemConfigCustomizationsLegacy;
}