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

FREE Mush : 1.0.0 1.0.0

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

namespace Oxide.Plugins
{
    [Info("Mush", "TopPlugin.ru", "1.0.0")]
    public class Mush : RustPlugin
    {
        #region Classess

        private class Case
        {
            [JsonProperty("Количество грибов")]
            public int MushAmount;
            [JsonProperty("Ссылка на изображение")]
            public string ImageURL;
            [JsonProperty("СкинИД предмета")]
            public ulong SkinID;
            [JsonProperty("Предметы выпадающие (shortname:кол-во)")]
            public List<List<string>> Items = new List<List<string>>();
        }

        private class Configuration
        {
            [JsonProperty("Скин ИД гриба")]
            public ulong SkinID;
            [JsonProperty("Количество грибов на карте")]
            public int MushAmount = 1000;
            [JsonProperty("Доступные кейсы для получения")]
            public List<Case> Cases = new List<Case>();

            public static Configuration Generate()
            {
                return new Configuration
                {
                    Cases = new List<Case>
                    {
                        new Case
                        {
                            MushAmount = 10,
                            ImageURL = "https://i.imgur.com/aFicpws.png",
                            SkinID = 123,
                            Items = new List<List<string>>
                            {
                                new List<string> { "rifle.ak:1" },
                                new List<string> { "wood:1000" }
                            }
                        },
                        new Case
                        {
                            MushAmount = 20,
                            ImageURL   = "https://i.imgur.com/aFicpws.png",
                            SkinID = 123,
                            Items = new List<List<string>>
                            {
                                new List<string> { "rifle.ak:1" },
                                new List<string> { "wood:1000" }
                            }
                        },
                        new Case
                        {
                            MushAmount = 30,
                            ImageURL   = "https://i.imgur.com/aFicpws.png",
                            SkinID = 123,
                            Items = new List<List<string>>
                            {
                                new List<string> { "rifle.ak:1" },
                                new List<string> { "wood:1000" }
                            }
                        },
                        new Case
                        {
                            MushAmount = 40,
                            ImageURL   = "https://i.imgur.com/aFicpws.png",
                            SkinID = 123,
                            Items = new List<List<string>>
                            {
                                new List<string> { "rifle.ak:1" },
                                new List<string> { "wood:1000" }
                            }
                        },
                        new Case
                        {
                            MushAmount = 50,
                            ImageURL   = "https://i.imgur.com/aFicpws.png",
                            SkinID = 123,
                            Items = new List<List<string>>
                            {
                                new List<string> { "rifle.ak:1" },
                                new List<string> { "wood:1000" }
                            }
                        },
                    }
                };
            }
        }

        private class DataBase
        {
            public Dictionary<ulong, PlayerDataBase> Players = new Dictionary<ulong, PlayerDataBase>();
        }

        private class PlayerDataBase
        {
            public int FullCount;
            public int Count;
        }

        #endregion

        #region Variables

        [PluginReference] 
		private Plugin ImageLibrary;
		
		private static System.Random Rnd = new System.Random();
		private static List<ulong> NeedInitPlayers = new List<ulong>();
		
        private static DataBase Base = new DataBase();
        private static Configuration Settings;
		private static List<BaseEntity> MushList = new List<BaseEntity>();
		private bool init = false;
		
		public List<string> CaseItems = new List<string>()
        {
            "https://i.imgur.com/7Mi4uQj.png",
            "https://i.imgur.com/J7WAiqy.png",
            "https://i.imgur.com/CCl6cR0.png",
            "https://i.imgur.com/khDM9Tf.png",
            "https://i.imgur.com/Qn9BGET.png",
            "https://i.imgur.com/fANuZsi.png",
            "https://i.imgur.com/WpDKf0n.png",
            "https://i.imgur.com/IYHgljB.png",
            "https://i.imgur.com/RAHGm4t.png"
        };

        #endregion

        #region Initialization 

        protected override void LoadConfig()
        {
            base.LoadConfig();
            try
            {
                Settings = Config.ReadObject<Configuration>();
            }
            catch
            {
                PrintWarning($"Error reading config, creating one new config!");
                LoadDefaultConfig();
            }

            SaveConfig();
        }
		
