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

FREE SkipNightUI : 0.1.1 0.1.1

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Game.Rust.Cui;
using Oxide.Core.Plugins;
using UnityEngine;
using System.Linq;
namespace Oxide.Plugins {
    [Info("SkipNightUI", "k1lly0u", "0.1.1", ResourceId = 2506)]
    class SkipNightUI : RustPlugin {
#region Fields
        [PluginReference]
        Plugin ImageLibrary;
        private List<ulong> votesReceived = new List<ulong>();
        private bool voteOpen;
        private bool isWaiting;
        private bool isILReady;
        private int timeRemaining;
        private int requiredVotes;
        private Timer voteTimer;
        private Timer timeMonitor;
#endregion
#region UI
        public class UI {
            static public CuiElementContainer CreateElementContainer(string panelName, string color, string aMin, string aMax, bool useCursor = false) {
                var NewElement = new CuiElementContainer() {
                    {
                        new CuiPanel {
                            Image = {
                                Color = color
                            }
                            , RectTransform = {
                                AnchorMin = aMin, AnchorMax = aMax
                            }
                            , CursorEnabled = useCursor
                        }
                        , new CuiElement().Parent = "Overlay", panelName
                    }
                }
                ;
                return NewElement;
            }
            static public void CreatePanel(ref CuiElementContainer container, string panel, string color, string aMin, string aMax, bool cursor = false) {
                container.Add(new CuiPanel {
                    Image = {
                        Color = color
                    }
                    , RectTransform = {
                        AnchorMin = aMin, AnchorMax = aMax
                    }
                    , CursorEnabled = cursor
                }
                , panel, CuiHelper.GetGuid());
            }
            static public void CreateLabel(ref CuiElementContainer container, string panel, string color, string text, int size, string aMin, string aMax, TextAnchor align = TextAnchor.MiddleCenter) {
                container.Add(new CuiLabel {
                    Text = {
                        Color = color, FontSize = size, Align = align, Text = text
                    }
                    , RectTransform = {
                        AnchorMin = aMin, AnchorMax = aMax
                    }
                }
                , panel, CuiHelper.GetGuid());
            }
            static public void LoadImage(ref CuiElementContainer container, string panel, string png, string aMin, string aMax) {
                container.Add(new CuiElement {
                    Name = CuiHelper.GetGuid(), Parent = panel, Components = {
                        new CuiRawImageComponent {
                            Png = png
                        }
                        , new CuiRectTransformComponent {
                            AnchorMin = aMin, AnchorMax = aMax
                        }
                    }
                }
                );
            }
            public static string Color(string hexColor, float alpha) {
                if (hexColor.StartsWith("#")) hexColor = hexColor.TrimStart('#');
                int red = int.Parse(hexColor.Substring(0, 2), NumberStyles.AllowHexSpecifier);
                int green = int.Parse(hexColor.Substring(2, 2), NumberStyles.AllowHexSpecifier);
                int blue = int.Parse(hexColor.Substring(4, 2), NumberStyles.AllowHexSpecifier);
                return $"{(double)red / 255} {(double)green / 255} {(double)blue / 255} {alpha}";
            }
        }
#endregion
#region UI Creation
        private const string Main = "SNUIMain";
        private void CreateTimeUI() {
            UICreator uiConfig = configData.PanelTypes[configData.UIConfig];
            var element = UI.CreateElementContainer(Main, "0 0 0 0", $"{uiConfig.Size.XMin / 100} {uiConfig.Size.YMin / 100}", $"{uiConfig.Size.XMax / 100} {uiConfig.Size.YMax / 100}");
            foreach (var panel in uiConfig.PanelElements) UI.CreatePanel(ref element, Main, string.IsNullOrEmpty(panel.Color) ? "0 0 0 0" : UI.Color(panel.Color, panel.Alpha), $"{panel.Size.XMin / 100} {panel.Size.YMin / 100}", $"{panel.Size.XMax / 100} {panel.Size.YMax / 100}");
            foreach (var image in uiConfig.ImageElements) {
                string imageId = GetImage(image.URL);
                UI.LoadImage(ref element, Main, imageId, $"{image.Size.XMin / 100} {image.Size.YMin / 100}", $"{image.Size.XMax / 100} {image.Size.YMax / 100}");
            }
            foreach (var label in uiConfig.TextElements) {
                string text = label.Text.Text;
                if (!string.IsNullOrEmpty(label.Text.Color)) text = $"<color={label.Text.Color}>{text}</color>";
                UI.CreateLabel(ref element, Main, "", text, label.Text.Size, $"{label.Size.XMin / 100} {label.Size.YMin / 100}", $"{label.Size.XMax / 100} {label.Size.YMax / 100}", ParseAnchor(label.Text.Alignment));
            }
            var percentVotes = System.Convert.ToDouble((float)votesReceived.Count / (float)requiredVotes);
            var percentTime = System.Convert.ToDouble((float)timeRemaining / (float)configData.Options.Duration);
            var time = GetFormatTime();
            foreach(var bar in uiConfig.VoteProgress) {
                switch (ParseType(bar.Type)) {
                    case ProgressType.Solid : {
                        var yMaxVotes = (bar.Size.XMin / 100) + (((bar.Size.XMax - bar.Size.XMin) / 100) * percentVotes);
                        UI.CreatePanel(ref element, Main, string.IsNullOrEmpty(bar.Color) ? "0 0 0 0" : UI.Color(bar.Color, bar.Alpha), $"{bar.Size.XMin / 100} {bar.Size.YMin / 100}", $"{yMaxVotes} {bar.Size.YMax / 100}");
                    }
                    break;
                    case ProgressType.Graphic : {
                        var yMaxVotes = (bar.Size.XMin / 100) + (((bar.Size.XMax - bar.Size.XMin) / 100) * percentVotes);
                        string imageId = GetImage(bar.URL);
                        UI.LoadImage(ref element, Main, imageId, $"{bar.Size.XMin / 100} {bar.Size.YMin / 100}", $"{yMaxVotes} {bar.Size.YMax / 100}");
                    }
                    break;
                    case ProgressType.Text : UI.CreateLabel(ref element, Main, "", bar.Text.Text.Replace("{currentAmount}", votesReceived.Count().ToString()).Replace("{requiredAmount}", requiredVotes.ToString()), bar.Text.Size, $"{bar.Size.XMin / 100} {bar.Size.YMin / 100}", $"{bar.Size.XMax / 100} {bar.Size.YMax / 100}", ParseAnchor(bar.Text.Alignment));
                    break;
                    default : break;
                }
            }
            foreach (var bar in uiConfig.TimeProgress) {
                switch (ParseType(bar.Type)) {
                    case ProgressType.Solid : {
                        var yMaxRemaining = ((bar.Size.XMax / 100) * percentTime);
                        UI.CreatePanel(ref element, Main, string.IsNullOrEmpty(bar.Color) ? "0 0 0 0" : UI.Color(bar.Color, bar.Alpha), $"{bar.Size.XMin / 100} {bar.Size.YMin / 100}", $"{yMaxRemaining} {bar.Size.YMax / 100}");
                    }
                    break;
                    case ProgressType.Graphic : {
                        var yMaxRemaining = ((bar.Size.XMax / 100) * percentTime);
                        string imageId = GetImage(bar.URL);
                        UI.LoadImage(ref element, Main, imageId, $"{bar.Size.XMin / 100} {bar.Size.YMin / 100}", $"{yMaxRemaining} {bar.Size.YMax / 100}");
                    }
                    break;
                    case ProgressType.Text : if (!string.IsNullOrEmpty(bar.Text.Color)) time = $"<color={bar.Text.Color}>{time}</color>";
                    UI.CreateLabel(ref element, Main, "", time, bar.Text.Size, $"{bar.Size.XMin / 100} {bar.Size.YMin / 100}", $"{bar.Size.XMax / 100} {bar.Size.YMax / 100}", ParseAnchor(bar.Text.Alignment));
                    break;
                    default : break;
                }
            }
            foreach (var player in BasePlayer.activePlayerList) {
                CuiHelper.DestroyUi(player, Main);
                CuiHelper.AddUi(player, element);
            }
        }
        private void RefreshAllUI() {
            if (voteOpen) CreateTimeUI();
            else {
                foreach (var player in BasePlayer.activePlayerList) {
                    CuiHelper.DestroyUi(player, Main);
                }
            }
        }
#endregion
#region Oxide Hooks
        void Loaded() {
            lang.RegisterMessages(Messages, this);
            permission.RegisterPermission("skipnightui.admin", this);
        }
        void OnServerInitialized() {
            LoadVariables();
            votesReceived = new List<ulong>();
            requiredVotes = 0;
            voteOpen = false;
            timeRemaining = 0;
            LoadImages();
        }
        void OnPlayerDisconnected(BasePlayer player) => CuiHelper.DestroyUi(player, Main);
        void Unload() {
            if (voteTimer != null) voteTimer.Destroy();
            foreach (var player in BasePlayer.activePlayerList) CuiHelper.DestroyUi(player, Main);
        }
#endregion
#region Functions
        private void OpenVote() {
            var required = BasePlayer.activePlayerList.Count * (configData.Options.Percentage / 100);
            if (required < 1) required = 1;
            requiredVotes = Convert.ToInt32(required);
            voteOpen = true;
            Print("commandSyn");
            VoteTimer();
        }
        private void VoteTimer() {
            timeRemaining = configData.Options.Duration;
            voteTimer = timer.Repeat(1, timeRemaining, () => {
                RefreshAllUI();
                timeRemaining--;
                switch (timeRemaining) {
                    case 0 : TallyVotes();
                    return;
                    case 240 : case 180 : case 120 : case 60 : case 30 : MessageAll();
                    break;
                    default : break;
                }
            }
            );
        }
        private void MessageAll() {
            foreach (var player in BasePlayer.activePlayerList) {
                if (player != null) {
                    if (!AlreadyVoted(player)) Reply(player, "commandSyn");
                }
            }
        }
        private string GetFormatTime() {
            var time = timeRemaining;
            double minutes = Math.Floor((double)(time / 60));
            time -= (int)(minutes * 60);
            return string.Format("{0:00}:{1:00}", minutes, time);
        }
        private void CheckTime() {
            if (!voteOpen) {
                if (isWaiting) {
                    timeMonitor = timer.Once(20, () => CheckTime());
                    return;
                }
                if ((TOD_Sky.Instance.Cycle.Hour >= configData.Options.Open && TOD_Sky.Instance.Cycle.Hour < 24) || (TOD_Sky.Instance.Cycle.Hour >= 0 && TOD_Sky.Instance.Cycle.Hour < configData.Options.Set)) OpenVote();
                else timeMonitor = timer.Once(20, () => CheckTime());
            }
            else {
                if (TOD_Sky.Instance.Cycle.Hour >= configData.Options.Set && TOD_Sky.Instance.Cycle.Hour < configData.Options.Open) VoteEnd(false);
            }
        }
        private void TallyVotes() {
            if (votesReceived.Count >= requiredVotes) VoteEnd(true);
            else VoteEnd(false);
        }
        private void VoteEnd(bool success) {
            foreach (var player in BasePlayer.activePlayerList) CuiHelper.DestroyUi(player, Main);
            voteOpen = false;
            requiredVotes = 0;
            voteTimer.Destroy();
            votesReceived.Clear();
            timeRemaining = 0;
            if (success) {
                TOD_Sky.Instance.Cycle.Hour = configData.Options.Set;
                Print("votingSuccessful");
            }
            else Print("votingUnsuccessful");
            isWaiting = true;
            timer.In(600, () => isWaiting = false);
            CheckTime();
        }
        private bool AlreadyVoted(BasePlayer player) => votesReceived.Contains(player.userID);
        private void AddImage(string fileName) {
            var url = fileName;
            if (!url.StartsWith("http") && !url.StartsWith("www")) url = $"file://{Interface.Oxide.DataDirectory}{Path.DirectorySeparatorChar}SkipNightUI{Path.DirectorySeparatorChar}Images{Path.DirectorySeparatorChar}{fileName}.png";
            ImageLibrary?.Call("AddImage", url, fileName, 0);
        }
        private string GetImage(string fileName, ulong skin = 0) {
            string imageId = (string)ImageLibrary.Call("GetImage", fileName, skin);
            if (!string.IsNullOrEmpty(imageId)) return imageId;
            return string.Empty;
        }
        private void LoadImages() {
            if (string.IsNullOrEmpty(configData.UIConfig)) {
                PrintError("You must set the \"UI Configuration Name\" in your config.Unable to continue!");
                Interface.Oxide.UnloadPlugin(Title);
                return;
            }
            if (!configData.PanelTypes.ContainsKey(configData.UIConfig)) {
                PrintError("Invalid \"UI Configuration Name\" set in your config.Unable to continue!");
                Interface.Oxide.UnloadPlugin(Title);
                return;
            }
            Dictionary<string, string> newLoadOrder = new Dictionary<string, string>();
            UICreator uiConfig = configData.PanelTypes[configData.UIConfig];
            foreach (var element in uiConfig.ImageElements) {
                if (!string.IsNullOrEmpty(element.URL) && !newLoadOrder.ContainsKey(element.URL)) newLoadOrder.Add(element.URL, element.URL);
            }
            foreach (var element in uiConfig.TimeProgress) {
                if (!string.IsNullOrEmpty(element.URL) && !newLoadOrder.ContainsKey(element.URL)) newLoadOrder.Add(element.URL, element.URL);
            }
            foreach (var element in uiConfig.VoteProgress) {
                if (!string.IsNullOrEmpty(element.URL) && !newLoadOrder.ContainsKey(element.URL)) newLoadOrder.Add(element.URL, element.URL);
            }
            if (newLoadOrder.Count > 0) {
                if (!ImageLibrary) {
                    PrintError("Image Library is not installed.It is required to load the images.Unable to continue!");
                    Interface.Oxide.UnloadPlugin(Title);
                    return;
                }
                ImageLibrary.Call("ImportImageList", Title, newLoadOrder);
            }
            BeginUICreation();
        }
        private void BeginUICreation() {
            if (!(bool)ImageLibrary?.Call("IsReady")) {
                PrintWarning("Waiting for ImageLibrary to finish image processing!");
                timer.In(60, BeginUICreation);
                return;
            }
            isILReady = true;
            CheckTime();
        }
        TextAnchor ParseAnchor(string anchor) {
            TextAnchor textAnchor;
            try {
                textAnchor = (TextAnchor)Enum.Parse(typeof(TextAnchor), anchor);
            }
            catch {
                textAnchor = TextAnchor.MiddleCenter;
            }
            return textAnchor;
        }
        ProgressType ParseType(string type) {
            ProgressType textAnchor;
            try {
                textAnchor = (ProgressType)Enum.Parse(typeof(ProgressType), type);
            }
            catch {
                textAnchor = ProgressType.Solid;
            }
            return textAnchor;
        }
#endregion
#region ChatCommands
        [ChatCommand("voteday")]
        private void cmdVoteDay(BasePlayer player, string command, string[] args) {
            if (args.Length == 0) {
                if (voteOpen) {
                    if (!AlreadyVoted(player)) {
                        votesReceived.Add(player.userID);
                        Reply(player, "voteSuccess");
                        if (votesReceived.Count >= requiredVotes) VoteEnd(true);
                        return;
                    }
                }
                else Reply(player, "noVote");
            }
            else {
                if (!permission.UserHasPermission(player.UserIDString, "skipnightui.admin")) return;
                switch (args[0].ToLower()) {
                    case "open" : if (!voteOpen) OpenVote();
                    else Reply(player, "alreadyOpen");
                    return;
                    case "close" : if (voteOpen) VoteEnd(false);
                    else Reply(player, "noVote");
                    return;
                    default : Reply(player, "invalidSyntax");
                    break;
                }
            }
        }
#endregion
#region UI Creator
        enum ProgressType {
            Solid, Graphic, Text
        }
        class UICreator {
            [JsonProperty(PropertyName = "Main Container Size")]
            public UISize Size {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Panel Elements")]
            public List<UIPanel> PanelElements {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Text Elements")]
            public List<UIText> TextElements {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Image Elements")]
            public List<UIImage> ImageElements {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Vote Progress Elements")]
            public List<UIProgress> VoteProgress {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Time Progress Elements")]
            public List<UIProgress> TimeProgress {
                get;
                set;
            }
        }
        class UISize {
            [JsonProperty(PropertyName = "Horizontal Start")]
            public float XMin {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Horizontal End")]
            public float XMax {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Vertical Start")]
            public float YMin {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Vertical End")]
            public float YMax {
                get;
                set;
            }
        }
        class UIPanel {
            public UISize Size {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Background Color (Hex)")]
            public string Color {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Background Alpha")]
            public float Alpha {
                get;
                set;
            }
        }
        class UIText {
            public UISize Size {
                get;
                set;
            }
            public TextComponent Text {
                get;
                set;
            }
        }
        class UIImage {
            public UISize Size {
                get;
                set;
            }
            [JsonProperty(PropertyName = "URL or Image filename")]
            public string URL {
                get;
                set;
            }
        }
        class UIProgress {
            public UISize Size {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Progress Type")]
            // (Solid, Graphic, Text)
            public string Type {
                get;
                set;
            }
            [JsonProperty(PropertyName = "URL or Image filename (Graphic)")]
            public string URL {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Bar Color (Solid)")]
            public string Color {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Bar Alpha (Solid)")]
            public float Alpha {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Text Options (Text)")]
            public TextComponent Text {
                get;
                set;
            }
        }
        class TextComponent {
            [JsonProperty(PropertyName = "Alignment")]
            // (LowerCenter, LowerLeft, LowerRight, MiddleCenter, MiddleLeft, MiddleRight, UpperCenter, UpperLeft, UpperRight)
            public string Alignment {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Color (Hex)")]
            public string Color {
                get;
                set;
            }
            public string Text {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Size")]
            public int Size {
                get;
                set;
            }
        }
#endregion
#region Config
        private ConfigData configData;
        class Colors {
            public string Primary {
                get;
                set;
            }
            public string Secondary {
                get;
                set;
            }
        }
        class Options {
            [JsonProperty(PropertyName = "Required vote percentage")]
            public float Percentage {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Time the vote will open")]
            public float Open {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Time to set on successful vote")]
            public float Set {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Duration the vote will be open")]
            public int Duration {
                get;
                set;
            }
        }
        class ConfigData {
            [JsonProperty(PropertyName = "UI Configuration Name")]
            public string UIConfig {
                get;
                set;
            }
            [JsonProperty(PropertyName = "UI Configurations")]
            public Dictionary<string, UICreator> PanelTypes {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Message Colors")]
            public Colors Colors {
                get;
                set;
            }
            [JsonProperty(PropertyName = "Options")]
            public Options Options {
                get;
                set;
            }
        }
        private void LoadVariables() {
            LoadConfigVariables();
            SaveConfig();
        }
        protected override void LoadDefaultConfig() {
            var config = new ConfigData {
                Colors = new Colors {
                    Primary = "#ce422b", Secondary = "#939393"
                }
                , Options = new Options {
                    Percentage = 40f, Open = 18f, Set = 8f, Duration = 240
                }
                , PanelTypes = new Dictionary<string, UICreator> {
#region DayVoteUI
                    ["Design_1"]
                    = new UICreator {
                        Size = new UISize {
                            XMin = 37.5f, XMax = 62.5f, YMin = 93f, YMax = 98f
                        }
                        , ImageElements = new List<UIImage> {
                        }
                        , PanelElements = new List<UIPanel> {
                            new UIPanel {
                                Alpha = 0.7f, Color = "#4c4c4c", Size = new UISize {
                                    XMax = 100, XMin = 0, YMax = 100, YMin = 0
                                }
                            }
                        }
                        , TextElements = new List<UIText> {
                            new UIText {
                                Size = new UISize {
                                    XMin = 2, XMax = 100, YMin = 0f, YMax = 100
                                }
                                , Text = new TextComponent {
                                    Alignment = TextAnchor.MiddleLeft.ToString(), Color = "#ce422b", Size = 15, Text = "Skip Night"
                                }
                            }
                        }
                        , TimeProgress = new List<UIProgress> {
                            new UIProgress {
                                Alpha = 0f, Color = string.Empty, Size = new UISize {
                                    XMin = 80, XMax = 95, YMin = 10, YMax = 90
                                }
                                , Text = new TextComponent {
                                    Alignment = TextAnchor.MiddleRight.ToString(), Color = string.Empty, Size = 14, Text = string.Empty
                                }
                                , Type = ProgressType.Text.ToString(), URL = string.Empty
                            }
                        }
                        , VoteProgress = new List<UIProgress> {
                            new UIProgress {
                                Alpha = 1f, Color = "#EBB146", Size = new UISize {
                                    XMin = 25f, XMax = 80f, YMin = 15f, YMax = 85f
                                }
                                , Type = ProgressType.Solid.ToString(), Text = null, URL = string.Empty
                            }
                            , new UIProgress {
                                Alpha = 0f, Color = string.Empty, Size = new UISize {
                                    XMin = 25f, XMax = 80f, YMin = 15f, YMax = 85f
                                }
                                , Type = ProgressType.Text.ToString(), Text = new TextComponent {
                                    Alignment = TextAnchor.MiddleCenter.ToString(), Color = string.Empty, Size = 14, Text = "{currentAmount} / {requiredAmount}"
                                }
                                , URL = string.Empty
                            }
                        }
                    }
                    ,
#endregion
#region GUI SkipNight
                    ["Design_2"]
                    = new UICreator {
                        Size = new UISize {
                            XMin = 40, XMax = 60, YMin = 85, YMax = 95
                        }
                        , ImageElements = new List<UIImage> {
                            new UIImage {
                                Size = new UISize {
                                    XMin =7, XMax = 13.5f, YMin = 10, YMax = 33
                                }
                                , URL = "https://www.chaoscode.io/oxide/Images/timericon.png"
                            }
                        }
                        , PanelElements = new List<UIPanel> {
                            new UIPanel {
                                Alpha = 0.85f, Color = "#191919", Size = new UISize {
                                    XMin = 0, XMax = 100, YMin = 0, YMax = 100
                                }
                            }
                        }
                        , TextElements = new List<UIText> {
                            new UIText {
                                Size = new UISize {
                                    XMin = 20, XMax = 80, YMin = 70, YMax = 96
                                }
                                , Text = new TextComponent {
                                    Alignment = TextAnchor.MiddleCenter.ToString(), Color = "#C4FF00", Size = 14, Text = "Skip the Night"
                                }
                            }
                        }
                        , TimeProgress = new List<UIProgress> {
                            new UIProgress {
                                Alpha = 0f, Color = string.Empty, Size = new UISize {
                                    XMin = 20, XMax = 90, YMin = 15, YMax = 28
                                }
                                , Text = null, Type = ProgressType.Graphic.ToString(), URL = "https://www.chaoscode.io/oxide/Images/progressbar.png"
                            }
                        }
                        , VoteProgress = new List<UIProgress> {
                            new UIProgress {
                                Alpha = 1f, Color = "#4ca5ff", Size = new UISize {
                                    XMin = 5, XMax = 95, YMin = 40, YMax = 68
                                }
                                , Text = null, Type = ProgressType.Solid.ToString(), URL = string.Empty
                            }
                            , new UIProgress {
                                Alpha = 0f, Color = string.Empty, Size = new UISize {
                                    XMin = 5, XMax = 95, YMin = 40, YMax = 68
                                }
                                , Type = ProgressType.Text.ToString(), Text = new TextComponent {
                                    Alignment = TextAnchor.MiddleCenter.ToString(), Color = string.Empty, Size = 14, Text = "{currentAmount} / {requiredAmount}"
                                }
                                , URL = string.Empty
                            }
                        }
                    }
                    ,
#endregion
#region Bar Design
                    ["Design_3"]
                    = new UICreator {
                        Size = new UISize {
                            XMin = 40, XMax = 60, YMin = 90, YMax = 98
                        }
                        , ImageElements = new List<UIImage> {
                            new UIImage {
                                Size = new UISize {
                                    XMin =75, XMax = 98f, YMin = 5, YMax = 95
                                }
                                , URL = "https://images.vexels.com/media/users/3/132347/isolated/preview/be0aa6f53b4ac58a4a3612d6dc7a7854-stopwatch-timer-icon-by-vexels.png"
                            }
                        }
                        , PanelElements = new List<UIPanel> {
                            new UIPanel {
                                Alpha = 0.85f, Color = "#191919", Size = new UISize {
                                    XMin = 0, XMax = 72, YMin = 55, YMax = 100
                                }
                            }
                            , new UIPanel {
                                Alpha = 0.85f, Color = "#191919", Size = new UISize {
                                    XMin = 73.25f, XMax = 100, YMin = 0, YMax = 100
                                }
                            }
                            , new UIPanel {
                                Alpha = 0.85f, Color = "#191919", Size = new UISize {
                                    XMin = 0, XMax = 72, YMin = 0, YMax = 50
                                }
                            }
                        }
                        , TextElements = new List<UIText> {
                            new UIText {
                                Size = new UISize {
                                    XMin = 0, XMax = 72, YMin = 55, YMax = 100
                                }
                                , Text = new TextComponent {
                                    Alignment = TextAnchor.MiddleCenter.ToString(), Color = "#ce422b", Size = 14, Text = "Skip night by typing /voteday"
                                }
                            }
                        }
                        , TimeProgress = new List<UIProgress> {
                            new UIProgress {
                                Alpha = 0f, Color = string.Empty, Size = new UISize {
                                    XMin = 73, XMax = 100, YMin = 0, YMax = 100
                                }
                                , Text = new TextComponent {
                                    Alignment = TextAnchor.MiddleCenter.ToString(), Color = string.Empty, Size = 16, Text = string.Empty
                                }
                                , Type = ProgressType.Text.ToString(), URL = ""
                            }
                        }
                        , VoteProgress = new List<UIProgress> {
                            new UIProgress {
                                Alpha = 1f, Color = "#585858", Size = new UISize {
                                    XMin = 2, XMax = 70, YMin = 5, YMax = 45
                                }
                                , Text = null, Type = ProgressType.Solid.ToString(), URL = string.Empty
                            }
                            , new UIProgress {
                                Alpha = 0f, Color = string.Empty, Size = new UISize {
                                    XMin = 2, XMax = 70, YMin = 5, YMax = 45
                                }
                                , Type = ProgressType.Text.ToString(), Text = new TextComponent {
                                    Alignment = TextAnchor.MiddleCenter.ToString(), Color = string.Empty, Size = 14, Text = "{currentAmount} / {requiredAmount}"
                                }
                                , URL = string.Empty
                            }
                        }
                    }
#endregion
                }
                , UIConfig = "Design_3"
            }
            ;
            SaveConfig(config);
        }
        private void LoadConfigVariables() => configData = Config.ReadObject<ConfigData>();
        void SaveConfig(ConfigData config) => Config.WriteObject(config, true);
#endregion
#region Localization
        void Reply(BasePlayer player, string langKey) => SendReply(player, msg(langKey, player.UserIDString).Replace("{main}", $"<color={configData.Colors.Primary}>").Replace("{msg}", $"<color={configData.Colors.Secondary}>").Replace("{percent}", (configData.Options.Percentage).ToString()));
        void Print(string langKey) => PrintToChat(msg(langKey).Replace("{main}", $"<color={configData.Colors.Primary}>").Replace("{msg}", $"<color={configData.Colors.Secondary}>").Replace("{percent}", (configData.Options.Percentage).ToString()));
        string msg(string key, string playerId = "") => lang.GetMessage(key, this, playerId);
        Dictionary<string, string> Messages = new Dictionary<string, string> {
            {
                "voteSuccess", "{msg}You have voted to skip night!</color>"
            }
            , {
                "noVote", "{msg}There is not currently a vote open!</color>"
            }
            , {
                "alreadyOpen", "{msg}The is already a vote in progress!</color>"
            }
            , {
                "invalidSyntax", "{msg}Invalid Syntax! -</color> {main}/voteday open</color>{msg} || </color> {main}/voteday close</color>"
            }
            , {
                "votingSuccessful", "{main}Voting was successful!</color>{msg} Skipping night</color>"
            }
            , {
                "votingUnsuccessful", "{main}Voting was not successful!</color>{msg} Nighttime inbound</color>"
            }
            , {
                "commandSyn", "{msg}Type </color>{main}/voteday</color>{msg} now if you want to skip the night!\n-- Requires </color>{main}{percent}%</color>{msg} of the players to vote</color>"
            }
            , {
                "skipNight", "Skip Night"
            }
        }
        ;
#endregion
    }
}

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