class_name CharacterServer extends Server #signal logged_in(packet: CharacterServerLoginSuccessPacket) #signal logged_in_character_list(packet: CharacterServerLoginSuccessCharacterListPacket) signal requested_character_list(packet: RequestCharacterListSuccessPacket) signal selected_character(packet: CharacterSelectionSuccessPacket) @warning_ignore("shadowed_variable_base_class") func _init(host: String, port: int = 6121) -> void: super._init(host, port) func login(account_id: int, login_id1: int, login_id2: int, gender: Constants.Gender) -> Dictionary: var character_server_login_packet = CharacterServerLoginPacket.new() character_server_login_packet.account_id = account_id character_server_login_packet.login_id1 = login_id1 character_server_login_packet.login_id2 = login_id2 character_server_login_packet.gender = gender send(character_server_login_packet) peer.get_data(4) # in-between packet return await wait_for_all_packets([ CharacterServerLoginSuccessPacket, CharacterServerLoginSuccessCharacterListPacket, CharacterListSizePacket, BlockCharacterPacket, PinCodeStatePacket, ], [CharacterSelectionFailedPacket]) func request_character_list(): var request_character_list_packet = RequestCharacterListPacket.new() send(request_character_list_packet) var packet = await received_packet if packet is RequestCharacterListSuccessPacket: requested_character_list.emit(packet) func select_character(slot: int): var select_character_packet = SelectCharacterPacket.new() select_character_packet.selected_slot = slot send(select_character_packet) var packet = await received_packet if packet is CharacterSelectionSuccessPacket: selected_character.emit(packet) func create_character( name: String, slot: int, hair_color: int, hair_style: int, start_job: Constants.Job, gender: Constants.Gender ): var create_character_packet = CreateCharacterPacket.new() create_character_packet.name = name create_character_packet.slot = slot create_character_packet.hair_color = hair_color create_character_packet.hair_style = hair_style create_character_packet.start_job = start_job create_character_packet.gender = gender send(create_character_packet) return await wait_for_packets([ CreateCharacterSuccessPacket, CharacterCreationFailedPacket, ]) func get_keep_alive_timer() -> Timer: var character_server_keep_alive_timer = Timer.new() character_server_keep_alive_timer.name = "CharacterServerKeepAliveTimer" character_server_keep_alive_timer.autostart = true character_server_keep_alive_timer.one_shot = false character_server_keep_alive_timer.wait_time = 12.0 character_server_keep_alive_timer.timeout.connect(func(): var character_server_keep_alive_packet := CharacterServerKeepAlivePacket.new() send(character_server_keep_alive_packet) ) return character_server_keep_alive_timer