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

FREE Crafts : 2.10.0 2.10.0

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using Facepunch;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Oxide.Core;
using Oxide.Core.Libraries;
using Oxide.Core.Libraries.Covalence;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using Oxide.Plugins.CraftsExtensionMethods;
using Rust;
using UnityEngine;
using Random = UnityEngine.Random;

namespace Oxide.Plugins
{
    [Info("Crafts", "Mevent", "2.10.0")]
    public class Crafts : RustPlugin
    {
        #region Fields

        [PluginReference]
        private Plugin
            ImageLibrary = null,
            SpawnModularCar = null,
            Notify = null,
            UINotify = null,
            LangAPI = null;

        private static Crafts _instance;

        private const string Layer = "UI.Crafts";

        private const string EditLayer = "UI.Crafts.Edit";

        private const string PermEdit = "crafts.edit";

        private const string PermSetWb = "crafts.setworkbench";

        private List<CraftConf> _crafts = new List<CraftConf>();

        private readonly List<RecyclerComponent> _recyclers = new List<RecyclerComponent>();

        private readonly List<CarController> _cars = new List<CarController>();

        private readonly List<BasePlayer> _openedUi = new List<BasePlayer>();

        private readonly Dictionary<string, List<KeyValuePair<int, string>>> _itemsCategories =
            new Dictionary<string, List<KeyValuePair<int, string>>>();

        private readonly List<SafeZoneComponent> _safeZones = new List<SafeZoneComponent>();

        private enum WorkbenchLevel
        {
            None = 0,
            One = 1,
            Two = 2,
            Three = 3
        }

        private enum CraftType
        {
            Command,
            Vehicle,
            Item,
            Recycler,
            ModularCar
        }

        private readonly Dictionary<int, ItemForCraft> _itemsById = new Dictionary<int, ItemForCraft>();

        private readonly Dictionary<int, CraftConf> _craftsById = new Dictionary<int, CraftConf>();

        private readonly Dictionary<BasePlayer, Dictionary<string, object>> _craftEditing =
            new Dictionary<BasePlayer, Dictionary<string, object>>();

        private readonly Dictionary<BasePlayer, Dictionary<string, object>> _itemEditing =
            new Dictionary<BasePlayer, Dictionary<string, object>>();

        private readonly Dictionary<BasePlayer, CustomWorkbenchConf> _openedCustomWb =
            new Dictionary<BasePlayer, CustomWorkbenchConf>();

        #endregion

        #region Config

        private static Configuration _config;

        private class Configuration
        {
            [JsonProperty(PropertyName = "Команды", ObjectCreationHandling = ObjectCreationHandling.Replace)]
            public readonly string[] Commands = { "craft", "crafts" };

            [JsonProperty(PropertyName = "Закрывать UI при повторном использовании команды?")]
            public readonly bool CloseReusing = false;

            [JsonProperty(PropertyName = "Включить работу с Notify?")]
            public readonly bool UseNotify = true;

            [JsonProperty(PropertyName = "Включить работу с LangAPI?")]
            public readonly bool UseLangAPI = true;

            [JsonProperty(PropertyName = "Разрешение (пример: crafts.use)")]
            public readonly string Permission = string.Empty;

            [JsonProperty(PropertyName = "Экономика")]
            public readonly EconomyConf Economy = new EconomyConf
            {
                Show = false,
                Type = EconomyConf.EconomyType.Plugin,
                AddHook = "Deposit",
                BalanceHook = "Balance",
                RemoveHook = "Withdraw",
                Plug = "Economics",
                ShortName = "scrap",
                DisplayName = string.Empty,
                Skin = 0
            };

