Hi.. I have a 2D fighting game which i want players can fight each other from net (player vs player) i read some high level networking samples/tutorials for that. this is my lobby code. there are two main problems (for now) 1- the one which is server move properly, but the client one does not move at all. 2- game pause does not work for synchronising the two screen.

Lobby Code:

extends Control

const DEFAULT_PORT = 6007
const MAX_PEERS = 2
var player_name = global.Name
var players = {}
var players_ready = []

signal player_list_changed()
signal connection_failed()
signal connection_succeeded()
signal game_ended()
signal game_error(what)

func _ready():
	get_tree().connect("network_peer_connected", self, "_player_connected")
	get_tree().connect("network_peer_disconnected", self,"_player_disconnected")
	get_tree().connect("connected_to_server", self, "_connected_ok")
	get_tree().connect("connection_failed", self, "_connected_fail")
	get_tree().connect("server_disconnected", self, "_server_disconnected")
	name_holder.text = global.Name


func _on_PlayerName_text_changed(new_text):
     name_holder.text = new_text
     global.Name = name_holder.text


func _on_PvPButton_pressed():
     var ip = "127.0.0.1"
     var new_player_name = ""
     host_join_game(ip, new_player_name)

func _player_connected(id):
     print("Player connected to server!")
     get_tree().change_scene("res://scenes/Modes/Default/PvP-Default.tscn")

func _player_disconnected(id):
	if get_tree().is_network_server():
		if has_node("res://scenes/Modes/Default/PvP-Default.tscn"):
			emit_signal("game_error", "Player " + players[id] + " disconnected")
			end_game()
		else:
			unregister_player(id)
			for p_id in players:
                rpc_id(p_id, "unregister_player", id)

func _server_disconnected():
	emit_signal("game_error", "Server disconnected")
	end_game()

func _connected_fail():
	get_tree().set_network_peer(null)
	emit_signal("connection_failed")

remote func register_player(id, new_player_name):
	if get_tree().is_network_server():
		rpc_id(id, "register_player", 1, player_name)
		for p_id in players:
			rpc_id(id, "register_player", p_id, players[p_id])
			rpc_id(p_id, "register_player", id, new_player_name)
	players[id] = new_player_name
	emit_signal("player_list_changed")

remote func unregister_player(id):
	players.erase(id)
	emit_signal("player_list_changed")

remote func pre_start_game(spawn_points):
	get_tree().set_pause(true)
	assert(get_tree().is_network_server())
	var ring = load("res://scenes/Modes/Default/PvP-Default.tscn").instance()
	var player_scene_01 = load("res://scenes/Players/Default/P01_Default.tscn")
	var player_scene_02 = load("res://scenes/Players/Default/P02_Default.tscn")
	get_tree().get_root().add_child(ring)
	if global.client == false:
		for p_id in spawn_points:
			var player01 = player_scene_01.instance()
			player01.set_name(str(p_id))
			player01.set_network_master(get_tree().get_network_unique_id())
			player01.set_player_name(player_name)
			var player02 = player_scene_02.instance()
			player02.set_name(str(p_id))
			player02.set_network_master(p_id)
			player02.set_player_name(players[p_id])
			ring.add_child(player01)
			ring.add_child(player02)
	else:
		for p_id in spawn_points:
			var player02 = player_scene_02.instance()
			player02.set_name(str(p_id))
			player02.set_network_master(get_tree().get_network_unique_id())
			player02.set_player_name(player_name)
			var player01 = player_scene_01.instance()
			player01.set_name(str(p_id))
			player01.set_network_master(p_id)
			player01.set_player_name(players[p_id])
			ring.add_child(player01)
			ring.add_child(player02)
	if global.client == false:
		ring.count1.add_player(get_tree().get_network_unique_id(), player_name)
		for pn in players:
			ring.count2.add_player(pn, players[pn])
	else:
		ring.count2.add_player(get_tree().get_network_unique_id(), player_name)
		for pn in players:
			ring.count1.add_player(pn, players[pn])
	if not get_tree().is_network_server():
		rpc_id(1, "ready_to_start", get_tree().get_network_unique_id())
	elif players.size() == 0:
		post_start_game()

