Иконка ресурса

FREE EnderChest : 1.2.0 1.2.0

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System.Collections.Generic;
using Oxide.Core;
using Oxide.Core.Plugins;
using UnityEngine;
using Newtonsoft.Json;
using Oxide.Game.Rust.Cui; // Add this namespace for CUI

namespace Oxide.Plugins
{
    [Info("EnderChest", "herbs.acab", "1.2.0")]
    [Description("Provides a personal storage space for players accessible from anywhere.")]

    public class EnderChest : RustPlugin
    {
        public class StoredData
        {
            public Dictionary<ulong, List<Item>> PlayerInventories = new Dictionary<ulong, List<Item>>();
        }

        private StoredData storedData;

        public class EnderChestConfig
        {
            [JsonProperty("Number of Slots")]
            public int NumberOfSlots { get; set; } = 36; // Default to 36 slots

            [JsonProperty("UI Title")]
            public string UITitle { get; set; } = "Ender Chest";
        }

        private EnderChestConfig config;
        private const string permissionUse = "enderchest.use";

        protected override void LoadDefaultConfig()
        {
            config = new EnderChestConfig();
            SaveConfig();
        }

        void LoadConfigValues()
        {
            config = Config.ReadObject<EnderChestConfig>();
            SaveConfig();
        }

        protected override void SaveConfig()
        {
            Config.WriteObject(config);
        }

        void Init()
        {
            LoadConfigValues();
            storedData = Interface.Oxide.DataFileSystem.ReadObject<StoredData>("EnderChest");

            permission.RegisterPermission(permissionUse, this);
        }

        void OnServerSave()
        {
            SaveData();
        }

        void Unload()
        {
            SaveData();
        }

        void SaveData()
        {
            Interface.Oxide.DataFileSystem.WriteObject("EnderChest", storedData);
        }

        [ChatCommand("enderchest")]
        void OpenEnderChest(BasePlayer player)
        {
            if (!permission.UserHasPermission(player.UserIDString, permissionUse))
            {
                player.ChatMessage("You do not have permission to use the Ender Chest.");
                return;
            }

            if (!storedData.PlayerInventories.ContainsKey(player.userID))
            {
                storedData.PlayerInventories[player.userID] = new List<Item>();
            }

            var container = CreateContainer(player);
            player.inventory.loot.StartLootingEntity(container.entityOwner as BaseEntity);
            player.inventory.loot.AddContainer(container);
            player.inventory.loot.SendImmediate();

            CreateUI(player);
        }

        private ItemContainer CreateContainer(BasePlayer player)
        {
            var container = new ItemContainer();
            container.ServerInitialize(null, config.NumberOfSlots); // Use configured number of slots
            container.GiveUID();
            container.entityOwner = player;

            if (storedData.PlayerInventories.TryGetValue(player.userID, out var items))
            {
                foreach (var item in items)
                {
                    item.MoveToContainer(container);
                }
            }

            return container;
        }

        void OnLootEntityEnd(BasePlayer player, BaseEntity entity)
        {
            var container = player.inventory.loot.containers.Find(c => c.entityOwner == player);
            if (container != null)
            {
                SavePlayerInventory(player, container);
            }
        }

        private void SavePlayerInventory(BasePlayer player, ItemContainer container)
        {
            var items = new List<Item>();

            foreach (var item in container.itemList)
            {
                items.Add(item);
                item.RemoveFromContainer();
            }

            storedData.PlayerInventories[player.userID] = items;
            SaveData();
        }

        void CreateUI(BasePlayer player)
        {
            var elements = new CuiElementContainer();
            var panel = new CuiPanel
            {
                RectTransform = { AnchorMin = "0.3 0.3", AnchorMax = "0.7 0.7" },
                Image = { Color = "0.1 0.1 0.1 0.8" }
            };
            elements.Add(panel, "Overlay", "EnderChest");

            var label = new CuiLabel
            {
                RectTransform = { AnchorMin = "0.05 0.9", AnchorMax = "0.95 0.98" },
                Text = { Text = config.UITitle, FontSize = 22, Align = TextAnchor.MiddleCenter }
            };
            elements.Add(label, "EnderChest");

            CuiHelper.AddUi(player, elements);
        }
    }
}

Автор
15FPS
Скачиваний
0
Просмотры
1
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок
Сверху