            [JsonProperty(PropertyName = "Categories", ObjectCreationHandling = ObjectCreationHandling.Replace)]
            public readonly List<Category> Categories = new List<Category>
            {
                new Category
                {
                    Enabled = true,
                    Permission = string.Empty,
                    Title = "Vehicles",
                    Color = new IColor("#161617", 100),
                    Crafts = new List<CraftConf>
                    {
                        new CraftConf
                        {
                            Enabled = true,
                            Image = "https://i.imgur.com/YXjADeE.png",
                            Title = "Minicopter",
                            Description = "Fast air transport",
                            CmdToGive = "givecopter",
                            Permission = "crafts.all",
                            DisplayName = "Minicopter",
                            ShortName = "electric.flasherlight",
                            Amount = 1,
                            SkinID = 2080145158,
                            Type = CraftType.Vehicle,
                            Prefab = "assets/content/vehicles/minicopter/minicopter.entity.prefab",
                            Level = WorkbenchLevel.One,
                            UseDistance = true,
                            Distance = 1.5f,
                            GiveCommand = string.Empty,
                            Ground = true,
                            Structure = true,
                            Items = new List<ItemForCraft>
                            {
                                new ItemForCraft(string.Empty, "gears", 5, 0),
                                new ItemForCraft(string.Empty, "roadsigns", 5, 0),
                                new ItemForCraft(string.Empty, "metal.fragments", 2000, 0)
                            },
                            Modular = new ModularCarConf
                            {
                                CodeLock = true,
                                KeyLock = false,
                                EnginePartsTier = 2,
                                FreshWaterAmount = 0,
                                FuelAmount = 140,
                                Modules = new[]
                                {
                                    "vehicle.1mod.engine",
                                    "vehicle.1mod.cockpit.armored",
                                    "vehicle.1mod.cockpit.armored"
                                }
                            },
                            Cooldown = 0,
                            MultipleCraft = false,
                            MaxAmount = 0,
                            Craft = true,
                            Sale = false,
                            Cost = 100
                        },
                        new CraftConf
                        {
                            Enabled = true,
                            Image = "https://i.imgur.com/dmWQOm6.png",
                            Description = "Slow water transport",
                            Title = "Row Boat",
                            CmdToGive = "giverowboat",
                            Permission = "crafts.all",
                            DisplayName = "Row Boat",
                            ShortName = "coffin.storage",
                            Amount = 1,
                            SkinID = 2080150023,
                            Type = CraftType.Vehicle,
                            Prefab = "assets/content/vehicles/boats/rowboat/rowboat.prefab",
                            Level = WorkbenchLevel.Two,
                            UseDistance = true,
                            Distance = 1.5f,
                            GiveCommand = string.Empty,
                            Ground = true,
                            Structure = true,
                            Items = new List<ItemForCraft>
                            {
                                new ItemForCraft(string.Empty, "gears", 5, 0),
                                new ItemForCraft(string.Empty, "roadsigns", 5, 0),
                                new ItemForCraft(string.Empty, "metal.fragments", 2000, 0)
                            },
                            Modular = new ModularCarConf
                            {
                                CodeLock = true,
                                KeyLock = false,
                                EnginePartsTier = 2,
                                FreshWaterAmount = 0,
                                FuelAmount = 140,
                                Modules = new[]
                                {
                                    "vehicle.1mod.engine",
                                    "vehicle.1mod.cockpit.armored",
                                    "vehicle.1mod.cockpit.armored"
                                }
                            },
                            Cooldown = 0,
                            MultipleCraft = false,
                            MaxAmount = 0,
                            Craft = true,
                            Sale = false,
                            Cost = 100
                        },
                        new CraftConf
                        {
                            Enabled = true,
                            Image = "https://i.imgur.com/CgpVw2j.png",
                            Description = "Slow water transport",
                            Title = "RHIB",
                            CmdToGive = "giverhibboat",
                            Permission = "crafts.all",
                            DisplayName = "RHIB",
                            ShortName = "electric.sirenlight",
                            Amount = 1,
                            SkinID = 2080150770,
                            Type = CraftType.Vehicle,
                            GiveCommand = string.Empty,
                            Prefab = "assets/content/vehicles/boats/rhib/rhib.prefab",
                            Level = WorkbenchLevel.Three,
                            UseDistance = true,
                            Distance = 1.5f,
                            Ground = true,
                            Structure = true,
                            Items = new List<ItemForCraft>
                            {
                                new ItemForCraft(string.Empty, "gears", 5, 0),
                                new ItemForCraft(string.Empty, "roadsigns", 5, 0),
                                new ItemForCraft(string.Empty, "metal.fragments", 2000, 0)
                            },
                            Modular = new ModularCarConf
                            {
                                CodeLock = true,
                                KeyLock = false,
                                EnginePartsTier = 2,
                                FreshWaterAmount = 0,
                                FuelAmount = 140,
                                Modules = new[]
                                {
                                    "vehicle.1mod.engine",
                                    "vehicle.1mod.cockpit.armored",
                                    "vehicle.1mod.cockpit.armored"
                                }
                            },
                            Cooldown = 0,
                            MultipleCraft = false,
                            MaxAmount = 0,
                            Craft = true,
                            Sale = false,
                            Cost = 100
                        },
                        new CraftConf
                        {
                            Enabled = true,
                            Image = "https://i.imgur.com/cp2Xx2A.png",
                            Title = "Hot Air Balloon",
                            Description = "Slow air transport",
                            CmdToGive = "givehotair",
                            Permission = "crafts.all",
                            DisplayName = "Hot Air Balloon",
                            ShortName = "box.repair.bench",
                            Amount = 1,
                            SkinID = 2080152635,
                            Type = CraftType.Vehicle,
                            GiveCommand = string.Empty,
                            Prefab = "assets/prefabs/deployable/hot air balloon/hotairballoon.prefab",
                            Level = WorkbenchLevel.Three,
                            UseDistance = true,
                            Distance = 1.5f,
                            Ground = true,
                            Structure = true,
                            Items = new List<ItemForCraft>
                            {
                                new ItemForCraft(string.Empty, "gears", 5, 0),
                                new ItemForCraft(string.Empty, "roadsigns", 5, 0),
                                new ItemForCraft(string.Empty, "metal.fragments", 2000, 0)
                            },
                            Modular = new ModularCarConf
                            {
                                CodeLock = true,
                                KeyLock = false,
                                EnginePartsTier = 2,
                                FreshWaterAmount = 0,
                                FuelAmount = 140,
                                Modules = new[]
                                {
                                    "vehicle.1mod.engine",
                                    "vehicle.1mod.cockpit.armored",
                                    "vehicle.1mod.cockpit.armored"
                                }
                            },
                            Cooldown = 0,
                            MultipleCraft = false,
                            MaxAmount = 0,
                            Craft = true,
                            Sale = false,
                            Cost = 100
                        },
                        new CraftConf
                        {
                            Enabled = true,
                            Image = "https://i.imgur.com/7JZE0Lr.png",
                            Title = "Transport Helicopter",
                            Description = "Fast air transport",
                            CmdToGive = "givescrapheli",
                            Permission = "crafts.all",
                            DisplayName = "Transport Helicopter",
                            ShortName = "electric.flasherlight",
                            Amount = 1,
                            SkinID = 2080154394,
                            Type = CraftType.Vehicle,
                            GiveCommand = string.Empty,
                            Prefab = "assets/content/vehicles/scrap heli carrier/scraptransporthelicopter.prefab",
                            Level = WorkbenchLevel.Three,
                            UseDistance = true,
                            Distance = 1.5f,
                            Ground = true,
                            Structure = true,
                            Items = new List<ItemForCraft>
                            {
                                new ItemForCraft(string.Empty, "gears", 5, 0),
                                new ItemForCraft(string.Empty, "roadsigns", 5, 0),
                                new ItemForCraft(string.Empty, "metal.fragments", 2000, 0)
                            },
                            Modular = new ModularCarConf
                            {
                                CodeLock = true,
                                KeyLock = false,
                                EnginePartsTier = 2,
                                FreshWaterAmount = 0,
                                FuelAmount = 140,
                                Modules = new[]
                                {
                                    "vehicle.1mod.engine",
                                    "vehicle.1mod.cockpit.armored",
                                    "vehicle.1mod.cockpit.armored"
                                }
                            },
                            Cooldown = 0,
                            MultipleCraft = false,
                            MaxAmount = 0,
                            Craft = true,
                            Sale = false,
                            Cost = 100
                        },
                        new CraftConf
                        {
                            Enabled = true,
                            Image = "https://i.imgur.com/xj0N3lI.png",
                            Title = "Snowmobile",
                            Description = "Conquers snow biomes",
                            CmdToGive = "givesnowmobile",
                            Permission = "crafts.all",
                            DisplayName = "Snowmobile",
                            ShortName = "electric.flasherlight",
                            Amount = 1,
                            SkinID = 2747934628,
                            Type = CraftType.Vehicle,
                            GiveCommand = string.Empty,
                            Prefab = "assets/content/vehicles/snowmobiles/snowmobile.prefab",
                            Level = WorkbenchLevel.Two,
                            UseDistance = true,
                            Distance = 1.5f,
                            Ground = true,
                            Structure = false,
                            Items = new List<ItemForCraft>
                            {
                                new ItemForCraft(string.Empty, "gears", 5, 0),
                                new ItemForCraft(string.Empty, "roadsigns", 5, 0),
                                new ItemForCraft(string.Empty, "metal.fragments", 2000, 0)
                            },
                            Modular = new ModularCarConf
                            {
                                CodeLock = true,
                                KeyLock = false,
                                EnginePartsTier = 2,
                                FreshWaterAmount = 0,
                                FuelAmount = 140,
                                Modules = new[]
                                {
                                    "vehicle.1mod.engine",
                                    "vehicle.1mod.cockpit.armored",
                                    "vehicle.1mod.cockpit.armored"
                                }
                            },
                            Cooldown = 0,
                            MultipleCraft = false,
                            MaxAmount = 0,
                            Craft = true,
                            Sale = false,
                            Cost = 100
                        }
                    }
                },
                new Category
                {
                    Enabled = true,
                    Permission = string.Empty,
                    Title = "Cars",
                    Color = new IColor("#161617", 100),
                    Crafts = new List<CraftConf>
                    {
                        new CraftConf
                        {
                            Enabled = true,
                            Image = "https://i.imgur.com/eioxlvK.png",
                            Title = "Sedan",
                            Description = "5KM/H",
                            CmdToGive = "givesedan",
                            Permission = "crafts.all",
                            DisplayName = "Car",
                            ShortName = "woodcross",
                            Amount = 1,
                            SkinID = 2080151780,
                            Type = CraftType.Vehicle,
                            GiveCommand = string.Empty,
                            Prefab = "assets/content/vehicles/sedan_a/sedantest.entity.prefab",
                            Level = WorkbenchLevel.Two,
                            UseDistance = true,
                            Distance = 1.5f,
                            Ground = true,
                            Structure = true,
                            Items = new List<ItemForCraft>
                            {
                                new ItemForCraft(string.Empty, "gears", 5, 0),
                                new ItemForCraft(string.Empty, "roadsigns", 5, 0),
                                new ItemForCraft(string.Empty, "metal.fragments", 2000, 0)
                            },
                            Modular = new ModularCarConf
                            {
                                CodeLock = true,
                                KeyLock = false,
                                EnginePartsTier = 2,
                                FreshWaterAmount = 0,
                                FuelAmount = 140,
                                Modules = new[]
                                {
                                    "vehicle.1mod.engine",
                                    "vehicle.1mod.cockpit.armored",
                                    "vehicle.1mod.cockpit.armored"
                                }
                            },
                            Cooldown = 0,
                            MultipleCraft = false,
                            MaxAmount = 0,
                            Craft = true,
                            Sale = false,
                            Cost = 100
                        },
                        new CraftConf
                        {
                            Enabled = true,
                            Image = "https://i.imgur.com/z7X5D5V.png",
                            Title = "Ferrari",
                            Description = "25KM/H",
                            CmdToGive = "givemod1",
                            Permission = "crafts.all",
                            DisplayName = "Car",
                            ShortName = "electric.flasherlight",
                            Amount = 1,
                            SkinID = 2244308598,
                            Type = CraftType.ModularCar,
                            Prefab = string.Empty,
                            GiveCommand = string.Empty,
                            Level = WorkbenchLevel.Two,
                            UseDistance = true,
                            Distance = 1.5f,
                            Ground = true,
                            Structure = true,
                            Items = new List<ItemForCraft>
                            {
                                new ItemForCraft(string.Empty, "gears", 5, 0),
                                new ItemForCraft(string.Empty, "roadsigns", 5, 0),
                                new ItemForCraft(string.Empty, "metal.fragments", 2000, 0)
                            },
                            Modular = new ModularCarConf
                            {
                                CodeLock = true,
                                KeyLock = false,
                                EnginePartsTier = 2,
                                FreshWaterAmount = 0,
                                FuelAmount = 140,
                                Modules = new[]
                                {
                                    "vehicle.1mod.engine",
                                    "vehicle.1mod.cockpit.armored",
                                    "vehicle.1mod.cockpit.armored"
                                }
                            },
                            Cooldown = 0,
                            MultipleCraft = false,
                            MaxAmount = 0,
                            Craft = true,
                            Sale = false,
                            Cost = 100
                        }
                    }
                },
                new Category
                {
                    Enabled = true,
                    Permission = string.Empty,
                    Title = "Misc",
                    Color = new IColor("#161617", 100),
                    Crafts = new List<CraftConf>
                    {
                        new CraftConf
                        {
                            Enabled = true,
                            Image = "https://i.imgur.com/LLB2AVi.png",
                            Title = "Home Recycler",
                            Description = string.Empty,
                            CmdToGive = "giverecycler",
                            Permission = "crafts.all",
                            DisplayName = "Home Recycler",
                            ShortName = "research.table",
                            Amount = 1,
                            SkinID = 2186833264,
                            Type = CraftType.Recycler,
                            Prefab = "assets/bundled/prefabs/static/recycler_static.prefab",
                            GiveCommand = string.Empty,
                            Level = WorkbenchLevel.Two,
                            UseDistance = true,
                            Distance = 1.5f,
                            Ground = true,
                            Structure = true,
                            Items = new List<ItemForCraft>
                            {
                                new ItemForCraft(string.Empty, "gears", 5, 0),
                                new ItemForCraft(string.Empty, "roadsigns", 5, 0),
                                new ItemForCraft(string.Empty, "metal.fragments", 2000, 0)
                            },
                            Modular = new ModularCarConf
                            {
                                CodeLock = true,
                                KeyLock = false,
                                EnginePartsTier = 2,
                                FreshWaterAmount = 0,
                                FuelAmount = 140,
                                Modules = new[]
                                {
                                    "vehicle.1mod.engine",
                                    "vehicle.1mod.cockpit.armored",
                                    "vehicle.1mod.cockpit.armored"
                                }
                            },
                            Cooldown = 0,
                            MultipleCraft = false,
                            MaxAmount = 0,
                            Craft = true,
                            Sale = false,
                            Cost = 100
                        },
                        new CraftConf
                        {
                            Enabled = true,
                            Image = "https://i.imgur.com/mw1T17x.png",
                            Title = string.Empty,
                            Description = string.Empty,
                            CmdToGive = "givelr300",
                            Permission = "crafts.all",
                            DisplayName = string.Empty,
                            ShortName = "rifle.lr300",
                            Amount = 1,
                            SkinID = 0,
                            Type = CraftType.Item,
                            Prefab = string.Empty,
                            GiveCommand = string.Empty,
                            Level = WorkbenchLevel.None,
                            UseDistance = true,
                            Distance = 1.5f,
                            Ground = true,
                            Structure = true,
                            Items = new List<ItemForCraft>
                            {
                                new ItemForCraft(string.Empty, "gears", 5, 0),
                                new ItemForCraft(string.Empty, "roadsigns", 5, 0),
                                new ItemForCraft(string.Empty, "metal.fragments", 2000, 0)
                            },
                            Modular = new ModularCarConf
                            {
                                CodeLock = true,
                                KeyLock = false,
                                EnginePartsTier = 2,
                                FreshWaterAmount = 0,
                                FuelAmount = 140,
                                Modules = new[]
                                {
                                    "vehicle.1mod.engine",
                                    "vehicle.1mod.cockpit.armored",
                                    "vehicle.1mod.cockpit.armored"
                                }
                            },
                            Cooldown = 0,
                            MultipleCraft = false,
                            MaxAmount = 0,
                            Craft = true,
                            Sale = false,
                            Cost = 100
                        }
                    }
                }
            };

