summaryrefslogtreecommitdiff
path: root/packets
diff options
context:
space:
mode:
Diffstat (limited to 'packets')
-rw-r--r--packets/character_server/block_character_packet.gd (renamed from packets/block_character_packet.gd)8
-rw-r--r--packets/character_server/character_list_size_packet.gd (renamed from packets/character_list_size_packet.gd)0
-rw-r--r--packets/character_server/character_selection_failed_packet.gd (renamed from packets/character_selection_failed_packet.gd)0
-rw-r--r--packets/character_server/character_selection_success_packet.gd (renamed from packets/character_selection_success_packet.gd)0
-rw-r--r--packets/character_server/character_server_login_success_character_list_packet.gd (renamed from packets/character_server_login_success_character_list_packet.gd)0
-rw-r--r--packets/character_server/character_server_login_success_packet.gd (renamed from packets/character_server_login_success_packet.gd)0
-rw-r--r--packets/character_server/pin_code_state_packet.gd (renamed from packets/pin_code_state_packet.gd)0
-rw-r--r--packets/character_server/request_character_list_success_packet.gd (renamed from packets/request_character_list_success_packet.gd)0
-rw-r--r--packets/client/character_server/character_server_keep_alive_packet.gd (renamed from packets/character_server_keep_alive_packet.gd)0
-rw-r--r--packets/client/character_server/character_server_login_packet.gd (renamed from packets/character_server_login_packet.gd)0
-rw-r--r--packets/client/character_server/request_character_list_packet.gd (renamed from packets/request_character_list_packet.gd)0
-rw-r--r--packets/client/character_server/select_character_packet.gd (renamed from packets/select_character_packet.gd)0
-rw-r--r--packets/client/login_server/login_server_keep_alive_packet.gd (renamed from packets/login_server_keep_alive_packet.gd)0
-rw-r--r--packets/client/login_server/login_server_login_packet.gd (renamed from packets/login_server_login_packet.gd)0
-rw-r--r--packets/client/map_server/map_loaded_packet.gd (renamed from packets/map_loaded_packet.gd)0
-rw-r--r--packets/client/map_server/map_server_login_packet.gd (renamed from packets/map_server_login_packet.gd)0
-rw-r--r--packets/client/map_server/send_chat_message_packet.gd (renamed from packets/send_chat_message_packet.gd)9
-rw-r--r--packets/equippable_item_information.gd47
-rw-r--r--packets/equippable_switch_item_information.gd37
-rw-r--r--packets/item_option.gd16
-rw-r--r--packets/login_server/login_server_login_success_packet.gd (renamed from packets/login_server_login_success_packet.gd)0
-rw-r--r--packets/map_server/achievement_list_packet.gd (renamed from packets/achievement_list_packet.gd)0
-rw-r--r--packets/map_server/achievement_update_packet.gd (renamed from packets/achievement_update_packet.gd)0
-rw-r--r--packets/map_server/broadcast_formatted_message_packet.gd74
-rw-r--r--packets/map_server/change_map_packet.gd (renamed from packets/change_map_packet.gd)0
-rw-r--r--packets/map_server/close_dialog_button_packet.gd23
-rw-r--r--packets/map_server/couple_status_packet.gd (renamed from packets/couple_status_packet.gd)0
-rw-r--r--packets/map_server/display_emotion_packet.gd27
-rw-r--r--packets/map_server/entity_appeared_2_packet.gd31
-rw-r--r--packets/map_server/entity_disappeared_packet.gd27
-rw-r--r--packets/map_server/equippable_item_list_packet.gd (renamed from packets/equippable_item_list_packet.gd)4
-rw-r--r--packets/map_server/equippable_switch_item_list_packet.gd25
-rw-r--r--packets/map_server/friend_list_packet.gd (renamed from packets/friend_list_packet.gd)0
-rw-r--r--packets/map_server/initial_status_packet.gd18
-rw-r--r--packets/map_server/inventory_end_packet.gd (renamed from packets/inventory_end_packet.gd)0
-rw-r--r--packets/map_server/inventory_start_packet.gd (renamed from packets/inventory_start_packet.gd)0
-rw-r--r--packets/map_server/map_server_login_success_packet.gd (renamed from packets/map_server_login_success_packet.gd)0
-rw-r--r--packets/map_server/map_type_packet.gd27
-rw-r--r--packets/map_server/moving_entity_appeared_packet.gd31
-rw-r--r--packets/map_server/navigate_to_target_packet.gd58
-rw-r--r--packets/map_server/new_mail_status_packet.gd (renamed from packets/new_mail_status_packet.gd)0
-rw-r--r--packets/map_server/parameter_change_2_packet.gd27
-rw-r--r--packets/map_server/parameter_change_3_packet.gd27
-rw-r--r--packets/map_server/parameter_change_packet.gd (renamed from packets/parameter_change_packet.gd)4
-rw-r--r--packets/map_server/quest_effect_packet.gd39
-rw-r--r--packets/map_server/quest_list_packet.gd (renamed from packets/quest_list_packet.gd)0
-rw-r--r--packets/map_server/regular_item_list_packet.gd (renamed from packets/regular_item_list_packet.gd)4
-rw-r--r--packets/map_server/reputation_packet.gd31
-rw-r--r--packets/map_server/server_message_packet.gd (renamed from packets/server_message_packet.gd)2
-rw-r--r--packets/map_server/sprite_change_packet.gd (renamed from packets/sprite_change_packet.gd)0
-rw-r--r--packets/map_server/update_attack_range_packet.gd (renamed from packets/update_attack_range_packet.gd)0
-rw-r--r--packets/map_server/update_configuration_packet.gd26
-rw-r--r--packets/map_server/update_critical_weight_packet.gd (renamed from packets/update_critical_weight_packet.gd)0
-rw-r--r--packets/map_server/update_hotkeys_packet.gd17
-rw-r--r--packets/map_server/update_party_invitation_state_packet.gd22
-rw-r--r--packets/map_server/update_show_equip_packet.gd21
-rw-r--r--packets/map_server/update_skill_tree_packet.gd26
-rw-r--r--packets/regular_item_information.gd30
58 files changed, 670 insertions, 68 deletions
diff --git a/packets/block_character_packet.gd b/packets/character_server/block_character_packet.gd
index 96e38d8..aa35cce 100644
--- a/packets/block_character_packet.gd
+++ b/packets/character_server/block_character_packet.gd
@@ -11,13 +11,7 @@ const BYTE_LENGTH := 0
## Byte Length: 2
var packet_length: int
-## Byte Type: u32
-## Byte Length: 4
-var page_to_load: int
-
-## Byte Type: u16
-## Byte Length: 2
-var character_slot_count: int
+# TODO
static func from_bytes(bytes: PackedByteArray):
diff --git a/packets/character_list_size_packet.gd b/packets/character_server/character_list_size_packet.gd
index 9491e1d..9491e1d 100644
--- a/packets/character_list_size_packet.gd
+++ b/packets/character_server/character_list_size_packet.gd
diff --git a/packets/character_selection_failed_packet.gd b/packets/character_server/character_selection_failed_packet.gd
index 5f6cb8a..5f6cb8a 100644
--- a/packets/character_selection_failed_packet.gd
+++ b/packets/character_server/character_selection_failed_packet.gd
diff --git a/packets/character_selection_success_packet.gd b/packets/character_server/character_selection_success_packet.gd
index b188d42..b188d42 100644
--- a/packets/character_selection_success_packet.gd
+++ b/packets/character_server/character_selection_success_packet.gd
diff --git a/packets/character_server_login_success_character_list_packet.gd b/packets/character_server/character_server_login_success_character_list_packet.gd
index e3a649b..e3a649b 100644
--- a/packets/character_server_login_success_character_list_packet.gd
+++ b/packets/character_server/character_server_login_success_character_list_packet.gd
diff --git a/packets/character_server_login_success_packet.gd b/packets/character_server/character_server_login_success_packet.gd
index f3da048..f3da048 100644
--- a/packets/character_server_login_success_packet.gd
+++ b/packets/character_server/character_server_login_success_packet.gd
diff --git a/packets/pin_code_state_packet.gd b/packets/character_server/pin_code_state_packet.gd
index ab75618..ab75618 100644
--- a/packets/pin_code_state_packet.gd
+++ b/packets/character_server/pin_code_state_packet.gd
diff --git a/packets/request_character_list_success_packet.gd b/packets/character_server/request_character_list_success_packet.gd
index 342bccb..342bccb 100644
--- a/packets/request_character_list_success_packet.gd
+++ b/packets/character_server/request_character_list_success_packet.gd
diff --git a/packets/character_server_keep_alive_packet.gd b/packets/client/character_server/character_server_keep_alive_packet.gd
index 81f918c..81f918c 100644
--- a/packets/character_server_keep_alive_packet.gd
+++ b/packets/client/character_server/character_server_keep_alive_packet.gd
diff --git a/packets/character_server_login_packet.gd b/packets/client/character_server/character_server_login_packet.gd
index fb8a7ea..fb8a7ea 100644
--- a/packets/character_server_login_packet.gd
+++ b/packets/client/character_server/character_server_login_packet.gd
diff --git a/packets/request_character_list_packet.gd b/packets/client/character_server/request_character_list_packet.gd
index 2f43a05..2f43a05 100644
--- a/packets/request_character_list_packet.gd
+++ b/packets/client/character_server/request_character_list_packet.gd
diff --git a/packets/select_character_packet.gd b/packets/client/character_server/select_character_packet.gd
index 56ba1fa..56ba1fa 100644
--- a/packets/select_character_packet.gd
+++ b/packets/client/character_server/select_character_packet.gd
diff --git a/packets/login_server_keep_alive_packet.gd b/packets/client/login_server/login_server_keep_alive_packet.gd
index db0eedb..db0eedb 100644
--- a/packets/login_server_keep_alive_packet.gd
+++ b/packets/client/login_server/login_server_keep_alive_packet.gd
diff --git a/packets/login_server_login_packet.gd b/packets/client/login_server/login_server_login_packet.gd
index 0fa117d..0fa117d 100644
--- a/packets/login_server_login_packet.gd
+++ b/packets/client/login_server/login_server_login_packet.gd
diff --git a/packets/map_loaded_packet.gd b/packets/client/map_server/map_loaded_packet.gd
index e0f0967..e0f0967 100644
--- a/packets/map_loaded_packet.gd
+++ b/packets/client/map_server/map_loaded_packet.gd
diff --git a/packets/map_server_login_packet.gd b/packets/client/map_server/map_server_login_packet.gd
index 2138d11..2138d11 100644
--- a/packets/map_server_login_packet.gd
+++ b/packets/client/map_server/map_server_login_packet.gd
diff --git a/packets/send_chat_message_packet.gd b/packets/client/map_server/send_chat_message_packet.gd
index 6bb6b14..671e9c6 100644
--- a/packets/send_chat_message_packet.gd
+++ b/packets/client/map_server/send_chat_message_packet.gd
@@ -8,10 +8,6 @@ const HEADER := 0x00f3
const BYTE_LENGTH := 0
-## Byte Type: u16
-## Byte Length: 2
-var packet_length: int
-
## Byte Type: u8
## Byte Length: variable
var message: String
@@ -20,7 +16,6 @@ var message: String
func to_bytes():
var payload = PackedByteArray([])
- payload = message.to_utf8_buffer() + PackedByteArray([0])
- print(message)
- print(get_header(4 + payload.size()) + payload)
+ payload = message.to_utf8_buffer()
+
return get_header(4 + payload.size()) + payload
diff --git a/packets/equippable_item_information.gd b/packets/equippable_item_information.gd
index 8ba0629..32c04e1 100644
--- a/packets/equippable_item_information.gd
+++ b/packets/equippable_item_information.gd
@@ -29,8 +29,8 @@ var equip_position: int
var equipped_position: int
## Byte Type: u32
-## Byte Length: 4
-var slot: int
+## Byte Length: 4 * 4
+var slot: PackedByteArray
## Byte Type: u32
## Byte Length: 4
@@ -65,37 +65,34 @@ var enchantment_level: int
var flags: int
-static func from_bytes(bytes: PackedByteArray):
+static func from_bytes(bytes: ByteStream):
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)
+ info.index = bytes.decode_u16()
+ info.item_id = bytes.decode_u32()
+ info.item_type = bytes.decode_u8()
+ info.equipped_position = bytes.decode_u32()
+ info.equipped_position = bytes.decode_u32()
+ info.slot = bytes.get_buffer(4 * 4).bytes
+ info.hire_expiration_date = bytes.decode_u32()
+ info.bind_on_equip_type = bytes.decode_u16()
+ info.w_item_sprite_number = bytes.decode_u16()
+ info.option_count = bytes.decode_u8()
+ info.option_data = ItemOption.array_from_bytes(
+ bytes.get_buffer(5 * ItemOption.BYTE_LENGTH)
+ )
+ info.refinement_level = bytes.decode_u8()
+ info.enchantment_level = bytes.decode_u8()
+ info.flags = bytes.decode_u8()
return info
-static func array_from_bytes(bytes: PackedByteArray) -> Array[EquippableItemInformation]:
+static func array_from_bytes(bytes: ByteStream) -> Array[EquippableItemInformation]:
var array: Array[EquippableItemInformation] = []
- var offset = 0
- while offset < bytes.size():
- var chunk = from_bytes(bytes.slice(offset))
+ while bytes.available():
+ var chunk = from_bytes(bytes)
array.append(chunk)
- offset += chunk.byte_length
return array
diff --git a/packets/equippable_switch_item_information.gd b/packets/equippable_switch_item_information.gd
new file mode 100644
index 0000000..5c59e4c
--- /dev/null
+++ b/packets/equippable_switch_item_information.gd
@@ -0,0 +1,37 @@
+## rAthena References:
+## -
+class_name EquippableSwitchItemInformation
+extends PacketChunk
+
+
+const BYTE_LENGTH := 6
+
+
+## Byte Type: u16
+## Byte Length: 2
+var index: int
+
+## Byte Type: u32
+## Byte Length: 4
+var position: int
+
+
+static func from_bytes(bytes: PackedByteArray):
+ var info = EquippableSwitchItemInformation.new()
+
+ info.index = bytes.decode_u16(0)
+ info.position = bytes.decode_u32(2)
+
+ return info
+
+
+static func array_from_bytes(bytes: PackedByteArray) -> Array[EquippableSwitchItemInformation]:
+ var array: Array[EquippableSwitchItemInformation] = []
+
+ var offset = 0
+ while offset < bytes.size():
+ var chunk = from_bytes(bytes.slice(offset))
+ array.append(chunk)
+ offset += chunk.byte_length
+
+ return array
diff --git a/packets/item_option.gd b/packets/item_option.gd
index 8f59166..9a226db 100644
--- a/packets/item_option.gd
+++ b/packets/item_option.gd
@@ -18,23 +18,21 @@ var value: int
var parameter: int
-static func from_bytes(bytes: PackedByteArray):
+static func from_bytes(bytes: ByteStream):
var option = ItemOption.new()
- option.index = bytes.decode_u16(0)
- option.value = bytes.decode_u16(2)
- option.parameter = bytes.decode_u8(3)
+ option.index = bytes.decode_u16()
+ option.value = bytes.decode_u16()
+ option.parameter = bytes.decode_u8()
return option
-static func array_from_bytes(bytes: PackedByteArray) -> Array[ItemOption]:
+static func array_from_bytes(bytes: ByteStream) -> Array[ItemOption]:
var array: Array[ItemOption] = []
- var offset = 0
- while offset < bytes.size():
- var chunk = from_bytes(bytes.slice(offset))
+ while bytes.available():
+ var chunk = from_bytes(bytes)
array.append(chunk)
- offset += chunk.byte_length
return array
diff --git a/packets/login_server_login_success_packet.gd b/packets/login_server/login_server_login_success_packet.gd
index ce6a058..ce6a058 100644
--- a/packets/login_server_login_success_packet.gd
+++ b/packets/login_server/login_server_login_success_packet.gd
diff --git a/packets/achievement_list_packet.gd b/packets/map_server/achievement_list_packet.gd
index ed09184..ed09184 100644
--- a/packets/achievement_list_packet.gd
+++ b/packets/map_server/achievement_list_packet.gd
diff --git a/packets/achievement_update_packet.gd b/packets/map_server/achievement_update_packet.gd
index 9b33273..9b33273 100644
--- a/packets/achievement_update_packet.gd
+++ b/packets/map_server/achievement_update_packet.gd
diff --git a/packets/map_server/broadcast_formatted_message_packet.gd b/packets/map_server/broadcast_formatted_message_packet.gd
new file mode 100644
index 0000000..c66c4f1
--- /dev/null
+++ b/packets/map_server/broadcast_formatted_message_packet.gd
@@ -0,0 +1,74 @@
+## rAthena References:
+## - clif_broadcast2
+class_name BroadcastFormattedMessagePacket
+extends Packet
+
+
+const HEADER := 0x01c3
+const BYTE_LENGTH := 0
+
+
+## Byte Type: u16
+## Byte Length: 2
+var packet_length: int
+
+## Byte Type: u8
+## Byte Length: 1
+var font_color_r: int
+
+## Byte Type: u8
+## Byte Length: 1
+var font_color_g: int
+
+## Byte Type: u8
+## Byte Length: 1
+var font_color_b: int
+
+## Byte Type: u8
+## Byte Length: 1
+var font_color_a: int
+
+## Byte Type: u16
+## Byte Length: 2
+var font_type: int
+
+## Byte Type: u16
+## Byte Length: 2
+var font_size: int
+
+## Byte Type: u16
+## Byte Length: 2
+var font_alignment: int
+
+## Byte Type: u16
+## Byte Length: 2
+var font_y: int
+
+## Byte Length: variable
+var message: String
+
+
+func get_font_color() -> Color:
+ return Color8(
+ font_color_r,
+ font_color_g,
+ font_color_b,
+ 255
+ )
+
+
+static func from_bytes(bytes: PackedByteArray) -> BroadcastFormattedMessagePacket:
+ var packet = BroadcastFormattedMessagePacket.new()
+
+ packet.packet_length = bytes.decode_u16(2)
+ packet.font_color_r = bytes.decode_u8(4)
+ packet.font_color_g = bytes.decode_u8(5)
+ packet.font_color_b = bytes.decode_u8(6)
+ packet.font_color_a = bytes.decode_u8(7)
+ packet.font_type = bytes.decode_u16(8)
+ packet.font_size = bytes.decode_u16(10)
+ packet.font_alignment = bytes.decode_u16(12)
+ packet.font_y = bytes.decode_u16(14)
+ packet.message = bytes.slice(16, packet.packet_length).get_string_from_utf8()
+
+ return packet
diff --git a/packets/change_map_packet.gd b/packets/map_server/change_map_packet.gd
index beee821..beee821 100644
--- a/packets/change_map_packet.gd
+++ b/packets/map_server/change_map_packet.gd
diff --git a/packets/map_server/close_dialog_button_packet.gd b/packets/map_server/close_dialog_button_packet.gd
new file mode 100644
index 0000000..db6ff02
--- /dev/null
+++ b/packets/map_server/close_dialog_button_packet.gd
@@ -0,0 +1,23 @@
+## rAthena References:
+## - ZC_CLOSE_DIALOG
+## - PACKET_ZC_CLOSE_DIALOG
+## - clif_scriptclose
+class_name CloseDialogButtonPacket
+extends Packet
+
+
+const HEADER := 0x00b6
+const BYTE_LENGTH := 6
+
+
+## Byte Type: u32
+## Byte Length: 4
+var entity_id: int
+
+
+static func from_bytes(bytes: PackedByteArray) -> CloseDialogButtonPacket:
+ var packet = CloseDialogButtonPacket.new()
+
+ packet.entity_id = bytes.decode_u32(2)
+
+ return packet
diff --git a/packets/couple_status_packet.gd b/packets/map_server/couple_status_packet.gd
index 9f41174..9f41174 100644
--- a/packets/couple_status_packet.gd
+++ b/packets/map_server/couple_status_packet.gd
diff --git a/packets/map_server/display_emotion_packet.gd b/packets/map_server/display_emotion_packet.gd
new file mode 100644
index 0000000..6949ef9
--- /dev/null
+++ b/packets/map_server/display_emotion_packet.gd
@@ -0,0 +1,27 @@
+## rAthena References:
+## - clif_emotion
+## - enum emotion_type
+class_name DisplayEmotionPacket
+extends Packet
+
+
+const HEADER := 0x00c0
+const BYTE_LENGTH := 7
+
+
+## Byte Type: u32
+## Byte Length: 4
+var entity_id: int
+
+## Byte Type: u8
+## Byte Length: 1
+var emotion: Constants.EmotionType
+
+
+static func from_bytes(bytes: PackedByteArray) -> DisplayEmotionPacket:
+ var packet = DisplayEmotionPacket.new()
+
+ packet.entity_id = bytes.decode_u32(2)
+ packet.emotion = bytes.decode_u8(6)
+
+ return packet
diff --git a/packets/map_server/entity_appeared_2_packet.gd b/packets/map_server/entity_appeared_2_packet.gd
new file mode 100644
index 0000000..817d3ad
--- /dev/null
+++ b/packets/map_server/entity_appeared_2_packet.gd
@@ -0,0 +1,31 @@
+## rAthena References:
+## - ZC_NOTIFY_STANDENTRY11
+class_name EntityAppeared2Packet
+extends Packet
+
+
+const HEADER := 0x09ff
+const BYTE_LENGTH := 0
+
+
+## Byte Type: u16
+## Byte Length: 2
+var packet_length: int
+
+## Byte Type: u8
+## Byte Length: 1
+var object_type: int
+
+## Byte Type: u32
+## Byte Length: 4
+var entity_id: int
+
+# TODO
+
+
+static func from_bytes(bytes: PackedByteArray) -> EntityAppeared2Packet:
+ var packet = EntityAppeared2Packet.new()
+
+ packet.packet_length = bytes.decode_u16(2)
+
+ return packet
diff --git a/packets/map_server/entity_disappeared_packet.gd b/packets/map_server/entity_disappeared_packet.gd
new file mode 100644
index 0000000..1027fe8
--- /dev/null
+++ b/packets/map_server/entity_disappeared_packet.gd
@@ -0,0 +1,27 @@
+## rAthena References:
+## - PACKET_ZC_NOTIFY_VANISH
+## - clif_clearunit_area
+class_name EntityDisappearedPacket
+extends Packet
+
+
+const HEADER := 0x0080
+const BYTE_LENGTH := 7
+
+
+## Byte Type: u32
+## Byte Length: 4
+var entity_id: int
+
+## Byte Type: u8
+## Byte Length: 1
+var reason: int # TODO: create enum
+
+
+static func from_bytes(bytes: PackedByteArray) -> EntityDisappearedPacket:
+ var packet = EntityDisappearedPacket.new()
+
+ packet.entity_id = bytes.decode_u32(2)
+ packet.reason = bytes.decode_u8(6)
+
+ return packet
diff --git a/packets/equippable_item_list_packet.gd b/packets/map_server/equippable_item_list_packet.gd
index 9b47202..6d642cc 100644
--- a/packets/equippable_item_list_packet.gd
+++ b/packets/map_server/equippable_item_list_packet.gd
@@ -27,6 +27,8 @@ static func from_bytes(bytes: PackedByteArray) -> EquippableItemListPacket:
packet.packet_length = bytes.decode_u16(2)
packet.inventory_type = bytes.decode_u8(4)
- packet.item_information = EquippableItemInformation.array_from_bytes(bytes.slice(5))
+ packet.item_information = EquippableItemInformation.array_from_bytes(
+ ByteStream.from_bytes(bytes.slice(5))
+ )
return packet
diff --git a/packets/map_server/equippable_switch_item_list_packet.gd b/packets/map_server/equippable_switch_item_list_packet.gd
new file mode 100644
index 0000000..98d42f1
--- /dev/null
+++ b/packets/map_server/equippable_switch_item_list_packet.gd
@@ -0,0 +1,25 @@
+## rAthena References:
+## - clif_equipswitch_list
+class_name EquippableSwitchItemListPacket
+extends Packet
+
+
+const HEADER := 0x0a9b
+const BYTE_LENGTH := 0
+
+
+## Byte Type: u16
+## Byte Length: 2
+var packet_length: int
+
+## Byte Type: u8
+var item_information: Array[EquippableSwitchItemInformation]
+
+
+static func from_bytes(bytes: PackedByteArray) -> EquippableSwitchItemListPacket:
+ var packet = EquippableSwitchItemListPacket.new()
+
+ packet.packet_length = bytes.decode_u16(2)
+ packet.item_information = EquippableSwitchItemInformation.array_from_bytes(bytes.slice(4))
+
+ return packet
diff --git a/packets/friend_list_packet.gd b/packets/map_server/friend_list_packet.gd
index ab419f5..ab419f5 100644
--- a/packets/friend_list_packet.gd
+++ b/packets/map_server/friend_list_packet.gd
diff --git a/packets/map_server/initial_status_packet.gd b/packets/map_server/initial_status_packet.gd
new file mode 100644
index 0000000..9c41ef9
--- /dev/null
+++ b/packets/map_server/initial_status_packet.gd
@@ -0,0 +1,18 @@
+## rAthena References:
+## - ZC_STATUS
+## - clif_initialstatus
+class_name InitialStatusPacket
+extends Packet
+
+
+const HEADER := 0x00bd
+const BYTE_LENGTH := 2 + 14 + 28
+
+
+# TODO
+
+
+static func from_bytes(bytes: PackedByteArray) -> InitialStatusPacket:
+ var packet = InitialStatusPacket.new()
+
+ return packet
diff --git a/packets/inventory_end_packet.gd b/packets/map_server/inventory_end_packet.gd
index d8d313b..d8d313b 100644
--- a/packets/inventory_end_packet.gd
+++ b/packets/map_server/inventory_end_packet.gd
diff --git a/packets/inventory_start_packet.gd b/packets/map_server/inventory_start_packet.gd
index 2a02731..2a02731 100644
--- a/packets/inventory_start_packet.gd
+++ b/packets/map_server/inventory_start_packet.gd
diff --git a/packets/map_server_login_success_packet.gd b/packets/map_server/map_server_login_success_packet.gd
index 9b70428..9b70428 100644
--- a/packets/map_server_login_success_packet.gd
+++ b/packets/map_server/map_server_login_success_packet.gd
diff --git a/packets/map_server/map_type_packet.gd b/packets/map_server/map_type_packet.gd
new file mode 100644
index 0000000..122475c
--- /dev/null
+++ b/packets/map_server/map_type_packet.gd
@@ -0,0 +1,27 @@
+## rAthena References:
+## - ZC_MAPPROPERTY_R2
+## - clif_map_property
+class_name MapTypePacket
+extends Packet
+
+
+const HEADER := 0x099b
+const BYTE_LENGTH := 8
+
+
+## Byte Type: u16
+## Byte Length: 2
+var map_type: int
+
+## Byte Type: u32
+## Byte Length: 4
+var flags: int
+
+
+static func from_bytes(bytes: PackedByteArray):
+ var packet = MapTypePacket.new()
+
+ packet.map_type = bytes.decode_u16(2)
+ packet.flags = bytes.decode_u32(4)
+
+ return packet
diff --git a/packets/map_server/moving_entity_appeared_packet.gd b/packets/map_server/moving_entity_appeared_packet.gd
new file mode 100644
index 0000000..43b19ae
--- /dev/null
+++ b/packets/map_server/moving_entity_appeared_packet.gd
@@ -0,0 +1,31 @@
+## rAthena References:
+## - ZC_NOTIFY_MOVEENTRY11
+class_name MovingEntityAppearedPacket
+extends Packet
+
+
+const HEADER := 0x09fd
+const BYTE_LENGTH := 0
+
+
+## Byte Type: u16
+## Byte Length: 2
+var packet_length: int
+
+## Byte Type: u8
+## Byte Length: 1
+var object_type: int
+
+## Byte Type: u32
+## Byte Length: 4
+var entity_id: int
+
+# TODO
+
+
+static func from_bytes(bytes: PackedByteArray) -> MovingEntityAppearedPacket:
+ var packet = MovingEntityAppearedPacket.new()
+
+ packet.packet_length = bytes.decode_u16(2)
+
+ return packet
diff --git a/packets/map_server/navigate_to_target_packet.gd b/packets/map_server/navigate_to_target_packet.gd
new file mode 100644
index 0000000..c418470
--- /dev/null
+++ b/packets/map_server/navigate_to_target_packet.gd
@@ -0,0 +1,58 @@
+## rAthena References:
+## - clif_navigateTo
+class_name NavigateToTargetPacket
+extends Packet
+
+
+const HEADER := 0x08e2
+const BYTE_LENGTH := 27
+
+
+## Byte Type: u8 [br]
+## Byte Length: 1 [br]
+## 0: Coordinates [br]
+## 1: Coordinates - but fails if you're already on the map [br]
+## 3: Monster
+var target_type: int
+
+## Byte Type: u8 [br]
+## Byte Length: 1
+var flags: int
+
+## Byte Type: u8 [br]
+## Byte Length: 1
+var hide_window: int
+
+## Byte Type: u8 [br]
+## Byte Length: 16
+var map_name: String
+
+## Byte Type: u16 [br]
+## Byte Length: 2
+var target_position_x: int
+
+## Byte Type: u16 [br]
+## Byte Length: 2
+var target_position_y: int
+
+## Byte Type: u16 [br]
+## Byte Length: 2
+var target_monster_id: int
+
+
+func get_target_position() -> Vector2:
+ return Vector2(target_position_x, target_position_y)
+
+
+static func from_bytes(bytes: PackedByteArray) -> NavigateToTargetPacket:
+ var packet = NavigateToTargetPacket.new()
+
+ packet.target_type = bytes.decode_u8(2)
+ packet.flags = bytes.decode_u8(3)
+ packet.hide_window = bytes.decode_u8(4)
+ packet.map_name = bytes.slice(5, 5 + 16).get_string_from_utf8()
+ packet.target_position_x = bytes.decode_u16(21)
+ packet.target_position_y = bytes.decode_u16(23)
+ packet.target_monster_id = bytes.decode_u16(25)
+
+ return packet
diff --git a/packets/new_mail_status_packet.gd b/packets/map_server/new_mail_status_packet.gd
index 4e87ed5..4e87ed5 100644
--- a/packets/new_mail_status_packet.gd
+++ b/packets/map_server/new_mail_status_packet.gd
diff --git a/packets/map_server/parameter_change_2_packet.gd b/packets/map_server/parameter_change_2_packet.gd
new file mode 100644
index 0000000..a659046
--- /dev/null
+++ b/packets/map_server/parameter_change_2_packet.gd
@@ -0,0 +1,27 @@
+## rAthena References:
+## - ZC_LONGLONGPAR_CHANGE
+## - clif_longlongpar_change
+class_name ParameterChange2Packet
+extends Packet
+
+
+const HEADER := 0x0acb
+const BYTE_LENGTH := 12
+
+
+## Byte Type: u16
+## Byte Length: 2
+var parameter_id: int
+
+## Byte Type: u64
+## Byte Length: 8
+var value: int
+
+
+static func from_bytes(bytes: PackedByteArray) -> ParameterChange2Packet:
+ var packet = ParameterChange2Packet.new()
+
+ packet.parameter_id = bytes.decode_u16(2)
+ packet.value = bytes.decode_u64(4)
+
+ return packet
diff --git a/packets/map_server/parameter_change_3_packet.gd b/packets/map_server/parameter_change_3_packet.gd
new file mode 100644
index 0000000..33ac5f3
--- /dev/null
+++ b/packets/map_server/parameter_change_3_packet.gd
@@ -0,0 +1,27 @@
+## rAthena References:
+## - ZC_STATUS_CHANGE
+## - clif_zc_status_change
+class_name ParameterChange3Packet
+extends Packet
+
+
+const HEADER := 0x00be
+const BYTE_LENGTH := 5
+
+
+## Byte Type: u16
+## Byte Length: 2
+var parameter_id: int
+
+## Byte Type: u8
+## Byte Length: 1
+var value: int
+
+
+static func from_bytes(bytes: PackedByteArray) -> ParameterChange3Packet:
+ var packet = ParameterChange3Packet.new()
+
+ packet.parameter_id = bytes.decode_u16(2)
+ packet.value = bytes.decode_u8(4)
+
+ return packet
diff --git a/packets/parameter_change_packet.gd b/packets/map_server/parameter_change_packet.gd
index 138b4f5..8422dc2 100644
--- a/packets/parameter_change_packet.gd
+++ b/packets/map_server/parameter_change_packet.gd
@@ -12,13 +12,13 @@ var parameter_id: int
## Byte Type: i32
## Byte Length: 4
-var count: int
+var value: int
static func from_bytes(bytes: PackedByteArray):
var packet = ParameterChangePacket.new()
packet.parameter_id = bytes.decode_u16(2)
- packet.count = bytes.decode_s32(4)
+ packet.value = bytes.decode_s32(4)
return packet
diff --git a/packets/map_server/quest_effect_packet.gd b/packets/map_server/quest_effect_packet.gd
new file mode 100644
index 0000000..aba7c7b
--- /dev/null
+++ b/packets/map_server/quest_effect_packet.gd
@@ -0,0 +1,39 @@
+## rAthena References:
+## - clif_quest_show_event
+class_name QuestEffectPacket
+extends Packet
+
+
+const HEADER := 0x0446
+const BYTE_LENGTH := 14
+
+
+## Byte Type: u32
+## Byte Length: 4
+var entity_id: int
+
+## Byte Type: u16
+## Byte Length: 2
+var position_x: int
+
+## Byte Type: u16
+## Byte Length: 2
+var position_y: int
+
+## Byte Type: u16
+## Byte Length: 2
+var quest_effect: int
+
+## Byte Type: u16
+## Byte Length: 2
+var quest_color: int
+
+
+# TODO: get_position, get_color
+
+static func from_bytes(bytes: PackedByteArray) -> QuestEffectPacket:
+ var packet = QuestEffectPacket.new()
+
+ packet.entity_id = bytes.decode_u32(2)
+
+ return packet
diff --git a/packets/quest_list_packet.gd b/packets/map_server/quest_list_packet.gd
index fb148c3..fb148c3 100644
--- a/packets/quest_list_packet.gd
+++ b/packets/map_server/quest_list_packet.gd
diff --git a/packets/regular_item_list_packet.gd b/packets/map_server/regular_item_list_packet.gd
index 3f64d1f..529c729 100644
--- a/packets/regular_item_list_packet.gd
+++ b/packets/map_server/regular_item_list_packet.gd
@@ -27,6 +27,8 @@ static func from_bytes(bytes: PackedByteArray) -> RegularItemListPacket:
packet.packet_length = bytes.decode_u16(2)
packet.inventory_type = bytes.decode_u8(4)
- packet.item_information = RegularItemInformation.array_from_bytes(bytes.slice(5))
+ packet.item_information = RegularItemInformation.array_from_bytes(
+ ByteStream.from_bytes(bytes.slice(5))
+ )
return packet
diff --git a/packets/map_server/reputation_packet.gd b/packets/map_server/reputation_packet.gd
new file mode 100644
index 0000000..2c2d1b3
--- /dev/null
+++ b/packets/map_server/reputation_packet.gd
@@ -0,0 +1,31 @@
+## rAthena References:
+## - ZC_REPUTE_INFO
+## - clif_reputation_type
+## - clif_reputation_list
+class_name ReputationPacket
+extends Packet
+
+
+const HEADER := 0x0b8d
+const BYTE_LENGTH := 0
+
+
+## Byte Type: u16
+## Byte Length: 2
+var packet_length: int
+
+## Byte Type: u8
+## Byte Length: 1
+var success: bool
+
+var entries: Array#Array[ReputationEntry]
+# TODO
+
+
+static func from_bytes(bytes: PackedByteArray) -> ReputationPacket:
+ var packet = ReputationPacket.new()
+
+ packet.packet_length = bytes.decode_u16(2)
+ packet.success = bytes.decode_u8(4)
+
+ return packet
diff --git a/packets/server_message_packet.gd b/packets/map_server/server_message_packet.gd
index 9b8d846..6ab2a3f 100644
--- a/packets/server_message_packet.gd
+++ b/packets/map_server/server_message_packet.gd
@@ -22,4 +22,6 @@ static func from_bytes(bytes: PackedByteArray):
packet.message = bytes.slice(4).get_string_from_utf8()
+ print("Message: ", packet.message)
+
return packet
diff --git a/packets/sprite_change_packet.gd b/packets/map_server/sprite_change_packet.gd
index af6d934..af6d934 100644
--- a/packets/sprite_change_packet.gd
+++ b/packets/map_server/sprite_change_packet.gd
diff --git a/packets/update_attack_range_packet.gd b/packets/map_server/update_attack_range_packet.gd
index 1ace166..1ace166 100644
--- a/packets/update_attack_range_packet.gd
+++ b/packets/map_server/update_attack_range_packet.gd
diff --git a/packets/map_server/update_configuration_packet.gd b/packets/map_server/update_configuration_packet.gd
new file mode 100644
index 0000000..c9b3652
--- /dev/null
+++ b/packets/map_server/update_configuration_packet.gd
@@ -0,0 +1,26 @@
+## rAthena References:
+## - clif_configuration
+class_name UpdateConfigurationPacket
+extends Packet
+
+
+const HEADER := 0x02d9
+const BYTE_LENGTH := 10
+
+
+## Byte Type: u32
+## Byte Length: 4
+var config_type: int
+
+## Byte Type: u32
+## Byte Length: 4
+var enabled: bool
+
+
+static func from_bytes(bytes: PackedByteArray) -> UpdateConfigurationPacket:
+ var packet = UpdateConfigurationPacket.new()
+
+ packet.config_type = bytes.decode_u32(2)
+ packet.enabled = bytes.decode_u32(6)
+
+ return packet
diff --git a/packets/update_critical_weight_packet.gd b/packets/map_server/update_critical_weight_packet.gd
index 03fb273..03fb273 100644
--- a/packets/update_critical_weight_packet.gd
+++ b/packets/map_server/update_critical_weight_packet.gd
diff --git a/packets/map_server/update_hotkeys_packet.gd b/packets/map_server/update_hotkeys_packet.gd
new file mode 100644
index 0000000..f991a7e
--- /dev/null
+++ b/packets/map_server/update_hotkeys_packet.gd
@@ -0,0 +1,17 @@
+## rAthena References:
+## - ZC_SHORTCUT_KEY_LIST
+## - clif_hotkeys_send
+class_name UpdateHotkeysPacket
+extends Packet
+
+
+const HEADER := 0x0b20
+const BYTE_LENGTH := 2 + 1 + 2 + 7*38
+
+# TODO
+
+
+static func from_bytes(bytes: PackedByteArray) -> UpdateHotkeysPacket:
+ var packet = UpdateHotkeysPacket.new()
+
+ return packet
diff --git a/packets/map_server/update_party_invitation_state_packet.gd b/packets/map_server/update_party_invitation_state_packet.gd
new file mode 100644
index 0000000..5efb064
--- /dev/null
+++ b/packets/map_server/update_party_invitation_state_packet.gd
@@ -0,0 +1,22 @@
+## rAthena References:
+## - ZC_PARTY_CONFIG
+## - clif_partyinvitationstate
+class_name UpdatePartyInvitationState
+extends Packet
+
+
+const HEADER := 0x02c9
+const BYTE_LENGTH := 3
+
+
+## Byte Type: u8
+## Byte Length: 1
+var deny_invites: bool
+
+
+static func from_bytes(bytes: PackedByteArray) -> UpdatePartyInvitationState:
+ var packet = UpdatePartyInvitationState.new()
+
+ packet.deny_invites = bytes.decode_u8(2)
+
+ return packet
diff --git a/packets/map_server/update_show_equip_packet.gd b/packets/map_server/update_show_equip_packet.gd
new file mode 100644
index 0000000..5693550
--- /dev/null
+++ b/packets/map_server/update_show_equip_packet.gd
@@ -0,0 +1,21 @@
+## rAthena References:
+## - clif_equipcheckbox
+class_name UpdateShowEquipPacket
+extends Packet
+
+
+const HEADER := 0x02da
+const BYTE_LENGTH := 3
+
+
+## Byte Type: u8
+## Byte Length: 1
+var open_equip_window: bool
+
+
+static func from_bytes(bytes: PackedByteArray) -> UpdateShowEquipPacket:
+ var packet = UpdateShowEquipPacket.new()
+
+ packet.open_equip_window = bytes.decode_u8(2)
+
+ return packet
diff --git a/packets/map_server/update_skill_tree_packet.gd b/packets/map_server/update_skill_tree_packet.gd
new file mode 100644
index 0000000..404f4a1
--- /dev/null
+++ b/packets/map_server/update_skill_tree_packet.gd
@@ -0,0 +1,26 @@
+## rAthena References:
+## - ZC_SKILLINFO_LIST
+## - clif_skillinfoblock
+class_name UpdateSkillTreePacket
+extends Packet
+
+
+const HEADER := 0x010f
+const BYTE_LENGTH := 0
+
+
+## Byte Type: u16
+## Byte Length: 2
+var packet_length: int
+
+var object_type: Array#Array[SkillInformation]
+
+# TODO
+
+
+static func from_bytes(bytes: PackedByteArray) -> UpdateSkillTreePacket:
+ var packet = UpdateSkillTreePacket.new()
+
+ packet.packet_length = bytes.decode_u16(2)
+
+ return packet
diff --git a/packets/regular_item_information.gd b/packets/regular_item_information.gd
index 212b341..1c12a58 100644
--- a/packets/regular_item_information.gd
+++ b/packets/regular_item_information.gd
@@ -26,8 +26,8 @@ var amount: int
var equipped_position: int
## Byte Type: u32
-## Byte Length: 4
-var slot: int
+## Byte Length: 4 * 4
+var slot: PackedByteArray
## Byte Type: u32
## Byte Length: 4
@@ -38,28 +38,26 @@ var hire_expiration_date: int
var flags: int
-static func from_bytes(bytes: PackedByteArray):
+static func from_bytes(bytes: ByteStream):
var info = RegularItemInformation.new()
- info.index = bytes.decode_u16(0)
- info.item_id = bytes.decode_u32(2)
- info.item_type = bytes.decode_u8(6)
- info.amount = bytes.decode_u16(7)
- info.equipped_position = bytes.decode_u32(9)
- info.slot = bytes.decode_u32(13)
- info.hire_expiration_date = bytes.decode_u32(17)
- info.flags = bytes.decode_u8(21)
+ info.index = bytes.decode_u16()
+ info.item_id = bytes.decode_u32()
+ info.item_type = bytes.decode_u8()
+ info.amount = bytes.decode_u16()
+ info.equipped_position = bytes.decode_u32()
+ info.slot = bytes.get_buffer(4 * 4).bytes
+ info.hire_expiration_date = bytes.decode_u32()
+ info.flags = bytes.decode_u8()
return info
-static func array_from_bytes(bytes: PackedByteArray) -> Array[RegularItemInformation]:
+static func array_from_bytes(bytes: ByteStream) -> Array[RegularItemInformation]:
var array: Array[RegularItemInformation] = []
- var offset = 0
- while offset < bytes.size():
- var chunk = from_bytes(bytes.slice(offset))
+ while bytes.available():
+ var chunk = from_bytes(bytes)
array.append(chunk)
- offset += chunk.byte_length
return array