Limit battle save item stocks

This commit is contained in:
2026-07-05 13:37:00 +09:00
parent 4931cb2cf7
commit d9a50ba064
2 changed files with 12 additions and 1 deletions

View File

@@ -86,7 +86,13 @@ const maxBattleLogEntryLength = 96;
const maxBattleBondEntries = 128;
const maxTriggeredBattleEventLength = 96;
const defaultBattleSaveArrayLimit = 128;
const defaultBattleItemStockLimit = 9;
const maxStatusKindsPerUnit = 2;
const maxBattleItemStockById: Record<string, number> = {
bean: 3,
salve: 2,
wine: 1
};
export function normalizeBattleSaveSlot(slot: number, slotCount: number) {
const safeSlot = Number.isFinite(slot) ? Math.floor(slot) : 1;
@@ -367,11 +373,15 @@ function isOptionalItemStockRecord(value: unknown, options: BattleSaveValidation
Object.keys(stocks).length <= itemReferenceLimit(options) &&
Object.entries(stocks).every(
([itemId, count]) =>
(!options.validItemIds || options.validItemIds.has(itemId)) && Number.isInteger(count) && Number(count) >= 0
(!options.validItemIds || options.validItemIds.has(itemId)) && isValidItemStockCount(itemId, count)
)
);
}
function isValidItemStockCount(itemId: string, count: unknown) {
return Number.isInteger(count) && Number(count) >= 0 && Number(count) <= (maxBattleItemStockById[itemId] ?? defaultBattleItemStockLimit);
}
function isOptionalBuffArray(value: unknown, options: BattleSaveValidationOptions) {
return (
value === undefined ||