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

FREE XLevels : 1.1.12 1.1.12

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using UnityEngine;
using Oxide.Core;
using System.Collections.Generic;
using Oxide.Game.Rust.Cui;
using Oxide.Core.Plugins;
using ConVar;
using Oxide.Core.Libraries.Covalence;
using Newtonsoft.Json;
using System.Linq;
using System;
namespace Oxide.Plugins {
    [Info("XLevels", "MONSTER", "1.1.12")]
    class XLevels : RustPlugin {
        private void Message(BasePlayer player, string Messages) {
            CuiElementContainer container = new CuiElementContainer();
            container.Add(new CuiLabel {
                FadeOut = 0.5f, RectTransform = {
                    AnchorMin = "1 0", AnchorMax = "1 0", OffsetMin = "-250 0", OffsetMax = "-200 26"
                }
                , Text = {
                    FadeIn = 0.5f, Text = $"{Messages}", Align = TextAnchor.MiddleRight, Font = "robotocondensed-regular.ttf", FontSize = 13, Color = "1 1 1 0.4"
                }
            }
            , ".GUIProgress", ".Message", ".Message");
            CuiHelper.AddUi(player, container);
            timer.Once(2.5f, () => {
                CuiHelper.DestroyUi(player, ".Message");
            }
            );
        }
        private void OnPluginUnloaded(Plugin name) {
            if(name.Title == "Better Chat" && config.Setting.ChatPrefix) Subscribe(nameof(OnPlayerChat));
        }
        private void OnPluginLoaded(Plugin name) {
            if(name.Title == "Better Chat") Unsubscribe(nameof(OnPlayerChat));
        }
        [ConsoleCommand("level")]
        private void ccmdOpenMenu(ConsoleSystem.Arg arg) {
            BasePlayer player = arg.Player();
            Effect x = new Effect("assets/bundled/prefabs/fx/notice/loot.drag.grab.fx.prefab", player, 0, new Vector3(), new Vector3());
            switch (arg.Args[0].ToLower()) {
                case "page_lvl" : {
                    int Page = int.Parse(arg.Args[2]);
                    switch (arg.Args[1]) {
                        case "next" : {
                            RewardMenu(player, Page + 1);
                            break;
                        }
                        case "back" : {
                            RewardMenu(player, Page - 1);
                            break;
                        }
                    }
                    break;
                }
                case "page_inv" : {
                    int Page = int.Parse(arg.Args[2]);
                    switch (arg.Args[1]) {
                        case "next" : {
                            InventoryRewardMenu(player, Page + 1);
                            break;
                        }
                        case "back" : {
                            InventoryRewardMenu(player, Page - 1);
                            break;
                        }
                    }
                    break;
                }
                case "exchangeinfo" : {
                    if(!config.Setting.CouponsValide) return;
                    ExchangeInfo(player);
                    break;
                }
                case "exchange" : {
                    if(!config.Setting.CouponsValide) return;
                    CouponExchange(player, int.Parse(arg.Args[1]));
                    break;
                }
                case "info" : {
                    Info(player);
                    break;
                }
                case "inventory" : {
                    InventoryRewardMenu(player);
                    break;
                }
                case "top" : {
                    if(permission.UserHasPermission(player.UserIDString, permTop)) Top(player);
                    break;
                }
            }
            EffectNetwork.Send(x, player.Connection);
        }
        private void OnLootEntityEnd(BasePlayer player, NPCVendingMachine machine) {
            if(config.Vending.VendingUse) {
                CuiHelper.DestroyUi(player, ".Level_Overlay");
                CuiHelper.DestroyUi(player, ".Button");
            }
        }
        [ConsoleCommand("x_levels")]
        private void ccmdMenuOpen(ConsoleSystem.Arg arg) {
            BasePlayer player = arg.Player();
            GUIOpen(player);
        }
        private void RewardMenuFon(BasePlayer player) {
            CuiElementContainer container = new CuiElementContainer();
            bool couponsvalide = config.Setting.CouponsValide;
            bool vipvalide = config.Setting.VIPValide;
            var colorO = config.GUI.ColorBackgroundO;
            var colorT = config.GUI.ColorBackgroundT;
            container.Add(new CuiPanel {
                CursorEnabled = true, RectTransform = {
                    AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-532.5 -140", OffsetMax = "532.5 150"
                }
                , Image = {
                    Color = colorO, Material = "assets/icons/greyout.mat"
                }
            }
            , "Overlay", ".Level_Overlay", ".Level_Overlay");
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "5 5", OffsetMax = "-5 -5"
                }
                , Image = {
                    Color = colorT
                }
            }
            , ".Level_Overlay", ".LevelO_Overlay");
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-532.5 -105", OffsetMax = "532.5 -100"
                }
                , Image = {
                    Color = colorO, Material = "assets/content/ui/uibackgroundblur.mat"
                }
            }
            , ".LevelO_Overlay");
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = vipvalide ? "-132.5 -140" : "-327.5 -140", OffsetMax = vipvalide ? "-127.5 -105" : "-322.5 -105"
                }
                , Image = {
                    Color = colorO, Material = "assets/content/ui/uibackgroundblur.mat"
                }
            }
            , ".LevelO_Overlay");
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "327.5 -140", OffsetMax = "332.5 -105"
                }
                , Image = {
                    Color = colorO, Material = "assets/content/ui/uibackgroundblur.mat"
                }
            }
            , ".LevelO_Overlay");
            container.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "0 0", OffsetMin = "5 5", OffsetMax = "195 30"
                }
                , Button = {
                    Color = "0.35 0.45 0.25 1", Command = "level inventory"
                }
                , Text = {
                    Text = lang.GetMessage("OPENINV", this, player.UserIDString), Align = TextAnchor.MiddleCenter, FontSize = 16, Font = "robotocondensed-regular.ttf", Color = "0.75 0.95 0.41 1"
                }
            }
            , ".LevelO_Overlay");
            bool permvip = permission.UserHasPermission(player.UserIDString, permVip);
            bool permtop = permission.UserHasPermission(player.UserIDString, permTop);
            if(vipvalide) if(permvip) container.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "0 0", OffsetMin = "200 5", OffsetMax = "390 30"
                }
                , Button = {
                    Color = "0.35 0.45 0.25 1"
                }
                , Text = {
                    Text = lang.GetMessage("VIPYES", this, player.UserIDString), Align = TextAnchor.MiddleCenter, FontSize = 16, Font = "robotocondensed-regular.ttf", Color = "0.75 0.95 0.41 1"
                }
            }
            , ".LevelO_Overlay");
            else container.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "0 0", OffsetMin = "200 5", OffsetMax = "390 30"
                }
                , Button = {
                    Color = "0.65 0.29 0.24 1"
                }
                , Text = {
                    Text = lang.GetMessage("VIPNO", this, player.UserIDString), Align = TextAnchor.MiddleCenter, FontSize = 16, Font = "robotocondensed-regular.ttf", Color = "0.92 0.79 0.76 1"
                }
            }
            , ".LevelO_Overlay");
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-375 150", OffsetMax = "375 210"
                }
                , Image = {
                    Color = colorO, Material = "assets/icons/greyout.mat"
                }
            }
            , ".Level_Overlay", ".Title");
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "5 5", OffsetMax = "-5 -5"
                }
                , Image = {
                    Color = colorT
                }
            }
            , ".Title", ".T_Title");
            container.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-365 -20", OffsetMax = "-325 20"
                }
                , Button = {
                    Color = "1 1 1 0.75", Sprite = "assets/icons/warning.png", Command = "level info"
                }
                , Text = {
                    Text = ""
                }
            }
            , ".T_Title");
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-320 -25", OffsetMax = "-315 25"
                }
                , Image = {
                    Color = colorO, Material = "assets/content/ui/uibackgroundblur.mat"
                }
            }
            , ".T_Title");
            if(couponsvalide) {
                container.Add(new CuiButton {
                    RectTransform = {
                        AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-310 -20", OffsetMax = "-270 20"
                    }
                    , Button = {
                        Color = "1 1 1 0.75", Sprite = "assets/icons/refresh.png", Command = "level exchangeinfo"
                    }
                    , Text = {
                        Text = ""
                    }
                }
                , ".T_Title");
                container.Add(new CuiPanel {
                    RectTransform = {
                        AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-265 -25", OffsetMax = "-260 25"
                    }
                    , Image = {
                        Color = colorO, Material = "assets/content/ui/uibackgroundblur.mat"
                    }
                }
                , ".T_Title");
            }
            container.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "325 -20", OffsetMax = "365 20"
                }
                , Button = {
                    Color = "1 1 1 0.75", Sprite = "assets/icons/close.png", Close = ".Level_Overlay"
                }
                , Text = {
                    Text = ""
                }
            }
            , ".T_Title");
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "315 -25", OffsetMax = "320 25"
                }
                , Image = {
                    Color = colorO, Material = "assets/content/ui/uibackgroundblur.mat"
                }
            }
            , ".T_Title");
            if(permtop) {
                container.Add(new CuiButton {
                    RectTransform = {
                        AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "270 -20", OffsetMax = "310 20"
                    }
                    , Button = {
                        Color = "1 1 1 0.75", Sprite = "assets/icons/community_servers.png", Command = "level top"
                    }
                    , Text = {
                        Text = ""
                    }
                }
                , ".T_Title");
                container.Add(new CuiPanel {
                    RectTransform = {
                        AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "260 -25", OffsetMax = "265 25"
                    }
                    , Image = {
                        Color = colorO, Material = "assets/content/ui/uibackgroundblur.mat"
                    }
                }
                , ".T_Title");
            }
            container.Add(new CuiLabel {
                RectTransform = {
                    AnchorMin = "0.5 0", AnchorMax = "0.5 1", OffsetMin = couponsvalide ? "-260 0" : "-315 0", OffsetMax = permtop ? "260 0" : "315 0"
                }
                , Text = {
                    Text = lang.GetMessage("LevelTitle", this, player.UserIDString), Align = TextAnchor.MiddleCenter, FontSize = 18, Color = "1 1 1 0.75"
                }
            }
            , ".T_Title");
            CuiHelper.AddUi(player, container);
            RewardMenu(player);
        }
        protected override void SaveConfig() => Config.WriteObject(config);
        private void OnServerInitialized() {
            PrintWarning("\n-----------------------------\n" + "     Author - https://discord.gg/jPz48g7XXY\n" + "     VK - https://discord.gg/jPz48g7XXY\n" + "     Discord - https://discord.gg/jPz48g7XXY\n" + "     \n" + "-----------------------------");
            InitializeLang();
            if(BetterChat || !config.Setting.ChatPrefix) Unsubscribe(nameof(OnPlayerChat));
            foreach(var i in config.Award) {
                var award = i.Value;
                string imgName = award.Shortname + award.SkinID;
                if(award.URLImage != String.Empty) ImageLibrary.Call("AddImage", award.URLImage, imgName + 151);
                else if(award.SkinID != 0) ImageLibrary.Call("AddImage", $"http://api.skyplugins.ru/api/getskin/{award.SkinID}/{150}", imgName + 150);
                else ImageLibrary.Call("AddImage", $"http://api.skyplugins.ru/api/getimage/{award.Shortname}/{150}", imgName + 150);
            }
            foreach(var i in config.AwardVip) {
                var award = i.Value;
                string imgName = award.Shortname + award.SkinID;
                if(award.URLImage != String.Empty) ImageLibrary.Call("AddImage", award.URLImage, imgName + 151);
                else if(award.SkinID != 0) ImageLibrary.Call("AddImage", $"http://api.skyplugins.ru/api/getskin/{award.SkinID}/{150}", imgName + 150);
                else ImageLibrary.Call("AddImage", $"http://api.skyplugins.ru/api/getimage/{award.Shortname}/{150}", imgName + 150);
            }
            foreach(var i in config.Coupon) ImageLibrary.Call("AddImage", $"http://api.skyplugins.ru/api/getskin/{i.SkinID}/{150}", i.SkinID.ToString());
            if(Interface.Oxide.DataFileSystem.ExistsDatafile("XDataSystem/XLevels/XLevels")) StoredData = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<ulong, XLevelsData>>("XDataSystem/XLevels/XLevels");
            BasePlayer.activePlayerList.ToList().ForEach(OnPlayerConnected);
            timer.Every(90, () => {
                if(StoredData != null) Interface.Oxide.DataFileSystem.WriteObject("XDataSystem/XLevels/XLevels", StoredData);
                BasePlayer.activePlayerList.ToList().ForEach(SaveData);
            }
            ).Callback();
            foreach(string command in config.Setting.CommandList) cmd.AddChatCommand(command, this, cmdMenuOpen);
            permission.RegisterPermission(permVip, this);
            permission.RegisterPermission(permTop, this);
            foreach(var perm in config.XPRate.XPRatePermisssion) permission.RegisterPermission(perm.Key, this);
            foreach(var perm in config.Online.Permisssion) permission.RegisterPermission(perm.Key, this);
            if(config.Online.OnlineXP) timer.Every(config.Online.TimeXP, () => BasePlayer.activePlayerList.ToList().ForEach(OGiveXP));
        }
        private void Info(BasePlayer player) {
            CuiHelper.DestroyUi(player, ".ExchangeInfo");
            CuiHelper.DestroyUi(player, ".Top");
            CuiElementContainer container = new CuiElementContainer();
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0"
                }
                , Image = {
                    Color = "0.21 0.22 0.20 1", Material = "assets/content/ui/uibackgroundblur.mat"
                }
            }
            , ".LevelO_Overlay", ".Info", ".Info");
            container.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0"
                }
                , Button = {
                    Color = "0 0 0 0", Close = ".Info"
                }
                , Text = {
                    Text = ""
                }
            }
            , ".Info");
            container.Add(new CuiLabel {
                RectTransform = {
                    AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-225 -75", OffsetMax = "225 75"
                }
                , Text = {
                    Text = lang.GetMessage("Info", this, player.UserIDString), Align = TextAnchor.MiddleCenter, Font = "robotocondensed-regular.ttf", FontSize = 22, Color = "1 1 1 0.5"
                }
            }
            , ".Info");
            CuiHelper.AddUi(player, container);
        }
        private string API_GetPlayerPrefix(BasePlayer player) => GetPlayerPrefix(player.userID);
        private object OnBetterChat(Dictionary<string, object> chat) {
            IPlayer player = chat["Player"] as IPlayer;
            string prefix = GetPlayerPrefix(Convert.ToUInt64(player.Id));
            if(!config.Setting.ChatPrefix || String.IsNullOrEmpty(prefix)) return chat;
            string name = $"{prefix} " + chat["Username"];
            chat["Username"] = name;
            return chat;
        }
        private class LevelConfig {
            [JsonProperty(LanguageEnglish ? "Coupons for XP" : "Купоны на ХР")]
            public List<Coupons> Coupon;
            [JsonProperty(LanguageEnglish ? "VIP level reward" : "Вип награда за уровни")]
            public Dictionary<int, Awards> AwardVip;
            internal class OnlineSetting {
                [JsonProperty(LanguageEnglish ? "Enable issuing XP to online players" : "Включить выдачу XP онлайн игрокам")]
                public bool OnlineXP;
                [JsonProperty(LanguageEnglish ? "XP issue interval (in sec.)" : "Интервал выдачи XP (в сек.)")]
                public float TimeXP;
                [JsonProperty(LanguageEnglish ? "Setting up permissions.[ Permission | XP ]" : "Настройка пермишенов.[ Пермишен | XP ]")]
                public Dictionary<string, float> Permisssion;
            }
            [JsonProperty(LanguageEnglish ? "Issuing XP for online" : "Выдача XP за онлайн")]
            public OnlineSetting Online = new OnlineSetting();
            internal class GUISetting {
                [JsonProperty("AnchorMin")]
                public string AnchorMin;
                [JsonProperty("AnchorMax")]
                public string AnchorMax;
                [JsonProperty("OffsetMin")]
                public string OffsetMin;
                [JsonProperty("OffsetMax")]
                public string OffsetMax;
                [JsonProperty(LanguageEnglish ? "Show mini-bar" : "Отображать мини-панель")]
                public bool EnablePanel;
                [JsonProperty(LanguageEnglish ? "Color background_1" : "Цвет фона_1")]
                public string ColorBackgroundO = "";
                [JsonProperty(LanguageEnglish ? "Color background_2" : "Цвет фона_2")]
                public string ColorBackgroundT = "";
                [JsonProperty(LanguageEnglish ? "Display reward container - [ True - Only when there is a reward in the level | False - Always ]" : "Отображать контейнер наград - [ True - Только когда есть награда на уровне | False - Всегда ]")]
                public bool ContainerReward;
                [JsonProperty(LanguageEnglish ? "Display required reward level" : "Отображать требуемый уровень наград")]
                public bool RewardNumber;
                [JsonProperty(LanguageEnglish ? "Display required VIP reward level" : "Отображать требуемый уровень ВИП наград")]
                public bool RewardNumberVIP;
            }
            [JsonProperty(LanguageEnglish ? "XP multiplier" : "Множитель XP")]
            public XPRateSetting XPRate = new XPRateSetting();
            [JsonProperty(LanguageEnglish ? "Vendings settings" : "Настройки магазинов")]
            public VendingSetting Vending = new VendingSetting();
            internal class XPSetting {
                [JsonProperty(LanguageEnglish ? "XP for the pickup of resources" : "ХР за подбор ресурсов")]
                public Dictionary<string, float> PickupXP;
                [JsonProperty(LanguageEnglish ? "XP for harvest" : "ХР за сбор урожая")]
                public Dictionary<string, float> HarvestXP;
                [JsonProperty(LanguageEnglish ? "XP for bonus resources" : "ХР за бонусную добычу")]
                public Dictionary<string, float> GatherBonusXP;
                [JsonProperty(LanguageEnglish ? "XP for kill / destroy barrel" : "ХР за убийство / разбитие бочек")]
                public Dictionary<string, float> KillXP;
                [JsonProperty(LanguageEnglish ? "XP for opening crates" : "ХР за открытие ящиков")]
                public Dictionary<string, float> CrateXP;
            }
            [JsonProperty(LanguageEnglish ? "Settings levels" : "Настройка уровней")]
            public LevelSetting Level = new LevelSetting();
            internal class VendingSetting {
                [JsonProperty(LanguageEnglish ? "Open the level menu.[ True - Immediately after the opening of the NPC shop | False - UI button ]" : "Открывать меню уровней.[ True - Сразу после открытия НПС магазина | False - Через UI кнопку ]")]
                public bool VendingOpen;
                [JsonProperty(LanguageEnglish ? "Access to the level menu is only through the NPC shops.[ True - NPC shop | False - Command ]" : "Доступ к меню уровней только через магазины НПС.[ True - Магазины НПС | False - Команда ]")]
                public bool VendingUse;
                [JsonProperty(LanguageEnglish ? "List of NPC shops in which you can open the level menu (shop name)" : "Список магазинов НПС в которых можно открыть меню уровней (Имя магазина)")]
                public List<string> ListNPCVending;
            }
            internal class Coupons {
                [JsonProperty(LanguageEnglish ? "Coupon name" : "Имя купона")]
                public string Name;
                [JsonProperty(LanguageEnglish ? "Coupon text" : "Текст купона")]
                public string Text;
                [JsonProperty(LanguageEnglish ? "Coupon skin" : "Скин купона")]
                public ulong SkinID;
                [JsonProperty(LanguageEnglish ? "XP amount" : "Кол-во ХР")]
                public int XP;
                [JsonProperty(LanguageEnglish ? "Setting the chance of falling out of crates/barrels" : "Настройка шанса выпадения из ящиков/бочек")]
                public List<Crates> Crate;
                public Coupons(string name, string text, ulong skinid, int xp, List<Crates> crates) {
                    Name = name;
                    Text = text;
                    SkinID = skinid;
                    XP = xp;
                    Crate = crates;
                }
            }
            [JsonProperty(LanguageEnglish ? "General settings" : "Общие настройки")]
            public GeneralSetting Setting = new GeneralSetting();
            internal class GeneralSetting {
                [JsonProperty(LanguageEnglish ? "List of commands to open the menu" : "Список команд для открытия меню")]
                public List<string> CommandList;
                [JsonProperty(LanguageEnglish ? "XP for the pickup of resources" : "Зачислять ХР за подбор ресурсов")]
                public bool PickupValide;
                [JsonProperty(LanguageEnglish ? "Display the level in prefix" : "Отображать уровень в префиксе")]
                public bool ChatPrefixLevel;
                [JsonProperty(LanguageEnglish ? "XP for opening crates" : "Зачислять ХР за открытие ящиков")]
                public bool CrateValide;
                [JsonProperty(LanguageEnglish ? "List of available ranks - [ Level - Rank ] ( If the list is empty, then the rank will not be displayed in the menu )" : "Список доступных рангов - [ Уровень - Ранг ] ( Если список пуст, то ранг не будет отображаться в меню )")]
                public Dictionary<int, string> RankList;
                [JsonProperty(LanguageEnglish ? "XP for kill" : "Зачислять ХР за убийство")]
                public bool KillValide;
                [JsonProperty(LanguageEnglish ? "Display the rank in prefix" : "Отображать ранг в префиксе")]
                public bool ChatPrefixRank;
                [JsonProperty(LanguageEnglish ? "Include messages of received rewards in chat" : "Включить сообщения полученных  наград в чат")]
                public bool ChatTakeMessages;
                [JsonProperty(LanguageEnglish ? "Enable prefix in chat - [ Set to False if the prefix should be disabled or the prefix is used by a third party chat plugin ]" : "Включить префикс в чате - [ Установите False, если префикс нужно отключить или префикс используется сторонним плагином для чата ]")]
                public bool ChatPrefix;
                [JsonProperty(LanguageEnglish ? "There is a plugin for custom loot" : "Есть плагин на кастомный лут")]
                public bool PluginCLoot;
                [JsonProperty(LanguageEnglish ? "XP for harvest" : "Зачислять ХР за сбор урожая")]
                public bool HarvestValide;
                [JsonProperty(LanguageEnglish ? "Reset the level and XP of the player after reaching the maximum level - [ Players will re-open levels and receive rewards ]" : "Обнулять уровень и ХР игрока после достижения максимального уровня - [ Игроки повторно будет открывать уровни и получать награды ]")]
                public bool ClearAll;
                [JsonProperty(LanguageEnglish ? "Profile SteamID for custom avatar" : "SteamID профиля для кастомной аватарки")]
                public ulong SteamID;
                [JsonProperty(LanguageEnglish ? "Take VIP Reward - [ True - take only with permission | False - take at any time without permission ]" : "Забрать ВИП награду - [ True - забрать только с пермишеном | False - забрать в любое время без пермишена ]")]
                public bool TakeReward;
                [JsonProperty(LanguageEnglish ? "Get VIP reward - [ True - only with permission | False - without permission ]" : "Получить ВИП награду - [ True - только с пермишеном | False - без пермишена ]")]
                public bool MoveReward;
                [JsonProperty(LanguageEnglish ? "Enable VIP rewards" : "Включить ВИП награды")]
                public bool VIPValide;
                [JsonProperty(LanguageEnglish ? "XP for bonus resources" : "Зачислять ХР за бонусные ресурсы")]
                public bool BonusValide;
                [JsonProperty(LanguageEnglish ? "Include level up messages in chat" : "Включить сообщения повышения уровня в чат")]
                public bool ChatLevelMessages;
                [JsonProperty(LanguageEnglish ? "Exchange coupons if you have already reached the maximum level - [ Suitable for top players ]" : "Обменивать купоны если уже достигнут максимальный уровень - [ Подходит для топа игроков ]")]
                public bool GiveXPCoupon;
                [JsonProperty(LanguageEnglish ? "Add XP if the maximum level is already reached - [ Suitable for top players ]" : "Засчитывать ХР если уже достигнут максимальный уровень - [ Подходит для топа игроков ]")]
                public bool GiveXP;
                [JsonProperty(LanguageEnglish ? "Enable coupons" : "Включить купоны")]
                public bool CouponsValide;
            }
            [JsonProperty(LanguageEnglish ? "XP settings | Shortname : ValueXP" : "Настройка ХР | Shortname : ValueXP")]
            public XPSetting XP = new XPSetting();
            [JsonProperty(LanguageEnglish ? "Level reward" : "Награда за уровни")]
            public Dictionary<int, Awards> Award;
            public static LevelConfig GetNewConfiguration() {
                return new LevelConfig {
                    Setting = new GeneralSetting {
                        PickupValide = true, HarvestValide = true, BonusValide = true, KillValide = true, CrateValide = true, ChatTakeMessages = true, ChatLevelMessages = true, CouponsValide = true, VIPValide = true, MoveReward = true, TakeReward = true, GiveXP = false, GiveXPCoupon = false, ClearAll = false, PluginCLoot = false, SteamID = 0, CommandList = new List<string> {
                            "level", "lvl", "pass"
                        }
                        , ChatPrefix = true, ChatPrefixLevel = true, ChatPrefixRank = true, RankList = LanguageEnglish ? new Dictionary<int, string> {
                            [0]
                            = "CAP-Х", [1] = "IRON-1", [2] = "IRON-2", [3] = "IRON-3", [4] = "BRONZE-1", [5] = "BRONZE-2", [6] = "BRONZE-3", [7] = "SILVER-1", [8] = "SILVER-2", [9] = "SILVER-3", [10] = "GOLD-1", [11] = "GOLD-2", [12] = "GOLD-3", [13] = "PLATINUM-1", [14] = "PLATINUM-2", [15] = "PLATINUM-3", [16] = "DIAMOND-1", [17] = "DIAMOND-2", [18] = "DIAMOND-3", [19] = "IMMORTAL-1", [20] = "IMMORTAL-2", [21] = "IMMORTAL-3", [22] = "RADIANT-1", [23] = "RADIANT-2", [24] = "RADIANT-3", [25] = "GOD"
                        }
                        : new Dictionary<int, string> {
                            [0]
                            = "КЕПКА-Х", [1] = "ЖЕЛЕЗО-1", [2] = "ЖЕЛЕЗО-2", [3] = "ЖЕЛЕЗО-3", [4] = "БРОНЗА-1", [5] = "БРОНЗА-2", [6] = "БРОНЗА-3", [7] = "СЕРЕБРО-1", [8] = "СЕРЕБРО-2", [9] = "СЕРЕБРО-3", [10] = "ЗОЛОТО-1", [11] = "ЗОЛОТО-2", [12] = "ЗОЛОТО-3", [13] = "ПЛАТИНА-1", [14] = "ПЛАТИНА-2", [15] = "ПЛАТИНА-3", [16] = "АЛМАЗ-1", [17] = "АЛМАЗ-2", [18] = "АЛМАЗ-3", [19] = "БЕССМЕРТНЫЙ-1", [20] = "БЕССМЕРТНЫЙ-2", [21] = "БЕССМЕРТНЫЙ-3", [22] = "РАДИАНТ-1", [23] = "РАДИАНТ-2", [24] = "РАДИАНТ-3", [25] = "БОГ"
                        }
                    }
                    , Vending = new VendingSetting {
                        VendingOpen = false, VendingUse = false, ListNPCVending = new List<string> {
                            "Black Market"
                        }
                    }
                    , XPRate = new XPRateSetting {
                        XPRateCoupon = false, XPRatePermisssion = new Dictionary<string, float> {
                            ["xlevels.125p"]
                            = 2.25f, ["xlevels.75p"] = 1.75f, ["xlevels.10p"] = 1.1f
                        }
                    }
                    , Online = new OnlineSetting {
                        OnlineXP = false, TimeXP = 15.0f, Permisssion = new Dictionary<string, float> {
                            ["xlevels.default"]
                            = 5.0f
                        }
                    }
                    , GUI = new GUISetting {
                        AnchorMin = "1 0", AnchorMax = "1 0", OffsetMin = "-403 16", OffsetMax = "-210 42", EnablePanel = true, ColorBackgroundO = "0.51 0.52 0.50 0.95", ColorBackgroundT = "0.21 0.22 0.20 0.95", ContainerReward = false, RewardNumber = true, RewardNumberVIP = true
                    }
                    , Level = new LevelSetting {
                        LevelMax = 25, LevelXP = 100, LevelXPUP = 25
                    }
                    , XP = new XPSetting {
                        PickupXP = new Dictionary<string, float> {
                            ["stones"]
                            = 10.0f, ["sulfur.ore"] = 15.0f, ["metal.ore"] = 12.5f
                        }
                        , HarvestXP = new Dictionary<string, float> {
                            ["potato.entity"]
                            = 2.5f, ["corn.entity"] = 1.75f, ["hemp.emtity"] = 0.25f
                        }
                        , GatherBonusXP = new Dictionary<string, float> {
                            ["stones"]
                            = 5.0f, ["sulfur.ore"] = 10.0f, ["metal.ore"] = 7.5f
                        }
                        , KillXP = new Dictionary<string, float> {
                            ["boar"]
                            = 10.0f, ["loot-barrel-1"] = 7.5f, ["heavyscientist"] = 2.5f
                        }
                        , CrateXP = new Dictionary<string, float> {
                            ["crate_normal"]
                            = 5.0f, ["crate_normal_2"] = 1.0f, ["crate_tools"] = 3.5f
                        }
                    }
                    , Coupon = LanguageEnglish ? new List<Coupons> {
                        new Coupons("Coupon 5ХР", "Coupon for 5ХР\n\nExchange them and get XP to level up!\n\nCommand for exchange - /level", 2925118427, 5, new List<Crates> {
                            new Crates("crate_normal_2", 50.0f, 1, 3)
                        }
                        ), new Coupons("Coupon 10ХР", "Coupon for 10ХР\n\nExchange them and get XP to level up!\n\nCommand for exchange - /level", 2925118536, 10, new List<Crates> {
                            new Crates("crate_normal_2", 50.0f, 1, 3)
                        }
                        ), new Coupons("Coupon 25ХР", "Coupon for 25ХР\n\nExchange them and get XP to level up!\n\nCommand for exchange - /level", 2925118910, 25, new List<Crates> {
                            new Crates("crate_normal_2", 50.0f, 1, 2)
                        }
                        ), new Coupons("Coupon 50ХР", "Coupon for 50ХР\n\nExchange them and get XP to level up!\n\nCommand for exchange - /level", 2925119087, 50, new List<Crates> {
                            new Crates("crate_normal_2", 50.0f, 1, 2)
                        }
                        ), new Coupons("Coupon 100ХР", "Coupon for 100ХР\n\nExchange them and get XP to level up!\n\nCommand for exchange - /level", 2925119157, 100, new List<Crates> {
                            new Crates("crate_normal_2", 50.0f, 1, 1)
                        }
                        ), new Coupons("Coupon 200ХР", "Coupon for 200ХР\n\nExchange them and get XP to level up!\n\nCommand for exchange - /level", 2925119248, 200, new List<Crates> {
                            new Crates("crate_normal_2", 50.0f, 1, 1)
                        }
                        ), new Coupons("Coupon 500ХР", "Coupon for 500ХР\n\nExchange them and get XP to level up!\n\nCommand for exchange - /level", 2925119644, 500, new List<Crates> {
                            new Crates("crate_normal_2", 50.0f, 1, 1)
                        }
                        )
                    }
                    : new List<Coupons> {
                        new Coupons("Купон 5ХР", "Купон на 5ХР\n\nОбменяйте его и получите ХР для повышения уровня!\n\nКоманда для обмена - /level", 2925118427, 5, new List<Crates> {
                            new Crates("crate_normal_2", 50.0f, 1, 3)
                        }
                        ), new Coupons("Купон 10ХР", "Купон на 10ХР\n\nОбменяйте его и получите ХР для повышения уровня!\n\nКоманда для обмена - /level", 2925118536, 10, new List<Crates> {
                            new Crates("crate_normal_2", 50.0f, 1, 3)
                        }
                        ), new Coupons("Купон 25ХР", "Купон на 25ХР\n\nОбменяйте его и получите ХР для повышения уровня!\n\nКоманда для обмена - /level", 2925118910, 25, new List<Crates> {
                            new Crates("crate_normal_2", 50.0f, 1, 2)
                        }
                        ), new Coupons("Купон 50ХР", "Купон на 50ХР\n\nОбменяйте его и получите ХР для повышения уровня!\n\nКоманда для обмена - /level", 2925119087, 50, new List<Crates> {
                            new Crates("crate_normal_2", 50.0f, 1, 2)
                        }
                        ), new Coupons("Купон 100ХР", "Купон на 100ХР\n\nОбменяйте его и получите ХР для повышения уровня!\n\nКоманда для обмена - /level", 2925119157, 100, new List<Crates> {
                            new Crates("crate_normal_2", 50.0f, 1, 1)
                        }
                        ), new Coupons("Купон 200ХР", "Купон на 200ХР\n\nОбменяйте его и получите ХР для повышения уровня!\n\nКоманда для обмена - /level", 2925119248, 200, new List<Crates> {
                            new Crates("crate_normal_2", 50.0f, 1, 1)
                        }
                        ), new Coupons("Купон 500ХР", "Купон на 500ХР\n\nОбменяйте его и получите ХР для повышения уровня!\n\nКоманда для обмена - /level", 2925119644, 500, new List<Crates> {
                            new Crates("crate_normal_2", 50.0f, 1, 1)
                        }
                        )
                    }
                    , Award = new Dictionary<int, Awards> {
                        [1]
                        = new Awards("wood", "Wood", 1250, 0, "", "", false), [2] = new Awards("charcoal", "Charcoal", 1500, 0, "", "", false), [3] = new Awards("metal.ore", "Metal ore", 1000, 0, "", "", false), [4] = new Awards("metal.fragments", "Metal fragments", 750, 0, "", "", false), [5] = new Awards("sulfur.ore", "Sulfur ore", 500, 0, "", "", false), [6] = new Awards("sulfur", "Sulfur", 300, 0, "", "", false), [7] = new Awards("gunpowder", "Gunpowder", 400, 0, "", "", false), [8] = new Awards("hq.metal.ore", "HQM ore", 25, 0, "", "", false), [9] = new Awards("metal.refined", "HQM", 20, 0, "", "", false), [10] = new Awards("scrap", "Scrap", 50, 0, "", "", false)
                    }
                    , AwardVip = new Dictionary<int, Awards> {
                        [1]
                        = new Awards("wood", "Wood", 1250, 0, "", "", false), [2] = new Awards("charcoal", "Charcoal", 1500, 0, "", "", false), [3] = new Awards("metal.ore", "Metal ore", 1000, 0, "", "", false), [4] = new Awards("metal.fragments", "Metal fragments", 750, 0, "", "", false), [5] = new Awards("sulfur.ore", "Sulfur ore", 500, 0, "", "", false), [6] = new Awards("sulfur", "Sulfur", 300, 0, "", "", false), [7] = new Awards("gunpowder", "Gunpowder", 400, 0, "", "", false), [8] = new Awards("hq.metal.ore", "HQM ore", 25, 0, "", "", false), [9] = new Awards("metal.refined", "HQM", 20, 0, "", "", false), [10] = new Awards("scrap", "Scrap", 50, 0, "", "", false)
                    }
                }
                ;
            }
            internal class Crates {
                [JsonProperty(LanguageEnglish ? "Name crate/barrel" : "Имя ящика/бочки")]
                public string NameCrate;
                [JsonProperty(LanguageEnglish ? "Drop chance" : "Шанс выпадения")]
                public float ChanceDrop;
                [JsonProperty(LanguageEnglish ? "Minimum amount of coupons" : "Минимальное количество купона")]
                public int CouponMin;
                [JsonProperty(LanguageEnglish ? "Maximum number of coupons" : "Максимальное количество купона")]
                public int CouponMax;
                public Crates(string namecrate, float chancedrop, int cmin, int cmax) {
                    NameCrate = namecrate;
                    ChanceDrop = chancedrop;
                    CouponMin = cmin;
                    CouponMax = cmax;
                }
            }
            internal class LevelSetting {
                [JsonProperty(LanguageEnglish ? "Maximum level" : "Максимальный уровень")]
                public int LevelMax;
                [JsonProperty(LanguageEnglish ? "Number of XP to upgrade one level" : "Кол-во ХР для повышения одного уровня")]
                public float LevelXP;
                [JsonProperty(LanguageEnglish ? "How much to increase the number of XP with each level" : "На сколько увеличивать кол-во ХР с каждым уровнем")]
                public float LevelXPUP;
            }
            [JsonProperty(LanguageEnglish ? "Mini-bar location / Main menu settings" : "Расположение мини-панели / Настройки главного меню")]
            public GUISetting GUI = new GUISetting();
            internal class XPRateSetting {
                [JsonProperty(LanguageEnglish ? "Enable XP multiplier when exchanging coupons - [ This parameter affects only the multipliers for the exchange of coupons ]" : "Включить множитель XP при обмене купонов - [ Данный параметр влияет только на множители для обмена купонов ]")]
                public bool XPRateCoupon;
                [JsonProperty(LanguageEnglish ? "Setting up permissions for XP multipliers for the exchange of coupons and other actions.[ Permission | XP multiplier ]" : "Настройка пермишенов для умножителей ХР на обмен купонов и других действий.[ Пермишен | Множитель XP ]")]
                public Dictionary<string, float> XPRatePermisssion = new Dictionary<string, float>();
            }
            internal class Awards {
                [JsonProperty(LanguageEnglish ? "Item shortname / custom reward name [ Must not be empty ]" : "Шортнейм предмета / имя кастомной награды [ Не должно быть пустым ]")]
                public string Shortname;
                [JsonProperty(LanguageEnglish ? "Reward display name" : "Отображаемое имя награды")]
                public string Name;
                [JsonProperty(LanguageEnglish ? "Item quantity" : "Количество предмета")]
                public int Amount;
                [JsonProperty(LanguageEnglish ? "Item skin" : "Скин предмета")]
                public ulong SkinID;
                [JsonProperty(LanguageEnglish ? "Command" : "Команда")]
                public string Command;
                [JsonProperty(LanguageEnglish ? "Link to custom image" : "Ссылка на кастомную картинку")]
                public string URLImage;
                [JsonProperty(LanguageEnglish ? "Hide reward - [ Reward will not be displayed until the player reaches this level ]" : "Скрыть награду - [ Награда не будет отображаться пока игрок не достигнет данного уровня ]")]
                public bool Hide;
                public Awards(string shortname, string name, int amount, ulong skinid, string command, string urlimage, bool hide) {
                    Shortname = shortname;
                    Name = name;
                    Amount = amount;
                    SkinID = skinid;
                    Command = command;
                    URLImage = urlimage;
                    Hide = hide;
                }
            }
        }
        private void OnEntityDeath(BaseCombatEntity entity, HitInfo info) {
            if(!config.Setting.KillValide) return;
            if(entity == null) return;
            BasePlayer player = info?.InitiatorPlayer;
            if(player == null || player.IsNpc) return;
            if(config.XP.KillXP.ContainsKey(entity.ShortPrefabName)) XPRateRerm(player, config.XP.KillXP[entity.ShortPrefabName]);
        }
        private int API_GetLevel(BasePlayer player) => StoredData.ContainsKey(player.userID) ? StoredData[player.userID].Level : 0;
        private int API_GetLevel(ulong userID) => StoredData.ContainsKey(userID) ? StoredData[userID].Level : 0;
        private void RewardMenu(BasePlayer player, int Page = 0) {
            CuiElementContainer container = new CuiElementContainer();
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "0 142.5", OffsetMax = "0 0"
                }
                , Image = {
                    Color = "0 0 0 0"
                }
            }
            , ".LevelO_Overlay", ".Pass", ".Pass");
            int count = Page * 10;
            int x = 0, g = 0, z = 0 + count, zvip = 0 + count;
            var data = StoredData[player.userID];
            bool vipvalide = config.Setting.VIPValide;
            for(int i = 1 + count; i <= 10 + count; i++) {
                bool icon = data.Level >= i, contains = config.Award.ContainsKey(i), containerreward = config.GUI.ContainerReward;
                if(!containerreward || containerreward && contains) {
                    container.Add(new CuiPanel {
                        RectTransform = {
                            AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = $"{-475 + (x * 95)} {(vipvalide ? -31.25 : -82.5)}", OffsetMax = $"{-380 + (x * 95)} {(vipvalide ? 63.75 : 12.5)}"
                        }
                        , Image = {
                            Color = "0 0 0 0"
                        }
                    }
                    , ".Pass", ".Award");
                    container.Add(new CuiPanel {
                        RectTransform = {
                            AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "2.5 2.5", OffsetMax = "-2.5 -2.5"
                        }
                        , Image = {
                            Color = "0.41 0.42 0.40 0.95", Material = "assets/content/ui/uibackgroundblur.mat"
                        }
                    }
                    , ".Award", ".Awards");
                    container.Add(new CuiPanel {
                        RectTransform = {
                            AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "45 -10", OffsetMax = "-45 -92.5"
                        }
                        , Image = {
                            Color = "0.41 0.42 0.40 0.95", Material = "assets/content/ui/uibackgroundblur.mat"
                        }
                    }
                    , ".Award");
                    if(contains) {
                        var award = config.Award[i];
                        if(award.Hide && !icon) container.Add(new CuiPanel {
                            RectTransform = {
                                AnchorMin = "0 0", AnchorMax = "1 1", OffsetMin = "7.5 7.5", OffsetMax = "-7.5 -7.5"
                            }
                            , Image = {
                                Color = "0.31 0.32 0.30 0.8", Sprite = "assets/icons/blunt.png"
                            }
                            ,
                        }
                        , ".Awards");
                        else {
                            container.Add(new CuiElement {
                                Parent = ".Awards", Components = {
                                    new CuiRawImageComponent {
                                        Png = (string) ImageLibrary.Call("GetImage", award.Shortname + award.SkinID + (award.URLImage == String.Empty ? 150 : 151))
        
// ... [Code preview truncated due to length. Full source in attached file] ...

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