forked from OpenWF/SpaceNinjaServer
Mission rewards fix (#54)
This commit is contained in:
parent
01cfecd9d2
commit
67b7338381
@ -1,19 +1,18 @@
|
|||||||
|
import { parseString } from "@/src/helpers/general";
|
||||||
|
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
||||||
import { upgradeMod } from "@/src/services/inventoryService";
|
import { upgradeMod } from "@/src/services/inventoryService";
|
||||||
|
import { IArtifactsRequest } from "@/src/types/requestTypes";
|
||||||
import { RequestHandler } from "express";
|
import { RequestHandler } from "express";
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
||||||
const artifactsController: RequestHandler = async (req, res) => {
|
const artifactsController: RequestHandler = async (req, res) => {
|
||||||
const [data] = String(req.body).split("\n");
|
const accountId = parseString(req.query.accountId);
|
||||||
const id = req.query.accountId as string;
|
|
||||||
|
|
||||||
// TODO - salt check
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-call
|
||||||
const parsedData = JSON.parse(data);
|
const artifactsData = getJSONfromString(req.body.toString()) as IArtifactsRequest;
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
||||||
const upgradeModId = await upgradeMod(parsedData, id);
|
const upgradeModId = await upgradeMod(artifactsData, accountId);
|
||||||
res.send(upgradeModId);
|
res.send(upgradeModId);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error("Error parsing JSON data:", err);
|
console.error("Error parsing JSON data:", err);
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
import { RequestHandler } from "express";
|
import { RequestHandler } from "express";
|
||||||
import { missionInventoryUpdate } from "@/src/services/inventoryService";
|
import { missionInventoryUpdate } from "@/src/services/inventoryService";
|
||||||
import { combineRewardAndLootInventory, getRewards } from "@/src/services/missionInventoryUpdateService ";
|
import { combineRewardAndLootInventory, getRewards } from "@/src/services/missionInventoryUpdateService ";
|
||||||
import { IMissionInventoryUpdate } from "@/src/types/missionInventoryUpdateType";
|
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
||||||
|
import { parseString } from "@/src/helpers/general";
|
||||||
|
import { IMissionInventoryUpdateRequest } from "@/src/types/requestTypes";
|
||||||
/*
|
/*
|
||||||
**** INPUT ****
|
**** INPUT ****
|
||||||
- [ ] crossPlaySetting
|
- [ ] crossPlaySetting
|
||||||
@ -20,7 +22,7 @@ import { IMissionInventoryUpdate } from "@/src/types/missionInventoryUpdateType"
|
|||||||
- [ ] CurrentLoadOutIds
|
- [ ] CurrentLoadOutIds
|
||||||
- [ ] AliveTime
|
- [ ] AliveTime
|
||||||
- [ ] MissionTime
|
- [ ] MissionTime
|
||||||
- [ ] Missions
|
- [x] Missions
|
||||||
- [ ] CompletedAlerts
|
- [ ] CompletedAlerts
|
||||||
- [ ] LastRegionPlayed
|
- [ ] LastRegionPlayed
|
||||||
- [ ] GameModeId
|
- [ ] GameModeId
|
||||||
@ -43,23 +45,20 @@ import { IMissionInventoryUpdate } from "@/src/types/missionInventoryUpdateType"
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
||||||
const missionInventoryUpdateController: RequestHandler = async (req, res) => {
|
const missionInventoryUpdateController: RequestHandler = async (req, res): Promise<void> => {
|
||||||
const [data] = String(req.body).split("\n");
|
const accountId = parseString(req.query.accountId);
|
||||||
const id = req.query.accountId as string;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const lootInventory = JSON.parse(data) as IMissionInventoryUpdate;
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-call
|
||||||
if (typeof lootInventory !== "object" || lootInventory === null) {
|
const lootInventory = getJSONfromString(req.body.toString()) as IMissionInventoryUpdateRequest;
|
||||||
throw new Error("Invalid data format");
|
|
||||||
}
|
|
||||||
|
|
||||||
const { InventoryChanges, MissionRewards } = getRewards(lootInventory.RewardInfo);
|
const { InventoryChanges, MissionRewards } = getRewards(lootInventory);
|
||||||
|
|
||||||
const { combinedInventoryChanges, TotalCredits, CreditsBonus, MissionCredits, FusionPoints } =
|
const { combinedInventoryChanges, TotalCredits, CreditsBonus, MissionCredits, FusionPoints } =
|
||||||
combineRewardAndLootInventory(InventoryChanges, lootInventory);
|
combineRewardAndLootInventory(InventoryChanges, lootInventory);
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
const InventoryJson = JSON.stringify(await missionInventoryUpdate(combinedInventoryChanges, id));
|
const InventoryJson = JSON.stringify(await missionInventoryUpdate(combinedInventoryChanges, accountId));
|
||||||
res.json({
|
res.json({
|
||||||
// InventoryJson, // this part will reset game data and missions will be locked
|
// InventoryJson, // this part will reset game data and missions will be locked
|
||||||
MissionRewards,
|
MissionRewards,
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
const getJSONfromString = (str: string): any => {
|
export const getJSONfromString = (str: string): any => {
|
||||||
const jsonSubstring = str.substring(0, str.lastIndexOf("}") + 1);
|
const jsonSubstring = str.substring(0, str.lastIndexOf("}") + 1);
|
||||||
return JSON.parse(jsonSubstring);
|
return JSON.parse(jsonSubstring);
|
||||||
};
|
};
|
||||||
|
@ -2,20 +2,20 @@ import { Inventory } from "@/src/models/inventoryModel";
|
|||||||
import new_inventory from "@/static/fixed_responses/postTutorialInventory.json";
|
import new_inventory from "@/static/fixed_responses/postTutorialInventory.json";
|
||||||
import config from "@/config.json";
|
import config from "@/config.json";
|
||||||
import { Types } from "mongoose";
|
import { Types } from "mongoose";
|
||||||
import { ISuitResponse } from "@/src/types/inventoryTypes/SuitTypes";
|
import { ISuitDatabase, ISuitResponse } from "@/src/types/inventoryTypes/SuitTypes";
|
||||||
import { SlotType } from "@/src/types/purchaseTypes";
|
import { SlotType } from "@/src/types/purchaseTypes";
|
||||||
import { IWeaponResponse } from "@/src/types/inventoryTypes/weaponTypes";
|
import { IWeaponDatabase, IWeaponResponse } from "@/src/types/inventoryTypes/weaponTypes";
|
||||||
import {
|
import {
|
||||||
IChallengeProgress,
|
IChallengeProgress,
|
||||||
IConsumable,
|
IConsumable,
|
||||||
ICrewShipSalvagedWeaponSkin,
|
|
||||||
IFlavourItem,
|
IFlavourItem,
|
||||||
IInventoryDatabaseDocument,
|
IInventoryDatabaseDocument,
|
||||||
IMiscItem,
|
IMiscItem,
|
||||||
|
IMission,
|
||||||
IRawUpgrade
|
IRawUpgrade
|
||||||
} from "@/src/types/inventoryTypes/inventoryTypes";
|
} from "@/src/types/inventoryTypes/inventoryTypes";
|
||||||
import { IMissionInventoryUpdate, IMissionInventoryUpdateGear } from "../types/missionInventoryUpdateType";
|
|
||||||
import { IGenericUpdate } from "../types/genericUpdate";
|
import { IGenericUpdate } from "../types/genericUpdate";
|
||||||
|
import { IArtifactsRequest, IMissionInventoryUpdateRequest } from "../types/requestTypes";
|
||||||
|
|
||||||
const createInventory = async (accountOwnerId: Types.ObjectId) => {
|
const createInventory = async (accountOwnerId: Types.ObjectId) => {
|
||||||
try {
|
try {
|
||||||
@ -139,17 +139,17 @@ export const addCustomization = async (customizatonName: string, accountId: stri
|
|||||||
|
|
||||||
const addGearExpByCategory = (
|
const addGearExpByCategory = (
|
||||||
inventory: IInventoryDatabaseDocument,
|
inventory: IInventoryDatabaseDocument,
|
||||||
gearArray: IMissionInventoryUpdateGear[] | undefined,
|
gearArray: ISuitDatabase[] | IWeaponDatabase[] | undefined,
|
||||||
categoryName: "Pistols" | "LongGuns" | "Melee" | "Suits"
|
categoryName: "Pistols" | "LongGuns" | "Melee" | "Suits"
|
||||||
) => {
|
) => {
|
||||||
const category = inventory[categoryName];
|
const category = inventory[categoryName];
|
||||||
|
|
||||||
gearArray?.forEach(({ ItemId, XP }) => {
|
gearArray?.forEach(({ ItemId, XP }) => {
|
||||||
const itemIndex = category.findIndex(item => item._id?.equals(ItemId.$oid));
|
const itemIndex = ItemId ? category.findIndex(item => item._id?.equals(ItemId.$oid)) : -1;
|
||||||
const item = category[itemIndex];
|
const item = category[itemIndex];
|
||||||
|
|
||||||
if (itemIndex !== -1 && item.XP != undefined) {
|
if (itemIndex !== -1 && item.XP != undefined) {
|
||||||
item.XP += XP;
|
item.XP += XP || 0;
|
||||||
inventory.markModified(`${categoryName}.${itemIndex}.XP`);
|
inventory.markModified(`${categoryName}.${itemIndex}.XP`);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -229,11 +229,24 @@ const addChallenges = (inventory: IInventoryDatabaseDocument, itemsArray: IChall
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const addMissionComplete = (inventory: IInventoryDatabaseDocument, { Tag, Completes }: IMission) => {
|
||||||
|
const { Missions } = inventory;
|
||||||
|
const itemIndex = Missions.findIndex(item => item.Tag === Tag);
|
||||||
|
|
||||||
|
if (itemIndex !== -1) {
|
||||||
|
Missions[itemIndex].Completes += Completes;
|
||||||
|
inventory.markModified(`Missions.${itemIndex}.Completes`);
|
||||||
|
} else {
|
||||||
|
Missions.push({ Tag, Completes });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const gearKeys = ["Suits", "Pistols", "LongGuns", "Melee"] as const;
|
const gearKeys = ["Suits", "Pistols", "LongGuns", "Melee"] as const;
|
||||||
type GearKeysType = (typeof gearKeys)[number];
|
type GearKeysType = (typeof gearKeys)[number];
|
||||||
|
|
||||||
export const missionInventoryUpdate = async (data: IMissionInventoryUpdate, accountId: string) => {
|
export const missionInventoryUpdate = async (data: IMissionInventoryUpdateRequest, accountId: string) => {
|
||||||
const { RawUpgrades, MiscItems, RegularCredits, ChallengeProgress, FusionPoints, Consumables, Recipes } = data;
|
const { RawUpgrades, MiscItems, RegularCredits, ChallengeProgress, FusionPoints, Consumables, Recipes, Missions } =
|
||||||
|
data;
|
||||||
const inventory = await getInventory(accountId);
|
const inventory = await getInventory(accountId);
|
||||||
|
|
||||||
// credits
|
// credits
|
||||||
@ -251,6 +264,7 @@ export const missionInventoryUpdate = async (data: IMissionInventoryUpdate, acco
|
|||||||
addConsumables(inventory, Consumables);
|
addConsumables(inventory, Consumables);
|
||||||
addRecipes(inventory, Recipes);
|
addRecipes(inventory, Recipes);
|
||||||
addChallenges(inventory, ChallengeProgress);
|
addChallenges(inventory, ChallengeProgress);
|
||||||
|
addMissionComplete(inventory, Missions!);
|
||||||
|
|
||||||
const changedInventory = await inventory.save();
|
const changedInventory = await inventory.save();
|
||||||
return changedInventory.toJSON();
|
return changedInventory.toJSON();
|
||||||
@ -275,15 +289,8 @@ export const addBooster = async (ItemType: string, time: number, accountId: stri
|
|||||||
await inventory.save();
|
await inventory.save();
|
||||||
};
|
};
|
||||||
|
|
||||||
export const upgradeMod = async (
|
export const upgradeMod = async (artifactsData: IArtifactsRequest, accountId: string): Promise<string | undefined> => {
|
||||||
{
|
const { Upgrade, LevelDiff, Cost, FusionPointCost } = artifactsData;
|
||||||
Upgrade,
|
|
||||||
LevelDiff,
|
|
||||||
Cost,
|
|
||||||
FusionPointCost
|
|
||||||
}: { Upgrade: ICrewShipSalvagedWeaponSkin; LevelDiff: number; Cost: number; FusionPointCost: number },
|
|
||||||
accountId: string
|
|
||||||
): Promise<string | undefined> => {
|
|
||||||
try {
|
try {
|
||||||
const inventory = await getInventory(accountId);
|
const inventory = await getInventory(accountId);
|
||||||
const { Upgrades, RawUpgrades } = inventory;
|
const { Upgrades, RawUpgrades } = inventory;
|
||||||
|
@ -1,29 +1,26 @@
|
|||||||
import {
|
import { IMissionRewardResponse, IReward, IInventoryFieldType, inventoryFields } from "@/src/types/missionTypes";
|
||||||
IMissionInventoryUpdate,
|
|
||||||
IMissionInventoryUpdateRewardInfo,
|
|
||||||
IMissionRewardResponse,
|
|
||||||
IReward,
|
|
||||||
IInventoryFieldType,
|
|
||||||
inventoryFields
|
|
||||||
} from "@/src/types/missionInventoryUpdateType";
|
|
||||||
|
|
||||||
import missionsDropTable from "@/static/json/missions-drop-table.json";
|
import missionsDropTable from "@/static/json/missions-drop-table.json";
|
||||||
import { modNames, relicNames, miscNames, resourceNames, gearNames, blueprintNames } from "@/static/data/items";
|
import { modNames, relicNames, miscNames, resourceNames, gearNames, blueprintNames } from "@/static/data/items";
|
||||||
|
import { IMissionInventoryUpdateRequest } from "../types/requestTypes";
|
||||||
|
|
||||||
// need reverse engineer rewardSeed, otherwise ingame displayed rotation reward will be different than added to db or displayed on mission end
|
// need reverse engineer rewardSeed, otherwise ingame displayed rotation reward will be different than added to db or displayed on mission end
|
||||||
const getRewards = (
|
const getRewards = ({
|
||||||
rewardInfo: IMissionInventoryUpdateRewardInfo | undefined
|
RewardInfo
|
||||||
): { InventoryChanges: IMissionInventoryUpdate; MissionRewards: IMissionRewardResponse[] } => {
|
}: IMissionInventoryUpdateRequest): {
|
||||||
if (!rewardInfo) {
|
InventoryChanges: IMissionInventoryUpdateRequest;
|
||||||
|
MissionRewards: IMissionRewardResponse[];
|
||||||
|
} => {
|
||||||
|
if (!RewardInfo) {
|
||||||
return { InventoryChanges: {}, MissionRewards: [] };
|
return { InventoryChanges: {}, MissionRewards: [] };
|
||||||
}
|
}
|
||||||
|
|
||||||
const rewards = (missionsDropTable as { [key: string]: IReward[] })[rewardInfo.node];
|
const rewards = (missionsDropTable as { [key: string]: IReward[] })[RewardInfo.node];
|
||||||
if (!rewards) {
|
if (!rewards) {
|
||||||
return { InventoryChanges: {}, MissionRewards: [] };
|
return { InventoryChanges: {}, MissionRewards: [] };
|
||||||
}
|
}
|
||||||
|
|
||||||
const rotationCount = rewardInfo.rewardQualifications?.length || 0;
|
const rotationCount = RewardInfo.rewardQualifications?.length || 0;
|
||||||
const rotations = getRotations(rotationCount);
|
const rotations = getRotations(rotationCount);
|
||||||
const drops: IReward[] = [];
|
const drops: IReward[] = [];
|
||||||
for (const rotation of rotations) {
|
for (const rotation of rotations) {
|
||||||
@ -54,6 +51,7 @@ const getRewards = (
|
|||||||
// { chance: 10.82, name: "2X Orokin Cell", rotation: "C" },
|
// { chance: 10.82, name: "2X Orokin Cell", rotation: "C" },
|
||||||
// { chance: 10.82, name: "Arrow Mutation", rotation: "C" },
|
// { chance: 10.82, name: "Arrow Mutation", rotation: "C" },
|
||||||
// { chance: 10.82, name: "200 Endo", rotation: "C" },
|
// { chance: 10.82, name: "200 Endo", rotation: "C" },
|
||||||
|
// { chance: 10.82, name: "200 Endo", rotation: "C" },
|
||||||
// { chance: 10.82, name: "2,000,000 Credits Cache", rotation: "C" },
|
// { chance: 10.82, name: "2,000,000 Credits Cache", rotation: "C" },
|
||||||
// { chance: 7.69, name: "Health Restore (Large)", rotation: "C" },
|
// { chance: 7.69, name: "Health Restore (Large)", rotation: "C" },
|
||||||
// { chance: 7.69, name: "Vapor Specter Blueprint", rotation: "C" }
|
// { chance: 7.69, name: "Vapor Specter Blueprint", rotation: "C" }
|
||||||
@ -66,8 +64,8 @@ const getRewards = (
|
|||||||
};
|
};
|
||||||
|
|
||||||
const combineRewardAndLootInventory = (
|
const combineRewardAndLootInventory = (
|
||||||
rewardInventory: IMissionInventoryUpdate,
|
rewardInventory: IMissionInventoryUpdateRequest,
|
||||||
lootInventory: IMissionInventoryUpdate
|
lootInventory: IMissionInventoryUpdateRequest
|
||||||
) => {
|
) => {
|
||||||
const missionCredits = lootInventory.RegularCredits || 0;
|
const missionCredits = lootInventory.RegularCredits || 0;
|
||||||
const creditsBonus = rewardInventory.RegularCredits || 0;
|
const creditsBonus = rewardInventory.RegularCredits || 0;
|
||||||
@ -98,12 +96,10 @@ const getRotations = (rotationCount: number): (string | undefined)[] => {
|
|||||||
if (rotationCount === 0) return [undefined];
|
if (rotationCount === 0) return [undefined];
|
||||||
|
|
||||||
const rotationPattern = ["A", "A", "B", "C"];
|
const rotationPattern = ["A", "A", "B", "C"];
|
||||||
let rotationIndex = 0;
|
|
||||||
const rotatedValues = [];
|
const rotatedValues = [];
|
||||||
|
|
||||||
for (let i = 1; i <= rotationCount; i++) {
|
for (let i = 0; i < rotationCount; i++) {
|
||||||
rotatedValues.push(rotationPattern[rotationIndex]);
|
rotatedValues.push(rotationPattern[i % rotationPattern.length]);
|
||||||
rotationIndex = (rotationIndex + 1) % 3;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return rotatedValues;
|
return rotatedValues;
|
||||||
@ -128,8 +124,8 @@ const getRandomRewardByChance = (data: IReward[] | undefined): IReward | undefin
|
|||||||
|
|
||||||
const formatRewardsToInventoryType = (
|
const formatRewardsToInventoryType = (
|
||||||
rewards: IReward[]
|
rewards: IReward[]
|
||||||
): { InventoryChanges: IMissionInventoryUpdate; MissionRewards: IMissionRewardResponse[] } => {
|
): { InventoryChanges: IMissionInventoryUpdateRequest; MissionRewards: IMissionRewardResponse[] } => {
|
||||||
const InventoryChanges: IMissionInventoryUpdate = {};
|
const InventoryChanges: IMissionInventoryUpdateRequest = {};
|
||||||
const MissionRewards: IMissionRewardResponse[] = [];
|
const MissionRewards: IMissionRewardResponse[] = [];
|
||||||
for (const reward of rewards) {
|
for (const reward of rewards) {
|
||||||
if (itemCheck(InventoryChanges, MissionRewards, reward.name)) {
|
if (itemCheck(InventoryChanges, MissionRewards, reward.name)) {
|
||||||
@ -152,7 +148,7 @@ const formatRewardsToInventoryType = (
|
|||||||
};
|
};
|
||||||
|
|
||||||
const itemCheck = (
|
const itemCheck = (
|
||||||
InventoryChanges: IMissionInventoryUpdate,
|
InventoryChanges: IMissionInventoryUpdateRequest,
|
||||||
MissionRewards: IMissionRewardResponse[],
|
MissionRewards: IMissionRewardResponse[],
|
||||||
name: string
|
name: string
|
||||||
) => {
|
) => {
|
||||||
@ -184,7 +180,7 @@ const getCountFromName = (name: string) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const addRewardResponse = (
|
const addRewardResponse = (
|
||||||
InventoryChanges: IMissionInventoryUpdate,
|
InventoryChanges: IMissionInventoryUpdateRequest,
|
||||||
MissionRewards: IMissionRewardResponse[],
|
MissionRewards: IMissionRewardResponse[],
|
||||||
ItemName: string,
|
ItemName: string,
|
||||||
ItemType: string,
|
ItemType: string,
|
||||||
|
@ -24,6 +24,7 @@ export interface ISuitDatabase {
|
|||||||
FocusLens?: string;
|
FocusLens?: string;
|
||||||
UnlockLevel?: number;
|
UnlockLevel?: number;
|
||||||
_id: Types.ObjectId;
|
_id: Types.ObjectId;
|
||||||
|
ItemId?: IOid;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface SuitConfig {
|
export interface SuitConfig {
|
||||||
|
@ -22,6 +22,7 @@ export interface IWeaponDatabase {
|
|||||||
ModularParts?: string[];
|
ModularParts?: string[];
|
||||||
UnlockLevel?: number;
|
UnlockLevel?: number;
|
||||||
_id?: Types.ObjectId;
|
_id?: Types.ObjectId;
|
||||||
|
ItemId?: IOid;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface WeaponConfig {
|
export interface WeaponConfig {
|
||||||
|
@ -1,94 +0,0 @@
|
|||||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
||||||
import { IOid } from "./commonTypes";
|
|
||||||
import { IDate } from "./inventoryTypes/inventoryTypes";
|
|
||||||
|
|
||||||
export const inventoryFields = ["RawUpgrades", "MiscItems", "Consumables", "Recipes"] as const;
|
|
||||||
export type IInventoryFieldType = (typeof inventoryFields)[number];
|
|
||||||
export interface IMissionInventoryUpdateGear {
|
|
||||||
ItemType: string;
|
|
||||||
ItemName: string;
|
|
||||||
ItemId: IOid;
|
|
||||||
XP: number;
|
|
||||||
UpgradeVer: number;
|
|
||||||
Features: number;
|
|
||||||
Polarized: number;
|
|
||||||
CustomizationSlotPurchases: number;
|
|
||||||
ModSlotPurchases: number;
|
|
||||||
FocusLens: string;
|
|
||||||
Expiry: IDate;
|
|
||||||
Polarity: any[];
|
|
||||||
Configs: any[];
|
|
||||||
ModularParts: any[];
|
|
||||||
SkillTree: string;
|
|
||||||
UpgradeType: string;
|
|
||||||
UpgradeFingerprint: string;
|
|
||||||
OffensiveUpgrade: string;
|
|
||||||
DefensiveUpgrade: string;
|
|
||||||
UpgradesExpiry: IDate;
|
|
||||||
ArchonCrystalUpgrades: any[];
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface IMissionInventoryUpdateItem {
|
|
||||||
ItemCount: number;
|
|
||||||
ItemType: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface IMissionInventoryUpdateCard extends IMissionInventoryUpdateItem {
|
|
||||||
ItemId: IOid;
|
|
||||||
UpgradeFingerprint: string;
|
|
||||||
PendingRerollFingerprint: string;
|
|
||||||
LastAdded: IOid;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface IMissionInventoryUpdateChallange {
|
|
||||||
Name: string;
|
|
||||||
Progress: number;
|
|
||||||
Completed: any[];
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface IMissionInventoryUpdateRewardInfo {
|
|
||||||
node: string;
|
|
||||||
rewardTier?: number;
|
|
||||||
nightmareMode?: boolean;
|
|
||||||
useVaultManifest?: boolean;
|
|
||||||
EnemyCachesFound?: number;
|
|
||||||
toxinOk?: boolean;
|
|
||||||
lostTargetWave?: number;
|
|
||||||
defenseTargetCount?: number;
|
|
||||||
EOM_AFK?: number;
|
|
||||||
rewardQualifications?: string;
|
|
||||||
PurgatoryRewardQualifications?: string;
|
|
||||||
rewardSeed?: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface IMissionInventoryUpdate {
|
|
||||||
rewardsMultiplier?: number;
|
|
||||||
ActiveBoosters?: any[];
|
|
||||||
LongGuns?: IMissionInventoryUpdateGear[];
|
|
||||||
Pistols?: IMissionInventoryUpdateGear[];
|
|
||||||
Suits?: IMissionInventoryUpdateGear[];
|
|
||||||
Melee?: IMissionInventoryUpdateGear[];
|
|
||||||
RawUpgrades?: IMissionInventoryUpdateItem[];
|
|
||||||
MiscItems?: IMissionInventoryUpdateItem[];
|
|
||||||
Consumables?: IMissionInventoryUpdateItem[];
|
|
||||||
Recipes?: IMissionInventoryUpdateItem[];
|
|
||||||
RegularCredits?: number;
|
|
||||||
ChallengeProgress?: IMissionInventoryUpdateChallange[];
|
|
||||||
RewardInfo?: IMissionInventoryUpdateRewardInfo;
|
|
||||||
FusionPoints?: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface IMissionRewardResponse {
|
|
||||||
StoreItem?: string;
|
|
||||||
TypeName: string;
|
|
||||||
UpgradeLevel?: number;
|
|
||||||
ItemCount: number;
|
|
||||||
TweetText: string;
|
|
||||||
ProductCategory: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface IReward {
|
|
||||||
name: string;
|
|
||||||
chance: number;
|
|
||||||
rotation?: string;
|
|
||||||
}
|
|
17
src/types/missionTypes.ts
Normal file
17
src/types/missionTypes.ts
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
export const inventoryFields = ["RawUpgrades", "MiscItems", "Consumables", "Recipes"] as const;
|
||||||
|
export type IInventoryFieldType = (typeof inventoryFields)[number];
|
||||||
|
|
||||||
|
export interface IMissionRewardResponse {
|
||||||
|
StoreItem?: string;
|
||||||
|
TypeName: string;
|
||||||
|
UpgradeLevel?: number;
|
||||||
|
ItemCount: number;
|
||||||
|
TweetText: string;
|
||||||
|
ProductCategory: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface IReward {
|
||||||
|
name: string;
|
||||||
|
chance: number;
|
||||||
|
rotation?: string;
|
||||||
|
}
|
53
src/types/requestTypes.ts
Normal file
53
src/types/requestTypes.ts
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
import {
|
||||||
|
IBooster,
|
||||||
|
IChallengeProgress,
|
||||||
|
IConsumable,
|
||||||
|
ICrewShipSalvagedWeaponSkin,
|
||||||
|
IMiscItem,
|
||||||
|
IMission,
|
||||||
|
IRawUpgrade
|
||||||
|
} from "./inventoryTypes/inventoryTypes";
|
||||||
|
import { IWeaponDatabase } from "./inventoryTypes/weaponTypes";
|
||||||
|
import { ISuitDatabase } from "./inventoryTypes/SuitTypes";
|
||||||
|
|
||||||
|
interface IArtifactsRequest {
|
||||||
|
Upgrade: ICrewShipSalvagedWeaponSkin;
|
||||||
|
LevelDiff: number;
|
||||||
|
Cost: number;
|
||||||
|
FusionPointCost: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IMissionInventoryUpdateRequest {
|
||||||
|
rewardsMultiplier?: number;
|
||||||
|
ActiveBoosters?: IBooster[];
|
||||||
|
LongGuns?: IWeaponDatabase[];
|
||||||
|
Pistols?: IWeaponDatabase[];
|
||||||
|
Suits?: ISuitDatabase[];
|
||||||
|
Melee?: IWeaponDatabase[];
|
||||||
|
RawUpgrades?: IRawUpgrade[];
|
||||||
|
MiscItems?: IMiscItem[];
|
||||||
|
Consumables?: IConsumable[];
|
||||||
|
Recipes?: IConsumable[];
|
||||||
|
RegularCredits?: number;
|
||||||
|
ChallengeProgress?: IChallengeProgress[];
|
||||||
|
RewardInfo?: IMissionInventoryUpdateRequestRewardInfo;
|
||||||
|
FusionPoints?: number;
|
||||||
|
Missions?: IMission;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IMissionInventoryUpdateRequestRewardInfo {
|
||||||
|
node: string;
|
||||||
|
rewardTier?: number;
|
||||||
|
nightmareMode?: boolean;
|
||||||
|
useVaultManifest?: boolean;
|
||||||
|
EnemyCachesFound?: number;
|
||||||
|
toxinOk?: boolean;
|
||||||
|
lostTargetWave?: number;
|
||||||
|
defenseTargetCount?: number;
|
||||||
|
EOM_AFK?: number;
|
||||||
|
rewardQualifications?: string;
|
||||||
|
PurgatoryRewardQualifications?: string;
|
||||||
|
rewardSeed?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export { IArtifactsRequest, IMissionInventoryUpdateRequest };
|
Loading…
x
Reference in New Issue
Block a user