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 var login_response_packet = await received_packet if login_response_packet is CharacterServerLoginSuccessPacket: logged_in.emit(login_response_packet) var character_list_packet = await received_packet if character_list_packet is CharacterServerLoginSuccessCharacterListPacket: logged_in_character_list.emit(character_list_packet) var character_list_size_packet = await received_packet var block_character_packet = await received_packet var pin_code_state_packet = await received_packet return { "login": login_response_packet, "character_list": character_list_packet, "character_list_size": character_list_size_packet, "block_character": block_character_packet, "pin_code_state": pin_code_state_packet, } 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 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