summaryrefslogtreecommitdiff
path: root/packets/equippable_item_information.gd
diff options
context:
space:
mode:
authorDaniel Weipert <git@mail.dweipert.de>2024-12-13 14:53:38 +0100
committerDaniel Weipert <git@mail.dweipert.de>2024-12-13 14:53:38 +0100
commitca4d1945598863d0ce297f4272317e5dd5797f88 (patch)
treec2675b394140a71c7eee04034f087c107dcd7c9c /packets/equippable_item_information.gd
parenta22381eff3bf2286ee27f4d15ddf4c431ea063be (diff)
next commit
Diffstat (limited to 'packets/equippable_item_information.gd')
-rw-r--r--packets/equippable_item_information.gd101
1 files changed, 101 insertions, 0 deletions
diff --git a/packets/equippable_item_information.gd b/packets/equippable_item_information.gd
new file mode 100644
index 0000000..8ba0629
--- /dev/null
+++ b/packets/equippable_item_information.gd
@@ -0,0 +1,101 @@
+## rAthena References:
+## - EQUIPITEM_INFO
+## - clif_item_equip
+class_name EquippableItemInformation
+extends PacketChunk
+
+
+const BYTE_LENGTH := 22
+
+
+## Byte Type: u16
+## Byte Length: 2
+var index: int
+
+## Byte Type: u32
+## Byte Length: 4
+var item_id: int
+
+## Byte Type: u8
+## Byte Length: 1
+var item_type: int
+
+## Byte Type: u32
+## Byte Length: 4
+var equip_position: int
+
+## Byte Type: u32
+## Byte Length: 4
+var equipped_position: int
+
+## Byte Type: u32
+## Byte Length: 4
+var slot: int
+
+## Byte Type: u32
+## Byte Length: 4
+var hire_expiration_date: int
+
+## Byte Type: u16
+## Byte Length: 2
+var bind_on_equip_type: int
+
+## Byte Type: u16
+## Byte Length: 2
+var w_item_sprite_number: int
+
+## Byte Type: u8
+## Byte Length: 1
+## always 0 ?
+var option_count: int
+
+## Byte Length: 5 * ItemOption.BYTE_LENGTH
+var option_data: Array[ItemOption]
+
+## Byte Type: u8
+## Byte Length: 1
+var refinement_level: int
+
+## Byte Type: u8
+## Byte Length: 1
+var enchantment_level: int
+
+## Byte Type: u8
+## Byte Length: 1
+var flags: int
+
+
+static func from_bytes(bytes: PackedByteArray):
+ var info = EquippableItemInformation.new()
+
+ info.index = bytes.decode_u16(0)
+ info.item_id = bytes.decode_u32(2)
+ info.item_type = bytes.decode_u8(6)
+ info.equipped_position = bytes.decode_u32(7)
+ info.equipped_position = bytes.decode_u32(11)
+ info.slot = bytes.decode_u32(15)
+ info.hire_expiration_date = bytes.decode_u32(19)
+ info.bind_on_equip_type = bytes.decode_u16(23)
+ info.w_item_sprite_number = bytes.decode_u16(25)
+ info.option_count = bytes.decode_u8(27)
+
+ var option_data_end = 28 + (5 * ItemOption.BYTE_LENGTH)
+ info.option_data = ItemOption.array_from_bytes(bytes.slice(28, option_data_end))
+
+ info.refinement_level = bytes.decode_u8(option_data_end)
+ info.enchantment_level = bytes.decode_u8(option_data_end + 1)
+ info.flags = bytes.decode_u8(option_data_end + 2)
+
+ return info
+
+
+static func array_from_bytes(bytes: PackedByteArray) -> Array[EquippableItemInformation]:
+ var array: Array[EquippableItemInformation] = []
+
+ var offset = 0
+ while offset < bytes.size():
+ var chunk = from_bytes(bytes.slice(offset))
+ array.append(chunk)
+ offset += chunk.byte_length
+
+ return array