manager/Manager.EndlessMode.cs

Partial Manager class handling an "endless mode" toggle for the game. Provides a host-only console command to toggle endless mode during a run, validates state, and broadcasts an RPC to set synced flags that prevent leaderboard submission and record that endless mode was used.

Networking
using Sandbox;

public partial class Manager
{
	[Sync] public bool IsEndlessMode { get; private set; }
	[Sync] public bool HasUsedEndlessMode { get; private set; }

	[ConCmd( "endless_mode", Help = "Toggle boss generator invincibility (host only). Disqualifies this run from leaderboards." )]
	public static void ToggleEndlessMode()
	{
		if ( !Networking.IsHost )
		{
			Log.Info( "Endless mode is host-only." );
			return;
		}

		var manager = Instance;
		if ( !manager.IsValid() || manager.GameState != GameState.Playing || manager.IsGameOver )
		{
			Log.Info( "Endless mode can only be toggled during a run." );
			return;
		}

		if ( !manager.IsEndlessMode && manager.Boss.IsValid() && !manager.Boss.CanEnableEndlessMode )
		{
			Log.Info( "Endless mode must be enabled before the last boss generator is destroyed." );
			return;
		}

		manager.SetEndlessModeRpc( !manager.IsEndlessMode );
	}

	[Rpc.Broadcast( NetFlags.Reliable | NetFlags.HostOnly )]
	private void SetEndlessModeRpc( bool enabled )
	{
		IsEndlessMode = enabled;
		// This stays latched until Restart, even after generators become vulnerable again.
		HasUsedEndlessMode |= enabled;
		// Clients can receive this RPC before the synced flag updates.
		DontSubmitScore |= enabled;

		Log.Info( $"Endless mode {(enabled ? "enabled" : "disabled")}. This run will not be submitted to the leaderboard." );
	}
}