From 73947f3dc8b2943e890736de28dc40b5fd118f3e Mon Sep 17 00:00:00 2001 From: MagicBot Date: Mon, 19 Oct 2026 14:22:57 -0400 Subject: [PATCH] Drop NONE from rune and deed eq slots Matches ItemParser, so every CObjectTemplate returns an empty slot set for the exporter's ["NONE"] mask. All 2695 RUNE and 880 DEED templates have ["NONE"] only; nothing reads these sets yet. Co-Authored-By: Claude Opus 5.5 --- src/engine/parsers/cache/DeedParser.java | 6 ++++++ src/engine/parsers/cache/RuneParser.java | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/src/engine/parsers/cache/DeedParser.java b/src/engine/parsers/cache/DeedParser.java index c4e3083a..5743fb54 100644 --- a/src/engine/parsers/cache/DeedParser.java +++ b/src/engine/parsers/cache/DeedParser.java @@ -97,8 +97,14 @@ public class DeedParser { deed.item_type = CacheParserUtil.readEnum(mbEnums.ItemType.class, deedJson.getString("item_type"), templateId, "item_type"); deed.item_eq_slots_value = deedJson.getInt("item_eq_slots_value"); deed.item_eq_slots_type = deedJson.getBoolean("item_eq_slots_type"); + + // The exporter writes ["NONE"] for an empty slot mask + deed.item_eq_slots_or.addAll(CacheParserUtil.readEnumSet(mbEnums.EquipSlotType.class, deedJson.getJSONArray("item_eq_slots_or"), templateId, "item_eq_slots_or")); + deed.item_eq_slots_or.remove(mbEnums.EquipSlotType.NONE); deed.item_eq_slots_and.addAll(CacheParserUtil.readEnumSet(mbEnums.EquipSlotType.class, deedJson.getJSONArray("item_eq_slots_and"), templateId, "item_eq_slots_and")); + deed.item_eq_slots_and.remove(mbEnums.EquipSlotType.NONE); + deed.item_takeable = deedJson.getBoolean("item_takeable"); deed.item_value = deedJson.getInt("item_value"); deed.item_wt = deedJson.getInt("item_wt"); diff --git a/src/engine/parsers/cache/RuneParser.java b/src/engine/parsers/cache/RuneParser.java index f3358c28..bfd5bd30 100644 --- a/src/engine/parsers/cache/RuneParser.java +++ b/src/engine/parsers/cache/RuneParser.java @@ -112,8 +112,14 @@ public class RuneParser { rune.item_type = CacheParserUtil.readEnum(mbEnums.ItemType.class, runeJson.getString("item_type"), templateId, "item_type"); rune.item_eq_slots_value = runeJson.getInt("item_eq_slots_value"); rune.item_eq_slots_type = runeJson.getBoolean("item_eq_slots_type"); + + // The exporter writes ["NONE"] for an empty slot mask + rune.item_eq_slots_or.addAll(CacheParserUtil.readEnumSet(mbEnums.EquipSlotType.class, runeJson.getJSONArray("item_eq_slots_or"), templateId, "item_eq_slots_or")); + rune.item_eq_slots_or.remove(mbEnums.EquipSlotType.NONE); rune.item_eq_slots_and.addAll(CacheParserUtil.readEnumSet(mbEnums.EquipSlotType.class, runeJson.getJSONArray("item_eq_slots_and"), templateId, "item_eq_slots_and")); + rune.item_eq_slots_and.remove(mbEnums.EquipSlotType.NONE); + rune.item_takeable = runeJson.getBoolean("item_takeable"); rune.item_value = runeJson.getInt("item_value"); rune.item_wt = runeJson.getInt("item_wt");