RoundManager.cs
using Sandbox;
using System.Collections.Generic;
using System.Linq;

public sealed class RoundManager : Component
{
	public static RoundManager Instance { get; private set; }

	[Property] public float RoundTime { get; set; } = 30f;
	[Sync] public float TimeLeft { get; set; }
	[Sync] public bool IsInRound { get; set; }

	protected override void OnAwake()
	{
		Instance = this;
	}

	public void StartNewRound()
	{
		TimeLeft = RoundTime;
		IsInRound = true;
		
		// Телепортируем всех игроков на точки спавна
		RespawnAllPlayers();
	}

	public void OnPlayerEliminated( GameObject player )
	{
		if ( !IsInRound ) return;

		// Логика выбывания: отключаем игрока или отправляем в наблюдатели
		player.Enabled = false;

		var activePlayers = Scene.GetAllComponents<PlayerController>()
			.Where( p => p.GameObject.Enabled );

		if ( activePlayers.Count() <= 1 )
		{
			EndRound();
		}
	}

	private void EndRound()
	{
		IsInRound = false;
		Log.Info( "Раунд завершен! Перезапуск через 3 секунды..." );
		
		// Запуск следующего раунда с задержкой
		Task.DelaySeconds( 3f ).ContinueWith( _ => StartNewRound() );
	}

	private void RespawnAllPlayers()
	{
		// Включение объектов игроков и сброс позиций
	}
}