remote func post_start_game():
	if has_node("res://scenes/Modes/Default/PvP-Default.tscn") && get_tree().is_network_server():
		get_tree().set_pause(false)

remote func ready_to_start(id):
	assert(get_tree().is_network_server())
	if not id in players_ready:
		players_ready.append(id)
	if players_ready.size() == players.size():
		for p in players:
			rpc_id(p, "post_start_game")
		post_start_game()

func host_join_game(ip, new_player_name):
	print("Hosting network")
	global.client = false
	player_name = global.Name
	var host = NetworkedMultiplayerENet.new()
	var res = host.create_server(DEFAULT_PORT, MAX_PEERS)
	if res != OK:
		print("Error creating server")
		global.client = true
		host.create_client(ip, DEFAULT_PORT)
		get_tree().set_network_peer(host)
	else:
		global.client = false
		get_tree().set_network_peer(host)

func get_player_list():
	return players.values()

func get_player_name():
	return player_name

func end_game():
	if has_node("res://scenes/Modes/Default/PvP-Default.tscn"):
		get_node("res://scenes/Modes/Default/PvP-Default.tscn").queue_free()
	emit_signal("game_ended")
	players.clear()
	get_tree().set_network_peer(null) # End networking

P.S01: i know that i can write it simpler and i dont need some of these functions, but this is my last effort, the simple one have these error too. P.S02: Im using one button for being host and join the server, so I mix host and join codes together, beside i use 2 charcters (player01 and player02), server is player01 and client is player02

and codes that i use in both player01 and player02 scripts:

func _physics_process(delta):
if is_network_master():
     rpc_unreliable("setPosition",Vector2(position.x - velocity.x, position.y - velocity.y))

slave func setPosition(pos):
  position = pos

it is the simple one. still have those problems, i removed "get_tree().set_pause(false)" from lobby codes, because it freeze everything (idk how to use it in networking for synchronising) and player2 does not move, even in its screen, i think when lobby codes rename its name (i mean when it become client), scene does not recognize it (but there is no error in debugger)...

LOBBY CODES:

extends Control

func _ready():
	get_tree().connect("network_peer_connected", self, "_player_connected")
	name_holder.text = global.Name

func _on_PlayerName_text_changed(new_text):
     name_holder.text = new_text
     global.Name = name_holder.text

func _on_PvPButton_pressed():
	print("Hosting network")
	global.client = false
	var host = NetworkedMultiplayerENet.new()
	var res = host.create_server(4242, 2)
	if res != OK:
		print("Error creating server")
		global.client = true
		host.create_client("127.0.0.1",4242)
		get_tree().set_network_peer(host)
	else:
		global.client = false
		get_tree().set_network_peer(host)

func _player_connected(id):
	print("Player connected to server!")
	global.connected_player = id
	pre_start_game()

func pre_start_game():
	var ring = load("res://scenes/Modes/Default/PvP-Default.tscn").instance()
	var player1 = ring.get_node("Player01")
	var player2 = ring.get_node("Player02")
	if global.client == false:
		player1.set_name(str(get_tree().get_network_unique_id()))
		player1.set_network_master(get_tree().get_network_unique_id())
		player2.set_name(str(global.connected_player))
		player2.set_network_master(global.connected_player)
	else:
		player2.set_name(str(get_tree().get_network_unique_id()))
		player2.set_network_master(get_tree().get_network_unique_id())
		player1.set_name(str(global.connected_player))
		player1.set_network_master(global.connected_player)
	post_start_game()

remote func post_start_game():
	get_tree().change_scene("res://scenes/Modes/Default/PvP-Default.tscn")

codes which i use in both player01 and player02 scripts:

    func _physics_process(delta):
    if is_network_master():
         rpc_unreliable("setPosition",Vector2(position.x - velocity.x, position.y - velocity.y))
    slave func setPosition(pos):
      position = pos
4 years later