diff options
Diffstat (limited to 'packets/equippable_item_information.gd')
-rw-r--r-- | packets/equippable_item_information.gd | 101 |
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 |