		private void LoadData()
        {
            try
            {
                Base = Interface.Oxide.DataFileSystem.ReadObject<DataBase>(Name);
                if (Base == null)
                    Base = new DataBase();
            }
            catch
            {
                Base = new DataBase();
            }
            init = true;
        }
		
		private void SaveData()
        {
            if (Base != null)
            Interface.Oxide.DataFileSystem.WriteObject(Name, Base);
        }

        protected override void LoadDefaultConfig() => Settings = Configuration.Generate();
        protected override void SaveConfig() => Config.WriteObject(Settings);
		
		#endregion             

		#region Hooks
		
        private void OnNewSave()
        {
            if (!init)
            {
                timer.Once(1f, () => OnNewSave());
                return;
            }
            Base.Players.Clear();
            SaveData();

            PrintWarning("Wiped detected! Clear data players");
        }                
        
		private void OnPlayerConnected(BasePlayer player)
        {
            if (!Base.Players.ContainsKey(player.userID))
            {
                Base.Players.Add(player.userID, new PlayerDataBase() { Count = 0, FullCount = 0 });
            }
			
			if (!NeedInitPlayers.Contains(player.userID))
				NeedInitPlayers.Add(player.userID);
        }  
		
        private void OnServerInitialized()
        {
            PrintWarning("\n-----------------------------\n" +
            "     Author - https://topplugin.ru/\n" +
            "     VK - https://vk.com/rustnastroika\n" +
            "     Discord - https://discord.com/invite/5DPTsRmd3G\n" +
            "-----------------------------");
			MushList.Clear();
            LoadData();
			DisableDefaultMushes();
            
            CaseItems.ForEach(image => ImageLibrary.Call("AddImage", image, image));
            ImageLibrary.Call("AddImage", "https://i.imgur.com/r3Zp9Dq.png", "Mush_BG");                        
            ImageLibrary.Call("AddImage", "https://i.imgur.com/x9MrQGP.png", "Mush_IC");
            ImageLibrary.Call("AddImage", "https://i.imgur.com/8uu3MSz.png", "Mush_Close");
            ImageLibrary.Call("AddImage", "https://i.imgur.com/597k7Xs.png", "Mush_Left"); 
            ImageLibrary.Call("AddImage", "https://i.imgur.com/twY7dLp.png", "Mush_Right");

            foreach (var check in Settings.Cases)            
                ImageLibrary.Call("AddImage", check.ImageURL, $"Mush.{Settings.Cases.IndexOf(check)}");            

            BasePlayer.activePlayerList.ToList().ForEach(OnPlayerConnected);						            		
			CommunityEntity.ServerInstance.StartCoroutine(SpawnToads());			            
        }
		
		private void Unload()
        {
            MushList.ForEach(p => { if (p != null && !p.IsDestroyed) p.Kill(); });
            SaveData();
			
			foreach (var player in BasePlayer.activePlayerList)
			{
				CuiHelper.DestroyUi(player, LayerMain);
				CuiHelper.DestroyUi(player, InitPanel);
			}
        }

        object CanCombineDroppedItem(DroppedItem drItem, DroppedItem anotherDrItem)
        {
            if (drItem.item.info.itemid == -1002156085 && drItem.item.info.itemid == anotherDrItem.item.info.itemid && drItem.item.skin != anotherDrItem.item.skin) return false;
            if (drItem.item.info.itemid == 844440409 && drItem.item.info.itemid == anotherDrItem.item.info.itemid && drItem.item.skin != anotherDrItem.item.skin) return false;
            if (drItem.item.skin != anotherDrItem.item.skin) return false;

            return null;
        }

        object CanStackItem(Item item, Item anotherItem)
        {
            if (item.info.itemid == -1002156085 && item.skin != anotherItem.skin) return false;
            if (item.info.itemid == 844440409 && item.skin != anotherItem.skin) return false;
            if (item.skin != anotherItem.skin) return false;
            return null;
        }
		
		object OnItemAction(Item item, string action, BasePlayer player)
        {
            if (item.info.shortname != "easter.goldegg") return null;

            var enter = Settings.Cases.FirstOrDefault(p => (ulong)p.SkinID == item.skin);
            if (enter == null) return null;

