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, ITypeCount } from "./commonTypes.ts";
import type { TArtifactPolarity, IPolarity } from "./inventoryTypes/commonInventoryTypes.ts";
import type {
    IBooster,
    IChallengeProgress,
    IEvolutionProgress,
    IMission,
    IRawUpgrade,
    ISeasonChallenge,
    TSolarMapRegion,
    TEquipmentKey,
    IFusionTreasure,
    IFusionTreasureClientLegacy,
    ICustomMarkers,
    IPlayerSkills,
    IQuestKeyDatabase,
    ILoreFragmentScan,
    IUpgradeFromClient,
    ICollectibleEntry,
    IDiscoveredMarker,
    ILockedWeaponGroupClient,
    IInvasionProgressClient,
    IWeaponSkinClient,
    IKubrowPetEgg,
    INemesisClient,
    IUpgradeClient,
    IChallengeInstanceStateClient,
    IWeeklyMissionChallengeInfo
} from "./inventoryTypes/inventoryTypes.ts";
import type { IGroup } from "./loginTypes.ts";
import type { ILoadOutPresets } from "./saveLoadoutTypes.ts";
import type { IEquipmentClient } from "./equipmentTypes.ts";
import type { TMissionType } from "warframe-public-export-plus";

export interface IAffiliationChange {
    Tag: string;
    Standing: number;
    Title: number;
}

