After following this tutorial: https://godotengine.org/article/multiplayer-in-godot-4-0-scene-replication/ I decided to play around a bit more.
Primarily looking at how a level could dynamically add MultiplayerSpawner(s) and point them at dynamically added Node3Ds.
So rather than having to add "Players" Node3D to every level, and its subsequent MultiplayerSpawner etc.. you could just have a global function that handles it.
My current approach was basically:
func load_level(level_name: String):
var new_level_resource:Resource = load("res://" + level_name)
var next_level = new_level_resource.instantiate()
# add the "Players" node3d
var syncSpawers:Node3D = Node3D.new()
syncSpawers.name = 'Players'
next_level.add_child(syncSpawers, true)
var multiplayerSpawner:MultiplayerSpawner = MultiplayerSpawner.new()
var real_path = syncSpawners.get_path()
var spawner_to_level = syncSpawners.get_path_to(next_level)
var level_to_spawner = next_level.get_path_to(syncSpawners)
multiplayerSpawner.spawn_path = "use any path above"
multiplayerSpawner.spawn_limit = 4
multiplayerSpawner.add_spawnable_scene("res://scenes/character.tscn")
next_level.add_child(multiplayerSpawner, true)
parent_holder.add_child(next_level)
When assigning spawn_path, if I use real_path, I get an error about using "absolute path when outside of active scene tree" (which I must admit I didnt get), the other 2 return slight variations, but the level_to_spawner returns simply as "Players" - which is what Id expect.
However when the level loads and I check in the scene view under Remote, the multiplayerSpawner's "spawn path" is always pointing at its self.
Am I missing something/doing this incredibly wrong - or is this a bug ?