diff options
Diffstat (limited to 'packets')
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 |