            [JsonProperty(PropertyName = "Настройка Верстаков",
                ObjectCreationHandling = ObjectCreationHandling.Replace)]
            public readonly Dictionary<WorkbenchLevel, IColor> Workbenches =
                new Dictionary<WorkbenchLevel, IColor>
                {
                    [WorkbenchLevel.None] = new IColor("#FFFFFF", 00),
                    [WorkbenchLevel.One] = new IColor("#74884A", 100),
                    [WorkbenchLevel.Two] = new IColor("#B19F56", 100),
                    [WorkbenchLevel.Three] = new IColor("#B43D3D", 100)
                };

            [JsonProperty(PropertyName = "Настройка Переработчика")]
            public readonly RecyclerConfig Recycler = new RecyclerConfig
            {
                Speed = 5f,
                Radius = 7.5f,
                Text = "<size=19>RECYCLER</size>\n<size=15>{0}/{1}</size>",
                Color = "#C5D0E6",
                Delay = 0.75f,
                Available = true,
                Owner = true,
                Amounts = new[]
                    {0.9f, 0, 0, 0, 0, 0.5f, 0, 0, 0, 0.9f, 0.5f, 0.5f, 0, 1, 1, 0.5f, 0, 0, 0, 0, 0, 1, 1},
                Scale = 0.5f,
                DDraw = true,
                Building = true,
                Destroy = new RecyclerDestroy
                {
                    CheckGround = true,
                    Item = true,
                    Effects = new List<string>
                    {
                        "assets/bundled/prefabs/fx/item_break.prefab",
                        "assets/bundled/prefabs/fx/impacts/stab/rock/stab_rock_01.prefab"
                    }
                }
            };

