forked from OpenWF/SpaceNinjaServer
fix: endo pickups (#359)
This commit is contained in:
parent
015619110c
commit
d0b8c8a1d3
@ -4,6 +4,7 @@ import { combineRewardAndLootInventory, getRewards } from "@/src/services/missio
|
|||||||
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
import { getJSONfromString } from "@/src/helpers/stringHelpers";
|
||||||
import { getAccountIdForRequest } from "@/src/services/loginService";
|
import { getAccountIdForRequest } from "@/src/services/loginService";
|
||||||
import { IMissionInventoryUpdateRequest } from "@/src/types/requestTypes";
|
import { IMissionInventoryUpdateRequest } from "@/src/types/requestTypes";
|
||||||
|
import { logger } from "@/src/utils/logger";
|
||||||
/*
|
/*
|
||||||
**** INPUT ****
|
**** INPUT ****
|
||||||
- [ ] crossPlaySetting
|
- [ ] crossPlaySetting
|
||||||
@ -52,6 +53,8 @@ const missionInventoryUpdateController: RequestHandler = async (req, res): Promi
|
|||||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-call
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-call
|
||||||
const lootInventory = getJSONfromString(req.body.toString()) as IMissionInventoryUpdateRequest;
|
const lootInventory = getJSONfromString(req.body.toString()) as IMissionInventoryUpdateRequest;
|
||||||
|
|
||||||
|
logger.debug("missionInventoryUpdate with lootInventory =", lootInventory);
|
||||||
|
|
||||||
const { InventoryChanges, MissionRewards } = getRewards(lootInventory);
|
const { InventoryChanges, MissionRewards } = getRewards(lootInventory);
|
||||||
|
|
||||||
const { combinedInventoryChanges, TotalCredits, CreditsBonus, MissionCredits, FusionPoints } =
|
const { combinedInventoryChanges, TotalCredits, CreditsBonus, MissionCredits, FusionPoints } =
|
||||||
@ -66,7 +69,7 @@ const missionInventoryUpdateController: RequestHandler = async (req, res): Promi
|
|||||||
TotalCredits,
|
TotalCredits,
|
||||||
CreditsBonus,
|
CreditsBonus,
|
||||||
MissionCredits,
|
MissionCredits,
|
||||||
...(FusionPoints !== undefined && { FusionPoints })
|
FusionPoints
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error("Error parsing JSON data:", err);
|
console.error("Error parsing JSON data:", err);
|
||||||
|
@ -54,12 +54,22 @@ const combineRewardAndLootInventory = (
|
|||||||
const missionCredits = lootInventory.RegularCredits || 0;
|
const missionCredits = lootInventory.RegularCredits || 0;
|
||||||
const creditsBonus = rewardInventory.RegularCredits || 0;
|
const creditsBonus = rewardInventory.RegularCredits || 0;
|
||||||
const totalCredits = missionCredits + creditsBonus;
|
const totalCredits = missionCredits + creditsBonus;
|
||||||
const FusionPoints = (lootInventory.FusionPoints || 0) + (rewardInventory.FusionPoints || 0) || undefined;
|
let FusionPoints = rewardInventory.FusionPoints || 0;
|
||||||
|
|
||||||
|
// Discharge Endo picked up during the mission
|
||||||
|
if (lootInventory.FusionBundles) {
|
||||||
|
for (const fusionBundle of lootInventory.FusionBundles) {
|
||||||
|
if (fusionBundle.ItemType in fusionBundles) {
|
||||||
|
FusionPoints += fusionBundles[fusionBundle.ItemType] * fusionBundle.ItemCount;
|
||||||
|
} else {
|
||||||
|
logger.error(`unknown fusion bundle: ${fusionBundle.ItemType}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
lootInventory.FusionBundles = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
lootInventory.RegularCredits = totalCredits;
|
lootInventory.RegularCredits = totalCredits;
|
||||||
if (FusionPoints) {
|
lootInventory.FusionPoints = FusionPoints;
|
||||||
lootInventory.FusionPoints = FusionPoints;
|
|
||||||
}
|
|
||||||
inventoryFields.forEach((field: IInventoryFieldType) => {
|
inventoryFields.forEach((field: IInventoryFieldType) => {
|
||||||
if (rewardInventory[field] && !lootInventory[field]) {
|
if (rewardInventory[field] && !lootInventory[field]) {
|
||||||
lootInventory[field] = [];
|
lootInventory[field] = [];
|
||||||
@ -72,7 +82,7 @@ const combineRewardAndLootInventory = (
|
|||||||
TotalCredits: [totalCredits, totalCredits],
|
TotalCredits: [totalCredits, totalCredits],
|
||||||
CreditsBonus: [creditsBonus, creditsBonus],
|
CreditsBonus: [creditsBonus, creditsBonus],
|
||||||
MissionCredits: [missionCredits, missionCredits],
|
MissionCredits: [missionCredits, missionCredits],
|
||||||
...(FusionPoints !== undefined && { FusionPoints })
|
FusionPoints: FusionPoints
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -123,8 +133,9 @@ const creditBundles: Record<string, number> = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const fusionBundles: Record<string, number> = {
|
const fusionBundles: Record<string, number> = {
|
||||||
"/Lotus/StoreItems/Upgrades/Mods/FusionBundles/UncommonFusionBundle": 50,
|
"/Lotus/Upgrades/Mods/FusionBundles/CommonFusionBundle": 15,
|
||||||
"/Lotus/StoreItems/Upgrades/Mods/FusionBundles/RareFusionBundle": 80
|
"/Lotus/Upgrades/Mods/FusionBundles/UncommonFusionBundle": 50,
|
||||||
|
"/Lotus/Upgrades/Mods/FusionBundles/RareFusionBundle": 80
|
||||||
};
|
};
|
||||||
|
|
||||||
const formatRewardsToInventoryType = (
|
const formatRewardsToInventoryType = (
|
||||||
@ -136,12 +147,12 @@ const formatRewardsToInventoryType = (
|
|||||||
if (reward.type in creditBundles) {
|
if (reward.type in creditBundles) {
|
||||||
InventoryChanges.RegularCredits ??= 0;
|
InventoryChanges.RegularCredits ??= 0;
|
||||||
InventoryChanges.RegularCredits += creditBundles[reward.type] * reward.itemCount;
|
InventoryChanges.RegularCredits += creditBundles[reward.type] * reward.itemCount;
|
||||||
} else if (reward.type in fusionBundles) {
|
|
||||||
InventoryChanges.FusionPoints ??= 0;
|
|
||||||
InventoryChanges.FusionPoints += fusionBundles[reward.type] * reward.itemCount;
|
|
||||||
} else {
|
} else {
|
||||||
const type = reward.type.replace("/Lotus/StoreItems/", "/Lotus/");
|
const type = reward.type.replace("/Lotus/StoreItems/", "/Lotus/");
|
||||||
if (type in ExportUpgrades) {
|
if (type in fusionBundles) {
|
||||||
|
InventoryChanges.FusionPoints ??= 0;
|
||||||
|
InventoryChanges.FusionPoints += fusionBundles[type] * reward.itemCount;
|
||||||
|
} else if (type in ExportUpgrades) {
|
||||||
addRewardResponse(InventoryChanges, MissionRewards, type, reward.itemCount, "RawUpgrades");
|
addRewardResponse(InventoryChanges, MissionRewards, type, reward.itemCount, "RawUpgrades");
|
||||||
} else if (type in ExportGear) {
|
} else if (type in ExportGear) {
|
||||||
addRewardResponse(InventoryChanges, MissionRewards, type, reward.itemCount, "Consumables");
|
addRewardResponse(InventoryChanges, MissionRewards, type, reward.itemCount, "Consumables");
|
||||||
|
@ -7,6 +7,7 @@ import {
|
|||||||
ICrewShipSalvagedWeaponSkin,
|
ICrewShipSalvagedWeaponSkin,
|
||||||
IEvolutionProgress,
|
IEvolutionProgress,
|
||||||
IMiscItem,
|
IMiscItem,
|
||||||
|
ITypeCount,
|
||||||
IMission,
|
IMission,
|
||||||
IRawUpgrade,
|
IRawUpgrade,
|
||||||
ISeasonChallenge
|
ISeasonChallenge
|
||||||
@ -45,6 +46,7 @@ export interface IMissionInventoryUpdateRequest {
|
|||||||
Pistols?: IEquipmentClient[];
|
Pistols?: IEquipmentClient[];
|
||||||
Suits?: IEquipmentClient[];
|
Suits?: IEquipmentClient[];
|
||||||
Melee?: IEquipmentClient[];
|
Melee?: IEquipmentClient[];
|
||||||
|
FusionBundles?: ITypeCount[];
|
||||||
RawUpgrades?: IRawUpgrade[];
|
RawUpgrades?: IRawUpgrade[];
|
||||||
MiscItems?: IMiscItem[];
|
MiscItems?: IMiscItem[];
|
||||||
Consumables?: IConsumable[];
|
Consumables?: IConsumable[];
|
||||||
@ -52,9 +54,10 @@ export interface IMissionInventoryUpdateRequest {
|
|||||||
RegularCredits?: number;
|
RegularCredits?: number;
|
||||||
ChallengeProgress?: IChallengeProgress[];
|
ChallengeProgress?: IChallengeProgress[];
|
||||||
RewardInfo?: IMissionInventoryUpdateRequestRewardInfo;
|
RewardInfo?: IMissionInventoryUpdateRequestRewardInfo;
|
||||||
FusionPoints?: number;
|
|
||||||
Missions?: IMission;
|
Missions?: IMission;
|
||||||
EvolutionProgress?: IEvolutionProgress[];
|
EvolutionProgress?: IEvolutionProgress[];
|
||||||
|
|
||||||
|
FusionPoints?: number; // Not a part of the request, but we put it in this struct as an intermediate storage.
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IMissionInventoryUpdateRequestRewardInfo {
|
export interface IMissionInventoryUpdateRequestRewardInfo {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user