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

FREE ItemsBlocker : 1.0.3 1.0.3

Нет прав для скачивания
C#:
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using Oxide.Core;
using Oxide.Core.Configuration;
using Oxide.Game.Rust.Cui;
using UnityEngine;
using Apex;
using Oxide.Core.Plugins;

namespace Oxide.Plugins 
{
    [Info("ItemsBlocker", "https://topplugin.ru / https://discord.com/invite/5DPTsRmd3G", "1.0.3")]
    public class ItemsBlocker : RustPlugin
    {
        #region Fields
        public string Layer = "UI.ITEMSBLOCKER";
        public string LayerBlur = "UI.ITEMSBLOCKERBLUR";
        
        public Dictionary<ulong, bool> playersOpen = new Dictionary<ulong, bool>();
        public bool isWipe = false;
        private static readonly int PlayerLayerMask = LayerMask.GetMask("Player (Server)");
        private readonly List<BasePlayer> _playersIgnore = new List<BasePlayer>();

        [PluginReference] Plugin Duel;

        #endregion

        private bool playerOnDuel(BasePlayer player)
        {
			if (plugins.Find("Duel") && (bool)plugins.Find("Duel").Call("IsPlayerOnActiveDuel",player)) return true;
			if (plugins.Find("OneVSOne") && (bool)plugins.Find("OneVSOne").Call("IsEventPlayer",player)) return true;
            return false;
        }

        #region Methods

        public void UpdateUI(BasePlayer player)
        {
            if (playersOpen[player.userID])
            {
                CuiElementContainer container = new CuiElementContainer();
                
                var heightMultiplier = storedData.blocks.Where(x => x.Value > CurrentTime()).Count() / 7f * 0.02f;
                var itemWidth = 0.104166f;
                var itemMargin = 0.011457f;
                var itemMin = 0.325521f;
                var itemsCount = 0;

                foreach (var item in storedData.blocks.Where(x => x.Value > CurrentTime()).OrderBy(x => x.Value).Take(3))
                {
                    itemsCount++;

                    var leftTime =
                        $"{(int) TimeSpan.FromSeconds(storedData.blocks[item.Key] - CurrentTime()).TotalHours}:{TimeSpan.FromSeconds(storedData.blocks[item.Key] - CurrentTime()).Minutes}";

                    container.Add(new CuiPanel()
                        {
                            RectTransform =
                            {
                                AnchorMin = $"{itemMin} {0.539815 + heightMultiplier}",
                                AnchorMax = $"{itemMin + itemWidth} {0.725 + heightMultiplier}"
                            },
                            Image = {Color = HexToRGB("#FFFFFF13")}
                        }, Layer, Layer + $".Items.{itemsCount}");

                    container.Add(new CuiElement()
                    {
                        Name = Layer + $".Items.{itemsCount}.Icon",
                        Parent = Layer + $".Items.{itemsCount}",
                        Components =
                        {
                            GetItemImageComponent(item.Key),
                            new CuiRectTransformComponent()
                            {
                                AnchorMin = $"0 0",
                                AnchorMax = $"1 1"
                            },
                        }
                    });

                    container.Add(new CuiLabel()
                        {
                            RectTransform = {AnchorMin = "0.435003 -0.015", AnchorMax = "1.015 0.240001"},
                            Text =
                            {
                                Text = $"<b>{leftTime}</b>",
                                Align = TextAnchor.MiddleCenter,
                                Color = HexToRGB("#FFFFFF77"),
                                FontSize = 20,
                                Font = "RobotoCondensed-Bold.ttf"
                            }
                        }, Layer + $".Items.{itemsCount}", Layer + $".Items.{itemsCount}.Text");

                    itemMin += (itemWidth + itemMargin);

                }

                CuiHelper.DestroyUi(player, Layer + ".Items.1");
                CuiHelper.DestroyUi(player, Layer + ".Items.2");
                CuiHelper.DestroyUi(player, Layer + ".Items.3");

                CuiHelper.AddUi(player, container);

                timer.Once(15f, () => UpdateUI(player));
            }
        }

        #endregion

        #region Hooks