            [JsonProperty(PropertyName = "Настройка Машины")]
            public readonly CarConfig Car = new CarConfig
            {
                ActiveItems = new ActiveItemOptions
                {
                    Disable = true,
                    BlackList = new[]
                    {
                        "explosive.timed", "rocket.launcher", "surveycharge", "explosive.satchel"
                    }
                },
                Radius = 7.5f,
                Text = "<size=15>{0}/{1}</size>",
                Color = "#C5D0E6",
                Delay = 0.75f
            };

            [JsonProperty(PropertyName = "Кастомные верстаки (Entity ID - настройки)",
                ObjectCreationHandling = ObjectCreationHandling.Replace)]
            public readonly Dictionary<uint, CustomWorkbenchConf> CustomWorkbench =
                new Dictionary<uint, CustomWorkbenchConf>
                {
                    [123343941] = new CustomWorkbenchConf
                    {
                        Categories = new List<string>
                        {
                            "Cars", "Misc"
                        },
                        SafeZone = true,
                        SafeZoneRadius = 5,
                        WorkBench = new Dictionary<string, int>
                        {
                            ["crafts.default"] = 0,
                            ["crafts.premium"] = 3
                        }
                    }
                };

            [JsonProperty(PropertyName = "Настройка UI")]
            public readonly UserInterface UI = new UserInterface
            {
                CatWidth = 90,
                CatMargin = 5,
                CatHeight = 25,
                CraftWidth = 125,
                CraftHeight = 125,
                CraftMargin = 10,
                CraftYIndent = -115,
                CraftStrings = 2,
                CraftAmountOnString = 5,
                CategoriesAmountOnPage = 7,
                PageSize = 25,
                PageSelectedSize = 40,
                PagesMargin = 5,
                ItemMargin = 40,
                ItemWidth = 130,
                Color1 = new IColor("#0E0E10", 100),
                Color2 = new IColor("#161617", 100),
                Color3 = new IColor("#FFFFFF", 100),
                Color4 = new IColor("#4B68FF", 100),
                Color5 = new IColor("#74884A", 100),
                Color6 = new IColor("#CD4632", 100),
                Color7 = new IColor("#595651", 100),
                Color8 = new IColor("#4B68FF", 70),
                Color9 = new IColor("#0E0E10", 98),
                Color10 = new IColor("#4B68FF", 50),
                Color11 = new IColor("#FF4B4B", 100),
                BackgroundImage = string.Empty
            };

