Host not being able to properly leave

Godot Version

Godot 4.5.1

Question

The leave game button does not work on the host, but it only works on the joined client. And when the host (lets call this one window 2) “leaves” and joins a new host (call this oen window 1), window 2 does not sync with window 1’s player position.

Video

https://imgur.com/a/0Wn7ZYf

Code

extends Node

@export var player_scn: PackedScene
@export var main_game: PackedScene

var peer = null
var yourPlayer_name = null

var pause_menu_opened = false

# Called when the node enters the scene tree for the first time.
func _ready() -> void:
	multiplayer.peer_disconnected.connect(del_player)
	
	$CanvasLayer/Host.pressed.connect(func():
		_create_game()
		
		$CanvasLayer.hide()
	)
	
	$CanvasLayer/Join.pressed.connect(func():
		_join_game()
		
		$CanvasLayer.hide()
	)

	$Quit/QuitButton.pressed.connect(func():
		if multiplayer.is_server():
			multiplayer.multiplayer_peer.close()
			#multiplayer.multiplayer_peer.disconnect_peer(1) #int(yourPlayer_name)
			multiplayer.multiplayer_peer = OfflineMultiplayerPeer.new()
			
			#get_node("MainGame").queue_free()
			
			#for n in $Players.get_children():
				#n.queue_free()
		else:
			multiplayer.multiplayer_peer.close()
			multiplayer.multiplayer_peer.disconnect_peer(1)
			multiplayer.multiplayer_peer = OfflineMultiplayerPeer.new()
		
		#multiplayer.multiplayer_peer.disconnect_peer(int(yourPlayer_name))
		
		$Quit.hide()
		pause_menu_opened = false
		
		$CanvasLayer.show()
	)

func _input(event) -> void:
	if event.is_action_pressed("pauseMenuToggle"):
		#if multiplayer.is_connected() == false: return
		
		if pause_menu_opened == false:
			$Quit.show()
		elif pause_menu_opened == true:
			$Quit.hide()
			
		pause_menu_opened = !pause_menu_opened

func _create_game():
	peer = ENetMultiplayerPeer.new()
	
	var randomized_port = randi_range(135, 7500)
	
	peer.create_server(randomized_port)
	
	print(randomized_port)
	
	multiplayer.multiplayer_peer = peer
	multiplayer.peer_connected.connect(add_player)
	add_player()
	
	var newMap = main_game.instantiate()
	
	add_child(newMap)

func _join_game():
	peer = ENetMultiplayerPeer.new()
	
	peer.create_client("localhost", int($CanvasLayer/LineEdit.text))
	
	multiplayer.multiplayer_peer = peer
	#multiplayer.peer_connected.connect(add_player)
	#add_player()

func add_player(id = 1):
	var player = player_scn.instantiate()
	
	player.name = str(id)
	
	$Players.call_deferred("add_child", player)
	
	yourPlayer_name = str(player.name)
	print(yourPlayer_name, str(player.name))

func leave_game(id):
	multiplayer.peer_disconnected.connect(del_player)
	del_player(id)

func del_player(id):
	rpc("_del_player", id)
	
@rpc("any_peer", "call_local")
func _del_player(id):
	$Players.get_node(str(id)).queue_free()