summaryrefslogtreecommitdiff
path: root/ui/login.gd
diff options
context:
space:
mode:
authorDaniel Weipert <git@mail.dweipert.de>2025-04-07 11:45:05 +0200
committerDaniel Weipert <git@mail.dweipert.de>2025-04-07 11:45:05 +0200
commitf3d360e022fce829370c7d916abe98083b14818c (patch)
tree4ac9f886b45a9482dcd42e991e85ab2e4bea3dbc /ui/login.gd
parentbd77c88efc9327805b6f6fd83fa0492ed59d0f9a (diff)
next commitHEADmain
Diffstat (limited to 'ui/login.gd')
-rw-r--r--ui/login.gd103
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))