            var result = enter.Items.GetRandom();
            if (result.Any(p => !p.Contains(":")))
            {
                if (Oxide.Core.Random.Range(0, 100) > 50)
                {
                    OnItemAction(item, action, player);
                    return false;
                }
            }

            foreach (var check in result)
            {
                if (check.Contains(":"))
                {
                    var items = ItemManager.CreateByPartialName(check.Split(':')[0], int.Parse(check.Split(':')[1]));
                    if (!items.MoveToContainer(player.inventory.containerMain))
                    {
                        items.Drop(player.transform.position, Vector3.zero);
                        player.ChatMessage($"У вас не хватило места, предметы выбрашены на пол!");
                    }
                }
                else
                {
                    player.ChatMessage($"Вы получили <color=orange>редкую</color> привилегию!");
                    Server.Command(check.Replace("%STEAMID%", player.UserIDString));
                }
            }

            if (item.amount > 1)
                item.amount--;
            else item.DoRemove();

            return false;
        }

        private object OnItemSplit(Item item, int amount)
        {
            if (Settings.Cases.Any(p => p.SkinID == item.skin))
            {
                Item x = ItemManager.CreateByPartialName(item.info.shortname, amount);
                x.name = item.name;
                x.skin = item.skin;
                item.amount -= amount;
                item.MarkDirty();
                x.MarkDirty();
                return x;
            }

            if (item.info.shortname == "mushroom" && item.skin == Settings.SkinID)
            {
                Item byItemId = ItemManager.CreateByItemID(item.info.itemid, 1, item.skin);
                item.amount -= amount;
                byItemId.amount = amount;
                byItemId.name = item.name;
                item.MarkDirty();
                return byItemId;
            }

            return null;
        }
     
        private void OnCollectiblePickup(Item item, BasePlayer player)
        {
            if (item.info.shortname != "mushroom") return;
            if (!Base.Players.ContainsKey(player.userID))
            {
                Base.Players.Add(player.userID, new PlayerDataBase() { Count = 0, FullCount = 0 });
            }								
            item.skin = Settings.SkinID;
            Base.Players[player.userID].Count+=item.amount;
            Base.Players[player.userID].FullCount+=item.amount;

			timer.Once(1.5f, ()=>
			{
				if (player != null)
				{
					string position = player.transform.position.ToString();
					var ent = CreateMush();
					var randomPos = GetRandomPosition();
					ent.transform.position = (Vector3)randomPos;
					ent.Spawn();
					MushList.Add(ent);
				}
			});
        }
		
		#endregion
		
		#region Fill
		
		private void DisableDefaultMushes()
		{
			var allSpawnPopulations = SpawnHandler.Instance.AllSpawnPopulations;
            SpawnHandler.Instance.StopCoroutine("SpawnTick");
                        			
			SpawnDistribution[] spawndists = SpawnHandler.Instance.SpawnDistributions;
			for (int i = 0; i < allSpawnPopulations.Length; i++)
			{				
				if (!(allSpawnPopulations[i] == null) && allSpawnPopulations[i].name.Contains("mushroom"))
				{										
					allSpawnPopulations[i]._targetDensity = 0;			
					SpawnHandler.Instance.SpawnInitial(allSpawnPopulations[i], spawndists[i]);					
				}
			}			
            
            SpawnHandler.Instance.StartCoroutine("SpawnTick");
						
			foreach (var mush in BaseNetworkable.serverEntities.Where(p => p != null && p.PrefabName.Contains("mushroom-cluster-")).ToList())
				if (mush != null && !mush.IsDestroyed)				
					mush.Kill();
		}
		
		private BaseEntity InstantiateEntity(string type, Vector3 position, Quaternion rotation)
        {
            var gameObject = Instantiate.GameObject(GameManager.server.FindPrefab(type), position, rotation);
            gameObject.name = type;

            SceneManager.MoveGameObjectToScene(gameObject, Rust.Server.EntityScene);

            UnityEngine.Object.Destroy(gameObject.GetComponent<Spawnable>());

            if (!gameObject.activeSelf)
                gameObject.SetActive(true);

            BaseEntity component = gameObject.GetComponent<BaseEntity>();
            return component;
        }
		