export type IMissionInventoryUpdateRequest = {
    MiscItems?: ITypeCount[];
    Recipes?: ITypeCount[];
    FusionBundles?: ITypeCount[];
    Consumables?: ITypeCount[];
    FusionBundels?: ITypeCount[];
    CrewShipRawSalvage?: ITypeCount[];
    CrewShipAmmo?: ITypeCount[];
    BonusMiscItems?: ITypeCount[];
    EmailItems?: ITypeCount[];
    ShipDecorations?: ITypeCount[];
    LevelKeys?: ITypeCount[];

    // flags for interstitial requests
    BMI?: boolean;
    TNT?: boolean; // Conservation; definitely need to include AffiliationMods in this case, so a normal 'inventory sync' would not work here.
    SSC?: boolean; // K-Drive race?
    RJ?: boolean; // Railjack. InventoryJson should only be returned when going back to dojo.
    SS?: boolean;
    CMI?: boolean;
    EJC?: boolean;

    CollectedQuestKeys?: string[]; // versions with client-side drops puts quests here
    SyndicateId?: string;
    SortieId?: string;
    CalendarProgress?: { challenge: string }[];
    SeasonChallengeCompletions?: ISeasonChallenge[];
    WeeklyMissionChallengeInfo?: IWeeklyMissionChallengeInfo[];
    AffiliationChanges?: IAffiliationChange[];
    crossPlaySetting?: string;
    rewardsMultiplier?: number;
    GoalTag?: string;
    LevelKeyName: string;
    KeyOwner?: string;
    KeyRemovalHash?: string;
    KeyToRemove?: string;
    ActiveBoosters?: IBooster[];
    RawUpgrades?: IRawUpgrade[];
    FusionTreasures?: IFusionTreasure[] | IFusionTreasureClientLegacy[];
    QuestKeys?: Omit<IQuestKeyDatabase, "CompletionDate">[];
    RegularCredits?: number;
    MissionFailed: boolean;
    MissionStatus?: IMissionStatus;
    AliveTime: number;
    MissionTime: number;
    Missions?: IMission;
    CompletedAlerts?: string[];
    Alerts?: IMission;
    LastRegionPlayed?: TSolarMapRegion;
    GameModeId: number;
    hosts: string[];
    currentClients: unknown[];
    ChallengeProgress: IChallengeProgress[];
    PS: string;
    ActiveDojoColorResearch: string;
    RewardInfo?: IRewardInfo;
    NemesisKillConvert?: {
        nemesisName: string;
        weaponLoc: string;
        petLoc: "" | "/Lotus/Language/Pets/ZanukaPetName";
        fingerprint: bigint | number;
        killed: boolean;
    };
    target?: INemesisClient;
    ReceivedCeremonyMsg: boolean;
    LastCeremonyResetDate: number;
    MissionPTS: number;
    RepHash: string;
    EndOfMatchUpload?: boolean;
    ObjectiveReached: boolean;
    sharedSessionId: string;
    FpsAvg: number;
    FpsMin: number;
    FpsMax: number;
    FpsSamples: number;
    EvolutionProgress?: IEvolutionProgress[];
    FocusXpIncreases?: number[];
    PlayerSkillGains: Partial<IPlayerSkills>;
    CustomMarkers?: ICustomMarkers[];
    LoreFragmentScans?: ILoreFragmentScan[];
    VoidTearParticipantsCurrWave?: IVoidTearWaveInfo;
    LibraryScans?: {
        EnemyType: string;
        Count: number;
        CodexScanCount: number;
        Standing: number;
    }[];
    CollectibleScans?: ICollectibleEntry[];
    Upgrades?: IUpgradeFromClient[]; // riven challenge progress
    WeaponSkins?: IWeaponSkinClient[];
    StrippedItems?: {
        DropTable: string;
        DROP_MOD?: number[];
        DROP_BLUEPRINT?: number[];
        DROP_MISC_ITEM?: number[];
    }[];
    DeathMarks?: string[];
    Nemesis?: number;
    Boosters?: IBooster[];
    CapturedAnimals?: {
        AnimalType: string;
        CaptureRating: number;
        NumTags: number;
        NumExtraRewards: number;
        Count: number;
    }[];
    KubrowPetEggs?: IKubrowPetEgg[];
    DiscoveredMarkers?: IDiscoveredMarker[];
    BrandedSuits?: IOid; // sent when captured by g3
    LockedWeaponGroup?: ILockedWeaponGroupClient; // sent when captured by zanuka
    UnlockWeapons?: boolean; // sent when recovered weapons from zanuka capture
    IncHarvester?: boolean; // sent when recovered weapons from zanuka capture
    CurrentLoadOutIds?: {
        LoadOuts?: ILoadOutPresets; // sent when recovered weapons from zanuka capture
    };
    wagerTier?: number; // the index
    creditsFee?: number; // the index
    GoalProgress?: IGoalsProgress[];
    InvasionProgress?: IInvasionProgressClient[];
    ConquestMissionsCompleted?: number;
    duviriSuitSelection?: string;
    duviriPistolSelection?: string;
    duviriLongGunSelection?: string;
    duviriMeleeSelection?: string;
    duviriCaveOffers?: {
        Seed: number | bigint;
        Warframes: string[];
        Weapons: string[];
    };
    ChallengeInstanceStates?: IChallengeInstanceStateClient[];
} & {
    [K in TEquipmentKey]?: IEquipmentClient[];
};

interface IBountyRewardInfo {
    node: string;
    EOM_AFK?: number;
    JobTier?: number;
    jobId?: string;
    JobStage?: number;
    Q?: boolean; // likely indicates that the bonus objective for this stage was completed
    CheckpointCounter?: number; // starts at 1, is incremented with each job stage upload, and does not reset when starting a new job
    challengeMissionId?: string;
    GoalProgressAmount?: number;
}

