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

FREE Help : 2.0.0 2.0.0

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Linq;
using Oxide.Core;
using Oxide.Game.Rust.Cui;
using System.Globalization;
using System.Collections.Generic;
using Newtonsoft.Json;
using UnityEngine;
namespace Oxide.Plugins {
    [Info("Help", "Chibubrik", "2.0.0")]
    class Help : RustPlugin {
#region Variables
        private string Layer = "UI_Help";
#endregion
#region Class
        public Dictionary<string, HelpList> help = new Dictionary<string, HelpList>();
        public class HelpList {
            [JsonProperty("Название кнопки")]
            public string NameUI;
            [JsonProperty("Команда")]
            public string Command;
            [JsonProperty("Цвет кнопки")]
            public string ButtonColor;
            [JsonProperty("Размер текста")]
            public int Sizes;
            [JsonProperty("Список")]
            public List<Messages> MessagesList = new List<Messages>();
        }
        public class Messages {
            [JsonProperty("Текст")]
            public string Message;
        }
#endregion
#region Command
        [ChatCommand("help")]
        void cmdHelp(BasePlayer player, string command, string[] args) => HelpUI(player);
        [ConsoleCommand("help")]
        void cmdConsoleHelp(ConsoleSystem.Arg args) {
            string name = args.FullString.Split('+')[0];
            var player = args.Player();
            if (name.ToLower().Contains("/")) {
                CuiHelper.DestroyUi(player, Layer);
                player.Command($"chat.say {name}");
            }
            else {
                HelpUI(args.Player(), true, name);
            }
        }
        [ConsoleCommand("next.page")]
        void cmdNewxt(ConsoleSystem.Arg args) {
            var name = args.Args[0];
            var amount = int.Parse(args.Args[1]);
            HelpUI(args.Player(), true, name, amount);
        }
#endregion
#region UI
        private void HelpUI(BasePlayer player, bool section = false, string name = "", int numbr = 0) {
            CuiHelper.DestroyUi(player, Layer);
            var container = new CuiElementContainer();
            Dictionary<string, string> List = new Dictionary<string, string>();
            float gap = -0.0f;
            float width = 0.1584f;
            float height = 0.2f;
            float startxBox = 0.341f;
            float startyBox = 0.522f - height;
            float xmin = startxBox;
            float ymin = startyBox;
            int current = 1;
            container.Add(new CuiPanel {
                CursorEnabled = true, RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0"
                }
                , Image = {
                    Color = "0 0 0 0.8", Sprite = "Assets/Content/UI/UI.Background.Tile.psd", Material = "assets/content/ui/uibackgroundblur.mat", FadeIn = 0.5f
                }
                , FadeOut = 0.4f
            }
            , "Overlay", Layer);
            if (!section) {
                container.Add(new CuiButton {
                    RectTransform = {
                        AnchorMin = "0.3 0.59", AnchorMax = $"0.7 0.67", OffsetMax = "0 0"
                    }
                    , Button = {
                        Color = "0 0 0 0"
                    }
                    , Text = {
                        Text = "Вы новый игрок в Rust?", Font = "robotocondensed-bold.ttf", FontSize = 40, Align = TextAnchor.MiddleCenter, FadeIn = 0.5f
                    }
                }
                , Layer);
                container.Add(new CuiButton {
                    RectTransform = {
                        AnchorMin = "0.3 0.54", AnchorMax = $"0.7 0.585", OffsetMax = "0 0"
                    }
                    , Button = {
                        Color = "0 0 0 0"
                    }
                    , Text = {
                        Text = "Мы понимаем, что нас посетят много новых игроков\nЕсли это относится и к вам, нажмите на одну из двух кнопок!", Font = "robotocondensed-regular.ttf", FontSize = 14, Align = TextAnchor.MiddleCenter, Color = HexToCuiColor("#FFFFFF5A"), FadeIn = 0.5f
                    }
                    ,
                }
                , Layer);
            }
            container.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = "0 0", AnchorMax = $"1 1", OffsetMax = "0 0"
                }
                , Button = {
                    Color = "0 0 0 0", Close = Layer
                }
                , Text = {
                    Text = ""
                }
            }
            , Layer);
            if (section) {
                foreach (var message in help[name].MessagesList) {
                    if (List.ContainsKey(message.Message)) {
                        Puts($"В разделе {name} найдены дублирующиеся сообщения, они убраны с показа");
                        continue;
                    }
                    List.Add(message.Message, "");
                    if (List.Count == 0) {
                        PrintWarning($"У раздела [{help[name].NameUI}] нету сообщений, раздел отключен!");
                        return;
                    }
                }
                container.Add(new CuiPanel() {
                    CursorEnabled = true, RectTransform = {
                        AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0"
                    }
                    , Image = {
                        Color = "0 0 0 0", FadeIn = 0.5f
                    }
                    , FadeOut = 0.4f,
                }
                , Layer, $"{name}");
                foreach (var Messages in List) {
                    if (numbr > 0) {
                        var List1 = List.Skip(numbr);
                        foreach (var nubm2 in List1) {
                            container.Add(new CuiButton {
                                RectTransform = {
                                    AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0"
                                }
                                , Button = {
                                    Color = "0 0 0 0", Close = Layer
                                }
                                , Text = {
                                    Text = nubm2.Key, Font = "robotocondensed-regular.ttf", FontSize = help[name].Sizes, Align = TextAnchor.MiddleCenter, Color = HexToCuiColor("#FFFFFF5A"), FadeIn = 0.5f
                                }
                            }
                            , $"{name}");
                            if (List1.Count() > 1) {
                                container.Add(new CuiButton {
                                    RectTransform = {
                                        AnchorMin = "0.94 0.46", AnchorMax = "0.99 0.54", OffsetMax = "0 0"
                                    }
                                    , Button = {
                                        Color = "0 0 0 0", Command = $"next.page {name} {numbr + 1}", FadeIn = 0.5f
                                    }
                                    , Text = {
                                        Text = ">", Font = "robotocondensed-bold.ttf", FontSize = 45, Align = TextAnchor.MiddleCenter, Color = HexToCuiColor("#FFFFFF5A"), FadeIn = 0.5f
                                    }
                                }
                                , Layer, $"{name}");
                                break;
                            }
                        }
                        container.Add(new CuiButton {
                            RectTransform = {
                                AnchorMin = "0.01 0.46", AnchorMax = "0.06 0.54", OffsetMax = "0 0"
                            }
                            , Button = {
                                Color = "0 0 0 0", Command = $"next.page {name} {numbr - 1}", FadeIn = 0.5f
                            }
                            , Text = {
                                Text = "<", Font = "robotocondensed-bold.ttf", FontSize = 45, Align = TextAnchor.MiddleCenter, Color = HexToCuiColor("#FFFFFF5A"), FadeIn = 0.5f
                            }
                        }
                        , Layer, $"{name}");
                        CuiHelper.AddUi(player, container);
                        return;
                    }
                    else {
                        container.Add(new CuiButton {
                            RectTransform = {
                                AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0"
                            }
                            , Button = {
                                Color = "0 0 0 0", Close = Layer
                            }
                            , Text = {
                                Text = Messages.Key, Font = "robotocondensed-regular.ttf", FontSize = help[name].Sizes, Align = TextAnchor.MiddleCenter, Color = HexToCuiColor("#FFFFFF5A"), FadeIn = 0.5f
                            }
                        }
                        , $"{name}");
                        if (List.Count > 1) {
                            container.Add(new CuiButton {
                                RectTransform = {
                                    AnchorMin = "0.94 0.46", AnchorMax = "0.99 0.54", OffsetMax = "0 0"
                                }
                                , Button = {
                                    Color = "0 0 0 0", Command = $"next.page {name} {+1}", FadeIn = 0.5f
                                }
                                , Text = {
                                    Text = ">", Font = "robotocondensed-bold.ttf", FontSize = 45, Align = TextAnchor.MiddleCenter, Color = HexToCuiColor("#FFFFFF5A"), FadeIn = 0.5f
                                }
                            }
                            , Layer, $"{name}");
                            break;
                        }
                    }
                }
                CuiHelper.AddUi(player, container);
                return;
            }
            foreach (var check in help) {
                container.Add(new CuiButton() {
                    Button = {
                        Command = $"help {help[check.Key].Command}", Color = help[check.Key].ButtonColor, Material = "assets/content/ui/uibackgroundblur.mat", FadeIn = 0.5f
                    }
                    , RectTransform = {
                        AnchorMin = xmin + " " + ymin, AnchorMax = (xmin + width) + " " + (ymin + height *1), OffsetMax = "-25 -1", OffsetMin = "25 10",
                    }
                    , Text = {
                        Text = $"{help[check.Key].NameUI}", Align = TextAnchor.MiddleCenter, Color = "1 1 1 1", FontSize = 55
                    }
                }
                , Layer, $"{help[check.Key].NameUI}");
                xmin += width + gap;
                if (xmin + width >= 1) {
                    xmin = startxBox;
                    ymin -= height + gap;
                }
                if (current > 2) {
                    break;
                }
            }
            CuiHelper.AddUi(player, container);
        }
