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

FREE RealSkills : 1.0.0 1.0.0

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

namespace Oxide.Plugins
{
    [Info("RealSkills", "Frizen", "1.0.0")]
    public class RealSkills : RustPlugin
    {
        #region Variables

        
        // TODO: Fixex Gather Rate
        private string[] _gatherHooks = {
            "OnDispenserGather",
            "OnDispenserBonus",
        };

        [PluginReference] private Plugin ImageLibrary = null;


        public enum  TypeSkills
        {
            Wood = 1,
            Stone = 2,
            Metal = 3,
            Sulfur = 4,
            Animal = 5,
            Component = 6,
            Damage = 7,
            Health = 8,
            Wounded = 9,
        }

        #endregion
        
        #region Classes

        public class Skills
        {
            [JsonProperty("Отображаемое имя навыка")]
            public string DisplayName { get; set; }
            [JsonProperty("Описание навыка")]
            public string Description { get; set; }
            [JsonProperty("Изображение навыка")]
            public string Image { get; set; }
            [JsonProperty("Список уровней")]
            public List<Levels> LevelList { get; set; }


            [JsonProperty("Тип скилла")] 
            public TypeSkills _TypeSkills;
            
            public class Levels
            {
                [JsonProperty("Цена уровня")]
                public double ExpCost { get; set; }
                [JsonProperty("На сколько повышать рейт при повышении навыка")]
                public float PercentBoost { get; set; }
            }
            
        }

        #endregion

        #region Config
        private static Configuration _config;
        private class Configuration
        {
            [JsonProperty("Список скиллов")]
            public List<Skills> SkillsList = new List<Skills>();

            [JsonProperty("Награда за убийство игрока")]
            public float PlayerKillAward { get; set; }

            [JsonProperty("Награда за убийство нпс")]
            public float NpcKillAward { get; set; }

            [JsonProperty("Награда за ящики/бочки")]
            public float ContainerAward { get; set; }

            [JsonProperty("Награда за фарм")]
            public Dictionary<string, float> FarmAwards { get; set; }


