diff options
author | Daniel Weipert <git@mail.dweipert.de> | 2025-04-07 11:45:05 +0200 |
---|---|---|
committer | Daniel Weipert <git@mail.dweipert.de> | 2025-04-07 11:45:05 +0200 |
commit | f3d360e022fce829370c7d916abe98083b14818c (patch) | |
tree | 4ac9f886b45a9482dcd42e991e85ab2e4bea3dbc /ui/login.gd | |
parent | bd77c88efc9327805b6f6fd83fa0492ed59d0f9a (diff) |
Diffstat (limited to 'ui/login.gd')
-rw-r--r-- | ui/login.gd | 103 |
1 files changed, 96 insertions, 7 deletions
diff --git a/ui/login.gd b/ui/login.gd index 70cc52e..1c5284e 100644 --- a/ui/login.gd +++ b/ui/login.gd @@ -28,11 +28,16 @@ func switch_screen(screen: Node): func _on_login_pressed() -> void: SoundManager.sound_button_click.play() - Network.login_server = LoginServer.new("127.0.0.1") + Network.login_server = LoginServer.new(Network.client_info.get_address(), Network.client_info.get_port()) Network.login_server.establish_connection() if Network.login_server.get_status() == Error.FAILED: - Client.show_message_window("Couldn't connect to server at 127.0.0.1", "Connection Error", %Login/Window, SIDE_BOTTOM) + Client.show_message_window( + "Couldn't connect to server at %s:%s" % [Network.login_server.host, Network.login_server.port], + "Connection Error", + %Login/Window, + SIDE_BOTTOM + ) return var response = await Network.login_server.login(username.text, password.text) @@ -48,6 +53,30 @@ func _on_login_pressed() -> void: Client.show_message_window(message, "Login Error", %Login/Window, SIDE_BOTTOM) return + if response is LoginFailedPacket2: + var message := "" + if response.reason == Constants.LoginFailedReason2.UnregisteredId: + message = "Unregistered ID" + elif response.reason == Constants.LoginFailedReason2.IncorrectPassword: + message = "Incorrect Password" + elif response.reason == Constants.LoginFailedReason2.IdExpired: + message = "ID expired" + elif response.reason == Constants.LoginFailedReason2.RejectedFromServer: + message = "Rejected from Server" + elif response.reason == Constants.LoginFailedReason2.BlockedByGMTeam: + message = "Blocked by GM Team" + elif response.reason == Constants.LoginFailedReason2.GameOutdated: + message = "Game Outdated" + elif response.reason == Constants.LoginFailedReason2.LoginProhibitedUntil: + message = "Login prohibited until %s" % response.unblock_time + elif response.reason == Constants.LoginFailedReason2.ServerFull: + message = "Server Full" + elif response.reason == Constants.LoginFailedReason2.CompanyAccountLimitReached: + message = "CompanyAccountLimitReached" + + Client.show_message_window(message, "Login Error", %Login/Window, SIDE_BOTTOM) + return + account_information = response character_server_information = account_information.character_server_information @@ -96,10 +125,12 @@ func _on_character_server_login_pressed(character_server_info: CharacterServerIn account_information.gender ) - if response.login is CharacterSelectionFailedPacket: + if response.has(CharacterSelectionFailedPacket.HEADER): Client.show_message_window( - "Connection rejected from server \"%s\" at %s" % [ - character_server_info.server_name, character_server_info.get_server_ip() + "Connection rejected from server \"%s\" at %s:%s" % [ + character_server_info.server_name, + character_server_info.get_server_ip(), + character_server_info.server_port ], "Connection Error", %CharacterServer/Window, SIDE_BOTTOM ) @@ -107,7 +138,7 @@ func _on_character_server_login_pressed(character_server_info: CharacterServerIn get_tree().root.add_child(Network.character_server.get_keep_alive_timer()) - var character_list: CharacterServerLoginSuccessCharacterListPacket = response.character_list + var character_list: CharacterServerLoginSuccessCharacterListPacket = response[CharacterServerLoginSuccessCharacterListPacket.HEADER] var login_character_list := LoginCharacterList.from_character_list_login_packet(character_list) %CharacterSelectionList.login_character_list = login_character_list @@ -118,11 +149,18 @@ func _on_character_server_login_pressed(character_server_info: CharacterServerIn var info = login_character_list.get_info_for_slot(slot_idx) if info: current_character_information = info + %CharacterSelectionCreate.visible = false + %CharacterLogin.visible = true else: current_character_information = null + %CharacterSelectionCreate.visible = true + %CharacterLogin.visible = false ) %CharacterSelectionList.requested_login.connect(func(slot_idx: int): - _on_character_selected_pressed(slot_idx) + if current_character_information: + _on_character_selected_pressed(slot_idx) + else: + _on_character_selection_create_pressed() ) # pre-select first character @@ -178,5 +216,56 @@ func _on_character_selection_back_button_pressed() -> void: switch_screen(%CharacterServer) +func _on_character_selection_create_pressed() -> void: + SoundManager.sound_button_click.play() + switch_screen(%CharacterCreation) + + %CharacterCreationInterface.strength = 5 + %CharacterCreationInterface.agility = 5 + %CharacterCreationInterface.vitality = 5 + %CharacterCreationInterface.intelligence = 5 + %CharacterCreationInterface.dexterity = 5 + %CharacterCreationInterface.luck = 5 + + func _on_character_login_pressed() -> void: _on_character_selected_pressed(current_character_slot_idx) + + +func _on_character_creation_cancel_pressed() -> void: + SoundManager.sound_button_click.play() + switch_screen(%CharacterSelection) + + +func _on_character_creation_create_pressed() -> void: + SoundManager.sound_button_click.play() + + var response = await Network.character_server.create_character( + %CharacterCreationInterface.character_name, + current_character_slot_idx, + 0, + %CharacterCreationInterface.head_id, + Constants.Job.Novice, + account_information.gender + ) + + if response is CharacterCreationFailedPacket: + var message := "" + if response.reason == Constants.CharacterCreationFailedReason.CharacterNameAlreadyInUse: + message = "Character Name already in use" + elif response.reason == Constants.CharacterCreationFailedReason.NotOldEnough: + message = "Not old enough" + elif response.reason == Constants.CharacterCreationFailedReason.NotAllowedToUseSlot: + message = "Not allowed to use slot" + elif response.reason == Constants.CharacterCreationFailedReason.CharacterCreationFailed: + message = "Character creation failed. Reason unknown" + + Client.show_message_window(message, "Character Creation Error") + return + + # TODO: create character + # TODO: reload selection list data + + switch_screen(%CharacterSelection) + %CharacterSelectionList.login_character_list.add_character_information(response.character_information) + print(inst_to_dict(response.character_information)) |