From e2540d8417ead8d6319ab06521292d5f8817b363 Mon Sep 17 00:00:00 2001 From: Rendo Date: Sun, 7 Dec 2025 14:37:40 +0500 Subject: [PATCH 1/2] Weapon switch --- scripts/weapon_system/weapon_system.gd | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/scripts/weapon_system/weapon_system.gd b/scripts/weapon_system/weapon_system.gd index 01bf555..f9037e7 100644 --- a/scripts/weapon_system/weapon_system.gd +++ b/scripts/weapon_system/weapon_system.gd @@ -31,6 +31,9 @@ func _ready() -> void: player_input.drop.connect(drop_current) player_input.fire_begin.connect(use_begin) player_input.fire_end.connect(use_end) + player_input.switch_weapon.connect(switch) + player_input.alternate_state.connect(alternate_state) + player_input.switch_firemode.connect(switch_mode) func get_speed_modifier() -> float: if current_state == null: @@ -68,8 +71,9 @@ func add(state: WeaponSubStateMachine, slot: StringName,ignore_parent: bool = fa ammo_updated.emit(current_state.ammo,current_state.remaining_ammo) state.enter.call_deferred() +@rpc("authority","call_remote","reliable") func switch(to: StringName, exit: bool = true): - if slots.has(to) == false or slots[to] == null or slots[to] == current_state or is_multiplayer_authority() == false: + if slots.has(to) == false or slots[to] == null or slots[to] == current_state or (multiplayer.get_remote_sender_id() != 1 and is_multiplayer_authority() == false): return if current_state != null and exit: current_state.exit() @@ -82,6 +86,8 @@ func switch(to: StringName, exit: bool = true): ammo_updated.emit(current_state.ammo,current_state.remaining_ammo) switched_to.emit(current_state) + if is_multiplayer_authority(): + switch.rpc(to,exit) func return_to_previous(exit: bool = true): if last_slot != "": @@ -173,3 +179,9 @@ func use_begin() -> void: func use_end() -> void: current_state.use_end.rpc() + +func alternate_state() -> void: + current_state.alternate_state() + +func switch_mode() -> void: + current_state.switch_mode() From 2c7903e95db98f912680aacf3aa423e9e23cf14c Mon Sep 17 00:00:00 2001 From: Rendo Date: Sun, 7 Dec 2025 14:43:06 +0500 Subject: [PATCH 2/2] bomb is now plantable --- scripts/multiplayer/session.gd | 8 ++++---- scripts/weapon_system/bomb/bomb_idle_state.gd | 4 ++-- scripts/weapon_system/bomb/bomb_main_state.gd | 9 ++++----- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/scripts/multiplayer/session.gd b/scripts/multiplayer/session.gd index 8d0b539..bdd99a6 100644 --- a/scripts/multiplayer/session.gd +++ b/scripts/multiplayer/session.gd @@ -271,15 +271,15 @@ func stop_interact() -> void: var id = multiplayer.get_remote_sender_id() player_stopped_interacting.emit(id) -func is_on_site() -> bool: +func is_on_site(id: int) -> bool: for plant in plants: - if plant.is_player_on_site(multiplayer.get_unique_id()): + if plant.is_player_on_site(id): return true return false -func get_site() -> PlantSite: +func get_site(id: int) -> PlantSite: for plant in plants: - if plant.is_player_on_site(multiplayer.get_unique_id()): + if plant.is_player_on_site(id): return plant return null diff --git a/scripts/weapon_system/bomb/bomb_idle_state.gd b/scripts/weapon_system/bomb/bomb_idle_state.gd index 0d2c89c..2761471 100644 --- a/scripts/weapon_system/bomb/bomb_idle_state.gd +++ b/scripts/weapon_system/bomb/bomb_idle_state.gd @@ -7,6 +7,6 @@ func enter() -> void: func exit() -> void: pass -func state_input(event: InputEvent) -> void: - if event.is_action("plr_bomb") and Session.is_on_site(): +func use_begin() -> void: + if Session.is_on_site(machine.player.player_id): transition.emit("Plant") diff --git a/scripts/weapon_system/bomb/bomb_main_state.gd b/scripts/weapon_system/bomb/bomb_main_state.gd index 46c1d84..322c7b9 100644 --- a/scripts/weapon_system/bomb/bomb_main_state.gd +++ b/scripts/weapon_system/bomb/bomb_main_state.gd @@ -17,14 +17,13 @@ func on_animation_finished(animation: StringName): return if animation == machine.animation_prefix + "plant": - Session.spawn({"scene": active_bomb, "position": machine.player_camera.get_parent().global_position,"plant": Session.get_site().name}) + Session.spawn({"scene": active_bomb, "position": machine.player_camera.get_parent().global_position,"plant": Session.get_site(machine.player.player_id).name}) machine.ammo -= 1 return_to_previous.emit() -func state_input(event: InputEvent) -> void: +func use_end() -> void: if is_multiplayer_authority() == false: return - if event.is_action_released("plr_bomb"): - transition.emit("Idle") - machine.player.get_node("PlantAudio").multiplayer_stop() + transition.emit("Idle") + machine.player.get_node("PlantAudio").multiplayer_stop()