            public static Configuration DefaultConfig()
            {
                return new Configuration
                {
                    SkillsList =
                    {
                        new Skills
                        {
                            _TypeSkills = TypeSkills.Damage,
                            DisplayName = "Навык КОМБАТЁР",
                            Description = "Увеличивает урон на {0}%",
                            Image = "https://i.imgur.com/dkcFkZz.png",
                            LevelList = new List<Skills.Levels>
                            {
                                new Skills.Levels
                                {
                                    ExpCost = 0,
                                    PercentBoost = 0,
                                },                  
                                new Skills.Levels
                                {
                                    ExpCost = 1,
                                    PercentBoost = 2,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 2,
                                    PercentBoost = 3,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 3,
                                    PercentBoost = 5,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 4,
                                    PercentBoost = 6,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 5,
                                    PercentBoost = 7,
                                },
                            }
                        },
                        new Skills
                        {
                            DisplayName = "Навык СУЛЬФЁР",
                            Description = "Повышает рейты на x{0}",
                            Image = "https://i.imgur.com/LizBIdY.png",
                            _TypeSkills = TypeSkills.Sulfur,
                            LevelList = new List<Skills.Levels>
                            {
                                new Skills.Levels
                                {
                                    ExpCost = 0,
                                    PercentBoost = 0,
                                },     
                                new Skills.Levels
                                {
                                    ExpCost = 1,
                                    PercentBoost = 2,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 2,
                                    PercentBoost = 3,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 3,
                                    PercentBoost = 5,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 4,
                                    PercentBoost = 6,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 5,
                                    PercentBoost = 7,
                                },
                            }
                        },
                        new Skills
                        {
                            DisplayName = "Навык ЖЕЛЕЗНЯК",
                            Description = "Повышает рейты на x{0}",
                            Image = "https://i.imgur.com/h0KN9vC.png",
                            _TypeSkills = TypeSkills.Metal,
                            LevelList = new List<Skills.Levels>
                            {
                                new Skills.Levels
                                {
                                    ExpCost = 0,
                                    PercentBoost = 0,
                                },      
                                new Skills.Levels
                                {
                                    ExpCost = 1,
                                    PercentBoost = 2,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 2,
                                    PercentBoost = 3,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 3,
                                    PercentBoost = 5,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 4,
                                    PercentBoost = 6,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 5,
                                    PercentBoost = 7,
                                },
                            }
                        },
                        new Skills
                        {
                            DisplayName = "Навык КАМЕНОЛОМ",
                            Description = "Повышает рейты на x{0}",
                            Image = "https://i.imgur.com/KjWT1Bx.png",
                            _TypeSkills = TypeSkills.Stone,
                            LevelList = new List<Skills.Levels>
                            {
                                new Skills.Levels
                                {
                                    ExpCost = 0,
                                    PercentBoost = 0,
                                },        
                                new Skills.Levels
                                {
                                    ExpCost = 1,
                                    PercentBoost = 2,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 2,
                                    PercentBoost = 3,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 3,
                                    PercentBoost = 5,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 4,
                                    PercentBoost = 6,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 5,
                                    PercentBoost = 7,
                                },
                            }
                        },
                        new Skills
                        {
                            DisplayName = "Навык БРОНЯ",
                            Description = "Увеличивает ваше ХП на {0}%",
                            Image = "https://i.imgur.com/ZUJdi45.png",
                            _TypeSkills = TypeSkills.Health,
                            LevelList = new List<Skills.Levels>
                            {
                                new Skills.Levels
                                {
                                    ExpCost = 0,
                                    PercentBoost = 0,
                                },               
                                new Skills.Levels
                                {
                                    ExpCost = 1,
                                    PercentBoost = 2,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 2,
                                    PercentBoost = 3,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 3,
                                    PercentBoost = 5,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 4,
                                    PercentBoost = 6,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 5,
                                    PercentBoost = 7,
                                },
                            }
                        },
                        new Skills
                        {
                            DisplayName = "Навык БОЧКИ",
                            Description = "Повышает рейты на x{0}",
                            Image = "https://i.imgur.com/STKuoO0.png",
                            _TypeSkills = TypeSkills.Component,
                            LevelList = new List<Skills.Levels>
                            {
                                new Skills.Levels
                                {
                                    ExpCost = 0,
                                    PercentBoost = 0,
                                },                                
                                new Skills.Levels
                                {
                                    ExpCost = 1,
                                    PercentBoost = 2,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 2,
                                    PercentBoost = 3,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 3,
                                    PercentBoost = 5,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 4,
                                    PercentBoost = 6,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 5,
                                    PercentBoost = 7,
                                },
                            }
                        },
                        new Skills
                        {
                            DisplayName = "Навык ОХОТНИК",
                            Description = "Повышает рейты на x{0}",
                            Image = "https://i.imgur.com/G4Sd4PO.png",
                            _TypeSkills = TypeSkills.Animal,
                            LevelList = new List<Skills.Levels>
                            {
                                new Skills.Levels
                                {
                                    ExpCost = 0,
                                    PercentBoost = 0,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 1,
                                    PercentBoost = 2,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 2,
                                    PercentBoost = 3,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 3,
                                    PercentBoost = 5,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 4,
                                    PercentBoost = 6,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 5,
                                    PercentBoost = 7,
                                },
                            }
                        },
                        new Skills
                        {
                            DisplayName = "Навык СМЕРТНИК",
                            Description = "Повышает шанс встать на {0}%",
                            Image = "https://i.imgur.com/nCE9Y7d.png",
                            _TypeSkills = TypeSkills.Wounded,
                            LevelList = new List<Skills.Levels>
                            {
                                new Skills.Levels
                                {
                                    ExpCost = 0,
                                    PercentBoost = 0,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 1,
                                    PercentBoost = 2,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 2,
                                    PercentBoost = 3,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 3,
                                    PercentBoost = 5,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 4,
                                    PercentBoost = 6,
                                },
                                new Skills.Levels
                                {
                                    ExpCost = 5,
                                    PercentBoost = 7,
                                },
                            }
                        }
                    },
                    PlayerKillAward = 20,
                    NpcKillAward = 20,
                    ContainerAward = 20,
                    FarmAwards = new Dictionary<string, float>()
                    {
                        ["stones"] = 20,
                        ["sulfur.ore"] = 15,
                        ["metal.ore"] = 15,
                        ["wood"] = 15
                    },
                };
            }
        }

