feat: apply & track daily standing limit when trading in medallions

This commit is contained in:
Sainan 2025-01-16 18:05:17 +01:00
parent 8ee22e9e88
commit 983aa94802
2 changed files with 46 additions and 4 deletions

View File

@ -1,6 +1,6 @@
import { RequestHandler } from "express"; import { RequestHandler } from "express";
import { getAccountIdForRequest } from "@/src/services/loginService"; import { getAccountIdForRequest } from "@/src/services/loginService";
import { addMiscItems, getInventory } from "@/src/services/inventoryService"; import { addMiscItems, getInventory, getStandingLimit, updateStandingLimit } from "@/src/services/inventoryService";
import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes"; import { IMiscItem } from "@/src/types/inventoryTypes/inventoryTypes";
import { IOid } from "@/src/types/commonTypes"; import { IOid } from "@/src/types/commonTypes";
import { ExportSyndicates, ISyndicate } from "warframe-public-export-plus"; import { ExportSyndicates, ISyndicate } from "warframe-public-export-plus";
@ -36,10 +36,13 @@ export const syndicateStandingBonusController: RequestHandler = async (req, res)
if (syndicate.Standing + gainedStanding > max) { if (syndicate.Standing + gainedStanding > max) {
gainedStanding = max - syndicate.Standing; gainedStanding = max - syndicate.Standing;
} }
if (gainedStanding > getStandingLimit(inventory, syndicateMeta.dailyLimitBin)) {
gainedStanding = getStandingLimit(inventory, syndicateMeta.dailyLimitBin);
}
syndicate.Standing += gainedStanding; syndicate.Standing += gainedStanding;
// TODO: Subtract from daily limit bin; maybe also a cheat to skip that. updateStandingLimit(inventory, syndicateMeta.dailyLimitBin, gainedStanding);
await inventory.save(); await inventory.save();

View File

@ -16,7 +16,8 @@ import {
IWeaponSkinClient, IWeaponSkinClient,
TEquipmentKey, TEquipmentKey,
equipmentKeys, equipmentKeys,
IFusionTreasure IFusionTreasure,
IInventoryDatabase
} from "@/src/types/inventoryTypes/inventoryTypes"; } from "@/src/types/inventoryTypes/inventoryTypes";
import { IGenericUpdate } from "../types/genericUpdate"; import { IGenericUpdate } from "../types/genericUpdate";
import { import {
@ -36,7 +37,8 @@ import {
ExportRecipes, ExportRecipes,
ExportResources, ExportResources,
ExportSentinels, ExportSentinels,
ExportUpgrades ExportUpgrades,
TStandingLimitBin
} from "warframe-public-export-plus"; } from "warframe-public-export-plus";
import { createShip } from "./shipService"; import { createShip } from "./shipService";
@ -492,6 +494,43 @@ export const updateCurrencyByAccountId = async (
return currencyChanges; return currencyChanges;
}; };
const standingLimitBinToInventoryKey: Record<
Exclude<TStandingLimitBin, "STANDING_LIMIT_BIN_NONE">,
keyof IInventoryDatabase
> = {
STANDING_LIMIT_BIN_NORMAL: "DailyAffiliation",
STANDING_LIMIT_BIN_PVP: "DailyAffiliationPvp",
STANDING_LIMIT_BIN_LIBRARY: "DailyAffiliationLibrary",
STANDING_LIMIT_BIN_CETUS: "DailyAffiliationCetus",
STANDING_LIMIT_BIN_QUILLS: "DailyAffiliationQuills",
STANDING_LIMIT_BIN_SOLARIS: "DailyAffiliationSolaris",
STANDING_LIMIT_BIN_VENTKIDS: "DailyAffiliationVentkids",
STANDING_LIMIT_BIN_VOX: "DailyAffiliationVox",
STANDING_LIMIT_BIN_ENTRATI: "DailyAffiliationEntrati",
STANDING_LIMIT_BIN_NECRALOID: "DailyAffiliationNecraloid",
STANDING_LIMIT_BIN_ZARIMAN: "DailyAffiliationZariman",
STANDING_LIMIT_BIN_KAHL: "DailyAffiliationKahl",
STANDING_LIMIT_BIN_CAVIA: "DailyAffiliationCavia",
STANDING_LIMIT_BIN_HEX: "DailyAffiliationHex"
};
export const getStandingLimit = (inventory: TInventoryDatabaseDocument, bin: TStandingLimitBin): number => {
if (bin == "STANDING_LIMIT_BIN_NONE") {
return Number.MAX_SAFE_INTEGER;
}
return inventory[standingLimitBinToInventoryKey[bin]] as number;
};
export const updateStandingLimit = (
inventory: TInventoryDatabaseDocument,
bin: TStandingLimitBin,
subtrahend: number
): void => {
if (bin != "STANDING_LIMIT_BIN_NONE") {
(inventory[standingLimitBinToInventoryKey[bin]] as number) -= subtrahend;
}
};
// TODO: AffiliationMods support (Nightwave). // TODO: AffiliationMods support (Nightwave).
export const updateGeneric = async (data: IGenericUpdate, accountId: string): Promise<void> => { export const updateGeneric = async (data: IGenericUpdate, accountId: string): Promise<void> => {
const inventory = await getInventory(accountId); const inventory = await getInventory(accountId);