BotSpawner.cs
using Sandbox;
using System;
using System.Collections.Generic;
public sealed class BotSpawner : Component
{
[Property] public GameObject BotPrefab { get; set; }
[Property] public float SpawnInterval { get; set; } = 4f;
[Property] public int MaxBots { get; set; } = 5;
public static bool EnableBots { get; set; } = true;
private List<GameObject> _activeBots = new();
private TimeSince _timeSinceLastSpawn = 0;
protected override void OnUpdate()
{
if ( !EnableBots ) return;
if ( _timeSinceLastSpawn > SpawnInterval )
{
_timeSinceLastSpawn = 0;
SpawnBot();
}
}
private void SpawnBot()
{
if ( BotPrefab == null )
{
Log.Warning( "[BotSpawner] BotPrefab не назначен в Инспекторе!" );
return;
}
_activeBots.RemoveAll( bot => !bot.IsValid() );
if ( _activeBots.Count >= MaxBots ) return;
var randomX = Random.Shared.Float( -100f, 100f );
var randomY = Random.Shared.Float( -100f, 100f );
var spawnPos = new Vector3( randomX, randomY, 400f );
var botInstance = BotPrefab.Clone( spawnPos );
if ( botInstance == null ) return;
_activeBots.Add( botInstance );
if ( Network.Active )
{
botInstance.NetworkSpawn();
}
Log.Info( $"[BotSpawner] Бот успешно заспавнен в {spawnPos}" );
}
}