        protected override void LoadConfig()
        {
            base.LoadConfig();
            try
            {
                _config = Config.ReadObject<Configuration>();
                if (_config == null) LoadDefaultConfig();
                SaveConfig();
            }
            catch (Exception e)
            {
                Debug.LogException(e);
                PrintWarning("Creating new config file.");
                LoadDefaultConfig();
            }
        }

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

        #region Data

        private void SaveData()
        {
            if (PlayerData != null)
                Interface.Oxide.DataFileSystem.WriteObject($"{Name}/Skills", PlayerData);
        }

        public class PlayerDataClass
        {
            public Dictionary<TypeSkills, int> Progress = new Dictionary<TypeSkills, int>();
            public double Exp { get; set; }
        }

        public Dictionary<ulong, PlayerDataClass> PlayerData = new Dictionary<ulong, PlayerDataClass> { };



        private void LoadData()
        {
            if (Interface.Oxide.DataFileSystem.ExistsDatafile($"{Name}/Skills"))
            {
                PlayerData = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<ulong, PlayerDataClass>>($"{Name}/Skills");
            }
            else
            {
                SaveData();
            }
        }

        #endregion

        #region Hooks

        private void OnServerInitialized()
        {
            ImageLibrary.Call("AddImage", "https://i.imgur.com/v4Ix05O.png", "Viniette");

            LoadData();

            foreach (var item in _config.SkillsList)
            {
                ImageLibrary.Call("AddImage", item.Image, item.Image);
            }
                ImageLibrary.Call("AddImage", "https://i.imgur.com/Jv4tRia.png", "Upgrade");

            foreach (var item in BasePlayer.activePlayerList)
            {
                OnPlayerConnected(item);
            }
        }
        
        private void OnPluginLoaded(Plugin plugin)
        {
            NextTick(() =>
            {
                
                foreach (string hook in _gatherHooks)
                {
                    Unsubscribe(hook);
                    Subscribe(hook);
                }
            });
        }

        private void Unload()
        {
            SaveData();
        }

        void OnPlayerConnected(BasePlayer player)
        {
            if (PlayerData != null)
            {
                if (!PlayerData.ContainsKey(player.userID))
                {
                    PlayerData.Add(player.userID, new PlayerDataClass()
                    {
                        Exp = 0

                    });
                    foreach (var item in _config.SkillsList)
                    {
                        PlayerData[player.userID].Progress.Add(item._TypeSkills, 0);
                    }
                }
            }
        }

        void OnPlayerRespawned(BasePlayer player)
        {

            var findConfig = _config.SkillsList.FirstOrDefault(p => p._TypeSkills == TypeSkills.Health);
            
            if (findConfig == null) return;

            var data = PlayerData[player.userID];
            
            if (data == null) return;
            
            if (!data.Progress.ContainsKey(findConfig._TypeSkills)) return;

            var elementLevel = findConfig.LevelList.ElementAt(data.Progress[findConfig._TypeSkills]);

            var setHeatlh = (100 + 100 * (elementLevel.PercentBoost / 100f));
            
            player._maxHealth = setHeatlh;
            player.SetHealth(player._maxHealth);
        }

        object OnPlayerAttack(BasePlayer attacker, HitInfo info)
        {
            if (attacker == null) return null;

            if (info == null) return null;
            
            var findConfig = _config.SkillsList.FirstOrDefault(p => p._TypeSkills == TypeSkills.Damage);
            
            if (findConfig == null) return null;

            var data = PlayerData[attacker.userID];
            
            if (data == null) return null;
            
            if (!data.Progress.ContainsKey(findConfig._TypeSkills)) return null;

            var elementLevel = findConfig.LevelList.ElementAt(data.Progress[findConfig._TypeSkills]);

            var setHeatlh = (1 + (elementLevel.PercentBoost / 100f));
            
            info.damageTypes.ScaleAll(setHeatlh);
            return null;
        }

        

        object OnPlayerDeath(BasePlayer player, HitInfo info)
        {
            if (player == null || info == null || info.InitiatorPlayer == null) return null;

            if (info.InitiatorPlayer.userID != player.userID)
            {
                AddExp(info.InitiatorPlayer, _config.PlayerKillAward);
            }