            public VersionNumber Version;
        }

        private class EconomyConf
        {
            public enum EconomyType
            {
                Plugin,
                Item
            }

            [JsonProperty(PropertyName = "Показывать Баланс")]
            public bool Show;

            [JsonProperty(PropertyName = "Тип (Plugin/Item)")]
            [JsonConverter(typeof(StringEnumConverter))]
            public EconomyType Type;

            [JsonProperty(PropertyName = "Plugin name")]
            public string Plug;

            [JsonProperty(PropertyName = "Balance add hook")]
            public string AddHook;

            [JsonProperty(PropertyName = "Balance remove hook")]
            public string RemoveHook;

            [JsonProperty(PropertyName = "Balance show hook")]
            public string BalanceHook;

            [JsonProperty(PropertyName = "ShortName")]
            public string ShortName;

            [JsonProperty(PropertyName = "Display Name (empty - default)")]
            public string DisplayName;

            [JsonProperty(PropertyName = "Skin")] public ulong Skin;

            public double ShowBalance(BasePlayer player)
            {
                switch (Type)
                {
                    case EconomyType.Plugin:
                        {
                            var plugin = _instance?.plugins?.Find(Plug);
                            if (plugin == null) return 0;

                            return Math.Round(Convert.ToDouble(plugin.Call(BalanceHook, player.userID)), 2);
                        }
                    case EconomyType.Item:
                        {
                            return ItemCount(player.inventory.AllItems(), ShortName, Skin);
                        }
                    default:
                        return 0;
                }
            }