        private BaseEntity CreateMush()
        {
            BaseEntity entity = InstantiateEntity($@"assets/bundled/prefabs/autospawn/collectable/mushrooms/mushroom-cluster-{Rnd.Next(1,3)==1?"5":"6"}.prefab", new Vector3(), new Quaternion());
			return entity;
        }
		
		private static Vector3 GetRandomPosition()
        {
            var pos = Vector3.zero + new Vector3(Oxide.Core.Random.Range(-World.Size / 2.2f, World.Size / 2.2f), 0, Oxide.Core.Random.Range(-World.Size / 2.2f, World.Size / 2.2f));
            pos.y = TerrainMeta.HeightMap.GetHeight(pos);

            if (pos.y < 0.2f)
                return GetRandomPosition();
			
            List<BaseEntity> entities = Facepunch.Pool.GetList<BaseEntity>();
            Vis.Entities(pos, 1.5f, entities);
            int count = entities.Count;
            if (count > 0)						
                return GetRandomPosition();

            return pos;
        }  
		
		private IEnumerator SpawnToads()
		{
			for (int i = 0; i < Settings.MushAmount; i++)
            {
                var ent = CreateMush();
                var randomPos = GetRandomPosition();
                if (randomPos == null) continue;
                ent.transform.position = randomPos;
                ent.Spawn();
                MushList.Add(ent);
				
				if (i % 3 == 0)
					yield return null;
            }
			
			PrintWarning($"The plugin Mush was loaded successfully, mushrooms on the server added: {Settings.MushAmount}, current {BaseNetworkable.serverEntities.Where(p => p.PrefabName.Contains("mushroom-cluster-")).ToList().Count}");
			timer.Every(310, SaveData);
		}        
        
        #endregion

        #region Player Commands

		[ConsoleCommand("mush.top")]
        private void cmdMushTop10(ConsoleSystem.Arg args)
        {
            if (args.Args == null) return;
            int amount;
            if (!int.TryParse(args.Args[0], out amount)) return;
            var top = Base.Players.ToList().OrderByDescending(p=> p.Value.FullCount).Select(p=> $"{covalence.Players.FindPlayerById(p.Key.ToString()).Name}: {p.Value.FullCount}").Take(amount);
            args.ReplyWith(string.Join("\n", top));
        }
		
		[ChatCommand("grib")]
        private void CmdChatMush(BasePlayer player, string command, string[] args)
        {
            if (args == null || args.Length <= 0)
            {
				if (NeedInitPlayers.Contains(player.userID))
				{
					DoInitImages(player);
					NeedInitPlayers.Remove(player.userID);
					timer.Once(0.1f, ()=> InitializeExperimentalInterface(player, -1, 0, true));
				}						
				else
					InitializeExperimentalInterface(player, -1, 0, true);
			                
                return;
            }
            if (args != null && args[0] == "top")
            {
                int i = 1;
                var top = Base.Players.ToList().OrderByDescending(p => p.Value.FullCount).Select(p => $"{i++} <color=#8ABB50>{covalence.Players.FindPlayerById(p.Key.ToString()).Name}</color>: {p.Value.FullCount}").Take(10);
                SendReply(player, $"ТОП 10 грибников за текущий вайп:\n{string.Join("\n", top)}" );
            }
        }
		
		#endregion
		
		#region Commands

        [ConsoleCommand("UI_Mush")]
        private void CmdConsoleHandler(ConsoleSystem.Arg args)
        {
            var player = args.Player();
            if (!player || !args.HasArgs(1)) return;

            switch (args.Args[0].ToLower())
            {
                case "open":
                    {
                        int index;
                        if (!args.HasArgs(2) || !int.TryParse(args.Args[1], out index)) return;

                        var enter = Settings.Cases.FirstOrDefault(p => p.MushAmount == index);
                        if (enter == null || enter.MushAmount > Base.Players[player.userID].Count) return;

                        if (player.inventory.containerMain.capacity <= player.inventory.containerMain.itemList.Count)
                        {
                            player.ChatMessage($"У вас недостаточно места в инвентаре!");
                            return;
                        }

                        Base.Players[player.userID].Count -= enter.MushAmount;
                        player.ChatMessage($"Вы получили подарок в инвентарь!");

                        var item = ItemManager.CreateByName("easter.goldegg", 1, (ulong)enter.SkinID);
                        item.name = "Ящик с подарком";
                        item.MoveToContainer(player.inventory.containerMain);

                        InitializeExperimentalInterface(player,-1, Settings.Cases.IndexOf(enter) / 4);
                        break;
                    }
                case "page":
                    {
						var pg = int.Parse(args.Args[1]);
						
                        if (pg < 0 || pg > (int)Math.Ceiling(Settings.Cases.Count/4f)-1)
							return;						                        

                        InitializeExperimentalInterface(player, -1, pg);
                        break;
                    }
            }
        }