            return null;
        }

        void OnDispenserBonus(ResourceDispenser dispenser, BasePlayer player, Item item)
        {
            if (player == null || item == null || dispenser == null) return;

            if (_config.FarmAwards.ContainsKey(item.info.shortname))
            {
                AddExp(player, _config.FarmAwards[item.info.shortname]);
            }
            
            return;
        }
        
        
        const float defaultRate = 1.0f;

        private void OnEntityDeath(LootContainer entity, HitInfo info)
        {
            if (entity == null) return;
            if (info == null) return;

            if (!entity.ShortPrefabName.Contains("barrel")) return;

            if (info.InitiatorPlayer == null) return;
            var player = info.InitiatorPlayer;
            
            var findConfig = _config.SkillsList.FirstOrDefault(p => p._TypeSkills == TypeSkills.Component);
            
            if (findConfig == null) return;

            var data = PlayerData[player.userID];
            
            if (data == null) return;
            
            if (!data.Progress.ContainsKey(findConfig._TypeSkills)) return;

            var elementLevel = findConfig.LevelList.ElementAt(data.Progress[findConfig._TypeSkills]);
            if (elementLevel.PercentBoost <= 0)
            {
                
                AddExp(player, _config.ContainerAward);
                
                return;
            }


            float rateSend = defaultRate + elementLevel.PercentBoost;
            
            foreach (var item in entity.inventory.itemList)
            {
                if (item.skin > 0) continue;
                if (item.info.category != ItemCategory.Component && item.info.shortname != "scrap") continue;

                item.amount = (int)Math.Round(item.amount * rateSend);
            }

            AddExp(player, _config.ContainerAward);

        }

        private void OnLootEntityEnd(BasePlayer player, BaseCombatEntity entity)
        {
            if (player == null) return;
            if (entity == null) return;
            if (entity.OwnerID != 0) return;
            if (entity.GetComponentInChildren<LootContainer>() == null) return;

            if (entity.GetComponentInChildren<LootContainer>().inventory.IsEmpty())
            {
                AddExp(player, _config.ContainerAward);
            }

        }


        void RateHandler(BasePlayer player, Item item, TypeSkills skills)
        {
            var boostConfig = _config.SkillsList.FirstOrDefault(p => p._TypeSkills == skills);

            if (boostConfig == null) return;

            var data = PlayerData[player.userID];

            if (data == null) return;

            if (!data.Progress.ContainsKey(boostConfig._TypeSkills)) return;

            var elementLevel = boostConfig.LevelList.ElementAt(data.Progress[boostConfig._TypeSkills]);

            if (elementLevel.PercentBoost <= 0) return;
            
            

            item.amount = (int)Math.Round(item.amount * elementLevel.PercentBoost);
        }

        object OnPlayerWound(BasePlayer player, HitInfo info)
        {

            if (PlayerData.ContainsKey(player.userID))
            {

                var findConfig = _config.SkillsList.FirstOrDefault(p => p._TypeSkills == TypeSkills.Wounded);

                if (findConfig == null) return null;
                
                var data = PlayerData[player.userID];
            
                if (data == null) return null;
            
                if (!data.Progress.ContainsKey(findConfig._TypeSkills)) return null;

                var elementLevel = findConfig.LevelList.ElementAt(data.Progress[findConfig._TypeSkills]);

                var boost = elementLevel.PercentBoost;
                
                if (boost > 0f)
                {

                    float baseReviveChance = 0.5f;
                    double boostedReviveChance = baseReviveChance + (boost / 100f);


                    float randomValue = UnityEngine.Random.Range(0f, 1f);


                    if (randomValue <= boostedReviveChance)
                    {
                        player.StopWounded();
                        player.health += 10;
                        player.metabolism.bleeding.value = 0;
                    }
                }
            }

            return null;
        }


        #endregion

        #region API