#endregion
#region Oxide
        private void OnServerInitialized() {
            LoadData();
            CheckData();
            if (EnabledLogin) {
                BasePlayer.activePlayerList.ForEach(OnPlayerInit);
            }
        }
        private bool EnabledLogin = true;
        void OnPlayerInit(BasePlayer player) {
            if (EnabledLogin) {
                if (player.IsReceivingSnapshot) {
                    NextTick(() => {
                        OnPlayerInit(player);
                        return;
                    }
                    );
                }
                HelpUI(player);
            }
        }
        private void Unload() {
            foreach (var player in BasePlayer.activePlayerList) {
                CuiHelper.DestroyUi(player, Layer);
            }
        }
        private void CheckData() {
            foreach (var check in help) {
                if (string.IsNullOrEmpty(help[check.Key].Command)) {
                    PrintError($"У кнопки {check.Key} не установлена команда!");
                    continue;
                }
                foreach (var Messages in help[check.Key].MessagesList) {
                    if (string.IsNullOrEmpty(Messages.Message)) {
                        PrintError($"В разделе {check.Key} не созданы сообщения!");
                    }
                }
            }
        }
#endregion
#region Data
        private void LoadData() {
            if (Interface.Oxide.DataFileSystem.ExistsDatafile("Help/Text")) {
                help = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<string, HelpList>>("Help/Text");
            }
            else {
                help.Add("yes", new HelpList() {
                    NameUI = "Да", Command = "yes", ButtonColor = "0.16 0.71 0.39 1", Sizes = 18, MessagesList = new List<Messages> {
                        new Messages {
                            Message = "<b><size=22>С чего начать?</size></b>\nПервым делом Вам понадобится орудие для добычи дерева и камня, и к примеру лук для защиты.Изучите меню <b>''TAB''</b> с\nинвентарем.По мере добычи ресурсов в меню крафта <b>''Q''</b> Вы увидите разблокированные предметы для создания.\nРазбивая бочки Вам будут выпадать компоненты (используются для крафта) и скрап, который также можно потратить на\nИзучение предметов.Чем больше у вас рецептов - тем больше возможностей.\n\n<b><size=22>Что здесь делать?</size></b>\nМир открыт перед Вами, что делать - решаете Вы.Добыча ресурсов, крафт и коммуникация с другими обитателями\nпомогут вам выжить и обзавестись крепкими стенами.\n\n<b><size=22>Как построить дом?</size></b>\nДля строительства Вам понадобится план постройки, киянка и первоначальные ресурсы (дерево и камень).Для первого\nобустройства жилища вы можете получить набор <b>''Обустройство дома''</b>.(/kit).Не забудьте про <b>шкаф</b>!\n\n<b><size=22>Где мне найти сожителя?</size></b>\nВыжить в одиночку очень тяжело.Обзавестись знакомыми можно на ближайшем морском пляже, если вас не зарубят\nкамнем при первом диалоге, то у вас есть шансы! (<b>''V'' - голосовой чат</b>)\nТакже напарника можно найти в обсуждении нашей группы: <b>ГРУППА</b>\n\n<b><size=22>Куда мне обратиться за помощью?</size></b>\nДля получения помощи Вы можете обратиться в группе в вк сервера или ввести команду: <b>/menu</b> в чат.\nГруппа: <b>группа</b>\n\n<b><size=22>Приятной игры на проекте проект</size></b>"
                        }
                        , new Messages {
                            Message = ""
                        }
                    }
                }
                );
                help.Add("no", new HelpList() {
                    NameUI = "Нет", Command = "no", ButtonColor = "0.72 0.24 0.24 1", Sizes = 18, MessagesList = new List<Messages> {
                        new Messages {
                            Message = "<b><size=22>Добро пожаловать на Проект, друг.</size></b>\n\n<b><size=22>ОСНОВНЫЕ КОМАНДЫ</size></b>\n/kit - открыть меню доступных наборов.\n/report ''ник игрока'' - совершить донос на нечестного работягу.\n/skin - текстильная мастерская.\n\n<b><size=22>ТЕЛЕПОРТАЦИЯ</size></b>\n/tpr ''ник игрока'' - отправить запрос на телепортацию к игроку.\n/tpa(/tpc) - принять/отклонить запрос на телепортацию.\n/sethome(/removehome) ''название'' - создать/удалить точку спавна.\n/home list - открыть список своих жилищ.\n/home ''название'' - телепортация на хату с указанным названием.\n\n<b><size=22>КООПЕРАТИВ</size></b>\n/team add ''имя игрока''\n/team tag ''название''\n\n<b><size=22>Подробнее на САЙТ.RU</size></b>"
                        }
                        , new Messages {
                            Message = ""
                        }
                    }
                }
                );
                Interface.Oxide.DataFileSystem.WriteObject("Help/Text", help);
            }
        }
#endregion
#region Helpers
        private static string HexToCuiColor(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 $"{color.r:F2} {color.g:F2} {color.b:F2} {color.a:F2}";
        }
#endregion
    }
}

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