		[ConsoleCommand("grib_selectcase")]
        private void cmdSelectGriCase(ConsoleSystem.Arg args)
        {
            var player = args.Player();
            int casse = int.Parse(args.Args[0]);
            int page = int.Parse(args.Args[1]);
            InitializeExperimentalInterface(player, casse, page, false, true);
        }   		        

        #endregion

        #region GUI
		
		private static string LayerMain = "UI_Main123";
		private static string Layer = "UI_MushLayer";
		private static string LayerCase = "UI_CaseLayer";
		private const string InitPanel = "MushInitPanel";
		
		private void InitImage(ref CuiElementContainer container, string png, string ipanel)
		{
			container.Add(new CuiElement
			{
				Name = CuiHelper.GetGuid(),
				Parent = ipanel,				
				Components =
				{
					new CuiRawImageComponent { Png = png },
					new CuiRectTransformComponent { AnchorMin = "0 0", AnchorMax = "1 1" }
				}
			});
		}
		
		private void DoInitImages(BasePlayer player)
		{
			if (player == null) return;									
			var container = new CuiElementContainer();			
			
			container.Add(new CuiPanel
			{				
				RectTransform = { AnchorMin = "1.1 1.1", AnchorMax = "1.2 1.2" },
				CursorEnabled = false
			}, "Overlay", InitPanel);
			
			InitImage(ref container, (string)ImageLibrary.Call("GetImage", "Mush_BG"), InitPanel);
			InitImage(ref container, (string)ImageLibrary.Call("GetImage", "Mush_IC"), InitPanel);
			InitImage(ref container, (string)ImageLibrary.Call("GetImage", "Mush_Close"), InitPanel);
			InitImage(ref container, (string)ImageLibrary.Call("GetImage", "Mush_Left"), InitPanel);
			InitImage(ref container, (string)ImageLibrary.Call("GetImage", "Mush_Right"), InitPanel);
			
			foreach (var check in Settings.Cases)
				InitImage(ref container, (string)ImageLibrary.Call("GetImage", $"Mush.{Settings.Cases.IndexOf(check)}"), InitPanel);
				
			CaseItems.ForEach(image => InitImage(ref container, (string)ImageLibrary.Call("GetImage", image), InitPanel));
			
			CuiHelper.DestroyUi(player, InitPanel);
			CuiHelper.AddUi(player, container);	
		}