        private float GetSkillsRate(BasePlayer player, Item item)
        {
            TypeSkills? TypeSkill = null;
            
            
            switch (item.info.shortname.ToLower())
            {
                case "sulfur.ore":
                {
                    TypeSkill = TypeSkills.Sulfur;
                    
                    break;
                }

                case "metal.ore":
                {
                    TypeSkill = TypeSkills.Metal;
                    
                    
                    break;
                }
                case "stones":
                {
                    TypeSkill = TypeSkills.Stone;

                    break;
                }
            }

            if (TypeSkill == null) return 0f;
            
            
            
            
            var boostConfig = _config.SkillsList.FirstOrDefault(p => p._TypeSkills == TypeSkill);

            if (boostConfig == null) return 0f;

            var data = PlayerData[player.userID];

            if (data == null) return 0f;

            if (!data.Progress.ContainsKey(boostConfig._TypeSkills)) return 0f;

            var elementLevel = boostConfig.LevelList.ElementAt(data.Progress[boostConfig._TypeSkills]);

            if (elementLevel.PercentBoost <= 0) return 0f;

            return elementLevel.PercentBoost;

        }

        #endregion
        
        #region Methods

        private static string HexToRustFormat(string hex)
        {
            if (string.IsNullOrEmpty(hex)) hex = "#FFFFFFFF";
            var str = hex.Trim('#');
            if (str.Length == 6) str += "FF";
            if (str.Length != 8)
            {
                throw new Exception(hex);
                throw new InvalidOperationException("Cannot convert a wrong format.");
            }
            var r = byte.Parse(str.Substring(0, 2), NumberStyles.HexNumber);
            var g = byte.Parse(str.Substring(2, 2), NumberStyles.HexNumber);
            var b = byte.Parse(str.Substring(4, 2), NumberStyles.HexNumber);
            var a = byte.Parse(str.Substring(6, 2), NumberStyles.HexNumber);
            Color color = new Color32(r, g, b, a);
            return string.Format("{0:F2} {1:F2} {2:F2} {3:F2}", color.r, color.g, color.b, color.a);
        }

        private void AddExp(BasePlayer player, float amount)
        {
            PlayerData[player.userID].Exp += amount;
            
            player.Command("note.inv", new object[]
            {
                ItemManager.GetItemDefinitions().GetRandom().itemid, 
                1,
                $"+{amount} EXP",
                (int) BaseEntity.GiveItemReason.Generic
            });
            
        }

        private bool CanUpgradeSkill(BasePlayer player, TypeSkills skills)
        {
            Skills skill = _config.SkillsList.FirstOrDefault(x => x._TypeSkills == skills);


            if (skill == null)
            {
                return false;
            }


            if (PlayerData[player.userID].Progress.ContainsKey(skills))
            {
                int currentLevel = PlayerData[player.userID].Progress[skills];


                if (currentLevel < skill.LevelList.Count - 1)
                {
                    double expCost = skill.LevelList[currentLevel].ExpCost;

                    if(PlayerData[player.userID].Exp == 0)
                    {
                        return false;
                    }

                    if (expCost <= PlayerData[player.userID].Exp)
                    {
                        return true;
                    }

                }
            }

            return false;
        }


        [ChatCommand("skills")]
        private void ChatSkills(BasePlayer player)
        {
            if (player == null) return;
            SkillsUI(player);

        }

        [ConsoleCommand("skill.handler")]
        private void SkillHandler(ConsoleSystem.Arg args)
        {
            var player = args.Player();

            if (player == null) return;

            if (args.Args.Length < 1) return;

            TypeSkills item;

            if (Enum.TryParse(args.Args[0], out item))
            {
                var findConfig = _config.SkillsList.FirstOrDefault(p => p._TypeSkills == item);
            
                if (findConfig == null) return;
            

                if (!CanUpgradeSkill(player, findConfig._TypeSkills)) return;
            
                var _levelcost = findConfig.LevelList.ElementAt(PlayerData[player.userID].Progress[findConfig._TypeSkills]).ExpCost;
                if (PlayerData[player.userID].Progress[findConfig._TypeSkills] < 5)
                {
                    PlayerData[player.userID].Progress[findConfig._TypeSkills]++;
                    PlayerData[player.userID].Exp -= _levelcost;
                }

                SkillsUI(player);
            }

            return;
        }

