C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Collections.Generic;
using Oxide.Core;
using Newtonsoft.Json;
namespace Oxide.Plugins
{
[Info("PlayerWear", "Drop Dead", "1.0.0")]
public class PlayerWear : RustPlugin
{
public Dictionary<ulong, string> command = new Dictionary<ulong, string>();
private void SaveData()
{
Interface.Oxide.DataFileSystem.WriteObject($"{Title}/Players", command);
}
private void LoadData()
{
try
{
command = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<ulong, string>>($"{Title}/Players");
}
catch (Exception e)
{
PrintError(e.ToString());
}
if (command == null) command = new Dictionary<ulong, string>();
}
public class items
{
[JsonProperty("Шортнейм")]
public string shortname = "";
[JsonProperty("Количество")]
public int amount = 1;
[JsonProperty("Скин")]
public ulong skinid = 0;
[JsonProperty("Контейнер (wear/belt/main)")]
public string container = "wear";
[JsonProperty("Заблокировать перемещение?")]
public bool move = false;
[JsonProperty("Заблокировать дроп?")]
public bool drop = false;
}
private PluginConfig cfg;
public class PluginConfig
{
[JsonProperty("Предметы по группам")]
public Dictionary<string, List<items>> perms = new Dictionary<string, List<items>>
{
["raid"] = new List<items> { new items { shortname = "rifle.ak", amount = 1, skinid = 0, container = "belt" } },
["admin"] = new List<items> { new items { shortname = "ammo.rifle", amount = 1, skinid = 0, container = "main" } },
};
}
private void Init()
{
cfg = Config.ReadObject<PluginConfig>();
Config.WriteObject(cfg);
}
protected override void LoadDefaultConfig()
{
Config.WriteObject(new PluginConfig(), true);
}
void OnServerInitialized()
{
foreach (var player in BasePlayer.activePlayerList) OnPlayerConnected(player);
}
void OnPlayerConnected(BasePlayer player)
{
if (player.IsReceivingSnapshot)
{
NextTick(() => OnPlayerConnected(player));
return;
}
CheckPlayer(player);
}
void CheckPlayer(BasePlayer player)
{
if (player == null) return;
if (!command.ContainsKey(player.userID)) command.Add(player.userID, "raid");
player.inventory.Strip();
var items = cfg.perms[command[player.userID]];
if (items == null) return;
foreach (var item in items)
{
var newitem = ItemManager.CreateByName(item.shortname, item.amount, item.skinid);
if (newitem == null) continue;
if (item.container == "wear") newitem.MoveToContainer(player.inventory.containerWear);
if (item.container == "belt") newitem.MoveToContainer(player.inventory.containerBelt);
if (item.container == "main") newitem.MoveToContainer(player.inventory.containerMain);
}
}
void OnPlayerRespawned(BasePlayer player)
{
CheckPlayer(player);
}
object CanMoveItem(Item item, PlayerInventory playerLoot, uint targetContainer, int targetSlot, int amount)
{
if (item == null) return null;
foreach (var itemz in cfg.perms)
{
foreach (var items in itemz.Value)
{
if (items.shortname == item.info.shortname && items.move) return false;
}
}
return null;
}
object OnItemAction(Item item, string action, BasePlayer player)
{
if (player == null || item == null) return null;
if (action != "drop") return null;
foreach (var itemz in cfg.perms)
{
foreach (var items in itemz.Value)
{
if (items.shortname == item.info.shortname && items.drop) return false;
}
}
return null;
}
[ChatCommand("event")]
void EventCmd(BasePlayer player, string commands, string[] args)
{
if (!player.IsAdmin) return;
if (args.Length < 2)
{
player.ChatMessage("/event raid ник - добавить игрока в команду рейдеров\n/event admin ник - добавить игрока в команду админов");
return;
}
if (args[0] != "raid" && args[0] != "admin")
{
player.ChatMessage("Вы не правильно указали группу в которую перенести игрока");
return;
}
var target = BasePlayer.Find(args[1]);
if (target == null)
{
player.ChatMessage("Игрок не найден, попробуйте уточнить имя или SteamID");
return;
}
if (command.ContainsKey(target.userID))
{
if (command[target.userID] == args[0])
{
player.ChatMessage($"Игрок {target.displayName} уже находится в той команде в которую вы пытаетесь его перенести");
return;
}
command[target.userID] = args[0];
player.ChatMessage($"Вы успешно перенесли игрока {target.displayName} в другую команду.Его лут обновлён");
CheckPlayer(target);
}
}
}
}