From ea9a1ca79555d00fae7c1a7274d84728d0877dd9 Mon Sep 17 00:00:00 2001 From: Wickedness Date: Sun, 5 Jul 2026 15:40:09 +0900 Subject: [PATCH] Validate equipment slot bonuses --- scripts/verify-equipment-catalog-data.mjs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/scripts/verify-equipment-catalog-data.mjs b/scripts/verify-equipment-catalog-data.mjs index d4fb643..f3a2b34 100644 --- a/scripts/verify-equipment-catalog-data.mjs +++ b/scripts/verify-equipment-catalog-data.mjs @@ -67,6 +67,7 @@ function validateItemCatalog(errors, itemEntries, slotKeys) { if (!validRanks.has(item.rank)) { errors.push(`${context}: unknown rank "${item.rank}"`); } + validateSlotBonus(errors, item, context); if (!Array.isArray(item.effects) || item.effects.length === 0) { errors.push(`${context}: effects must contain at least one entry`); } else { @@ -92,6 +93,15 @@ function validateItemCatalog(errors, itemEntries, slotKeys) { }); } +function validateSlotBonus(errors, item, context) { + if (item.slot === 'weapon' && !Number.isInteger(item.attackBonus) && !Number.isInteger(item.strategyBonus)) { + errors.push(`${context}: weapon should provide attackBonus or strategyBonus`); + } + if (item.slot === 'armor' && !Number.isInteger(item.defenseBonus)) { + errors.push(`${context}: armor should provide defenseBonus`); + } +} + function validateUnitEquipment(errors, unitEntries, itemCatalog, itemKeys, equipmentSlots, equipmentExpToNext) { unitEntries.forEach(({ context, unit }) => { if (!unit?.equipment) {