        private void InitializeExperimentalInterface(BasePlayer player,int type = -1, int page = 0, bool isStart = false, bool isCase = false)
        {
			CuiElementContainer container = new CuiElementContainer();			
			var fadeIn = 0f;
			
			if (isStart)
			{
				fadeIn = 0.5f;
				timer.Once(2f, ()=> { if (player != null) CuiHelper.DestroyUi(player, InitPanel); });;
				CuiHelper.DestroyUi(player, LayerMain);												
				
				container.Add(new CuiPanel
				{
					CursorEnabled = true,
					RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0" },
					Image = { Color = "0 0 0 0" }
				}, "Overlay", LayerMain);											
				
				container.Add(new CuiElement
				{
					Parent = LayerMain,
					Components =
					{
						new CuiImageComponent {Color = "0.5 0.5 0.5 0.4", Material = "", FadeIn = fadeIn},
						new CuiRectTransformComponent {AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = $"-330 -150", OffsetMax = $"330 200"}
					}
				});
				container.Add(new CuiElement
				{
					Parent = LayerMain,
					Components =
					{
						new CuiImageComponent {Color             = "0.3 0.3 0.3 0.8", Material = "", FadeIn = fadeIn},
						new CuiRectTransformComponent {AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = $"-320 -55", OffsetMax = $"320 140"}
					}
				});												

				container.Add(new CuiElement
				{
					Parent = LayerMain,
					Components =
					{
						new CuiRawImageComponent {Png             = (string) ImageLibrary.Call("GetImage", "Mush_BG"), FadeIn = fadeIn},
						new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = $"-250 140", OffsetMax = $"250 235" }
					}
				});	

				container.Add(new CuiElement
				{
					Name = LayerMain + "FFF",
					Parent = LayerMain,
					Components =
					{
						new CuiImageComponent {Color  = "0.3 0.3 0.3 0.8", Material = "", FadeIn = fadeIn},
						new CuiRectTransformComponent {AnchorMin = "0.5 0.5", AnchorMax  = "0.5 0.5", OffsetMin = $"-320 -140", OffsetMax = $"170 -60"}
					}
				});	
				
				container.Add(new CuiElement
				{
					Parent = LayerMain,
					Components =
					{
						new CuiImageComponent {Color = "0.3 0.3 0.3 0.8", Material = "", FadeIn = fadeIn},
						new CuiRectTransformComponent {AnchorMin = "0.5 0.5", AnchorMax        = "0.5 0.5", OffsetMin = $"230 -140", OffsetMax = $"320 -105"}
					}
				});
				
				container.Add(new CuiElement
				{
					Parent = LayerMain,
					Name = LayerMain + ".D",
					Components =
					{
						new CuiRawImageComponent {Png            = (string) ImageLibrary.Call("GetImage", $"Mush_IC"), FadeIn = fadeIn},
						new CuiRectTransformComponent {AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = $"235 -138", OffsetMax = $"270 -108"}
					}
				});
				
				container.Add(new CuiElement
				{
					Name = LayerMain + ".L",
					Parent = LayerMain,
					Components =
					{
						new CuiRawImageComponent {Png             = (string) ImageLibrary.Call("GetImage", "Mush_Left"), FadeIn = fadeIn},
						new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = $"-315 30", OffsetMax = $"-290 60" }
					}
				});
				container.Add(new CuiElement
				{
					Name = LayerMain + ".R",
					Parent = LayerMain,
					Components =
					{
						new CuiRawImageComponent {Png             = (string) ImageLibrary.Call("GetImage", "Mush_Right"), FadeIn = fadeIn},
						new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = $"290 30", OffsetMax = $"315 60" }
					}
				});
				container.Add(new CuiElement
				{
					Name = LayerMain + ".C",
					Parent = LayerMain,
					Components =
					{
						new CuiRawImageComponent {Png             = (string) ImageLibrary.Call("GetImage", "Mush_Close"), FadeIn = fadeIn},
						new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = $"285 155", OffsetMax = $"320 190" }
					}
				});
				
				//CuiHelper.AddUi(player, container);
				//return;
			}
			
			if (!isCase)
			{
				CuiHelper.DestroyUi(player, LayerCase);
				
				container.Add(new CuiPanel
				{                				
					RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0" },
					Image = { Color = "0 0 0 0" }
				}, LayerMain, LayerCase);
			}
			
            CuiHelper.DestroyUi(player, Layer);

            container.Add(new CuiPanel
            {                				
                RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0" },
                Image = { Color = "0 0 0 0" }
            }, LayerMain, Layer);
			
			container.Add(new CuiButton
			{
				RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0" },
				Button = { Color = "0 0 0 0", Material = "", Close = LayerMain },
				Text = { Text = "" }
			}, Layer);
			
			container.Add(new CuiElement
			{
				Parent = Layer,
				Components =
				{
					new CuiImageComponent {Color = "0 0 0 0", Material = ""},
					new CuiRectTransformComponent {AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = $"-330 -150", OffsetMax = $"330 200"}
				}
			});

			container.Add(new CuiElement
			{
				Name = LayerMain + ".T",
				Parent = Layer,
				Components =
				{
					new CuiImageComponent {Color  = "0 0 0 0", Material = ""},
					new CuiRectTransformComponent {AnchorMin = "0.5 0.5", AnchorMax  = "0.5 0.5", OffsetMin = $"-320 -140", OffsetMax = $"170 -60"}
				}
			});			

            if (type < 0)
            {
                container.Add(new CuiLabel
                {
                    RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "5 0", OffsetMax = "0 0" },
                    Text = { Text = "Собирайте грибы и покупайте за них ящики с предметами.\nЧем выше уровень, тем лучше предметы.", Align = TextAnchor.MiddleLeft, Font = "robotocondensed-bold.ttf", FontSize = 19, FadeIn = fadeIn }
                }, LayerMain + ".T");
            }
            else
            {
                container.Add(new CuiElement
                {
                    Parent = LayerMain + ".T",
                    Components =
                {
                    new CuiRawImageComponent {Color = "1 1 1 1", Png = (string)ImageLibrary.Call("GetImage", CaseItems[type]), FadeIn = fadeIn},
                    new CuiRectTransformComponent {AnchorMin = "0 -0.01", AnchorMax = "1 0.98"}
                }
                });
            }            						            

            container.Add(new CuiButton
            {
                RectTransform = { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = $"285 155", OffsetMax = $"320 190" },
                Button = { Color = "0 0 0 0", Close = LayerMain },
                Text = { Text = "" }
            }, Layer);
            container.Add(new CuiButton
            {
                RectTransform = { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = $"-315 30", OffsetMax = $"-290 60" },
                Button = { Color = "0 0 0 0", Command = $"UI_Mush page {page - 1}" },
                Text = { Text = "" }
            }, Layer);
            container.Add(new CuiButton
            {
                RectTransform = { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = $"290 30", OffsetMax = $"315 60" },
                Button = { Color = "0 0 0 0", Command = $"UI_Mush page {page + 1}" },
                Text = { Text = "" }
            }, Layer);

            var list = Settings.Cases.Skip(page * 4).Take(4);
            if (!list.Any())
            {
                InitializeExperimentalInterface(player, type, page - 1);
                return;
            }
									
			foreach (var check in list.Select((i, t) => new { A = i, B = t - 2 }))
			{
				if (!isCase)
				{
					container.Add(new CuiElement
					{
						Name = LayerMain + check.B,
						Parent = LayerCase,
						Components =
						{
							new CuiRawImageComponent {Png = (string) ImageLibrary.Call("GetImage", $"Mush.{Settings.Cases.IndexOf(check.A)}"), FadeIn = fadeIn},
							new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = $"{check.B * 143} -25", OffsetMax = $"{150 + check.B * 143} 145" }
						}
					});
				}

				string text = "ПОКАЗАТЬ";
				string color = "0.33 0.52 0.71 1.00";

				if (type >= 0 && type == Settings.Cases.IndexOf(check.A))
				{
					text = Base.Players[player.userID].Count < check.A.MushAmount ? "ЗАКРЫТО" : "КУПИТЬ";
					color = Base.Players[player.userID].Count < check.A.MushAmount ? "0.74 0.51 0.38 1.00" : "0.54 0.73 0.31 1.00";
				}
				
				container.Add(new CuiButton
				{
					RectTransform = { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = $"{7 + check.B * 143 + 5} -50", OffsetMax = $"{150 + check.B * 143 - 5} -25" },
					Button = { Color = color, FadeIn = fadeIn, Command = type > -1 && type == Settings.Cases.IndexOf(check.A) ? $"UI_Mush open {check.A.MushAmount}": $"grib_selectcase {Settings.Cases.IndexOf(check.A)} {page}" },
					Text = { Text = text, Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf", FontSize = 20, FadeIn = fadeIn }
				}, Layer);
			}			

            var info = Base.Players[player.userID];
            container.Add(new CuiLabel()
            {
                RectTransform = { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = $"250 -140", OffsetMax = $"315 -105" },
                Text = { Text = info.Count.ToString(), Align = TextAnchor.MiddleRight, Font = "robotocondensed-bold.ttf", FontSize = 22, FadeIn = fadeIn }
            }, Layer);

            CuiHelper.AddUi(player, container);
        }            
       
        #endregion
        
    }
}

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