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

FREE zEcoLootUI : 1.3.12 1.3.12

Нет прав для скачивания
C#:
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Libraries;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace Oxide.Plugins {
    [Info("zEcoLootUI", "EcoSmile", "1.3.12")]
    class zEcoLootUI : RustPlugin {
        string perm = "zecolootui.edit";
        Dictionary<string, string> prefabcontaner = new Dictionary<string, string>() {
            ["assets/bundled/prefabs/radtown/crate_basic.prefab"]
            = "Маленький деревянный ящик", ["assets/bundled/prefabs/radtown/crate_elite.prefab"] = "Элитный ящик", ["assets/bundled/prefabs/radtown/crate_mine.prefab"] = "Ящик из пещер", ["assets/bundled/prefabs/radtown/crate_tools.prefab"] = "Ящик с инструментами", ["assets/bundled/prefabs/radtown/crate_normal.prefab"] = "Зеленый военный ящик", ["assets/bundled/prefabs/radtown/crate_normal_2.prefab"] = "Обычный деревянный ящик", ["assets/bundled/prefabs/radtown/crate_normal_2_food.prefab"] = "Ящик с едой", ["assets/bundled/prefabs/radtown/crate_normal_2_medical.prefab"] = "Ящик с медециной", ["assets/bundled/prefabs/radtown/crate_underwater_advanced.prefab"] = "Большой подводный ящик", ["assets/bundled/prefabs/radtown/crate_underwater_basic.prefab"] = "Малый подводный ящик", ["assets/bundled/prefabs/radtown/foodbox.prefab"] = "Корзинка с едой", ["assets/bundled/prefabs/radtown/loot_barrel_1.prefab"] = "Синяя бочка у дорог", ["assets/bundled/prefabs/radtown/loot_barrel_2.prefab"] = "Ржавая бочка у дорог", ["assets/bundled/prefabs/autospawn/resource/loot/loot-barrel-1.prefab"] = "Ржавая бочка на РТ", ["assets/bundled/prefabs/autospawn/resource/loot/loot-barrel-2.prefab"] = "Синяя бочка на РТ", ["assets/bundled/prefabs/radtown/minecart.prefab"] = "Тележка с углем", ["assets/prefabs/npc/m2bradley/bradley_crate.prefab"] = "Бредли ящик", ["assets/bundled/prefabs/radtown/oil_barrel.prefab"] = "Нефтяная бочка", ["assets/prefabs/npc/patrol helicopter/heli_crate.prefab"] = "Вертолетный ящик", ["assets/prefabs/deployable/chinooklockedcrate/codelockedhackablecrate.prefab"] = "Ящик с электронным замком", ["assets/prefabs/misc/supply drop/supply_drop.prefab"] = "Аир дроп", ["assets/bundled/prefabs/autospawn/resource/loot/trash-pile-1.prefab"] = "Корзинка с припасами", ["assets/bundled/prefabs/radtown/vehicle_parts.prefab"] = "Ящик с частями", ["assets/prefabs/deployable/chinooklockedcrate/codelockedhackablecrate_oilrig.prefab"] = "Ящик с электронным замком с Нефтевышки", ["assets/prefabs/misc/xmas/sleigh/presentdrop.prefab"] = "Новогодний дроп", ["assets/bundled/prefabs/radtown/dmloot/dm ammo.prefab"] = "DM AMMO", ["assets/bundled/prefabs/radtown/dmloot/dm c4.prefab"] = "DM C4", ["assets/bundled/prefabs/radtown/dmloot/dm construction tools.prefab"] = "DM CONSTRUCTION TOOLS", ["assets/bundled/prefabs/radtown/dmloot/dm res.prefab"] = "DM RES", ["assets/bundled/prefabs/radtown/dmloot/dm food.prefab"] = "DM FOOD", ["assets/bundled/prefabs/radtown/dmloot/dm tier1 lootbox.prefab"] = "DM TIER1 LOOTBOX", ["assets/bundled/prefabs/radtown/dmloot/dm tier2 lootbox.prefab"] = "DM TIER2 LOOTBOX", ["assets/bundled/prefabs/radtown/dmloot/dm tier3 lootbox.prefab"] = "DM TIER3 LOOTBOX", ["assets/bundled/prefabs/radtown/loot_component_test.prefab"] = "LOOT_COMPONENT_TEST", ["assets/content/props/roadsigns/roadsign1.prefab"] = "ROADSIGN 1", ["assets/content/props/roadsigns/roadsign2.prefab"] = "ROADSIGN 2", ["assets/content/props/roadsigns/roadsign3.prefab"] = "ROADSIGN 3", ["assets/content/props/roadsigns/roadsign4.prefab"] = "ROADSIGN 4", ["assets/content/props/roadsigns/roadsign5.prefab"] = "ROADSIGN 5", ["assets/content/props/roadsigns/roadsign6.prefab"] = "ROADSIGN 6", ["assets/content/props/roadsigns/roadsign7.prefab"] = "ROADSIGN 7", ["assets/content/props/roadsigns/roadsign8.prefab"] = "ROADSIGN 8", ["assets/content/props/roadsigns/roadsign9.prefab"] = "ROADSIGN 9", ["assets/prefabs/misc/xmas/giftbox/giftbox_loot.prefab"] = "GIFTBOX_LOOT", ["assets/prefabs/resource/diesel barrel/diesel_barrel_world.prefab"] = "DIESEL_BARREL_WORLD", ["assets/scripts/entity/misc/visualstoragecontainer/visualshelvestest.prefab"] = "VISUALSHELVESTEST", ["assets/bundled/prefabs/radtown/underwater_labs/crate_medical.prefab"] = "Подводный ящик с Медециной", ["assets/bundled/prefabs/radtown/underwater_labs/crate_food_1.prefab"] = "Подводный ящик с Едой 1", ["assets/bundled/prefabs/radtown/underwater_labs/crate_food_2.prefab"] = "Подводный ящик с Едой 2", ["assets/bundled/prefabs/radtown/underwater_labs/vehicle_parts.prefab"] = "Подводный ящик с запчастями", ["assets/bundled/prefabs/radtown/underwater_labs/crate_ammunition.prefab"] = "Подводный ящик с Амуницией", ["assets/bundled/prefabs/radtown/underwater_labs/crate_fuel.prefab"] = "Подводный ящик с Топливом", ["assets/bundled/prefabs/radtown/underwater_labs/crate_tools.prefab"] = "Инструментальный подводный ящик", ["assets/bundled/prefabs/radtown/underwater_labs/crate_elite.prefab"] = "Элитный подводный ящик", ["assets/bundled/prefabs/radtown/underwater_labs/tech_parts_2.prefab"] = "Подводный ящик с Тех.Деталями 2", ["assets/bundled/prefabs/radtown/underwater_labs/crate_normal.prefab"] = "Военный подводный ящик", ["assets/bundled/prefabs/radtown/underwater_labs/crate_normal_2.prefab"] = "Подводный Синий ящик", ["assets/bundled/prefabs/radtown/underwater_labs/tech_parts_1.prefab"] = "Подводный ящик с Тех.Деталями 1",
        }
        ;
        PluginConfig config;
        public class CustomItem {
            public string ShortName;
            public ulong SkinID;
            public string CustomName;
            public int MaxAmount;
            public int MinAmount;
            public int DropChance;
        }
        public class PluginConfig {
            [JsonProperty("Пресеты кастомных предметов")]
            public List<CustomItem> customItems;
            [JsonProperty("Настройка контейнеров")]
            public Dictionary<string, LootSetting> crateSetting;
        }
        public class LootSetting {
            [JsonProperty("Исключить данный тип ящиков из заполнения?")]
            public bool DisableCrate = false;
            [JsonProperty("Рандомить количество слотов в ящике? (false - будет браться максимум)")]
            public bool RandomItemAmount;
            [JsonProperty("Максимум слотов")]
            public int MaxItemInCrate;
            [JsonProperty("Минимум слотов")]
            public int MinItemInCrate;
            [JsonProperty("Удалять ящик если не был залутан до конца?")]
            public bool DeleteCrate;
            [JsonProperty("Интервал удаления ящика (минуты)")]
            public int DeleteTimer;
        }
        Dictionary<string, LootSetting> ConfigSetup() {
            Dictionary<string, LootSetting> setting = new Dictionary<string, LootSetting>();
            foreach (var value in prefabcontaner.Values) {
                setting.Add(value, new LootSetting() {
                    DisableCrate = false, RandomItemAmount = false, MaxItemInCrate = 4, MinItemInCrate = 4, DeleteCrate = true, DeleteTimer = 5
                }
                );
            }
            return setting;
        }
        protected override void LoadDefaultConfig() {
            config = new PluginConfig() {
                customItems = new List<CustomItem>() {
                    new CustomItem() {
                        ShortName = "", SkinID = 0, CustomName = "", MinAmount = 0, MaxAmount = 1, DropChance = 0
                    }
                    , new CustomItem() {
                        ShortName = "", SkinID = 0, CustomName = "", MinAmount = 0, MaxAmount = 1, DropChance = 0
                    }
                    ,
                }
                , crateSetting = ConfigSetup()
            }
            ;
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            config = Config.ReadObject<PluginConfig>();
            foreach (KeyValuePair<string, string> value in prefabcontaner.Where(x => !config.crateSetting.ContainsKey(x.Value))) {
                PrintWarning($"Added New crate {value.Value}");
                config.crateSetting.Add(value.Value, new LootSetting() {
                    DisableCrate = false, RandomItemAmount = false, MaxItemInCrate = 4, MinItemInCrate = 4, DeleteCrate = true, DeleteTimer = 5
                }
                );
            }
            if (config.customItems == null) {
                config.customItems = new List<CustomItem>() {
                    new CustomItem() {
                        ShortName = "", SkinID = 0, CustomName = "", MinAmount = 1, MaxAmount = 1, DropChance = 0
                    }
                    , new CustomItem() {
                        ShortName = "", SkinID = 0, CustomName = "", MinAmount = 1, MaxAmount = 1, DropChance = 0
                    }
                    ,
                }
                ;
            }
            SaveConfig();
        }
        protected override void SaveConfig() => Config.WriteObject(config);
        bool init = false;
        Dictionary<string, List<ItemSetting>> lootSettings = new Dictionary<string, List<ItemSetting>>();
        void OnServerInitialized() {
            version = $"{this.Version.Major}_{this.Version.Minor}_{this.Version.Patch}";
            ChekNewItem();
            GetDefaultLoot();
            RestoreBase();
            LootTimer();
            permission.RegisterPermission(perm, this);
            PrintWarning($"Registered permission {perm}");
            var containers = BaseNetworkable.serverEntities.OfType<LootContainer>();
            filling = ServerMgr.Instance.StartCoroutine(FirsLoad(containers));
        }
        Coroutine filling;
        IEnumerator FirsLoad(IEnumerable<LootContainer> containers) {
            PrintWarning($"Started Initialize Loot table!!!");
            yield return null;
            foreach (var data in prefabcontaner) {
                if (Interface.Oxide.DataFileSystem.ExistsDatafile($"zEcoLootUI/{data.Value}")) yield return lootSettings[data.Key] = Interface.Oxide.DataFileSystem.ReadObject<List<ItemSetting>>($"zEcoLootUI/{data.Value}");
                else yield return null;
            }
            foreach (var container in containers) {
                if (!prefabcontaner.ContainsKey(container.PrefabName)) {
                    PrintWarning($"Container not found {container.PrefabName}");
                    continue;
                }
                if (!lootSettings.ContainsKey(container.PrefabName)) {
                    yield return lootSettings[container.PrefabName] = Interface.Oxide.DataFileSystem.ReadObject<List<ItemSetting>>($"zEcoLootUI/{prefabcontaner[container.PrefabName]}");
                }
            }
            int initProcess = 0;
            float cdTime = UnityEngine.Time.realtimeSinceStartup;
            foreach (var container in containers) {
                yield return ServerMgr.Instance.StartCoroutine(FillContaner(container));
                initProcess++;
                if (cdTime < UnityEngine.Time.realtimeSinceStartup) {
                    PrintWarning($"Initialize loot table please wait! [{initProcess}/{containers.Count()}]");
                    cdTime = UnityEngine.Time.realtimeSinceStartup + 1f;
                }
            }
            PrintWarning($"Initialize loot table please wait! [{initProcess}/{containers.Count()}]");
            PrintWarning($"Initialize Loot table has been ended!!!");
            init = true;
        }
        string version = $"";
        private Dictionary<BasePlayer, bool> visionImage = new Dictionary<BasePlayer, bool>();
        void RestoreBase() {
            foreach (var prefab in prefabcontaner) {
                List<ItemSetting> itemlist = Interface.Oxide.DataFileSystem.ReadObject<List<ItemSetting>>($"zEcoLootUI/{prefab.Value}");
                foreach (var loot in itemlist) {
                    if (loot.version == $"{this.Version.Major}_{this.Version.Minor}_{this.Version.Patch}") continue;
                    loot.version = version;
                    var it = ItemManager.FindItemDefinition(loot.shortname);
                    if (it.condition.enabled && (loot.Condition == 0f || loot.Condition > 100f)) {
                        var fraction = UnityEngine.Random.Range(it.condition.foundCondition.fractionMin, it.condition.foundCondition.fractionMax);
                        var condition = fraction * 100f;
                        loot.Condition = condition;
                    }
                    loot.HasCondition = it.condition.enabled;
                }
                Interface.Oxide.DataFileSystem.WriteObject($"zEcoLootUI/{prefab.Value}", itemlist);
            }
        }
        bool isUloading = false;
        void Unload() {
            isUloading = true;
            if (filling != null) ServerMgr.Instance.StopCoroutine(filling);
            foreach (var pl in BasePlayer.activePlayerList) {
                CuiHelper.DestroyUi(pl, "zEcoLootUI.Main.UI");
            }
            foreach(var ent in BaseNetworkable.serverEntities.OfType<LootContainer>()) {
                ent.SpawnLoot();
            }
        }
        void OnHammerHit(BasePlayer player, HitInfo info) {
            if (!player.IsAdmin && !permission.UserHasPermission(player.UserIDString, perm)) return;
            if (!(info.HitEntity is LootContainer)) return;
            CuiHelper.DestroyUi(player, "zEcoLootUI.Main.UI");
            var container = new CuiElementContainer();
            container.Add(new CuiElement() {
                Parent = "Overlay", Name = "zEcoLootUI.Main.UI", Components = {
                    new CuiImageComponent {
                        Color = "0 0 0 0.85", Sprite = "assets/content/ui/ui.background.transparent.radial.psd", Material = "assets/content/ui/uibackgroundblur.mat"
                    }
                    , new CuiNeedsCursorComponent {
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0 0", AnchorMax = "1 1",
                    }
                }
            }
            );
            container.Add(new CuiElement() {
                Parent = "zEcoLootUI.Main.UI", Name = $"zEcoLootUI.Main.UI.text", Components = {
                    new CuiTextComponent {
                        Text = $"Редактируется:\n{(prefabcontaner.ContainsKey(info.HitEntity.PrefabName) ? prefabcontaner[info.HitEntity.PrefabName] : info.HitEntity.ShortPrefabName)}", Align = TextAnchor.MiddleCenter, FontSize = 22
                    }
                    , new CuiOutlineComponent {
                        Color = "0 0 0 1", Distance = "-1 1"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = $"0.5 0.9", AnchorMax = $"0.5 0.9", OffsetMin = $"-250 -64", OffsetMax = $"250 80",
                    }
                }
            }
            );
            CuiHelper.AddUi(player, container);
            DrawPanel(player, info.HitEntity.PrefabName);
        }
        void DrawPanel(BasePlayer player, string prefab) {
            if (coroutine != null) ServerMgr.Instance.StopCoroutine(coroutine);
            var container = new CuiElementContainer();
            CuiHelper.DestroyUi(player, "zEcoLootUI.Main.UI.BG");
            container.Add(new CuiElement() {
                Parent = "zEcoLootUI.Main.UI", Name = "zEcoLootUI.Main.UI.BG", Components = {
                    new CuiImageComponent {
                        Color = "0 0 0 0.0"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0 0", AnchorMax = "1 1",
                    }
                }
            }
            );
            CuiHelper.AddUi(player, container);
            DrawCrateitem(player, prefab);
        }
        void DrawCrateitem(BasePlayer player, string prefab, int page = 0) {
            ServerMgr.Instance.StartCoroutine(DrawCrateItem(player, prefab, page));
        }
        Coroutine coroutine;
        [PluginReference]
        Plugin ImageLibrary;
        [ConsoleCommand("AddSlot")]
        void AddSlot(ConsoleSystem.Arg arg) {
            var player = arg.Player();
            var prefab = string.Join(" ", arg.Args.Skip(1));
            var type = arg.Args[0];
            if (!prefabcontaner.ContainsKey(prefab)) {
                PrintError($"Not Fount (AddSlot): {prefab}");
                return;
            }
            if (type == "min") {
                config.crateSetting[prefabcontaner[prefab]].MinItemInCrate++;
                if (config.crateSetting[prefabcontaner[prefab]].MaxItemInCrate < config.crateSetting[prefabcontaner[prefab]].MinItemInCrate) config.crateSetting[prefabcontaner[prefab]].MaxItemInCrate = config.crateSetting[prefabcontaner[prefab]].MinItemInCrate;
                Config.WriteObject(config);
            }
            else if (type == "max") {
                config.crateSetting[prefabcontaner[prefab]].MaxItemInCrate++;
                Config.WriteObject(config);
            }
            CuiHelper.DestroyUi(player, type == "min" ? $"zEcoLootUI.Main.UI.BG.Slot.MinText" : $"zEcoLootUI.Main.UI.BG.Slot.MaxText");
            var container = new CuiElementContainer();
            container.Add(new CuiElement() {
                Parent = "zEcoLootUI.Main.UI.BG", Name = type == "min" ? $"zEcoLootUI.Main.UI.BG.Slot.MinText" : $"zEcoLootUI.Main.UI.BG.Slot.MaxText", Components = {
                    new CuiTextComponent {
                        Text = type == "min" ? $"{config.crateSetting[prefabcontaner[prefab]].MinItemInCrate}" : $"{config.crateSetting[prefabcontaner[prefab]].MaxItemInCrate}", Align = TextAnchor.MiddleCenter, FontSize = 22
                    }
                    , new CuiOutlineComponent {
                        Color = "0 0 0 1", Distance = "-1 1"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = type == "min" ? $"0.15 0.98" : "0.15 0.935", AnchorMax =type == "min" ? $"0.15 0.98" : "0.15 0.935", OffsetMin = $"-30 -15", OffsetMax = $"30 15",
                    }
                }
            }
            );
            CuiHelper.AddUi(player, container);
        }
        [ConsoleCommand("RemSlot")]
        void RemSlot(ConsoleSystem.Arg arg) {
            var player = arg.Player();
            var prefab = string.Join(" ", arg.Args.Skip(1));
            if (!prefabcontaner.ContainsKey(prefab)) {
                PrintError($"Not Fount (RemSlot): {prefab}");
                return;
            }
            var type = arg.Args[0];
            if (type == "min") {
                config.crateSetting[prefabcontaner[prefab]].MinItemInCrate--;
                if (config.crateSetting[prefabcontaner[prefab]].MinItemInCrate < 1) config.crateSetting[prefabcontaner[prefab]].MinItemInCrate = 1;
                Config.WriteObject(config);
            }
            else if (type == "max") {
                config.crateSetting[prefabcontaner[prefab]].MaxItemInCrate--;
                if (config.crateSetting[prefabcontaner[prefab]].MaxItemInCrate < 1) config.crateSetting[prefabcontaner[prefab]].MaxItemInCrate = 1;
                if (config.crateSetting[prefabcontaner[prefab]].MinItemInCrate > config.crateSetting[prefabcontaner[prefab]].MaxItemInCrate) config.crateSetting[prefabcontaner[prefab]].MinItemInCrate = config.crateSetting[prefabcontaner[prefab]].MaxItemInCrate;
            }
            CuiHelper.DestroyUi(player, type == "min" ? $"zEcoLootUI.Main.UI.BG.Slot.MinText" : $"zEcoLootUI.Main.UI.BG.Slot.MaxText");
            var container = new CuiElementContainer();
            container.Add(new CuiElement() {
                Parent = "zEcoLootUI.Main.UI.BG", Name = type == "min" ? $"zEcoLootUI.Main.UI.BG.Slot.MinText" : $"zEcoLootUI.Main.UI.BG.Slot.MaxText", Components = {
                    new CuiTextComponent {
                        Text = type == "min" ? $"{config.crateSetting[prefabcontaner[prefab]].MinItemInCrate}" : $"{config.crateSetting[prefabcontaner[prefab]].MaxItemInCrate}", Align = TextAnchor.MiddleCenter, FontSize = 22
                    }
                    , new CuiOutlineComponent {
                        Color = "0 0 0 1", Distance = "-1 1"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = type == "min" ? $"0.15 0.98" : "0.15 0.935", AnchorMax = type == "min" ? $"0.15 0.98" : "0.15 0.935", OffsetMin = $"-30 -15", OffsetMax = $"30 15",
                    }
                }
            }
            );
            CuiHelper.AddUi(player, container);
        }
        IEnumerator DrawCrateItem(BasePlayer player, string prefab, int page = 0) {
            CuiHelper.DestroyUi(player, "zEcoLootUI.Main.UI.BG");
            if (!visionImage.ContainsKey(player)) visionImage.Add(player, false);
            //List<ItemSetting> itemlist = Interface.Oxide.DataFileSystem.ReadObject<List<ItemSetting>>($"zEcoLootUI/{prefabcontaner[prefab]}");
            if (!lootSettings.ContainsKey(prefab)) {
                PrintWarning($"Повторная загрузка: zEcoLootUI/{prefabcontaner[prefab]}.json");
                yield return lootSettings[prefab] = Interface.Oxide.DataFileSystem.ReadObject<List<ItemSetting>>($"zEcoLootUI/{prefabcontaner[prefab]}");
            }
            var itemList = lootSettings[prefab];
            var container = new CuiElementContainer();
            container.Add(new CuiElement() {
                Parent = "zEcoLootUI.Main.UI", Name = "zEcoLootUI.Main.UI.BG", Components = {
                    new CuiImageComponent {
                        Color = "0 0 0 0.0"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0 0", AnchorMax = "1 1",
                    }
                }
            }
            );
            container.Add(new CuiElement() {
                Parent = "zEcoLootUI.Main.UI.BG", Name = "Close.btn", Components = {
                    new CuiButtonComponent {
                        Sprite = "assets/icons/close.png", Close = "zEcoLootUI.Main.UI"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "1 1", AnchorMax = "1 1", OffsetMin = "-45 -45", OffsetMax = "-15 -15"
                    }
                }
            }
            );
            container.Add(new CuiButton() {
                Button = {
                    Command = $"AddSlot min {prefab}", Color = "0 1 0 0.3"
                }
                , Text = {
                    Text = "+Slot", Align = TextAnchor.MiddleCenter
                }
                , RectTransform = {
                    AnchorMin = "0.1 0.98", AnchorMax = "0.1 0.98", OffsetMin = "-30 -15", OffsetMax = "30 15"
                }
            }
            , "zEcoLootUI.Main.UI.BG", "AddSlot");
            container.Add(new CuiElement() {
                Parent = "zEcoLootUI.Main.UI.BG", Name = $"zEcoLootUI.Main.UI.BG.Slot.MinText", Components = {
                    new CuiTextComponent {
                        Text = $"{config.crateSetting[prefabcontaner[prefab]].MinItemInCrate}", Align = TextAnchor.MiddleCenter, FontSize = 22
                    }
                    , new CuiOutlineComponent {
                        Color = "0 0 0 1", Distance = "-1 1"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = $"0.15 0.98", AnchorMax = $"0.15 0.98", OffsetMin = $"-30 -15", OffsetMax = $"30 15",
                    }
                }
            }
            );
            container.Add(new CuiElement() {
                Parent = "zEcoLootUI.Main.UI.BG", Name = $"zEcoLootUI.Main.UI.BG.Slot", Components = {
                    new CuiTextComponent {
                        Text = $"MIN: ", Align = TextAnchor.MiddleCenter, FontSize = 22
                    }
                    , new CuiOutlineComponent {
                        Color = "0 0 0 1", Distance = "-1 1"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = $"0.05 0.98", AnchorMax = $"0.05 0.98", OffsetMin = $"-30 -15", OffsetMax = $"30 15",
                    }
                }
            }
            );
            container.Add(new CuiButton() {
                Button = {
                    Command = $"RemSlot min {prefab}", Color = "0 1 0 0.3"
                }
                , Text = {
                    Text = "-Slot", Align = TextAnchor.MiddleCenter
                }
                , RectTransform = {
                    AnchorMin = "0.2 0.98", AnchorMax = "0.2 0.98", OffsetMin = "-30 -15", OffsetMax = "30 15"
                }
            }
            , "zEcoLootUI.Main.UI.BG", "RemSlot");
            //////////////////////////////////////////////////////////////////////////////////////////////
            ///
            container.Add(new CuiButton() {
                Button = {
                    Command = $"AddSlot max {prefab}", Color = "0 1 0 0.3"
                }
                , Text = {
                    Text = "+Slot", Align = TextAnchor.MiddleCenter
                }
                , RectTransform = {
                    AnchorMin = "0.1 0.935", AnchorMax = "0.1 0.935", OffsetMin = "-30 -15", OffsetMax = "30 15"
                }
            }
            , "zEcoLootUI.Main.UI.BG", "AddSlot");
            container.Add(new CuiElement() {
                Parent = "zEcoLootUI.Main.UI.BG", Name = $"zEcoLootUI.Main.UI.BG.Slot.MaxText", Components = {
                    new CuiTextComponent {
                        Text = $"{config.crateSetting[prefabcontaner[prefab]].MaxItemInCrate}", Align = TextAnchor.MiddleCenter, FontSize = 22
                    }
                    , new CuiOutlineComponent {
                        Color = "0 0 0 1", Distance = "-1 1"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = $"0.15 0.935", AnchorMax = $"0.15 0.935", OffsetMin = $"-30 -15", OffsetMax = $"30 15",
                    }
                }
            }
            );
            container.Add(new CuiElement() {
                Parent = "zEcoLootUI.Main.UI.BG", Name = $"zEcoLootUI.Main.UI.BG.Slot", Components = {
                    new CuiTextComponent {
                        Text = $"MAX: ", Align = TextAnchor.MiddleCenter, FontSize = 22
                    }
                    , new CuiOutlineComponent {
                        Color = "0 0 0 1", Distance = "-1 1"
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = $"0.05 0.935", AnchorMax = $"0.05 0.935", OffsetMin = $"-30 -15", OffsetMax = $"30 15",
                    }
                }
            }
            );
            container.Add(new CuiButton() {
                Button = {
                    Command = $"RemSlot max {prefab}", Color = "0 1 0 0.3"
                }
                , Text = {
                    Text = "-Slot", Align = TextAnchor.MiddleCenter
                }
                , RectTransform = {
                    AnchorMin = "0.2 0.935", AnchorMax = "0.2 0.935", OffsetMin = "-30 -15", OffsetMax = "30 15"
                }
            }
            , "zEcoLootUI.Main.UI.BG", "RemSlot");
            //////////////////////////////////////////////////////////////////////////////////
            container.Add(new CuiButton() {
                Button = {
                    Command = $"Add {prefab}", Color = "0 1 0 0.3"
                }
                , Text = {
                    Text = "ДОБАВИТЬ", Align = TextAnchor.MiddleCenter
                }
                , RectTransform = {
                    AnchorMin = "0.4 0.05", AnchorMax = "0.4 0.05", OffsetMin = "-60 -15", OffsetMax = "60 15"
                }
            }
            , "zEcoLootUI.Main.UI.BG", "AddBtn");
            container.Add(new CuiButton() {
                Button = {
                    Command = $"hidelootimage {prefab}", Color = "1 1 1 0.3"
                }
                , Text = {
                    Text = visionImage.ContainsKey(player) ? visionImage[player] ? "Показать картинки" : "Скрыть картинки" : "Скрыть картинки", Align = TextAnchor.MiddleCenter
                }
                , RectTransform = {
                    AnchorMin = "0.5 0.05", AnchorMax = "0.5 0.05", OffsetMin = "-60 -20", OffsetMax = "40 20"
                }
            }
            , "zEcoLootUI.Main.UI.BG", "HideImageBtn");
            container.Add(new CuiButton() {
                Button = {
                    Command = $"AddInv {prefab}", Color = "1 1 1 0.2"
                }
                , Text = {
                    Text = "ДОБАВИТЬ ИЗ ИНВЕТАРЯ", Align = TextAnchor.MiddleCenter
                }
                , RectTransform = {
                    AnchorMin = "0.6 0.05", AnchorMax = "0.6 0.05", OffsetMin = "-80 -15", OffsetMax = "80 15"
                }
            }
            , "zEcoLootUI.Main.UI.BG", "AddBtn");
            container.Add(new CuiButton() {
                Button = {
                    Command = $"clearall {prefab}", Color = "1 0 0 0.3"
                }
                , Text = {
                    Text = "Очистить полностью", Align = TextAnchor.MiddleCenter
                }
                , RectTransform = {
                    AnchorMin = "0.4 0.05", AnchorMax = "0.4 0.05", OffsetMin = "-215 -15", OffsetMax = "-65 15"
                }
            }
            , "zEcoLootUI.Main.UI.BG", "ClearBtn");
            CuiHelper.AddUi(player, container);
            var starthorisontal = 0.05f;
            var startvertical = 0.8f;
            var horisontal = starthorisontal;
            var vertical = startvertical;
            var widthBtn = 32;
            var hightBtn = 32;
            int count = 0;
            int i = page == 0 ? 0 : page * 60;
            foreach (var item in itemList.Skip(page * 60).Take(60)) {
                var itemContainer = new CuiElementContainer();
                if (!visionImage[player]) {
                    itemContainer.Add(new CuiElement() {
                        Parent = "zEcoLootUI.Main.UI.BG", Name = $"zEcoLootUI.Main.UI.BG.{i}", Components = {
                            new CuiRawImageComponent {
                                Png = GetItemImage(item.shortname, item.skin)
                            }
                            , new CuiRectTransformComponent {
                                AnchorMin = $"{horisontal} {vertical}", AnchorMax = $"{horisontal} {vertical}", OffsetMin = $"-{widthBtn} -{hightBtn}", OffsetMax = $"{widthBtn} {hightBtn}",
                            }
                        }
                    }
                    );
                }
                else {
                    itemContainer.Add(new CuiElement() {
                        Parent = "zEcoLootUI.Main.UI.BG", Name = $"zEcoLootUI.Main.UI.BG.{i}", Components = {
                            new CuiImageComponent {
                                Color = "1 1 1 0.1"
                            }
                            , new CuiRectTransformComponent {
                                AnchorMin = $"{horisontal} {vertical}", AnchorMax = $"{horisontal} {vertical}", OffsetMin = $"-{widthBtn} -{hightBtn}", OffsetMax = $"{widthBtn} {hightBtn}",
                            }
                        }
                    }
                    );
                }
                itemContainer.Add(new CuiElement() {
                    Parent = $"zEcoLootUI.Main.UI.BG.{i}", Name = $"zEcoLootUI.Main.UI.BG.{i}.Btn_Delete", Components = {
                        new CuiButtonComponent {
                            Color = "1 0 0 0.4", Command = $"Delete {page} {i} {prefab}"
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = "1 1", AnchorMax = "1 1", OffsetMin = "-20 -16", OffsetMax = "0 0"
                        }
                    }
                }
                );
                itemContainer.Add(new CuiElement() {
                    Parent = $"zEcoLootUI.Main.UI.BG.{i}.Btn_Delete", Name = $"zEcoLootUI.Main.UI.BG.{i}.Btn_Delete.Txt", Components = {
                        new CuiTextComponent {
                            Text = "Del", Align = TextAnchor.MiddleCenter, FontSize = 12
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = "0 0", AnchorMax = "1 1"
                        }
                    }
                }
                );
                if (item.IsBp) itemContainer.Add(new CuiElement() {
                    Parent = $"zEcoLootUI.Main.UI.BG.{i}", Name = $"zEcoLootUI.Main.UI.BG.{i}.IsBP", Components = {
                        //new CuiRawImageComponent{Png = GetItemImage("blueprintbase") },
                        new CuiRawImageComponent {
                            Sprite ="assets/icons/blueprint.png"
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = "0 -20", OffsetMax = "20 0"
                        }
                    }
                }
                );
                else {
                    if (item.HasCondition) {
                        itemContainer.Add(new CuiElement() {
                            Parent = $"zEcoLootUI.Main.UI.BG.{i}", Name = $"zEcoLootUI.Main.UI.BG.{i}.condition.BG", Components = {
                                new CuiImageComponent {
                                    Color = "1 1 1 0.5"
                                }
                                , new CuiRectTransformComponent {
                                    AnchorMin = "0 0", AnchorMax = "0 0", OffsetMin = "1 1", OffsetMax = "5 62"
                                }
                            }
                        }
                        );
                        var cond = 62 * item.Condition / 100f;
                        itemContainer.Add(new CuiElement() {
                            Parent = $"zEcoLootUI.Main.UI.BG.{i}.condition.BG", Name = $"zEcoLootUI.Main.UI.BG.{i}.condition", Components = {
                                new CuiImageComponent {
                                    Color = "0 0.5 0 1"
                                }
                                , new CuiRectTransformComponent {
                                    AnchorMin = "0 0", AnchorMax = "0 0", OffsetMin = "0 0", OffsetMax = $"4 {cond}"
                                }
                            }
                        }
                        );
                        itemContainer.Add(new CuiElement() {
                            Parent = $"zEcoLootUI.Main.UI.BG.{i}", Name = $"zEcoLootUI.Main.UI.BG.{i}.Btn_Condition", Components = {
                                new CuiButtonComponent {
                                    Color = "1 1 1 0.3", Command = $"condition {page} {i} {prefab}"
                                }
                                , new CuiRectTransformComponent {
                                    AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = "1 -11", OffsetMax = "25 -1"
                                }
                            }
                        }
                        );
                        itemContainer.Add(new CuiElement() {
                            Parent = $"zEcoLootUI.Main.UI.BG.{i}.Btn_Condition", Name = $"zEcoLootUI.Main.UI.BG.{i}.Btn_Condition.Txt", Components = {
                                new CuiTextComponent {
                                    Text = "cond", Align = TextAnchor.MiddleCenter, FontSize = 9, Color = "1 1 1 1"
                                }
                                , new CuiRectTransformComponent {
                                    AnchorMin = "0 0", AnchorMax = "1 1"
                                }
                            }
                        }
                        );
                    }
                }
                itemContainer.Add(new CuiElement() {
                    Parent = $"zEcoLootUI.Main.UI.BG.{i}", Name = $"zEcoLootUI.Main.UI.BG.{i}.text", Components = {
                        new CuiTextComponent {
                            Text = string.IsNullOrEmpty(item.custonname) ? ItemManager.FindItemDefinition(item.shortname).displayName.english : item.custonname, Align = TextAnchor.MiddleCenter
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = $"0.5 0", AnchorMax = $"0.5 0", OffsetMin = $"-{widthBtn+5} -40", OffsetMax = $"{widthBtn+5} -5",
                        }
                    }
                }
                );
                itemContainer.Add(new CuiButton() {
                    Button = {
                        Command = $"BPChange {page} {i} {prefab}", Color = "1 1 1 0.3"
                    }
                    , Text = {
                        Text = "BP", Align = TextAnchor.MiddleCenter, FontSize = 8
                    }
                    , RectTransform = {
                        AnchorMin = $"0.5 0", AnchorMax = $"0.5 0", OffsetMin = $"45 41", OffsetMax = $"66 50",
                    }
                }
                , $"zEcoLootUI.Main.UI.BG.{i}", $"ButtonMinBP.{i}");
                itemContainer.Add(new CuiElement() {
                    Parent = $"zEcoLootUI.Main.UI.BG.{i}", Name = $"zEcoLootUI.Main.UI.BG.{i}.textmin", Components = {
                        new CuiTextComponent {
                            Text = $"min - {item.minamount}" , Align = TextAnchor.MiddleRight, FontSize = 9
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = $"0.5 0", AnchorMax = $"0.5 0", OffsetMin = $"-{widthBtn+10} 15", OffsetMax = $"{widthBtn+10} 35",
                        }
                    }
                }
                );
                itemContainer.Add(new CuiButton() {
                    Button = {
                        Command = $"editfeil {page} {i} minminus {prefab}", Color = "1 1 1 0.3"
                    }
                    , Text = {
                        Text = "edit", Align = TextAnchor.MiddleCenter, FontSize = 8
                    }
                    , RectTransform = {
                        AnchorMin = $"0.5 0", AnchorMax = $"0.5 0", OffsetMin = $"45 21", OffsetMax = $"66 30",
                    }
                }
                , $"zEcoLootUI.Main.UI.BG.{i}", $"ButtonMinMinus.{i}");
                itemContainer.Add(new CuiElement() {
                    Parent = $"zEcoLootUI.Main.UI.BG.{i}", Name = $"zEcoLootUI.Main.UI.BG.{i}.textmax", Components = {
                        new CuiTextComponent {
                            Text = $"max - {item.maxamount}" , Align = TextAnchor.MiddleRight, FontSize = 9
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = $"0.5 0", AnchorMax = $"0.5 0", OffsetMin = $"-{widthBtn+10} 5", OffsetMax = $"{widthBtn+10} 25",
                        }
                    }
                }
                );
                itemContainer.Add(new CuiButton() {
                    Button = {
                        Command = $"editfeil {page} {i} maxminus {prefab}", Color = "1 1 1 0.3"
                    }
                    , Text = {
                        Text = "edit", Align = TextAnchor.MiddleCenter, FontSize = 8
                    }
                    , RectTransform = {
                        AnchorMin = $"0.5 0", AnchorMax = $"0.5 0", OffsetMin = $"45 10", OffsetMax = $"66 19",
                    }
                }
                , $"zEcoLootUI.Main.UI.BG.{i}", $"ButtonMaxMinus.{i}");
                itemContainer.Add(new CuiElement() {
                    Parent = $"zEcoLootUI.Main.UI.BG.{i}", Name = $"zEcoLootUI.Main.UI.BG.{i}.textchance", Components = {
                        new CuiTextComponent {
                            Text = $"chance - {item.chansedrop}%" , Align = TextAnchor.MiddleRight, FontSize = 9
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = $"0.5 0", AnchorMax = $"0.5 0", OffsetMin = $"-{widthBtn+10} -10", OffsetMax = $"{widthBtn+10} 15",
                        }
                    }
                }
                );
                itemContainer.Add(new CuiButton() {
                    Button = {
                        Command = $"editfeil {page} {i} chanceminus {prefab}", Color = "1 1 1 0.3"
                    }
                    , Text = {
                        Text = "edit", Align = TextAnchor.MiddleCenter, FontSize = 8
                    }
                    , RectTransform = {
                        AnchorMin = $"0.5 0", AnchorMax = $"0.5 0", OffsetMin = $"45 -1", OffsetMax = $"66 8",
                    }
                }
                , $"zEcoLootUI.Main.UI.BG.{i}", $"ButtonMaxChanceMinus.{i}");
                horisontal += 0.08f;
                if (horisontal > 0.95) {
                    horisontal = starthorisontal;
                    vertical -= 0.15f;
                }
                count++;
                i++;
                CuiHelper.DestroyUi(player, $"zEcoLootUI.Main.UI.BG.{i}");
                CuiHelper.AddUi(player, itemContainer);
                yield return null;
            }
            if (count == 0 && page > 0) {
                page--;
                if (coroutine != null) ServerMgr.Instance.StopCoroutine(coroutine);
                DrawCrateitem(player, prefab, page);
                yield break;
            }
            if (page > 0) {
                var continerBack = new CuiElementContainer();
                continerBack.Add(new CuiButton() {
                    Button = {
                        Command = $"pages {prefab} {page - 1}", Color = "1 1 1 0.5"
                    }
                    , Text = {
                        Text = "Назад", Align = TextAnchor.MiddleCenter
                    }
                    , RectTransform = {
                        AnchorMin = "0.02 0.02", AnchorMax = "0.02 0.02", OffsetMax = "60 30"
                    }
                }
                , "zEcoLootUI.Main.UI.BG", "ButtonBack");
                CuiHelper.AddUi(player, continerBack);
            }
            if (count == 60) {
                var continerNext = new CuiElementContainer();
                continerNext.Add(new CuiButton() {
                    Button = {
                        Command = $"pages {prefab} {page + 1}", Color = "1 1 1 0.5"
                    }
                    , Text = {
                        Text = "Далее", Align = TextAnchor.MiddleCenter
                    }
                    , RectTransform = {
                        AnchorMin = "0.98 0.02", AnchorMax = "0.98 0.02", OffsetMin = "-60 0", OffsetMax = "0 30"
                    }
                }
                , "zEcoLootUI.Main.UI.BG", "ButtonNext");
                CuiHelper.AddUi(player, continerNext);
            }
        }
        void RedrawItem(BasePlayer player, ItemSetting item, int i, string prefab, int page) {
            CuiHelper.DestroyUi(player, "zEcoLootUI.Main.UI.Adding.BG");
            CuiHelper.DestroyUi(player, $"zEcoLootUI.Main.UI.BG.{i}.textmin");
            CuiHelper.DestroyUi(player, $"zEcoLootUI.Main.UI.BG.{i}.IsBP");
            CuiHelper.DestroyUi(player, $"zEcoLootUI.Main.UI.BG.{i}.textmax");
            CuiHelper.DestroyUi(player, $"zEcoLootUI.Main.UI.BG.{i}.condition.BG");
            CuiHelper.DestroyUi(player, $"zEcoLootUI.Main.UI.BG.{i}.Btn_Condition");
            CuiHelper.DestroyUi(player, $"ButtonMinMinus.{i}");
            CuiHelper.DestroyUi(player, $"ButtonMaxMinus.{i}");
            CuiHelper.DestroyUi(player, $"zEcoLootUI.Main.UI.BG.{i}.textchance");
            CuiHelper.DestroyUi(player, $"ButtonMaxChancePlus.{i}");
            CuiHelper.DestroyUi(player, $"ButtonMaxChanceMinus.{i}");
            CuiHelper.DestroyUi(player, $"ButtonMinBP.{i}");
            var container = new CuiElementContainer();
            if (item.IsBp) container.Add(new CuiElement() {
                Parent = $"zEcoLootUI.Main.UI.BG.{i}", Name = $"zEcoLootUI.Main.UI.BG.{i}.IsBP", Components = {
                    new CuiRawImageComponent {
                        Png = GetItemImage("blueprintbase")
                    }
                    , new CuiRectTransformComponent {
                        AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = "0 -20", OffsetMax = "20 0"
                    }
                }
            }
            );
            else {
                if (item.HasCondition) {
                    container.Add(new CuiElement() {
                        Parent = $"zEcoLootUI.Main.UI.BG.{i}", Name = $"zEcoLootUI.Main.UI.BG.{i}.condition.BG", Components = {
                            new CuiImageComponent {
                                Color = "1 1 1 0.5"
                            }
                            , new CuiRectTransformComponent {
                                AnchorMin = "0 0", AnchorMax = "0 0", OffsetMin = "1 1", OffsetMax = "5 62"
                            }
                        }
                    }
                    );
                    var cond = 62 * item.Condition / 100f;
                    container.Add(new CuiElement() {
                        Parent = $"zEcoLootUI.Main.UI.BG.{i}.condition.BG", Name = $"zEcoLootUI.Main.UI.BG.{i}.condition", Components = {
                            new CuiImageComponent {
                                Color = "0 0.5 0 1"
                            }
                            , new CuiRectTransformComponent {
                                AnchorMin = "0 0", AnchorMax = "0 0", OffsetMin = "0 0", OffsetMax = $"4 {cond}"
                            }
                        }
                    }
                    );
                    container.Add(new CuiElement() {
                        Parent = $"zEcoLootUI.Main.UI.BG.{i}", Name = $"zEcoLootUI.Main.UI.BG.{i}.Btn_Condition", Components = {
                            new CuiButtonComponent {
                                Color = "1 1 1 0.3", Command = $"condition {page} {i} {prefab}"
                            }
                            , new CuiRectTransformComponent {
                                AnchorMin = "0 1", AnchorMax = "0 1", OffsetMin = "1 -11", OffsetMax = "25 -1"
                            }
                        }
                    }
                    );
                    container.Add(new CuiElement() {
                        Parent = $"zEcoLootUI.Main.UI.BG.{i}.Btn_Condition", Name = $"zEcoLootUI.Main.UI.BG.{i}.Btn_Condition.Txt", Components = {
// ... [Code preview truncated due to length. Full source in attached file] ...

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