From 71f9cdec6640318c2d46fbc201b275305dd9b112 Mon Sep 17 00:00:00 2001 From: leca Date: Wed, 21 Feb 2024 02:23:02 +0300 Subject: [PATCH] fixed wrong weapon range change --- scripts/Networking.gd | 40 ++++++++++++++++++++++++++++++---------- scripts/Player.gd | 6 +++++- 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/scripts/Networking.gd b/scripts/Networking.gd index 0e23c22..78df3b7 100644 --- a/scripts/Networking.gd +++ b/scripts/Networking.gd @@ -149,6 +149,9 @@ func shot(client_id): var raycast:RayCast3D = find_cb3d_by_internal_id(internal_id).get_node("Head/Camera/RayCast3D") raycast.target_position.z = -current_weapon_settings["range"] + raycast.force_raycast_update() + raycast.force_update_transform() + var target = raycast.get_collider() if (not target is CharacterBody3D): return var target_internal_id = int(target.get_node("..").name.get_slice("player", 1)) @@ -178,10 +181,11 @@ func shot(client_id): @rpc("reliable", "call_remote", "any_peer") func change_weapon(client_id, new_weapon_number): var client = clients[client_id] + client["reloading"] = false var internal_id = str(client["internal_id"]) for weapon in Weapons.keys(): - if (Weapons[weapon]["number"] == new_weapon_number): - client["current_weapon"] = Weapons[weapon] + if (settings["game"]["weapons"][weapon]["number"] == new_weapon_number): + client["current_weapon"] = settings["game"]["weapons"][weapon].duplicate() break var client_cb3d = find_cb3d_by_internal_id(internal_id) client_cb3d.change_weapon(new_weapon_number) @@ -190,15 +194,31 @@ func change_weapon(client_id, new_weapon_number): @rpc("any_peer", "call_remote", "reliable") func client_reloading(client_id): var client = clients[client_id] - var current_weapon = settings["game"]["weapons"].find_key(find_weapon_by_number(client["current_weapon"]["number"])) - var current_weapon_settings = settings["game"]["weapons"][current_weapon] - var to_reload = current_weapon_settings["magazine"] - client["current_weapon"]["magazine"] - if (to_reload <= client["current_weapon"]["ammo"]): - client["current_weapon"]["magazine"] += to_reload - client["current_weapon"]["ammo"] -= to_reload + var weapons_list = settings["game"]["weapons"] + var current_client_weapon = client["current_weapon"] + var current_weapon_example = weapons_list.find_key(find_weapon_by_number(current_client_weapon["number"])) + var current_weapon_settings = weapons_list[current_weapon_example] + var reload_time = current_weapon_settings["reload"] + client["reloading"] = true + reloading_complete(client_id, reload_time) + +func reloading_complete(client_id, reloading_time): + await get_tree().create_timer(reloading_time).timeout + var client = clients[client_id] + if (!client["reloading"]): # if a client has interrupted the reloading + return + + var weapons_list = settings["game"]["weapons"] + var current_client_weapon = client["current_weapon"] + var current_weapon_example = weapons_list.find_key(find_weapon_by_number(current_client_weapon["number"])) + var current_weapon_settings = weapons_list[current_weapon_example] + var to_reload = current_weapon_settings["magazine"] - current_client_weapon["magazine"] + if (to_reload <= current_client_weapon["ammo"]): + current_client_weapon["magazine"] += to_reload + current_client_weapon["ammo"] -= to_reload else: - client["current_weapon"]["magazine"] += client["current_weapon"]["ammo"] - client["current_weapon"]["ammo"] = 0 + current_client_weapon["magazine"] += current_client_weapon["ammo"] + current_client_weapon["ammo"] = 0 ##########################################CLIENT####################### var player diff --git a/scripts/Player.gd b/scripts/Player.gd index 268d63b..6b81cea 100644 --- a/scripts/Player.gd +++ b/scripts/Player.gd @@ -29,7 +29,8 @@ var properties = { ready = false, current_weapon = null, #game_settings["weapons"]["knife"].duplicate(), current_weapon_number = 0, - last_shot = 0 + last_shot = 0, + reloading = false } var speed = 0 @@ -52,6 +53,8 @@ var magazineLabel func set_properties(props): properties = props $"..".name = "player" + str(properties["internal_id"]) + if (game_settings != null): + change_weapon(properties["current_weapon"]["number"]) func update_hud(): healthBar.value = properties["HP"] @@ -59,6 +62,7 @@ func update_hud(): magazineLabel.text = "Magazine: " + str(properties["current_weapon"]["magazine"]) func change_weapon(new_weapon_number): + properties["reloading"] = false var weapons = $"Head/Camera/Hand".get_children() for weapon in weapons: weapon.visible = false