Attention | Topic was automatically imported from the old Question2Answer platform. | |
Asked By | Karl Marx |
I am making a multiplayer game using ENetMultiplayerPeer
in godot 4. The connection seems to work and does not raise any error messages but when I check get_tree().get_multiplayer().get_peers()
it only contains the local peer and the _peer_connected
signal never gets called.
My Multiplayer Code:
extends Node
var players=[]
var has_started=false
func host(MAX_PLAYERS=100, SERVER_PORT=10567):
get_tree().get_multiplayer().multiplayer_peer=null
var peer = ENetMultiplayerPeer.new()
peer.peer_connected.connect(Callable(self,"_peer_connected"))
peer.peer_disconnected.connect(Callable(self,"_peer_disconnected"))
print("create server: "+str(peer.create_server(SERVER_PORT, MAX_PLAYERS)))
get_tree().get_multiplayer().multiplayer_peer=peer
players.append(peer.get_unique_id())
func join(SERVER_IP="192.168.178.1", SERVER_PORT=10567):
get_tree().get_multiplayer().multiplayer_peer=null
var peer = ENetMultiplayerPeer.new()
peer.peer_connected.connect(Callable(self,"_peer_connected"))
peer.peer_disconnected.connect(Callable(self,"_peer_disconnected"))
print("create client: "+str(peer.create_client(SERVER_IP, SERVER_PORT)))
get_tree().get_multiplayer().multiplayer_peer=peer
players.append(peer.get_unique_id())
func _peer_connected(id:int): # new player joins the group
print('not running (whaat)')
players.append(id)
rpc_id(id,"register_player",has_started) # tell the new player "I'm here too"
func _peer_disconnected(id:int):
players.erase(id)
func get_player_name():
return str(get_tree().get_multiplayer().get_unique_id())
@rpc("any_peer")
func register_player(_has_started):
var id = get_tree().get_multiplayer().get_remote_sender_id()
players.append(id)
if _has_started:
print("game has already started so going to map.tscn")
start_game()
@rpc("any_peer","call_local")
func start_game():
assert(get_tree().change_scene_to_file("res://map.tscn")==OK)
func host_begin_game():
assert(get_tree().get_multiplayer().is_server())
for id in players:
rpc_id(id,"start_game")
func _process(_delta):
if Input.is_action_just_pressed("debug_action"): # SPACE
print("Players: "+str(players)+", Peers: "+str(get_tree().get_multiplayer().get_peers()))
See the minimal reproduction project on the comments
Minimal reproduction project: https://github.com/kit-solent/networking_min_rep
Karl Marx | 2023-05-12 02:34