export interface IRewardInfo extends IBountyRewardInfo {
    node: string;
    goalId?: string;
    goalManifest?: string;
    invasionId?: string;
    invasionAllyFaction?: "FC_GRINEER" | "FC_CORPUS";
    alertId?: string;
    sortieId?: string;
    sortieTag?: "Mission1" | "Mission2" | "Final";
    sortiePrereqs?: string[];
    CustomEOMTags?: string[]; // for Old peace 12MinWar reward e.g. "CustomEOMTags":["12MinWarNumObjectives0"] & "CustomEOMTags":["12MinWarObjectiveComplete1","12MinWarObjectiveComplete2","12MinWarObjectiveComplete3","12MinWarNumObjectives9"]
    VaultsCracked?: number; // for Spy missions
    ConsecutiveRJ?: number;
    voidStormTier?: number; // 3 - Earth, 5 - Saturn ?
    rewardTier?: number;
    nightmareMode?: boolean;
    useVaultManifest?: boolean;
    EnemyCachesFound?: number;
    toxinOk?: boolean;
    lostTargetWave?: number;
    defenseTargetCount?: number;
    NemesisAbandonedRewards?: string[];
    NemesisHenchmenKills?: number;
    NemesisHintProgress?: number;
    EOM_AFK?: number;
    rewardQualifications?: string; // did a Survival for 5 minutes and this was "1"
    rewardTierOverrides?: number[]; // Disruption
    PurgatoryRewardQualifications?: string;
    POICompletions?: number;
    LootDungeonCompletions?: number;
    rewardSeed?: number | bigint;
    periodicMissionTag?: string;
    T?: number; // Duviri
    ConquestType?: string;
    ConquestCompleted?: number;
    ConquestEquipmentSuggestionsFulfilled?: number;
    ConquestPersonalModifiersActive?: number;
    ConquestStickersActive?: number;
    ConquestHardModeActive?: number;
    EncounterEnemyLevel?: number;
    missionType?: TMissionType;
    PvpGame?: boolean;
    PvpWinner?: boolean;
    PvpVariantPrize?: boolean;
    PvpChallengeHadAffector?: boolean;
    PVPChallengeInstancesCompleted?: {
        ChallengeInstanceIDs: IOidWithLegacySupport[];
    };
}

export interface IGoalsProgress {
    _id: IOidWithLegacySupport;
    Count: number;
    Best: number;
    Tag?: string;
    IsMultiProgress?: boolean;
    MultiProgress?: unknown[];
}

type IMissionStatus = "GS_SUCCESS" | "GS_FAILURE" | "GS_DUMPED" | "GS_QUIT" | "GS_INTERRUPTED";

export interface IUpgradesRequest {
    ItemCategory: TEquipmentKey;
    ItemId: IOid;
    ItemFeatures: number;
    UpgradeVersion: number;
    Operations: IUpgradeOperation[];
}
export interface IUpgradesRequestLegacy {
    Category: TEquipmentKey;
    Weapon: {
        ItemType: string;
        ItemId: IOidWithLegacySupport;
        UpgradeNodes?: number;
        UnlockLevel?: number;
    };
    UpgradeVer: number;
    UnlockLevel: number;
    Polarized: number;
    UtilityUnlocked: number;
    FocusLens?: string;
    UpgradeReq?: string;
    UtilityReq?: string;
    IsSwappingOperation: boolean;
    PolarizeReq?: string;
    PolarizeSlot: number;
    PolarizeValue: TArtifactPolarity;
    PolarityRemap: IPolarity[];
    UpgradesToAttach?: IUpgradeClient[];
    UpgradesToDetach?: IUpgradeClient[];
    Cost?: number;
}
interface IUpgradeOperation {
    OperationType: string;
    UpgradeRequirement: string; // uniqueName of item being consumed
    PolarizeSlot: number;
    PolarizeValue: TArtifactPolarity;
    PolarityRemap: IPolarity[];
}

export interface IVoidTearWaveInfo {
    Wave: number;
    IsFinalWave?: boolean; // not in U27.3
    Participants: IVoidTearParticipantInfo[];
}

export interface IVoidTearParticipantInfo {
    AccountId: string;
    Name: string;
    ChosenRewardOwner: string;
    MissionHash?: string;
    VoidProjection: string;
    Reward: string;
    QualifiesForReward: boolean;
    HaveRewardResponse?: boolean;
    RewardsMultiplier: number;
    RewardProjection: string;
    HardModeReward?: ITypeCount;
}

export interface IKeyChainRequest {
    KeyChain: string;
    ChainStage: number;
    Groups?: IGroup[];
}