Fix property-pool rollback errors in headless server

The dedicated server was spawning a host avatar (peer 1) via
player-spawner._handle_host() and _handle_new_peer(1) on startup,
which registered RollbackSynchronizer subjects with the netfox
rollback system. Since no client input exists for peer 1, the
rollback system tried to record state for freed/recycled objects,
flooding the log with property-pool.gd errors.

Fix:
- Add spawn_host_avatar @export flag to player-spawner.gd
- Set it false in headless_server.gd before starting the ENet server
- PlayerSpawner._handle_host() skips avatar spawn when flag is false
- PlayerSpawner._handle_new_peer(1) skips avatar spawn when flag is false

Server startup is now clean: no property-pool errors, no RPC path errors.
This commit is contained in:
2026-07-02 22:34:32 -04:00
parent 256f0d9a74
commit 70105d8b68
3 changed files with 23 additions and 0 deletions
@@ -2,6 +2,10 @@ extends Node
@export var player_scene: PackedScene
## Whether to spawn an avatar for the host (peer 1) when on_server_start fires.
## Set to false for dedicated server operation.
@export var spawn_host_avatar: bool = true
var t_spawn_points: Array[Marker3D] = []
var ct_spawn_points: Array[Marker3D] = []
var team_manager: TeamManager
@@ -43,12 +47,20 @@ func _handle_connected(id: int):
_spawn(id)
func _handle_host():
if not spawn_host_avatar:
print("[PlayerSpawner] Dedicated server mode — skipping host avatar")
if round_manager:
round_manager.start_match()
return
_spawn(1)
# Auto-start match
if round_manager:
round_manager.start_match()
func _handle_new_peer(id: int):
if id == 1 and not spawn_host_avatar:
print("[PlayerSpawner] Skipping spawn for peer 1 (dedicated server)")
return
_spawn(id)
if multiplayer.is_server():
team_manager.sync_to_peer(id)