        private void SkillsUI(BasePlayer player)
        {
            var container = new CuiElementContainer();
            var xp = PlayerData[player.userID].Exp == 0 ? 0.00 : PlayerData[player.userID].Exp;

            var xptext = xp.ToString().Length > 5 ? xp.ToString().Substring(0, 5) : xp.ToString();


            CuiHelper.DestroyUi(player, "Skills");

            container.Add(new CuiPanel
            {
                CursorEnabled = true,
                RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "0 0", OffsetMax = "0 0" },
                Image = { Color = "0 0 0 0.5", Material = "assets/content/ui/uibackgroundblur-ingamemenu.mat" }
            }, "Overlay", "Skills");

            container.Add(new CuiElement
            {
                Parent = "Skills",
                Name = "BG",
                Components =
                {
                    new CuiRawImageComponent{Color = "1 1 1 1", Png = ImageLibrary.Call<string>("GetImage", "Viniette")},
                    new CuiRectTransformComponent { AnchorMin = "0 0", AnchorMax = "1 1" }
                }
            });


            container.Add(new CuiButton
            {
                RectTransform =
                            {
                            AnchorMin = "0 0",
                            AnchorMax= "1 1"
                            },
                Text =
                            {
                            Text = "",
                            },
                Button =
                            {
                            Color = "0 0 0 0",
                            Close = "Skills",
                            }
            }, "BG");

