C#:
using UnityEngine;
using Oxide.Core;
namespace Oxide.Plugins
{
[Info("CustomPrefabSpawner", "Assistant", "1.0.0")]
public class CustomPrefabSpawner : RustPlugin
{
private const string Perm = "customprefabspawner.use";
void Init()
{
permission.RegisterPermission(Perm, this);
}
[ChatCommand("spawncustom")]
private void CmdSpawnCustom(BasePlayer player, string command, string[] args)
{
if (!permission.UserHasPermission(player.UserIDString, Perm))
{
player.ChatMessage("У вас нет прав для использования этой команды.");
return;
}
if (args.Length == 0)
{
player.ChatMessage("Использование: /spawncustom <путь_к_префабу>");
return;
}
string prefabName = args[0];
Vector3 spawnPos = player.transform.position;
Quaternion spawnRot = player.transform.rotation;
// Создаем сущность
BaseEntity entity = GameManager.server.CreateEntity(prefabName, spawnPos, spawnRot);
if (entity == null)
{
player.ChatMessage("Ошибка: Префаб не найден или не может быть заспавнен.");
return;
}
// Инициализация
entity.Spawn();
// ВАЖНО: Активируем все компоненты внутри префаба (лут, спавнеры, триггеры)
// Ищем все дочерние объекты, которые являются сущностями
foreach (var child in entity.GetComponentsInChildren<BaseEntity>())
{
// Отключаем гниение для построек, если они есть
var buildingBlock = child.GetComponent<BuildingBlock>();
if (buildingBlock != null)
{
buildingBlock.decay.enabled = false;
}
// Отправляем сигнал "OnEntitySpawned", чтобы заработали спавнеры ресурсов/лута
child.SendMessage("OnEntitySpawned", null, SendMessageOptions.DontRequireReceiver);
// Принудительно обновляем состояние для клиентов
child.SendNetworkUpdate();
}
player.ChatMessage($"Успешно заспавнен префаб: {prefabName}");
}
}
}