        void Unload()
        {
            foreach (var player in BasePlayer.activePlayerList) 
            {
                CuiHelper.DestroyUi(player, Layer);
                CuiHelper.DestroyUi(player, LayerBlur);
                CuiHelper.DestroyUi(player, Layer);
                CuiHelper.DestroyUi(player, Layer + ".Destroy1"); 
            }
        }

        void OnPlayerDisconnected(BasePlayer player, string reason)
        {
            if (playersOpen.ContainsKey(player.userID))
                playersOpen[player.userID] = false;
            _playersIgnore.Remove(player);
        }

        void OnServerInitialized()
        {
            LoadConfig(); 
            LoadData();

            if (isWipe)
            {
                PrintError("Очистили!");
                storedData.blocks.Clear();
            } 

            Dictionary<string, int> blockItems = new Dictionary<string, int>();

            blockItems.AddRange(_config.blockAmmo);
            blockItems.AddRange(_config.blockClothes);
            blockItems.AddRange(_config.blockItem);

            foreach (var p in BasePlayer.activePlayerList) OnPlayerConnected(p);

            foreach (var item in blockItems)
            {
                if (!storedData.blocks.ContainsKey(item.Key))
                    storedData.blocks.Add(item.Key, CurrentTime() + 60 * 60 * item.Value);
            }

            /*var isAnyBlockedItem = storedData.blocks.Any(x => x.Value > CurrentTime());

            if (!isAnyBlockedItem)
            {
                foreach (var key in Hooks.Keys)
                    Unsubscribe(key);
                Interface.Oxide.NextTick(() =>
                {
                    Puts("На сервере нет заблокированных предметов, плагин будет отключен.");
                    Interface.Oxide.UnloadPlugin(Name);
                });
                return;
            }*/
            
            SaveData();
        }

        private bool? CanWearItem(PlayerInventory inventory, Item item)
        {
            var player = inventory.containerWear.playerOwner;

            if (player == null || player.IsNpc) return null;
            if (playerOnDuel(player)) return null;
			if (player.net.connection.authLevel>1) return null;
			if (player.userID < 76560000000000000L || player.IsDestroyed) return null;
			if (_playersIgnore.Contains(player)) return null;
            var isBlocked = Unblock(item.info.shortname);
            if (isBlocked)
            {
                DrawInstanceBlock(player, item);
                timer.Once(2f, () =>
                {
                    CuiHelper.DestroyUi(player, Layer + ".Destroy");
                    timer.Once(0.5f, () => CuiHelper.DestroyUi(player, Layer + ".Destroy1"));
                });

                return false;
            }

            return null;
        }
        