            public void AddBalance(BasePlayer player, double amount)
            {
                switch (Type)
                {
                    case EconomyType.Plugin:
                        {
                            var plugin = _instance?.plugins?.Find(Plug);
                            if (plugin == null) return;

                            switch (Plug)
                            {
                                case "BankSystem":
                                case "ServerRewards":
                                    plugin.Call(AddHook, player.userID, (int)amount);
                                    break;
                                default:
                                    plugin.Call(AddHook, player.userID, amount);
                                    break;
                            }

                            break;
                        }
                    case EconomyType.Item:
                        {
                            var am = (int)amount;

                            var item = ToItem(am);
                            if (item == null) return;

                            player.GiveItem(item);
                            break;
                        }
                }
            }

            public bool RemoveBalance(BasePlayer player, double amount)
            {
                switch (Type)
                {
                    case EconomyType.Plugin:
                        {
                            if (ShowBalance(player) < amount) return false;

                            var plugin = _instance?.plugins.Find(Plug);
                            if (plugin == null) return false;

                            switch (Plug)
                            {
                                case "BankSystem":
                                case "ServerRewards":
                                    plugin.Call(RemoveHook, player.userID, (int)amount);
                                    break;
                                default:
                                    plugin.Call(RemoveHook, player.userID, amount);
                                    break;
                            }

                            return true;
                        }
                    case EconomyType.Item:
                        {
                            var playerItems = player.inventory.AllItems();
                            var am = (int)amount;

                            if (ItemCount(playerItems, ShortName, Skin) < am) return false;

                            Take(playerItems, ShortName, Skin, am);
                            return true;
                        }
                    default:
                        return false;
                }
            }

