diff options
Diffstat (limited to 'packets')
-rw-r--r-- | packets/character_selection_success_packet.gd | 19 | ||||
-rw-r--r-- | packets/character_server_login_packet.gd | 3 | ||||
-rw-r--r-- | packets/character_server_login_success_packet.gd | 24 | ||||
-rw-r--r-- | packets/couple_status_packet.gd | 29 | ||||
-rw-r--r-- | packets/login_server_login_packet.gd | 3 | ||||
-rw-r--r-- | packets/login_server_login_success_packet.gd | 30 | ||||
-rw-r--r-- | packets/map_server_login_packet.gd | 3 | ||||
-rw-r--r-- | packets/map_server_login_success_packet.gd | 18 | ||||
-rw-r--r-- | packets/new_mail_status_packet.gd | 19 | ||||
-rw-r--r-- | packets/packet.gd | 2 | ||||
-rw-r--r-- | packets/parameter_change_packet.gd | 24 | ||||
-rw-r--r-- | packets/quest.gd | 54 | ||||
-rw-r--r-- | packets/quest_details.gd | 65 | ||||
-rw-r--r-- | packets/quest_list_packet.gd | 26 | ||||
-rw-r--r-- | packets/request_character_list_packet.gd | 3 | ||||
-rw-r--r-- | packets/request_character_list_success_packet.gd | 18 | ||||
-rw-r--r-- | packets/select_character_packet.gd | 3 | ||||
-rw-r--r-- | packets/update_attack_range_packet.gd | 19 |
18 files changed, 296 insertions, 66 deletions
diff --git a/packets/character_selection_success_packet.gd b/packets/character_selection_success_packet.gd index f483d9e..b43b4b5 100644 --- a/packets/character_selection_success_packet.gd +++ b/packets/character_selection_success_packet.gd @@ -2,7 +2,8 @@ class_name CharacterSelectionSuccessPacket extends Packet -static var header := 0x0ac5 +const HEADER := 0x0ac5 +const BYTE_LENGTH := 0 ## Byte Type: u32 @@ -38,16 +39,10 @@ func get_map_server_ip(): static func from_bytes(bytes: PackedByteArray): var packet = CharacterSelectionSuccessPacket.new() - packet.character_id = bytes.decode_u32(0) - packet.map_name = bytes.slice(4, 4 + 16).get_string_from_utf8() - packet.map_server_ip = bytes.slice(20, 20 + 4) - packet.map_server_port = bytes.decode_u16(24) - packet.unknown = bytes.slice(26) + packet.character_id = bytes.decode_u32(2) + packet.map_name = bytes.slice(6, 6 + 16).get_string_from_utf8() + packet.map_server_ip = bytes.slice(22, 22 + 4) + packet.map_server_port = bytes.decode_u16(26) + packet.unknown = bytes.slice(28) return packet - -static func from_bytes_via_peer(peer: StreamPeer): - var _header = peer.get_data(2) - var remaining_bytes = peer.get_data(peer.get_available_bytes()) - - return from_bytes(remaining_bytes[1]) diff --git a/packets/character_server_login_packet.gd b/packets/character_server_login_packet.gd index 0e3116f..a2d4f7d 100644 --- a/packets/character_server_login_packet.gd +++ b/packets/character_server_login_packet.gd @@ -2,7 +2,8 @@ class_name CharacterServerLoginPacket extends Packet -static var header := 0x0065 +const HEADER := 0x0065 +const BYTE_LENGTH := 0 ## Byte Type: u32 diff --git a/packets/character_server_login_success_packet.gd b/packets/character_server_login_success_packet.gd index 800e218..bfe6c45 100644 --- a/packets/character_server_login_success_packet.gd +++ b/packets/character_server_login_success_packet.gd @@ -2,6 +2,10 @@ class_name CharacterServerLoginSuccessPacket extends Packet +const HEADER := 0x082d +const BYTE_LENGTH := 0 + + ## Byte Length: 2 var unknown: int @@ -27,18 +31,12 @@ var unused: PackedByteArray static func from_bytes(bytes: PackedByteArray): var packet = CharacterServerLoginSuccessPacket.new() - packet.unknown = bytes.decode_u16(0) - packet.normal_slot_count = bytes.decode_u8(2) - packet.vip_slot_count = bytes.decode_u8(3) - packet.billing_slot_count = bytes.decode_u8(4) - packet.producible_slot_count = bytes.decode_u8(5) - packet.valid_slot = bytes.decode_u8(6) - packet.unused = bytes.slice(7, 7 + 20) + packet.unknown = bytes.decode_u16(6) + packet.normal_slot_count = bytes.decode_u8(8) + packet.vip_slot_count = bytes.decode_u8(9) + packet.billing_slot_count = bytes.decode_u8(10) + packet.producible_slot_count = bytes.decode_u8(11) + packet.valid_slot = bytes.decode_u8(12) + packet.unused = bytes.slice(13, 13 + 20) return packet - -static func from_bytes_via_peer(peer: StreamPeer): - var _header = peer.get_data(6) - var remaining_bytes = peer.get_data(peer.get_available_bytes()) - - return from_bytes(remaining_bytes[1]) diff --git a/packets/couple_status_packet.gd b/packets/couple_status_packet.gd new file mode 100644 index 0000000..9f41174 --- /dev/null +++ b/packets/couple_status_packet.gd @@ -0,0 +1,29 @@ +class_name CoupleStatusPacket +extends Packet + + +const HEADER := 0x0141 +const BYTE_LENGTH := 14 + + +## Byte Type: u32 +## Byte Length: 4 +var status_type: int + +## Byte Type: i32 +## Byte Length: 4 +var default_status: int + +## Byte Type: i32 +## Byte Length: 4 +var plus_status: int + + +static func from_bytes(bytes: PackedByteArray): + var packet = CoupleStatusPacket.new() + + packet.status_type = bytes.decode_u32(2) + packet.default_status = bytes.decode_s32(6) + packet.plus_status = bytes.decode_s32(10) + + return packet diff --git a/packets/login_server_login_packet.gd b/packets/login_server_login_packet.gd index 5b4c1f3..f7217fe 100644 --- a/packets/login_server_login_packet.gd +++ b/packets/login_server_login_packet.gd @@ -2,7 +2,8 @@ class_name LoginServerLoginPacket extends Packet -static var header := 0x064 +const HEADER := 0x064 +const BYTE_LENGTH := 0 ## Byte Type: u32 diff --git a/packets/login_server_login_success_packet.gd b/packets/login_server_login_success_packet.gd index fd7dbf1..1f95bae 100644 --- a/packets/login_server_login_success_packet.gd +++ b/packets/login_server_login_success_packet.gd @@ -2,9 +2,14 @@ class_name LoginServerLoginSuccessPacket extends Packet -static var header := 0x0ac4 +const HEADER := 0x0ac4 +const BYTE_LENGTH := 0 +## Byte Type: u16 +## Byte Length: 2 +var packet_length: int + ## Byte Type: u32 ## Byte Length: 4 var login_id1: int @@ -41,19 +46,14 @@ var character_server_information: Array static func from_bytes(bytes: PackedByteArray): var packet = LoginServerLoginSuccessPacket.new() - packet.login_id1 = bytes.decode_u32(0) - packet.account_id = bytes.decode_u32(4) - packet.login_id2 = bytes.decode_u32(8) - packet.ip_address = bytes.slice(12, 16) - packet.last_login = bytes.slice(16, 16 + 26) - packet.gender = bytes[42] - packet.auth_token = bytes.slice(43, 43 + 17).get_string_from_utf8() - packet.character_server_information = CharacterServerInformation.array_from_bytes(bytes.slice(60)) + packet.packet_length = bytes.decode_u16(2) + packet.login_id1 = bytes.decode_u32(4) + packet.account_id = bytes.decode_u32(8) + packet.login_id2 = bytes.decode_u32(12) + packet.ip_address = bytes.slice(16, 20) + packet.last_login = bytes.slice(20, 20 + 26) + packet.gender = bytes[46] + packet.auth_token = bytes.slice(47, 47 + 17).get_string_from_utf8() + packet.character_server_information = CharacterServerInformation.array_from_bytes(bytes.slice(64)) return packet - -static func from_bytes_via_peer(peer: StreamPeer): - var _header = peer.get_data(4) # 2 = header, 2 = packet_size - var remaining_bytes = peer.get_data(peer.get_available_bytes()) - - return from_bytes(remaining_bytes[1]) diff --git a/packets/map_server_login_packet.gd b/packets/map_server_login_packet.gd index 89d0108..726cdff 100644 --- a/packets/map_server_login_packet.gd +++ b/packets/map_server_login_packet.gd @@ -2,7 +2,8 @@ class_name MapServerLoginPacket extends Packet -static var header := 0x0436 +const HEADER := 0x0436 +const BYTE_LENGTH := 0 ## Byte Type: u32 diff --git a/packets/map_server_login_success_packet.gd b/packets/map_server_login_success_packet.gd index 9eecc65..1791a85 100644 --- a/packets/map_server_login_success_packet.gd +++ b/packets/map_server_login_success_packet.gd @@ -2,7 +2,8 @@ class_name MapServerLoginSuccessPacket extends Packet -static var header := 0x02eb +const HEADER := 0x02eb +const BYTE_LENGTH := 0 ## Byte Type: u32 @@ -33,16 +34,9 @@ func get_position(): static func from_bytes(bytes: PackedByteArray): var packet = MapServerLoginSuccessPacket.new() - packet.client_tick = bytes.decode_u32(0) - packet.position = bytes.slice(4, 4 + 3) - packet.ignored = bytes.slice(7, 7 + 2) - packet.font = bytes.decode_u32(9) + packet.client_tick = bytes.decode_u32(2) + packet.position = bytes.slice(6, 6 + 3) + packet.ignored = bytes.slice(9, 9 + 2) + packet.font = bytes.decode_u32(11) return packet - - -static func from_bytes_via_peer(peer: StreamPeer): - var _header = peer.get_data(2) - var remaining_bytes = peer.get_data(peer.get_available_bytes()) - - return from_bytes(remaining_bytes[1]) diff --git a/packets/new_mail_status_packet.gd b/packets/new_mail_status_packet.gd new file mode 100644 index 0000000..4e87ed5 --- /dev/null +++ b/packets/new_mail_status_packet.gd @@ -0,0 +1,19 @@ +class_name NewMailStatusPacket +extends Packet + + +const HEADER := 0x09e7 +const BYTE_LENGTH := 3 + + +## Byte Type: u8 +## Byte Length: 1 +var new_available: int + + +static func from_bytes(bytes: PackedByteArray): + var packet = NewMailStatusPacket.new() + + packet.new_available = bytes.decode_u8(2) + + return packet diff --git a/packets/packet.gd b/packets/packet.gd index 9f82782..33db0b1 100644 --- a/packets/packet.gd +++ b/packets/packet.gd @@ -15,7 +15,7 @@ func get_byte_length() -> int: ## [param packet_length] is only needed when the packet has a variable length. func get_header(packet_length: int = 0) -> PackedByteArray: var bytes = PackedByteArray([0,0]) - bytes.encode_u16(0, self.header) + bytes.encode_u16(0, self.HEADER) if packet_length > 0: bytes.resize(4) diff --git a/packets/parameter_change_packet.gd b/packets/parameter_change_packet.gd new file mode 100644 index 0000000..138b4f5 --- /dev/null +++ b/packets/parameter_change_packet.gd @@ -0,0 +1,24 @@ +class_name ParameterChangePacket +extends Packet + + +const HEADER := 0x00b0 +const BYTE_LENGTH := 8 + + +## Byte Type: u16 +## Byte Length: 2 +var parameter_id: int + +## Byte Type: i32 +## Byte Length: 4 +var count: int + + +static func from_bytes(bytes: PackedByteArray): + var packet = ParameterChangePacket.new() + + packet.parameter_id = bytes.decode_u16(2) + packet.count = bytes.decode_s32(4) + + return packet diff --git a/packets/quest.gd b/packets/quest.gd new file mode 100644 index 0000000..347f5d1 --- /dev/null +++ b/packets/quest.gd @@ -0,0 +1,54 @@ +class_name Quest +extends PacketChunk + + +## Byte Type: u32 +## Byte Length: 4 +var quest_id: int + +## Byte Type: u8 +## Byte Length: 1 +var active: int + +## Byte Type: u32 +## Byte Length: 4 +var remaining_time: int + +## Byte Type: u32 +## Byte Length: 4 +var expire_time: int + +## Byte Type: u16 +## Byte Length: 2 +var objective_count: int + +var objective_details: Array + + +func get_byte_length(): + return "??" + + +static func from_bytes(bytes: PackedByteArray): + var quest = Quest.new() + + quest.quest_id = bytes.slice(0, 4) + quest.active = bytes.decode_u16(4) + quest.remaining_time = bytes.slice(6, 6 + 20).get_string_from_utf8() + quest.expire_time = bytes.decode_u16(26) + quest.objective_count = bytes.decode_u16(28) + quest.objective_details = bytes.slice(32) + + return quest + + +static func array_from_bytes(bytes: PackedByteArray) -> Array: + var array = [] + + 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/quest_details.gd b/packets/quest_details.gd new file mode 100644 index 0000000..eaf8d2e --- /dev/null +++ b/packets/quest_details.gd @@ -0,0 +1,65 @@ +class_name QuestDetails +extends PacketChunk + + +## Byte Type: u32 +## Byte Length: 4 +var hunt_identification: int + +## Byte Type: u32 +## Byte Length: 4 +var objective_type: int + +## Byte Type: u32 +## Byte Length: 4 +var mob_id: int + +## Byte Type: u16 +## Byte Length: 2 +var minimum_level: int + +## Byte Type: u16 +## Byte Length: 2 +var maximum_level: int + +## Byte Type: u16 +## Byte Length: 2 +var kill_count: int + +## Byte Type: u16 +## Byte Length: 2 +var total_count: int + +## Byte Type: u8 +## Byte Length: 24 +var mob_name: String + + +func get_byte_length(): + return 44 + + +static func from_bytes(bytes: PackedByteArray): + var details = QuestDetails.new() + + details.server_ip = bytes.slice(0, 4) + details.server_port = bytes.decode_u16(4) + details.server_name = bytes.slice(6, 6 + 20).get_string_from_utf8() + details.user_count = bytes.decode_u16(26) + details.server_type = bytes.decode_u16(28) + details.display_new = bytes.decode_u16(30) + details.unknown = bytes.slice(32) + + return details + + +static func array_from_bytes(bytes: PackedByteArray) -> Array: + var array = [] + + 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/quest_list_packet.gd b/packets/quest_list_packet.gd new file mode 100644 index 0000000..bf78f08 --- /dev/null +++ b/packets/quest_list_packet.gd @@ -0,0 +1,26 @@ +class_name QuestListPacket +extends Packet + + +const HEADER := 0x09f8 +const BYTE_LENGTH := 0 + + +## Byte Type: u16 +## Byte Length: 2 +var packet_length: int + +## Byte Type: u32 +## Byte Length: 4 +var quest_count: int + +var quests: Array + + +static func from_bytes(bytes: PackedByteArray): + var packet = QuestListPacket.new() + + packet.packet_length = bytes.decode_u16(2) + packet.quest_count = bytes.decode_u32(4) + + return packet diff --git a/packets/request_character_list_packet.gd b/packets/request_character_list_packet.gd index e347abd..e2c761d 100644 --- a/packets/request_character_list_packet.gd +++ b/packets/request_character_list_packet.gd @@ -2,7 +2,8 @@ class_name RequestCharacterListPacket extends Packet -static var header := 0x09a1 +const HEADER := 0x09a1 +const BYTE_LENGTH := 0 func to_bytes(): diff --git a/packets/request_character_list_success_packet.gd b/packets/request_character_list_success_packet.gd index 431e8ca..f85decc 100644 --- a/packets/request_character_list_success_packet.gd +++ b/packets/request_character_list_success_packet.gd @@ -2,19 +2,21 @@ class_name RequestCharacterListSuccessPacket extends Packet +const HEADER := 0x0b72 +const BYTE_LENGTH := 0 + + +## Byte Type: u16 +## Byte Length: 2 +var packet_length: int + var character_information: Array static func from_bytes(bytes: PackedByteArray): var packet = RequestCharacterListSuccessPacket.new() - packet.character_information = CharacterInformation.array_from_bytes(bytes) + packet.packet_length = bytes.decode_u16(2) + packet.character_information = CharacterInformation.array_from_bytes(bytes.slice(4)) return packet - - -static func from_bytes_via_peer(peer: StreamPeer): - var _header = peer.get_data(4) # 2 = header, 2 = length - var remaining_bytes = peer.get_data(peer.get_available_bytes()) - - return from_bytes(remaining_bytes[1]) diff --git a/packets/select_character_packet.gd b/packets/select_character_packet.gd index 18843cc..692183f 100644 --- a/packets/select_character_packet.gd +++ b/packets/select_character_packet.gd @@ -2,7 +2,8 @@ class_name SelectCharacterPacket extends Packet -static var header := 0x0066 +const HEADER := 0x0066 +const BYTE_LENGTH := 0 ## Byte Type: u8 diff --git a/packets/update_attack_range_packet.gd b/packets/update_attack_range_packet.gd new file mode 100644 index 0000000..1ace166 --- /dev/null +++ b/packets/update_attack_range_packet.gd @@ -0,0 +1,19 @@ +class_name UpdateAttackRangePacket +extends Packet + + +const HEADER := 0x013a +const BYTE_LENGTH := 4 + + +## Byte Type: i16 +## Byte Length: 2 +var current_attack_range: int + + +static func from_bytes(bytes: PackedByteArray): + var packet = UpdateAttackRangePacket.new() + + packet.current_attack_range = bytes.decode_s16(2) + + return packet |