[Noob] Multiplayer spawning Client character but not Host character

Godot Version

4.3

Question

Guys I don’t know why my multiplayer script isn’t spawning the Host player.

I start 2 instances of the editor. When I click HOST, nothing happens, when I click JOIN, the Player 2 is spawned and both Games display the Player 2, movment synchronized, etc.
But no Player 1(host) character.

One thing I noticed is:

  • If I don’t hit HOST button, the Player 2, cannot join.
@export var player_scene: PackedScene;

var _peer = ENetMultiplayerPeer.new();
var _server_port: int = 1027;
var max_players: int = 4;

@onready var host_button: Button = $CanvasLayer/HostButton
@onready var join_button: Button = $CanvasLayer/JoinButton


func _ready() -> void:
host_button.pressed.connect(_on_host_pressed);
join_button.pressed.connect(_on_join_pressed);
#}

func _on_join_pressed() -> void:
_peer.create_client("localhost", _server_port);
multiplayer.multiplayer_peer = _peer;
#}

func _on_host_pressed() -> void:
_peer.create_server(_server_port);
multiplayer.multiplayer_peer = _peer;
multiplayer.peer_connected.connect(_on_peer_connected);
#}

func _on_peer_connected(id: int) -> void:
_add_player(id);
#}

func _add_player(id = 1) -> void:
var player = player_scene.instantiate();
player.name = str(id);
call_deferred("add_child", player);
#}

Try calling _add_player() or _add_player(1) at the end of the _on_host_pressed() function
Remember that the host has id=1

Complete code:

@export var player_scene: PackedScene;

var _peer = ENetMultiplayerPeer.new();
var _server_port: int = 1027;
var max_players: int = 4;

@onready var host_button: Button = $CanvasLayer/HostButton
@onready var join_button: Button = $CanvasLayer/JoinButton


func _ready() -> void:
host_button.pressed.connect(_on_host_pressed);
join_button.pressed.connect(_on_join_pressed);
#}

func _on_join_pressed() -> void:
_peer.create_client("localhost", _server_port);
multiplayer.multiplayer_peer = _peer;
#}

func _on_host_pressed() -> void:
_peer.create_server(_server_port);
multiplayer.multiplayer_peer = _peer;
multiplayer.peer_connected.connect(_on_peer_connected);
_add_player();
#}

func _on_peer_connected(id: int) -> void:
_add_player(id);
#}

func _add_player(id = 1) -> void:
var player = player_scene.instantiate();
player.name = str(id);
call_deferred("add_child", player);
#}

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.