            public bool Transfer(BasePlayer player, BasePlayer targetPlayer, double amount)
            {
                if (!RemoveBalance(player, amount))
                    return false;

                AddBalance(targetPlayer, amount);
                return true;
            }

            private Item ToItem(int amount)
            {
                var item = ItemManager.CreateByName(ShortName, amount, Skin);
                if (item == null)
                {
                    Debug.LogError($"Error creating item with ShortName: '{ShortName}'");
                    return null;
                }

                if (!string.IsNullOrEmpty(DisplayName)) item.name = DisplayName;

                return item;
            }
        }

        private class CustomWorkbenchConf
        {
            [JsonProperty(PropertyName = "Категории (Названия) [* - все]",
                ObjectCreationHandling = ObjectCreationHandling.Replace)]
            public List<string> Categories;

            [JsonProperty(PropertyName = "Включать safe zone")]
            public bool SafeZone;

            [JsonProperty(PropertyName = "Радиус Safe Zone")]
            public float SafeZoneRadius;

            [JsonProperty(PropertyName = "Уровень Верстака", ObjectCreationHandling = ObjectCreationHandling.Replace)]
            public Dictionary<string, int> WorkBench = new Dictionary<string, int>
            {
                ["crafts.default"] = 0,
                ["crafts.premium"] = 0
            };

            public WorkbenchLevel GetWorkBenchLevel(BasePlayer player)
            {
                var result = 0;

                foreach (var check in WorkBench)
                    if (!string.IsNullOrEmpty(check.Key) &&
                        _instance.permission.UserHasPermission(
                            player.UserIDString, check.Key)
                        && check.Value > result)
                        result = check.Value;

                return (WorkbenchLevel)result;
            }
        }

        private class UserInterface
        {
            [JsonProperty(PropertyName = "Ширина категории")]
            public float CatWidth;

            [JsonProperty(PropertyName = "Высота категории")]
            public float CatHeight;

            [JsonProperty(PropertyName = "Отступ между категориями")]
            public float CatMargin;

            [JsonProperty(PropertyName = "Ширина крафта")]
            public float CraftWidth;

            [JsonProperty(PropertyName = "Высота крафта")]
            public float CraftHeight;

            [JsonProperty(PropertyName = "Отступ между крафтами")]
            public float CraftMargin;

            [JsonProperty(PropertyName = "Отступ сверху для крафтов")]
            public float CraftYIndent;

            [JsonProperty(PropertyName = "Кол-во крафтов на строке")]
            public int CraftAmountOnString;

            [JsonProperty(PropertyName = "Кол-во категорий на странице")]
            public int CategoriesAmountOnPage;

            [JsonProperty(PropertyName = "Кол-во строк крафтов")]
            public int CraftStrings;

            [JsonProperty(PropertyName = "Размер страницы")]
            public float PageSize;

            [JsonProperty(PropertyName = "Размер выделенной страницы")]
            public float PageSelectedSize;

            [JsonProperty(PropertyName = "Отступ между страницами")]
            public float PagesMargin;

            [JsonProperty(PropertyName = "Высота предмета")]
            public float ItemWidth;

            [JsonProperty(PropertyName = "Отступ между предметами")]
            public float ItemMargin;

            [JsonProperty(PropertyName = "Цвет 1")]
            public IColor Color1;

            [JsonProperty(PropertyName = "Цвет 2")]
            public IColor Color2;

            [JsonProperty(PropertyName = "Цвет 3")]
            public IColor Color3;

            [JsonProperty(PropertyName = "Цвет 4")]
            public IColor Color4;

            [JsonProperty(PropertyName = "Цвет 5")]
            public IColor Color5;

            [JsonProperty(PropertyName = "Цвет 6")]
            public IColor Color6;

            [JsonProperty(PropertyName = "Цвет 7")]
            public IColor Color7;

            [JsonProperty(PropertyName = "Цвет 8")]
            public IColor Color8;

            [JsonProperty(PropertyName = "Цвет 9")]
            public IColor Color9;

            [JsonProperty(PropertyName = "Цвет 10")]
            public IColor Color10;

            [JsonProperty(PropertyName = "Цвет 11")]
            public IColor Color11;

