Network shoot sync help

Godot Version

`4.3

Question

Hello Godot forum, I can’t figure out how to synchronize the shot in my 2 codes that handle bullets
1 GUN MANAGER


@export var gun_dictionary: Node2D
@export var fire_sound: AudioStreamPlayer2D
@export var projectile_scene: PackedScene
@export var muzzle: Marker2D
var bullet_speed = 20
var is_reloading: bool = false  
var current_weapon: Dictionary = {}  
var ammo_in_clip: int = 0  
var max_ammo_in_clip: int = 0
var can_shoot: bool = true  
var is_firing: bool = false  
var spread: float = 0.0  
@onready var ammo: Label = $"../ammo"

func _ready():
	if gun_dictionary:
		equip_weapon(gun_dictionary.default_weapon)  

func equip_weapon(weapon_name: String):
	if not gun_dictionary:
		return
	var weapon_data = gun_dictionary.get_weapon_data(weapon_name)
	if weapon_data.is_empty():
		return
	current_weapon = weapon_data  
	ammo_in_clip = weapon_data["clip_size"]
	max_ammo_in_clip = weapon_data["clip_size"]
	spread = weapon_data.get("bullet_spread", 0.0)

func shoot():
	if not current_weapon or ammo_in_clip <= 0 or not can_shoot or is_reloading:
		return
	ammo_in_clip -= 1
	if projectile_scene and muzzle:
		var bullet = projectile_scene.instantiate()
		get_tree().current_scene.add_child(bullet)
		bullet.global_position = muzzle.global_position
		var direction = Vector2(1, 0).rotated(muzzle.global_rotation)
		bullet.shoot(direction, bullet_speed, current_weapon["damage"], current_weapon["range"], current_weapon["bullet_spread"], current_weapon["num_shots"], current_weapon["knockback"])
		var recoil_y = current_weapon.get("recoil_y", 0.2)
		var recoil_x = current_weapon.get("recoil_z", 0.5)
		get_parent().get_parent().get_parent().apply_recoil(recoil_y, recoil_x)
	if fire_sound:
		fire_sound.play()
	can_shoot = false
	await get_tree().create_timer(current_weapon["fire_rate"]).timeout
	can_shoot = true
	if is_firing:
		shoot()

func reload():
	if is_reloading or ammo_in_clip == current_weapon["clip_size"]:
		return
	is_reloading = true
	await get_tree().create_timer(1.5).timeout
	ammo_in_clip = current_weapon["clip_size"]
	is_reloading = false

func _physics_process(delta):
	if is_multiplayer_authority():
		if Input.get_action_strength("shoot") > 0.5:  
			is_firing = true
			shoot()
		else:
			is_firing = false
		if Input.is_action_just_pressed("reload"):
			reload()
		ammo.text = str(ammo_in_clip) + ("/") + str(max_ammo_in_clip)```

2 BULLET
```extends Node2D

var knockback: float = 0.0
var strength: float = 0.0
var speed: float = 0.0
var damage: int = 0
var direction: Vector2 = Vector2.ZERO
var max_distance: float = 0.0
var traveled_distance: float = 0.0
var spread: float = 0.0
@export var impact_effect: PackedScene

func shoot(dir: Vector2, bullet_speed: float, bullet_damage: int, bullet_range: float, bullet_spread: float, num_shots: int, bullet_knockback: float):
	speed = bullet_speed
	damage = bullet_damage
	max_distance = bullet_range
	spread = bullet_spread
	knockback = bullet_knockback
	var spread_offset = Vector2(
		randf_range(-spread, spread),
		randf_range(-spread, spread)
	)
		
	direction = (dir + spread_offset).normalized()
	for i in range(num_shots - 1):
		var new_bullet = duplicate()
		get_parent().add_child(new_bullet)
		var new_spread_offset = Vector2(
			randf_range(-spread, spread),
			randf_range(-spread, spread)
		)
		new_bullet.direction = (dir + new_spread_offset).normalized()
		new_bullet.speed = bullet_speed
		new_bullet.damage = bullet_damage
		new_bullet.max_distance = bullet_range
		new_bullet.traveled_distance = 0.0
		new_bullet.knockback = bullet_knockback

func _process(delta):
	var move_step = direction * speed * delta
	global_position += move_step
	traveled_distance += move_step.length()
	if traveled_distance >= max_distance:
		_create_impact_effect()
		queue_free()

func _on_area_3d_body_entered(body: Node2D) -> void:
	if body.has_method("take_damage"):
		body.take_damage(damage)
		body.apply_knockback(knockback, direction)
	_create_impact_effect()
	queue_free()

func _create_impact_effect():
	if impact_effect:
		var effect_instance = impact_effect.instantiate()
		get_parent().add_child(effect_instance)
		effect_instance.global_position = global_position```

THANKS FOR THE HELP!

I don’t have an answer for your question, but if you put three backticks above and below your code (```) it will format properly and be easier to read.

1 Like

thank you, the code works perfectly, but the problem is that I can’t synchronize it online, if player1 shoots,
Player2 does not see the shot and vice versa