Для создания плагина на C# для Rust OXIDE, который позволяет создавать предметы в ящиках, вам нужно выполнить следующие шаги:
1. Создайте пустой проект в Visual Studio.
2. Установите OXIDE как ссылку на свой проект.
3. Создайте новый класс и наследуйте его от класса
CSharpPlugin
.
4. Добавьте в проект ссылки на следующие библиотеки:
- UnityEngine.dll
- UnityEngine.CoreModule.dll
- UnityEngine.Networking.dll
- Rust.Data.dll
- Rust.Workshop.dll
5. Добавьте следующий код в свой класс:
Код:
using System.Collections.Generic;
using System.Linq;
using Oxide.Core;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using UnityEngine;
namespace MyPluginNamespace
{
[Info("MyPlugin", "1.0.0", "Author")]
class MyPlugin : CSharpPlugin
{
[PluginReference]
private Plugin Kits;
private const string PrefabName = "storage_small_deployed";
private readonly Dictionary<string, ItemDefinition> _items = new Dictionary<string, ItemDefinition>
{
{"wood", ItemManager.FindItemDefinition("wood")}
// Добавьте остальные предметы в словарь
};
private readonly List<Vector3> _chestPositions = new List<Vector3>
{
new Vector3(0, 0, 0), // Координаты первого ящика
new Vector3(1, 0, 0), // Координаты второго ящика
// Добавьте остальные координаты ящиков
};
private void OnServerInitialized()
{
// Создаем ящики в заданных координатах
foreach (var position in _chestPositions)
{
var entity = GameManager.server.CreateEntity(PrefabName, position);
entity.Spawn();
}
}
[Command("spawnitems")]
private void SpawnItemsCommand(ConsoleSystem.Arg arg)
{
// Проверяем, что команду вызвал администратор
if (!arg.HasArgs() || !arg.GetPlayer().IsAdmin)
{
return;
}
// Получаем список предметов, которые нужно создать
var items = arg.Args.Select(arg1 =>
{
if (_items.TryGetValue(arg1, out var item))
{
return item;
}
return null;
}).Where(item => item != null).ToList();
// Получаем всех ящиков на карте
var boxes = UnityEngine.Object.FindObjectsOfType<StorageContainer>();
// Создаем каждый предмет в каждом ящике
foreach (var box in boxes)
{
foreach (var item in items)
{
var newItem = ItemManager.Create(item);
newItem.MoveToContainer(box.inventory);
}
}
}
[ChatCommand("spawnitems")]
private void SpawnItemsChatCommand(BasePlayer player, string command, string[] args)
{
// Если команду вызвал не администратор, то прерываем выполнение
if (!player.IsAdmin)
{
return;
}
// Вызываем команду spawnitems
Covalence.CommandSystem.HandleCommand(player, $"spawnitems {string.Join(" ", args)}");
}
}
}
6. Установите плагин на сервер, перезапустите сервер и введите команду
/spawnitems item1 item2 ...
в чате, чтобы создать указанные предметы во всех ящиках на карте.
В коде выше мы создаем ящики в заданных координатах при старте сервера, а также добавляем две команды:
/spawnitems
для вызова администраторами и
!spawnitems
для вызова в чате. Команда принимает список предметов, которые нужно создать, и создает каждый предмет в каждом ящике на карте.