            container.Add(new CuiPanel
            {
                CursorEnabled = false,
                Image = { Color = "0.7137255 0.7137255 0.7137255 0" },
                RectTransform = { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-234.281 -152.347", OffsetMax = "234.55 152.953" }
            }, "BG", "Parent");

            container.Add(new CuiPanel
            {
                CursorEnabled = false,
                Image = { Color = $"{HexToRustFormat("#B6B6B63E")}" },
                RectTransform = { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-234.414 118.945", OffsetMax = "234.416 152.649" }
            }, "Parent", "TitlePanel");

            container.Add(new CuiElement
            {
                Name = "TitleText",
                Parent = "TitlePanel",
                Components = {
                    new CuiTextComponent { Text = "Прокачка навыков", Font = "robotocondensed-bold.ttf", FontSize = 14, Align = TextAnchor.MiddleCenter, Color = "0.9098039 0.8862745 0.8509804 0.8" },
                    new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-234.414 -16.852", OffsetMax = "234.416 16.851" }
                }
            });

            container.Add(new CuiPanel
            {
                CursorEnabled = false,
                Image = { Color = $"{HexToRustFormat("#B6B6B63E")}" },
                RectTransform = { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-234.413 -152.646", OffsetMax = "234.417 -120.751" }
            }, "Parent", "ExpPanel");

            container.Add(new CuiElement
            {
                Name = "ExpText",
                Parent = "ExpPanel",
                Components = {
                    new CuiTextComponent { Text = $"{xptext}XP", Font = "robotocondensed-bold.ttf", FontSize = 14, Align = TextAnchor.MiddleCenter, Color = "0.9098039 0.8862745 0.8509804 0.8" },
                    new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-234.416 -15.948", OffsetMax = "234.414 15.947" }
                }
            });

            int z = 0;
            double offsetminy = 60.298, offsetmaxy = 113.893, offsetminx = -234.41, offsetmaxx = -2.938, marginy = 58.695, startoffsetminy = 60.298, startoffsetmaxy = 113.893;
            foreach (var skill in _config.SkillsList)
            {
                var _image = ImageLibrary.Call<string>("GetImage", skill.Image);
                var _displayName = skill.DisplayName;
                var _description = skill.Description;
                var _percentBoost = _config.SkillsList.FirstOrDefault(x => x._TypeSkills == skill._TypeSkills).LevelList.ElementAt(PlayerData[player.userID].Progress[skill._TypeSkills]).PercentBoost;
                var _levelcost = _config.SkillsList.FirstOrDefault(x => x._TypeSkills == skill._TypeSkills).LevelList.ElementAt(PlayerData[player.userID].Progress[skill._TypeSkills]).ExpCost;
                if (z == 4)
                {
                    offsetminy = startoffsetminy;
                    offsetmaxy = startoffsetmaxy;
                    offsetminx = 2.944;
                    offsetmaxx = 234.416;
                }

                container.Add(new CuiPanel
                {
                    CursorEnabled = false,
                    Image = { Color = "1 1 1 0" },
                    RectTransform = { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = $"{offsetminx} {offsetminy}", OffsetMax = $"{offsetmaxx} {offsetmaxy}" }
                }, "Parent", $"{skill.DisplayName}");

                container.Add(new CuiElement
                {
                    Name = "Icon",
                    Parent = $"{skill.DisplayName}",
                    Components = {
                    new CuiRawImageComponent { Color = "1 1 1 1", Png = _image },
                    new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-115.953 -26.797", OffsetMax = "-62.415 26.798" }
                }
                });

                container.Add(new CuiPanel
                {
                    CursorEnabled = false,
                    Image = { Color = $"{HexToRustFormat("#B6B6B63E")}" },
                    RectTransform = { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-58.923 -18.116", OffsetMax = "115.737 26.798" }
                }, $"{skill.DisplayName}", "InfoPanel");

                container.Add(new CuiElement
                {
                    Name = "Name",
                    Parent = "InfoPanel",
                    Components = {
                    new CuiTextComponent { Text = _displayName, Font = "robotocondensed-bold.ttf", FontSize = 11, Align = TextAnchor.MiddleLeft, Color = "0.9098039 0.8862745 0.8509804 0.8" },
                    new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-80.539 -1.917", OffsetMax = "52.43 12.626" }
                }
                });

                if (_percentBoost == 0)
                {
                    _percentBoost = 1;
                }

                string messageSend = _description.Replace("{0}", _percentBoost.ToString());

                container.Add(new CuiElement
                {
                    Name = "Description",
                    Parent = "InfoPanel",
                    Components = {
                    new CuiTextComponent { Text = messageSend, Font = "robotocondensed-bold.ttf", FontSize = 9, Align = TextAnchor.MiddleLeft, Color = "0.9098039 0.8862745 0.8509804 0.8" },
                    new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-80.535 -14.542", OffsetMax = "52.43 0" }
                }
                });

                container.Add(new CuiButton
                {
                    RectTransform =
                        {
                            AnchorMin = "0.5 0.5",
                            AnchorMax = "0.5 0.5",
                            OffsetMin = "54.184 -11.729",
                            OffsetMax = "77.642 11.729"
                        },
                    Button =
                        {
                            Color = !CanUpgradeSkill(player, skill._TypeSkills) ? $"{HexToRustFormat("#B6B6B63E")}" : $"{HexToRustFormat("#C8D3825A")}",
                            Command = CanUpgradeSkill(player, skill._TypeSkills) ? $"skill.handler {skill._TypeSkills}" : "",
                        },
                    Text =
                        {
                            Text = !CanUpgradeSkill(player, skill._TypeSkills) ? $"{_levelcost}XP" : "",
                            Align = TextAnchor.MiddleCenter,
                            Color = $"{HexToRustFormat("#E8E2D9E5")}",
                            Font = "robotocondensed-bold.ttf",
                            FontSize = 10
                        }
                }, $"InfoPanel", $"CostBTN");

                if (CanUpgradeSkill(player, skill._TypeSkills))
                {
                    container.Add(new CuiElement
                    {
                        Parent = $"CostBTN",
                        Name = $"Icon",
                        Components =
                                   {
                                       new CuiRawImageComponent{Color = "1 1 1 1", Png = ImageLibrary.Call<string>("GetImage", "Upgrade")},
                                       new CuiRectTransformComponent { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-7.481 -7.481", OffsetMax = "7.481 7.481" }
                                   }
                    });
                }


                double _offsetminx = -58.955, _offsetmaxx = -25.315, marginx = 35.355;
                for (int i = 1; i < 6; i++)
                {
                        container.Add(new CuiPanel
                        {
                            CursorEnabled = false,
                            Image = { Color = PlayerData[player.userID].Progress[skill._TypeSkills] < i ? $"{HexToRustFormat("#B6B6B63E")}" : $"{HexToRustFormat("#E4F56D7E")}" },
                            RectTransform = { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = $"{_offsetminx} -26.797", OffsetMax = $"{_offsetmaxx} -21.091" }
                        }, $"{skill.DisplayName}", $"{skill.DisplayName}" + i);

                    _offsetminx += marginx;
                    _offsetmaxx += marginx;

                }



                offsetminy -= marginy;
                offsetmaxy -= marginy;

                z++;
            }

            CuiHelper.AddUi(player, container);
        }

        #endregion

        
    }
}

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