        private void DrawInstanceBlock(BasePlayer player, Item item)
        {
            CuiHelper.DestroyUi(player, Layer);
            CuiHelper.DestroyUi(player, Layer + ".Destroy1");
            
            CuiElementContainer container = new CuiElementContainer();
            
            var time = storedData.blocks[item.info.shortname] - CurrentTime();
            var hours = (int)(time / 3600f);
            var minute = (int)(time - hours * 3600f) / 60;
            var leftTime = $"{hours}ч {minute}м";

            container.Add(new CuiPanel()
            {
                RectTransform = {AnchorMin = "0.345313 0.533333", AnchorMax = "0.641146 0.632407", OffsetMax = "0 0"},
                Image = {Color = HexToRGB("#2020207C"), Material = "assets/content/ui/uibackgroundblur.mat"}
            }, "Overlay", Layer + ".Destroy1");
            
            container.Add(new CuiLabel
                {
                    FadeOut = 0.5f,
                    Text = {Color = "0.9 0.9 0.9 1", Text = $"<b>ПРЕДМЕТ ЗАБЛОКИРОВАН</b>\nДо разблокировки осталось: {leftTime}", FontSize = 22, Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf" },
                    RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1" }
                }, Layer + ".Destroy1", Layer + ".Destroy");

            CuiHelper.AddUi(player, container);
        } 
        
        private bool? CanEquipItem(PlayerInventory inventory, Item item)
        {
			if (inventory==null || item == null) return null;
            var player = inventory.containerBelt.playerOwner;
            if (player == null || player.IsNpc) return null;
            if (playerOnDuel(player)) return null;
			if (player.net.connection.authLevel>1) return null;
			if (player.userID < 76560000000000000L || player.IsDestroyed) return null;
            var isBlocked = Unblock(item.info.shortname);
            if (!isBlocked)
            {
                var projectile = item.GetHeldEntity() as BaseProjectile;
                if (projectile != null && projectile.primaryMagazine.contents != 0)
                {
                    isBlocked = Unblock(projectile.primaryMagazine.ammoType.shortname);
                }
            }

            if (isBlocked)
            {
                DrawInstanceBlock(player, item);
                timer.Once(2f, () =>
                {
                    CuiHelper.DestroyUi(player, Layer + ".Destroy");
                    timer.Once(0.5f, () => CuiHelper.DestroyUi(player, Layer + ".Destroy1"));
                });    
                  
                if (player.inventory.containerMain.itemList.Count == 24)
                {
                    var a = item.MoveToContainer(player.inventory.containerMain, -1, false);
 
                    if (!a)
                    { 
                        item.Drop(player.ServerPosition, Vector3.up, Quaternion.identity);
                        return false;
                    }

                    return null;
                }

                return false;
            }

            return null;
        }

        public void ReplyWithHelper(BasePlayer player, string message, string[] args = null, ulong senderID = 76561198236355670, string header = "Виртуальный помощник")
        {
            if (args != null)
                message = string.Format(message, (object[]) args);
            player.SendConsoleCommand("chat.add", 0, (object) senderID, (object) string.Format("<size=16><color=#81B67A>{0}</color>:</size>\n{1}", (object) header, (object) message));
        }

        object OnSwitchAmmo(BasePlayer player, BaseProjectile projectile)
        {
            if (player is NPCPlayer || _playersIgnore.Contains(player))
                return null;
            
            if (player.net?.connection?.authLevel >= 2) return null;
            if (playerOnDuel(player)) return null;
            var isBlocked = Unblock(projectile.primaryMagazine.ammoType);
            if (isBlocked)
            {
                
                projectile.primaryMagazine.contents = 0;
                projectile.SendNetworkUpdate();

                return false;
            }
            
            return null;
        }
        
        object OnReloadMagazine(BasePlayer player, BaseProjectile projectile)
        {
            if (player is NPCPlayer || _playersIgnore.Contains(player))
                return null;
            if (playerOnDuel(player)) return null;

            if (player.net?.connection?.authLevel >= 2) return null;
            NextTick(() =>
            { 
                var isBlocked = Unblock(projectile.primaryMagazine.ammoType);
                if (isBlocked)
                {
                    Item item = ItemManager.CreateByItemID(projectile.primaryMagazine.ammoType.itemid, projectile.primaryMagazine.contents);
                    
                    DrawInstanceBlock(player, item);
                    timer.Once(2f, () =>
                    {
                        CuiHelper.DestroyUi(player, Layer + ".Destroy");
                        timer.Once(0.5f, () => CuiHelper.DestroyUi(player, Layer + ".Destroy1"));
                    });
                    
                    projectile.primaryMagazine.contents = 0;
                    projectile.SendNetworkUpdate();
                    if (!item.MoveToContainer(player.inventory.containerMain))
                    {
                        var findItem = player.inventory.containerMain.FindItemByItemID(item.info.itemid);

                        findItem.amount += item.amount; 
                    }
                    player.SendNetworkUpdate(); 
                }
            });

            return null;
        }

        object OnTurretToggle(AutoTurret turret)
        {
            if (turret.HasFlag(BaseEntity.Flags.On)) return null;
            var list = new List<BasePlayer>(3);
            Vis.Entities(turret.transform.position, 4f, list, PlayerLayerMask);
            foreach (var p in list.Where(p => p.inventory.loot.entitySource == turret)) p.inventory.loot.Clear();
            foreach (var item in turret.inventory.itemList)
            {
                var isBlocked = Unblock(item.info.shortname);
                if (!isBlocked)
                {
                    var projectile = item.GetHeldEntity() as BaseProjectile;
                    if (projectile != null && projectile.primaryMagazine.contents != 0)
                    {
                        isBlocked = Unblock(projectile.primaryMagazine.ammoType.shortname);
                    }
                }
                if (!isBlocked) continue;
                turret.booting = false;
                turret.SendNetworkUpdate();
                return false;
            }
            return null;
        }

        void OnPlayerConnected(BasePlayer player)
        {
            if(!playersOpen.ContainsKey(player.userID))
                playersOpen.Add(player.userID, false);

            List<Item> items = new List<Item>();

            foreach (var item in storedData.blocks.Where(x => x.Value > CurrentTime()))
            {
                foreach (var itemInv in player.inventory.containerBelt.itemList)
                { 
                    if (item.Key == itemInv.info.shortname)
                    {  
                        items.Add(itemInv);
                    }
                }          
            }

            foreach (var item in items)
            {
                if (!item.MoveToContainer(player.inventory.containerMain, -1))
                {
                    item.Drop(player.ServerPosition, Vector3.up, Quaternion.identity);
                }
            }
        }

        void OnNewSave(string filename)
        {
            Puts("Обнаружен вайп карты! Автоматически поставлен блок на предметы!");
            isWipe = true;
        }

        #endregion

        #region Commands

        [ConsoleCommand("itemsblocker.reset")]
        private void ResetBlocks(ConsoleSystem.Arg arg)
        {
			var player = arg.Connection?.player as BasePlayer;
            if (player == null) return;            
			if (player.net?.connection?.authLevel< 2) return;
            isWipe = true;
            OnServerInitialized();
            Puts("Время блокировок сброшено.");
        }

        [ConsoleCommand("UI_ItemsBlocker")]
        private void cmdConsoleItemsBlocker(ConsoleSystem.Arg arg)
        {
            var player = arg.Connection?.player as BasePlayer;

            if (player == null) return;
            
            switch (arg.GetString(0))
            {
                case "close":
                    CuiHelper.DestroyUi(player, Layer);
                    CuiHelper.DestroyUi(player, LayerBlur);

                    playersOpen[player.userID] = false;
                    
                    break;
            }
        }
        
        [ChatCommand("block")]
        private void cmdChatDrawBlock(BasePlayer player)
        {
            DrawBlockGUI(player);
        }

        #endregion
        
        #region Methods

        private bool Unblock(ItemDefinition itemDefinition) => Unblock(itemDefinition.shortname);
        
        private bool Unblock(string shortname)
        {
            if (storedData.blocks.ContainsKey(shortname))
            {
                if (CurrentTime() < storedData.blocks[shortname])
                {
                    return true;
                }
            }
            
            return false;
        }
        
        private void DrawBlockGUI(BasePlayer player)
        {
            CuiHelper.DestroyUi(player, Layer);
            CuiHelper.DestroyUi(player, LayerBlur);
            
            CuiElementContainer container = new CuiElementContainer();

            var heightMultiplier = storedData.blocks.Where(x => x.Value > CurrentTime()).Count() / 7f * 0.02f;
            
            container.Add(new CuiPanel()
            {
                CursorEnabled = true,
                RectTransform = {AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0"},
                Image = {Color = HexToRGB("#2020207C"), Material = "assets/content/ui/uibackgroundblur.mat"}
            }, "Overlay", LayerBlur);

            container.Add(new CuiButton()
            {
                RectTransform = {AnchorMin = "0 0", AnchorMax = "1 1"},
                Button = {Command = "UI_ItemsBlocker close", Color = "0 0 0 0"},
                Text = {Text = ""}
            }, "Overlay", Layer);

            container.Add(new CuiLabel()
            {
                RectTransform = {AnchorMin = $"0.285938 {0.787037f + heightMultiplier}", AnchorMax = $"0.706771 {0.87963f + heightMultiplier}"},
                Text =
                {
                    Text = "<b>БЛОКИРОВКА ПРЕДМЕТОВ</b>",
                    Align = TextAnchor.MiddleCenter,
                    FontSize = 30,
                    Font = "RobotoCondensed-Bold.ttf"
                }
            }, Layer, ".Header");

            container.Add(new CuiLabel()
            {
                RectTransform = {AnchorMin = $"0.306251 {0.737037f + heightMultiplier}", AnchorMax = $"0.678125 {0.82963f + heightMultiplier}"},
                Text =
                {
                    Text =
                        "Здесь вы можете узнать когда будет доступен тот, или иной предмет.\n А также ближайшие к разблокировке предметы",
                    Align = TextAnchor.MiddleCenter,
                    FontSize = 14,
                    Font = "RobotoCondensed-Regular.ttf"
                }
            }, Layer, ".Header");

            var itemWidth = 0.104166f;
            var itemMargin = 0.011457f;
            var itemMin = 0.325521f;
            var itemsCount = 0;
            
            foreach (var item in storedData.blocks.Where(x => x.Value > CurrentTime()).OrderBy(x => x.Value).Take(3))
            {
                itemsCount++;

                var leftTime =
                    ConvertFromUnixTimestamp(storedData.blocks[item.Key] - CurrentTime()).ToString("HH:mm");
                
                container.Add(new CuiPanel()
                {
                    RectTransform = { AnchorMin = $"{itemMin} {0.539815 + heightMultiplier}", AnchorMax = $"{itemMin + itemWidth} {0.725 + heightMultiplier}"},
                    Image = {Color = HexToRGB("#FFFFFF13")}
                }, Layer, Layer + $".Items.{itemsCount}");
                
                container.Add(new CuiElement() 
                {
                    Name = Layer + $".Items.{itemsCount}.Icon",
                    Parent = Layer + $".Items.{itemsCount}",
                    Components =
                    {
                        GetItemImageComponent(item.Key),
                        new CuiRectTransformComponent()
                        {
                            AnchorMin = $"0 0",
                            AnchorMax = $"1 1"
                        },
                    }
                });
                
                container.Add(new CuiLabel() 
                {
                    RectTransform = {AnchorMin = "0.435003 -0.015", AnchorMax = "1.015 0.240001"},
                    Text =
                    {
                        Text = $"<b>{leftTime}</b>",
                        Align = TextAnchor.MiddleCenter,
                        Color = HexToRGB("#FFFFFF77"),
                        FontSize = 20,
                        Font = "RobotoCondensed-Bold.ttf"
                    }
                }, Layer + $".Items.{itemsCount}", Layer + $".Items.{itemsCount}.Text");
                
                itemMin += (itemWidth + itemMargin);
                
            }
            
            container.Add(new CuiPanel()
                {
                    RectTransform = { AnchorMin = $"0.244531 {0.509722 + heightMultiplier}", AnchorMax = $"0.755469 {0.516666 + heightMultiplier}"},
                    Image = {Color = HexToRGB("#7B464CFF")}
                }, Layer, Layer + $".Bar");

            double progressMin = Convert.ToDouble(storedData.blocks.Count(x => x.Value < CurrentTime())) / Convert.ToDouble(storedData.blocks.Count); 
            
            container.Add(new CuiPanel()
                { 
                    RectTransform = { AnchorMin = $"0 0", AnchorMax = $"{progressMin} 1"}, 
                    Image = {Color = HexToRGB("#7AA369FF")}
                }, Layer + $".Bar", Layer + $".Bar.Green");

            if (progressMin == 1)
            {
                container.Add(new CuiLabel() 
                {
                    RectTransform = { AnchorMin = "0.324479 0.541667", AnchorMax = "0.663021 0.724074"},
                    Text = { Text = "ВСЕ ПРЕДМЕТЫ РАЗБЛОКИРОВАНЫ! ВЕСЕЛИТЕСЬ!", Align = TextAnchor.MiddleCenter, Font = "RobotoCondensed-Bold.ttf", FontSize = 32}
                }, Layer);
            }

            itemMin = 0.180079f;
            itemWidth = 0.065104f;
            itemMargin = 0.010678f / 2f;
            var itemHeight = 0.115741f;
            var itemMinHeight = 0.362964f + heightMultiplier;

            itemsCount = 0;

            foreach (var item in storedData.blocks.Where(x => x.Value > CurrentTime()).OrderBy(x => x.Value).Skip(3))
            {
                itemsCount++;

                var time = storedData.blocks[item.Key] - CurrentTime();
                var hours = (int)(time / 3600f);
                var minute = (int)(time - hours * 3600f) / 60;
                var leftTime = $"{hours}ч {minute}м";
                
                container.Add(new CuiPanel()
                    {
                        RectTransform = { AnchorMin = $"{itemMin} {itemMinHeight}", AnchorMax = $"{itemMin + itemWidth} {itemMinHeight + itemHeight}"},
                        Image = {Color = HexToRGB("#FFFFFF13")}
                    }, Layer, Layer + $".Items1.{itemsCount}");
                
                container.Add(new CuiElement()
                {
                    Name = Layer + $".Items1.{itemsCount}.Icon",
                    Parent = Layer + $".Items1.{itemsCount}",
                    Components =
                    {
                        GetItemImageComponent(item.Key),
                        new CuiRectTransformComponent()
                        {
                            AnchorMin = $"0 0",
                            AnchorMax = $"1 1"
                        },
                    } 
                });
                
                container.Add(new CuiLabel()
                    {
                        RectTransform = {AnchorMin = "0 0.023993", AnchorMax = "0.959986 1"},
                        Text =
                        {
                            Text = $"<b>{leftTime}</b>",
                            Align = TextAnchor.LowerRight,
                            Color = HexToRGB("#FFFFFF77"),
                            FontSize = 16,
                            Font = "RobotoCondensed-Bold.ttf"
                        }
                    }, Layer + $".Items1.{itemsCount}", Layer + $".Items1.{itemsCount}.Text");
                
                itemMin += (itemWidth + itemMargin);
                
                if (itemsCount % 9 == 0)
                { 
                    itemMin = 0.180079f;
                    itemMinHeight -= ((itemMargin * 2) + itemHeight);
                }
            }

            playersOpen[player.userID] = true;
            timer.Once(15f, () => UpdateUI(player));
            
            CuiHelper.AddUi(player, container);
        }

        #endregion
        
        #region Helper

        private static string HexToRGB(string hex)
        {
            if (string.IsNullOrEmpty(hex))
            {
                hex = "#FFFFFFFF";
            } 

            var str = hex.Trim('#');

            if (str.Length == 6)
                str += "FF";

            if (str.Length != 8)
            {
                throw new Exception(hex);
            }

            var r = byte.Parse(str.Substring(0, 2), NumberStyles.HexNumber);
            var g = byte.Parse(str.Substring(2, 2), NumberStyles.HexNumber);
            var b = byte.Parse(str.Substring(4, 2), NumberStyles.HexNumber);
            var a = byte.Parse(str.Substring(6, 2), NumberStyles.HexNumber);

            Color color = new Color32(r, g, b, a);
            return $"{color.r:F2} {color.g:F2} {color.b:F2} {color.a:F2}";
        }

        public DateTime ConvertFromUnixTimestamp(double timestamp)
        {
            DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
            return origin.AddSeconds(timestamp);
        }
        
        #endregion

        #region Config

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

        protected override void LoadConfig()
        {
            base.LoadConfig();
            _config = Config.ReadObject<Configuration>();
        }

        protected override void LoadDefaultConfig()
        {
            _config = new Configuration()
            {
                blockAmmo = new Dictionary<string, int>()
                {
                    {"ammo.rifle.explosive", 24} 
                },
                blockClothes = new Dictionary<string, int>()
                {
                    {"riot.helmet", 1},
                    {"roadsign.jacket", 4},
                    {"roadsign.kilt", 4},
                    {"coffeecan.helmet", 4},
                    {"heavy.plate.helmet", 24},
                    {"heavy.plate.jacket", 24},
                    {"heavy.plate.pants", 24},
                    {"metal.facemask", 24},
                    {"metal.plate.torso", 24},
                },
                blockItem = new Dictionary<string, int>() 
                {
                    {"pistol.semiauto", 4},
                    {"pistol.python", 4},
                    {"shotgun.pump", 4},   
                    {"grenade.beancan", 4},
                    {"surveycharge", 4},
                    {"pistol.m92", 8},
                    {"grenade.f1", 8},
                    {"rifle.semiauto", 8},
                    {"shotgun.spas12", 8},
                    {"smg.mp5", 12},
                    {"smg.thompson", 12},
                    {"smg.2", 12},   
                    {"rifle.ak", 24},
                    {"rifle.lr300", 24},
                    {"rifle.bolt", 24},
                    {"lmg.m249", 24},
                    {"explosive.timed", 24},   
                    {"explosive.satchel", 24},
                    {"rocket.launcher", 24},
                    {"rifle.l96", 24},
                }
            };
        }

        public Configuration _config;

        public class Configuration
        {
            public Dictionary<string, int> blockItem = new Dictionary<string, int>();
            public Dictionary<string, int> blockClothes = new Dictionary<string, int>();
            public Dictionary<string, int> blockAmmo = new Dictionary<string, int>();
        }

        #endregion

        #region Utils

        static readonly DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0);
        static double CurrentTime() { return DateTime.UtcNow.Subtract(epoch).TotalSeconds; }

        #endregion
        
        #region Data

        class StoredData
        {
            public readonly Dictionary<string, double> blocks = new Dictionary<string, double>();
        }
        
        void SaveData()
        {
            BlockData.WriteObject(storedData);
        }

        void LoadData()
        {
            BlockData = Interface.Oxide.DataFileSystem.GetFile("ItemsBlocker/itemsblocker");
            try
            {
                storedData = BlockData.ReadObject<StoredData>();
            }
            catch
            {
                storedData = new StoredData();
            }
        }

        StoredData storedData;
        private DynamicConfigFile BlockData;

        #endregion

        #region Api

        [HookMethod(nameof(ApiPlayerIgnore))]
        void ApiPlayerIgnore(BasePlayer player, bool status)
        {
            if (!status) _playersIgnore.Remove(player); 
            else if (!_playersIgnore.Contains(player)) _playersIgnore.Add(player);
        }

        #endregion
		public CuiRawImageComponent GetAvatarImageComponent(ulong user_id, string color = "1.0 1.0 1.0 1.0"){
			
			if (plugins.Find("ImageLoader")) return plugins.Find("ImageLoader").Call("BuildAvatarImageComponent",user_id) as CuiRawImageComponent;
			if (plugins.Find("ImageLibrary")) {
				return new CuiRawImageComponent { Png = (string)plugins.Find("ImageLibrary").Call("GetImage", user_id.ToString()), Color = color, Sprite = "assets/content/textures/generic/fulltransparent.tga" };
			}
			return new CuiRawImageComponent {Url = "https://image.flaticon.com/icons/png/512/37/37943.png", Color = color, Sprite = "assets/content/textures/generic/fulltransparent.tga"};
		}
		public CuiRawImageComponent GetImageComponent(string url, string shortName="", string color = "1.0 1.0 1.0 1.0"){
			
			if (plugins.Find("ImageLoader")) return plugins.Find("ImageLoader").Call("BuildImageComponent",url) as CuiRawImageComponent;
			if (plugins.Find("ImageLibrary")) {
				if (!string.IsNullOrEmpty(shortName)) url = shortName;
				//Puts($"{url}: "+ (string)plugins.Find("ImageLibrary").Call("GetImage", url));
				return new CuiRawImageComponent { Png = (string)plugins.Find("ImageLibrary").Call("GetImage", url), Color = color, Sprite = "assets/content/textures/generic/fulltransparent.tga"};
			}
			return new CuiRawImageComponent {Url = url, Color = color, Sprite = "assets/content/textures/generic/fulltransparent.tga"};
		}
		public CuiRawImageComponent GetItemImageComponent(string shortName){
			string itemUrl = shortName;
			if (plugins.Find("ImageLoader")) {itemUrl = $"https://static.moscow.ovh/images/games/rust/icons/{shortName}.png";}
            return GetImageComponent(itemUrl, shortName);
		}
		public bool AddImage(string url,string shortName=""){
			if (plugins.Find("ImageLoader")){				
				plugins.Find("ImageLoader").Call("CheckCachedOrCache", url);
				return true;
			}else
			if (plugins.Find("ImageLibrary")){
				if (string.IsNullOrEmpty(shortName)) shortName=url;
				plugins.Find("ImageLibrary").Call("AddImage", url, shortName);
				//Puts($"Add Image {shortName}");
				return true;
			}	
			return false;		
		}
    }
}

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

Другие ресурсы пользователя 15FPS

Сверху