From ca193b1a5afcf9891149e386b7b4c97da6e0bdc4 Mon Sep 17 00:00:00 2001 From: hungdk Date: Sun, 28 Sep 2025 22:07:11 +0700 Subject: [PATCH] Fix missing ivtr equipable item --- .../Scripts/Managers/EC_IvtrType.cs | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_IvtrType.cs b/Assets/PerfectWorld/Scripts/Managers/EC_IvtrType.cs index 3b60ba17d5..3cdbafa880 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_IvtrType.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_IvtrType.cs @@ -91,6 +91,20 @@ namespace PerfectWorld.Scripts.Managers } } + // Decoration -> derive from sub-type mask (neck, waist, etc.) + foreach (var it in edm.decoration_essence_array) + { + if (it.id == id) + { + var slot = ResolveDecorationSlotBySubtype(edm, it.id_sub_type); + if (slot < IndexOfIteminEquipmentInventory.SIZE_EQUIPIVTR) + { + return (byte)slot; + } + break; + } + } + // Fashion -> derive from sub-type mask foreach (var it in edm.fashion_essence_array) { @@ -165,7 +179,6 @@ namespace PerfectWorld.Scripts.Managers if (sub.id != armorSubTypeId) continue; uint mask = sub.equip_mask; if ((mask & (1u << (int)IndexOfIteminEquipmentInventory.EQUIPIVTR_HEAD)) != 0) return IndexOfIteminEquipmentInventory.EQUIPIVTR_HEAD; - if ((mask & (1u << (int)IndexOfIteminEquipmentInventory.EQUIPIVTR_NECK)) != 0) return IndexOfIteminEquipmentInventory.EQUIPIVTR_NECK; if ((mask & (1u << (int)IndexOfIteminEquipmentInventory.EQUIPIVTR_SHOULDER)) != 0) return IndexOfIteminEquipmentInventory.EQUIPIVTR_SHOULDER; if ((mask & (1u << (int)IndexOfIteminEquipmentInventory.EQUIPIVTR_BODY)) != 0) return IndexOfIteminEquipmentInventory.EQUIPIVTR_BODY; if ((mask & (1u << (int)IndexOfIteminEquipmentInventory.EQUIPIVTR_WAIST)) != 0) return IndexOfIteminEquipmentInventory.EQUIPIVTR_WAIST; @@ -179,6 +192,22 @@ namespace PerfectWorld.Scripts.Managers return IndexOfIteminEquipmentInventory.SIZE_EQUIPIVTR; } + private static IndexOfIteminEquipmentInventory ResolveDecorationSlotBySubtype(elementdataman edm, uint decorationSubTypeId) + { + foreach (var sub in edm.decoration_sub_type_array) + { + if (sub.id != decorationSubTypeId) continue; + uint mask = sub.equip_mask; + if ((mask & (1u << (int)IndexOfIteminEquipmentInventory.EQUIPIVTR_NECK)) != 0) return IndexOfIteminEquipmentInventory.EQUIPIVTR_NECK; + if ((mask & (1u << (int)IndexOfIteminEquipmentInventory.EQUIPIVTR_WAIST)) != 0) return IndexOfIteminEquipmentInventory.EQUIPIVTR_WAIST; + if ((mask & (1u << (int)IndexOfIteminEquipmentInventory.EQUIPIVTR_FINGER1)) != 0) return IndexOfIteminEquipmentInventory.EQUIPIVTR_FINGER1; + if ((mask & (1u << (int)IndexOfIteminEquipmentInventory.EQUIPIVTR_FINGER2)) != 0) return IndexOfIteminEquipmentInventory.EQUIPIVTR_FINGER2; + if ((mask & (1u << (int)IndexOfIteminEquipmentInventory.EQUIPIVTR_WRIST)) != 0) return IndexOfIteminEquipmentInventory.EQUIPIVTR_WRIST; + break; + } + return IndexOfIteminEquipmentInventory.SIZE_EQUIPIVTR; + } + private static IndexOfIteminEquipmentInventory ResolveFashionSlotBySubtype(elementdataman edm, uint fashionSubTypeId) { foreach (var sub in edm.fashion_sub_type_array)