From c877e815622b03f09db3230e209b1211904f2698 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Thu, 30 Jan 2025 10:09:40 +0100 Subject: [PATCH] WIP: Handle player disconnected --- scenes/maps/base/map_loader.gd | 10 +++++----- scenes/maps/base/player_spawner/player_spawner.gd | 6 +++++- scenes/player/placeholder.gd | 2 -- scenes/utils/menus/main/main_menu.gd | 1 - scripts/game_server_manager.gd | 2 +- 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/scenes/maps/base/map_loader.gd b/scenes/maps/base/map_loader.gd index 58c7766..b06f91a 100644 --- a/scenes/maps/base/map_loader.gd +++ b/scenes/maps/base/map_loader.gd @@ -34,11 +34,11 @@ func _ready() -> void: # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: - var active_players = player_spawner._get_root().get_children() - for n in active_players: - if n.owner: - if not GameServerManager.players.has(n.owner): - _remove_player(n.owner) + if multiplayer.is_server(): + var active_players = player_spawner._get_root().get_children() + for n in active_players: + if not GameServerManager.players.has(n.owner_id): + _remove_player(n.owner_id) @rpc("call_local", "reliable", "any_peer") func _request_spawn(id: int): diff --git a/scenes/maps/base/player_spawner/player_spawner.gd b/scenes/maps/base/player_spawner/player_spawner.gd index 0c7da48..c6ca1a0 100644 --- a/scenes/maps/base/player_spawner/player_spawner.gd +++ b/scenes/maps/base/player_spawner/player_spawner.gd @@ -32,6 +32,10 @@ func spawn_players(spawn_location: SpawnController, id: int) -> Error: func remove_player(id: int) -> Error: if multiplayer.is_server(): - _get_root().find_child("PlayerPlaceholder_" + str(id)).queue_free() + var found_childen: Array[Node] =_get_root().get_children() + for found_child in found_childen: + if found_child.owner_id: + if found_child.owner_id == id: + found_child.queue_free() return OK return ERR_UNAUTHORIZED diff --git a/scenes/player/placeholder.gd b/scenes/player/placeholder.gd index f2060d4..f1b2cf3 100644 --- a/scenes/player/placeholder.gd +++ b/scenes/player/placeholder.gd @@ -64,10 +64,8 @@ func send_position(x: float, y: float, z: float): var real_position: Vector3 = server_node.global_position var difference: Vector3 = desired_position - real_position if is_vector_a_lower_than_b(difference, Vector3(0.1, 0.1, 0.1)): - print("trustin") server_node.global_position = desired_position else: - print("not trustin") adjust_position.rpc_id(owner_id, real_position.x, real_position.y, real_position.z) @rpc("authority", "call_local") diff --git a/scenes/utils/menus/main/main_menu.gd b/scenes/utils/menus/main/main_menu.gd index f4e7778..7f9192c 100644 --- a/scenes/utils/menus/main/main_menu.gd +++ b/scenes/utils/menus/main/main_menu.gd @@ -5,7 +5,6 @@ var player_manager: PlayerManager = PlayerManager.new() # Called when the node enters the scene tree for the first time. func _ready() -> void: if OS.has_feature("dedicated_server"): - print("I'm here") var chosen_map = "lowpoly_tdm_2.tscn" var path_tmpl := "res://scenes/maps/maps/%s" var path := path_tmpl % chosen_map diff --git a/scripts/game_server_manager.gd b/scripts/game_server_manager.gd index 1e82848..e372ef0 100644 --- a/scripts/game_server_manager.gd +++ b/scripts/game_server_manager.gd @@ -22,7 +22,7 @@ func register_player(id: int, name: String): player_state.name = name players[multiplayer.get_remote_sender_id()] = player_state -@rpc("any_peer", "reliable", "call_remote") +@rpc("any_peer", "reliable", "call_local") func remove_player(id: int): if multiplayer.is_server(): if players.has(id):