            [JsonProperty(PropertyName = "Фоновое изображение")]
            public string BackgroundImage;

            [JsonProperty(PropertyName = "Закрывать после крафта?")]
            public bool CloseAfterCraft;
        }

        private class Category
        {
            [JsonProperty(PropertyName = "Включено")]
            public bool Enabled;

            [JsonProperty(PropertyName = "Разрешение (пример: crafts.vip)")]
            public string Permission;

            [JsonProperty(PropertyName = "Название")]
            public string Title;

            [JsonProperty(PropertyName = "Фоновый цвет")]
            public IColor Color;

            [JsonProperty(PropertyName = "Предметы", ObjectCreationHandling = ObjectCreationHandling.Replace)]
            public List<CraftConf> Crafts;
        }

        private class CraftConf
        {
            [JsonProperty(PropertyName = "ID")] public int ID;

            [JsonProperty(PropertyName = "Включено")]
            public bool Enabled;

            [JsonProperty(PropertyName = "Изображение")]
            public string Image;

            [JsonProperty(PropertyName = "Название")]
            public string Title;

            [JsonProperty(PropertyName = "Описание")]
            public string Description;

            [JsonProperty(PropertyName = "Команда (для выдачи предмета)")]
            public string CmdToGive;

            [JsonProperty(PropertyName = "Разрешение (пример: crafts.vip)")]
            public string Permission;

            [JsonProperty(PropertyName = "Отображаемое имя")]
            public string DisplayName;

            [JsonProperty(PropertyName = "Shortname")]
            public string ShortName;

            [JsonProperty(PropertyName = "Количество")]
            public int Amount;

            [JsonProperty(PropertyName = "Скин")] public ulong SkinID;

            [JsonProperty(PropertyName = "Тип (Item/Command/Vehicle/Recycler)")]
            [JsonConverter(typeof(StringEnumConverter))]
            public CraftType Type;

            [JsonProperty(PropertyName = "Префаб")]
            public string Prefab;

            [JsonProperty(PropertyName = "Команда при получении")]
            public string GiveCommand;

            [JsonProperty(PropertyName = "Уровень верстака")]
            public WorkbenchLevel Level;

            [JsonProperty(PropertyName = "Проверять дистацию")]
            public bool UseDistance;

            [JsonProperty(PropertyName = "Дистанция")]
            public float Distance;

            [JsonProperty(PropertyName = "Установка на землю")]
            public bool Ground;

            [JsonProperty(PropertyName = "Установка на строение")]
            public bool Structure;

            [JsonProperty(PropertyName = "Предметы для крафта",
                ObjectCreationHandling = ObjectCreationHandling.Replace)]
            public List<ItemForCraft> Items;

            [JsonProperty(PropertyName = "Modular Car")]
            public ModularCarConf Modular;

            [JsonProperty(PropertyName = "Задержка")]
            public float Cooldown;

            [JsonProperty(PropertyName = "Множественный крафт")]
            public bool MultipleCraft;

            [JsonProperty(PropertyName = "Максимальное количество крафтов")]
            public int MaxAmount;

            [JsonProperty(PropertyName = "Включить Крафт?")]
            public bool Craft;

            [JsonProperty(PropertyName = "Включить Продажу?")]
            public bool Sale;

            [JsonProperty(PropertyName = "Стоимость")]
            public float Cost;

            [JsonIgnore] private int _itemId = -1;

            [JsonIgnore]
            public int itemId
            {
                get
                {
                    if (_itemId == -1)
                        _itemId = ItemManager.FindItemDefinition(ShortName)?.itemid ?? -1;

                    return _itemId;
                }
            }

            [JsonIgnore]
            public int PUBLIC_ID
            {
                get
                {
                    while (ID == 0)
                    {
                        var val = Random.Range(int.MinValue, int.MaxValue);
                        if (_instance._craftsById.ContainsKey(val)) continue;

                        ID = val;
                    }

                    return ID;
                }
            }

            [JsonIgnore] private string _publicTitle;

            [JsonIgnore]
            public string PublicTitle
            {
                get
                {
                    if (string.IsNullOrEmpty(_publicTitle))
                        _publicTitle = GetName();

                    return _publicTitle;
                }
            }

            private string GetName()
            {
                if (!string.IsNullOrEmpty(Title))
                    return Title;

                if (!string.IsNullOrEmpty(DisplayName))
                    return DisplayName;

                var def = ItemManager.FindItemDefinition(ShortName);
                if (!string.IsNullOrEmpty(ShortName) && def != null)
                    return def.displayNa
// ... [Code preview truncated due to length. Full source in attached file] ...

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