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

FREE BloodChat : 1.2.0 1.2.0

Нет прав для скачивания
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using ConVar;
using Oxide.Core;
using Oxide.Game.Rust.Cui;
using UnityEngine;
using System.Globalization;
using Newtonsoft.Json;
namespace Oxide.Plugins {
    [Info("BloodChat", "Sergioklv", "1.2.0")]
    public class BloodChat : RustPlugin {
#region Вар
        string Layer = "Chat_UI";
        Dictionary<ulong, DBSettings> DB = new Dictionary<ulong, DBSettings>();
#endregion
#region Класс
        public class Settings {
            public string Prefix;
            public string Color;
            public string NameColor;
            public string Perm;
        }
        public class DBSettings {
            public string Prefix = "|Печенька|";
            public string Color = "#FBCEB1";
            public string NameColor = "#78DBE2";
            public double Time;
            public bool Hints = true;
            public bool ChatEnable = true;
        }
#endregion
#region Конфиг
        Configuration config;
        class Configuration {
            [JsonProperty("Чеерез какое время будут выскакивать сообщения от сервера в чат(в секундах)")]
            public int time = 300;
            [JsonProperty("Список префиксов и их настройки")]
            public List<Settings> settings;
            [JsonProperty("Список сообщений в чат")]
            public List<string> message;
            public static Configuration GetNewCong() {
                return new Configuration {
                    settings = new List<Settings>() {
                        new Settings {
                            Prefix = "|Печенька|", Color = "#FBCEB1", NameColor = "#78DBE2", Perm = "bloodchat.default"
                        }
                        , new Settings {
                            Prefix = "|МОЛНИЯ|", Color = "#FFDB8B", NameColor = "#FFDB8B", Perm = "bloodchat.molnia"
                        }
                        , new Settings {
                            Prefix = "|РАЗРЯД|", Color = "#E34234", NameColor = "#E34234", Perm = "bloodchat.rezrad"
                        }
                        , new Settings {
                            Prefix = "|ЭНЕРГИЯ|", Color = "#C51D34", NameColor = "#C51D34", Perm = "bloodchat.energy"
                        }
                        , new Settings {
                            Prefix = "|МЕДИА|", Color = "#e0947a", NameColor = "#e0947a", Perm = "bloodchat.media"
                        }
                        , new Settings {
                            Prefix = "|GOD|", Color = "#ff0000", NameColor = "#98FB98", Perm = "bloodchat.money2"
                        }
                        , new Settings {
                            Prefix = "|Abs0lute|", Color = "#000000", NameColor = "#98FB98", Perm = "bloodchat.money2"
                        }
                        , new Settings {
                            Prefix = "||Helper||", Color = "#ff5118", NameColor = "#98FB98", Perm = "bloodchat.helper"
                        }
                        , new Settings {
                            Prefix = "|МОДЕРАТОР|", Color = "#B03F35", NameColor = "#B03F35", Perm = "bloodchat.moder"
                        }
                        , new Settings {
                            Prefix = "|ГЛ.МОДЕРАТОР|", Color = "#98FB98", NameColor = "#98FB98", Perm = "bloodchat.glmoder"
                        }
                        , new Settings {
                            Prefix = "|АДМИН|", Color = "#ff1840", NameColor = "#ff1840", Perm = "bloodchat.admin"
                        }
                    }
                    , message = new List<string>() {
                        "<size=12>Хочешь узнать о сервере побольше?</size>\n<size=10>Пропиши <color=#e0947a>/menu</color>", "<size=12>Группа ВК - <color=#e0947a>vk.com/pulserust292</color></size>", "<size=14>Максимальное количество игроков в команде - <color=#e0947a>NOLIMIT!</color></size>", "<size=12>Увидел читера или нарушителей?</size>\n<size=10>Отправляй жалобу в <color=#e0947a>/report</color></size>", "<size=14>Не хватает баланса, чтобы купить привилегию?</size>\n<size=14>У нас есть решение для тебя! Используй промокод: <color=#e0947a>Skidka</color></size> в нашем магазине и получи скидку 10%"
                    }
                }
                ;
            }
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            try {
                config = Config.ReadObject<Configuration>();
                if (config?.message == null) LoadDefaultConfig();
            }
            catch {
                PrintWarning($"Ошибка чтения конфигурации 'oxide/config/{Name}', создаём новую конфигурацию!!");
                LoadDefaultConfig();
            }
            NextTick(SaveConfig);
        }
        protected override void LoadDefaultConfig() => config = Configuration.GetNewCong();
        protected override void SaveConfig() => Config.WriteObject(config);
#endregion
#region Хуки
        void HandleMessage(BasePlayer player, string message, Chat.ChatChannel channel) {
            if (DB[player.userID].Time > CurTime()) {
                player.SendConsoleCommand($"note.inv 605467368 -{FormatShortTime(TimeSpan.FromSeconds(DB[player.userID].Time - CurTime()))} \"<size=12>У вас мут чата!</size>\"");
                return;
            }
            if (!DB[player.userID].ChatEnable) {
                SendReply(player, "<size=12>У вас отключен игровой чат, включить его можно в настройках чата!</size>");
                return;
            }
            foreach (var check in BasePlayer.activePlayerList.ToList()) {
                if (!DB[check.userID].ChatEnable) continue;
                check.SendConsoleCommand("chat.add", 0, player.userID, $"<size=12><color={DB[player.userID].Color}>{DB[player.userID].Prefix}</color> <color={DB[player.userID].NameColor}>{player.displayName}</color>: {message}</size>");
            }
        }
        /*         object OnPlayerChat(BasePlayer player, string message, Chat.ChatChannel channel)
        {
            if (channel == ConVar.Chat.ChatChannel.Global)
            {
                HandleMessage(player, message, channel);
            }
            else
            {
                foreach (var check in player.Team.members)
                {
                    var target = BasePlayer.FindByID(check);
                    if (target == null || !target.IsConnected) continue;
                    
                    target.SendConsoleCommand("chat.add", 1, player.userID, $"<size=12>{player.displayName}: {message}</size>");
                }
            }
            return false;
        } */
        object OnPlayerChat(BasePlayer player, string message, Chat.ChatChannel channel) {
            if (channel == Chat.ChatChannel.Global) {
                CheckAndUpdatePrefix(player);
                HandleMessage(player, message, channel);
            }
            else {
                foreach (var memberId in player.Team?.members ?? new List<ulong>()) {
                    var target = BasePlayer.FindByID(memberId);
                    if (target != null && target.IsConnected) target.SendConsoleCommand("chat.add", 1, player.userID, $"<size=12>{player.displayName}: {message}</size>");
                }
            }
            return false;
        }
        void CheckAndUpdatePrefix(BasePlayer player) {
            if (player == null) return;
            if (!DB.ContainsKey(player.userID)) DB[player.userID] = new DBSettings();
            var currentPrefix = DB[player.userID].Prefix;
            var currentSetting = config.settings.FirstOrDefault(s => s.Prefix == currentPrefix);
            bool stillHasCurrentPerm = currentSetting != null && permission.UserHasPermission(player.UserIDString, currentSetting.Perm);
            if (!stillHasCurrentPerm) {
                var next = config.settings.FirstOrDefault(s => permission.UserHasPermission(player.UserIDString, s.Perm));
                if (next != null) {
                    DB[player.userID].Prefix = next.Prefix;
                    DB[player.userID].Color = next.Color;
                    DB[player.userID].NameColor = next.NameColor;
                    SendReply(player, "<size=12>⚠️ Ваш ранг или разрешение истекло! Префикс изменён на доступный.</size>");
                }
                else {
                    var defaults = new DBSettings();
                    DB[player.userID].Prefix = defaults.Prefix;
                    DB[player.userID].Color = defaults.Color;
                    DB[player.userID].NameColor = defaults.NameColor;
                    SendReply(player, "<size=12>⚠️ Ваш ранг или разрешение истекло! Префикс изменён на стандартный.</size>");
                }
                SaveDataBase(player.userID);
            }
        }
        void OnServerInitialized() {
            foreach(var check in BasePlayer.activePlayerList) OnPlayerConnected(check);
            timer.Every(config.time, () => {
                var message = config.message.GetRandom();
                foreach (var check in BasePlayer.activePlayerList.ToList()) {
                    if (!DB[check.userID].Hints) continue;
                    check.SendConsoleCommand("chat.add", 0, 0, message);
                }
            }
            ).Callback();
            foreach (var check in config.settings) permission.RegisterPermission(check.Perm, this);
        }
        void OnPlayerConnected(BasePlayer player) => CreateDataBase(player);
        void OnPlayerDisconnected(BasePlayer player, string reason) => SaveDataBase(player.userID);
        void Unload() {
            foreach (var check in DB) SaveDataBase(check.Key);
        }
#endregion
#region Дата
        void CreateDataBase(BasePlayer player) {
            var DataBase = Interface.Oxide.DataFileSystem.ReadObject<DBSettings>($"MenuSystem/DBChat/{player.userID}");
            if (!DB.ContainsKey(player.userID)) DB.Add(player.userID, new DBSettings());
            DB[player.userID] = DataBase ?? new DBSettings();
            foreach (var setting in config.settings) {
                if (permission.UserHasPermission(player.UserIDString, setting.Perm)) {
                    if (string.IsNullOrEmpty(DB[player.userID].Prefix)) {
                        DB[player.userID].Prefix = setting.Prefix;
                        DB[player.userID].Color = setting.Color;
                        DB[player.userID].NameColor = setting.NameColor;
                    }
                    break;
                }
            }
        }
        void SaveDataBase(ulong userId) => Interface.Oxide.DataFileSystem.WriteObject($"MenuSystem/DBChat/{userId}", DB[userId]);
#endregion
#region Команды
        [ConsoleCommand("chat")]
        void ConsoleChat(ConsoleSystem.Arg args) {
            var player = args.Player();
            if (player != null && args.HasArgs(1)) {
                var check = config.settings.Where(z => (string.IsNullOrEmpty(z.Perm) || permission.UserHasPermission(player.UserIDString, z.Perm))).ToList();
                if (args.Args[0] == "namecolor") {
                    int page = int.Parse(args.Args[1]);
                    DB[player.userID].NameColor = check.ElementAt(page).NameColor;
                    NameUI(player);
                    NameColorUI(player, page);
                    AlertUI(player, "Цвет ника успешно изменен!", "1");
                }
                if (args.Args[0] == "prefix") {
                    int page = int.Parse(args.Args[1]);
                    DB[player.userID].Prefix = check.ElementAt(page).Prefix;
                    NameUI(player);
                    PrefixUI(player, page);
                    AlertUI(player, "Префикс успешно изменен!", "1");
                }
                if (args.Args[0] == "prefixcolor") {
                    int page = int.Parse(args.Args[1]);
                    DB[player.userID].Color = check.ElementAt(page).Color;
                    NameUI(player);
                    PrefixColorUI(player, page);
                    AlertUI(player, "Цвет префикса успешно изменен!", "1");
                }
                if (args.Args[0] == "hints") {
                    DB[player.userID].Hints = bool.Parse(args.Args[1]);
                    HintsUI(player);
                }
                if (args.Args[0] == "chatenable") {
                    DB[player.userID].ChatEnable = bool.Parse(args.Args[1]);
                    ChatEnableUI(player);
                }
            }
        }
#endregion
#region Интерфейс
        void ChatUI(BasePlayer player) {
            CuiHelper.DestroyUi(player, Layer);
            var container = new CuiElementContainer();
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0"
                }
                , Image = {
                    Color = "0 0 0 0"
                }
            }
            , "Settings", Layer);
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0 0.785", AnchorMax = "1 0.886", OffsetMax = "0 0"
                }
                , Image = {
                    Color = "1 1 1 0.04", Material = "assets/content/ui/uibackgroundblur.mat"
                }
            }
            , Layer, "ColorName");
            container.Add(new CuiLabel {
                RectTransform = {
                    AnchorMin = $"0.025 0", AnchorMax = $"0.96 1", OffsetMax = "0 0"
                }
                , Text = {
                    Text = $"<size=14>Цвет ника</size>", Color = "1 1 1 0.5", Align = TextAnchor.MiddleLeft, FontSize = 10, Font = "robotocondensed-regular.ttf", FadeIn = 1f
                }
            }
            , "ColorName");
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0 0.671", AnchorMax = "1 0.775", OffsetMax = "0 0"
                }
                , Image = {
                    Color = "1 1 1 0.04", Material = "assets/content/ui/uibackgroundblur.mat"
                }
            }
            , Layer, "Prefix");
            container.Add(new CuiLabel {
                RectTransform = {
                    AnchorMin = $"0.025 0", AnchorMax = $"0.96 1", OffsetMax = "0 0"
                }
                , Text = {
                    Text = $"<size=14>Префикс</size>\n<color=#ffffff40>то что будет перед ником</color>", Color = "1 1 1 0.5", Align = TextAnchor.MiddleLeft, FontSize = 10, Font = "robotocondensed-regular.ttf", FadeIn = 1f
                }
            }
            , "Prefix");
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0 0.56", AnchorMax = "1 0.66", OffsetMax = "0 0"
                }
                , Image = {
                    Color = "1 1 1 0.04", Material = "assets/content/ui/uibackgroundblur.mat"
                }
            }
            , Layer, "ColorPrefix");
            container.Add(new CuiLabel {
                RectTransform = {
                    AnchorMin = $"0.025 0", AnchorMax = $"0.96 1", OffsetMax = "0 0"
                }
                , Text = {
                    Text = $"<size=14>Цвет префикса</size>", Color = "1 1 1 0.5", Align = TextAnchor.MiddleLeft, FontSize = 10, Font = "robotocondensed-regular.ttf", FadeIn = 1f
                }
            }
            , "ColorPrefix");
            CuiHelper.AddUi(player, container);
            NameUI(player);
            NameColorUI(player, config.settings.Where(z => (string.IsNullOrEmpty(z.Perm) || permission.UserHasPermission(player.UserIDString, z.Perm))).ToList().FindIndex(a => a.NameColor == DB[player.userID].NameColor));
            PrefixUI(player, config.settings.Where(z => (string.IsNullOrEmpty(z.Perm) || permission.UserHasPermission(player.UserIDString, z.Perm))).ToList().FindIndex(a => a.Prefix == DB[player.userID].Prefix));
            PrefixColorUI(player, config.settings.Where(z => (string.IsNullOrEmpty(z.Perm) || permission.UserHasPermission(player.UserIDString, z.Perm))).ToList().FindIndex(a => a.Color == DB[player.userID].Color));
            HintsUI(player);
            ChatEnableUI(player);
        }
        void NameUI(BasePlayer player) {
            CuiHelper.DestroyUi(player, "Name");
            var container = new CuiElementContainer();
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = $"0 0.897", AnchorMax = $"1 1", OffsetMax = "0 0"
                }
                , Image = {
                    Color = "1 1 1 0.04", Material = "assets/content/ui/uibackgroundblur.mat"
                }
            }
            , Layer, "Name");
            container.Add(new CuiLabel {
                RectTransform = {
                    AnchorMin = $"0.025 0", AnchorMax = $"0.96 1", OffsetMax = "0 0"
                }
                , Text = {
                    Text = $"<size=14>Ваш ник сейчас: <color={DB[player.userID].Color}>{DB[player.userID].Prefix}</color> <color={DB[player.userID].NameColor}>{player.displayName}</color></size>\n<color=#ffffff40>именно так будет выглядить ник в чате</color>", Color = "1 1 1 0.5", Align = TextAnchor.MiddleLeft, FontSize = 10, Font = "robotocondensed-regular.ttf", FadeIn = 1f
                }
            }
            , "Name");
            CuiHelper.AddUi(player, container);
        }
        void NameColorUI(BasePlayer player, int page) {
            CuiHelper.DestroyUi(player, "NameLayer");
            var container = new CuiElementContainer();
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = $"0.5 0.785", AnchorMax = $"1 0.886", OffsetMax = "0 0"
                }
                , Image = {
                    Color = "0 0 0 0"
                }
            }
            , Layer, "NameLayer");
            container.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = $"0.2 0.3", AnchorMax = $"0.3 0.7", OffsetMax = "0 0"
                }
                , Button = {
                    Color = page != 0 ? "1 1 1 0.2" : "1 1 1 0.15", Command = page != 0 ? $"chat namecolor {page - 1}" : ""
                }
                , Text = {
                    Text = "<", Color = page != 0 ? "1 1 1 0.9" : HexToCuiColor("#7f7d7d", 100), Align = TextAnchor.MiddleCenter, FontSize = 12, Font = "robotocondensed-regular.ttf", FadeIn = 1f
                }
            }
            , "NameLayer");
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = $"0.3 0.3", AnchorMax = $"0.82 0.7", OffsetMax = "0 0"
                }
                , Image = {
                    Color = "1 1 1 0.1"
                }
            }
            , "NameLayer", "NameColor");
            string name = page != 0 ? DB[player.userID].NameColor : "Default";
            container.Add(new CuiLabel {
                RectTransform = {
                    AnchorMin = $"0 0", AnchorMax = $"1 1", OffsetMax = "0 0"
                }
                , Text = {
                    Text = name, Color = "1 1 1 0.5", Align = TextAnchor.MiddleCenter, FontSize = 10, Font = "robotocondensed-regular.ttf", FadeIn = 1f
                }
            }
            , "NameColor");
            var nameColor = config.settings.Where(z => (string.IsNullOrEmpty(z.Perm) || permission.UserHasPermission(player.UserIDString, z.Perm))).ToList();
            container.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = $"0.82 0.3", AnchorMax = $"0.92 0.7", OffsetMax = "0 0"
                }
                , Button = {
                    Color = nameColor.Count() > (page + 1) ? "1 1 1 0.2" : "1 1 1 0.15", Command = nameColor.Count() > (page + 1) ? $"chat namecolor {page + 1}" : ""
                }
                , Text = {
                    Text = ">", Color = nameColor.Count() > (page + 1) ? "1 1 1 0.9" : HexToCuiColor("#7f7d7d", 100), Align = TextAnchor.MiddleCenter, FontSize = 12, Font = "robotocondensed-regular.ttf", FadeIn = 1f
                }
            }
            , "NameLayer");
            CuiHelper.AddUi(player, container);
        }
        void PrefixUI(BasePlayer player, int page) {
            CuiHelper.DestroyUi(player, "PrefixLayer");
            var container = new CuiElementContainer();
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = $"0.5 0.671", AnchorMax = $"1 0.775", OffsetMax = "0 0"
                }
                , Image = {
                    Color = "0 0 0 0"
                }
            }
            , Layer, "PrefixLayer");
            container.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = $"0.2 0.3", AnchorMax = $"0.3 0.7", OffsetMax = "0 0"
                }
                , Button = {
                    Color = page != 0 ? "1 1 1 0.2" : "1 1 1 0.15", Command = page != 0 ? $"chat prefix {page - 1}" : ""
                }
                , Text = {
                    Text = "<", Color = page != 0 ? "1 1 1 0.9" : HexToCuiColor("#7f7d7d", 100), Align = TextAnchor.MiddleCenter, FontSize = 12, Font = "robotocondensed-regular.ttf", FadeIn = 1f
                }
            }
            , "PrefixLayer");
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = $"0.3 0.3", AnchorMax = $"0.82 0.7", OffsetMax = "0 0"
                }
                , Image = {
                    Color = "1 1 1 0.1"
                }
            }
            , "PrefixLayer", "PrefixText");
            string prefix = page != 0 ? DB[player.userID].Prefix : "Default";
            container.Add(new CuiLabel {
                RectTransform = {
                    AnchorMin = $"0 0", AnchorMax = $"1 1", OffsetMax = "0 0"
                }
                , Text = {
                    Text = prefix, Color = "1 1 1 0.5", Align = TextAnchor.MiddleCenter, FontSize = 10, Font = "robotocondensed-regular.ttf", FadeIn = 1f
                }
            }
            , "PrefixText");
            var prefixColor = config.settings.Where(z => (string.IsNullOrEmpty(z.Perm) || permission.UserHasPermission(player.UserIDString, z.Perm))).ToList();
            container.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = $"0.82 0.3", AnchorMax = $"0.92 0.7", OffsetMax = "0 0"
                }
                , Button = {
                    Color = prefixColor.Count() > (page + 1) ? "1 1 1 0.2" : "1 1 1 0.15", Command = prefixColor.Count() > (page + 1) ? $"chat prefix {page + 1}" : ""
                }
                , Text = {
                    Text = ">", Color = prefixColor.Count() > (page + 1) ? "1 1 1 0.9" : HexToCuiColor("#7f7d7d", 100), Align = TextAnchor.MiddleCenter, FontSize = 12, Font = "robotocondensed-regular.ttf", FadeIn = 1f
                }
            }
            , "PrefixLayer");
            CuiHelper.AddUi(player, container);
        }
        void PrefixColorUI(BasePlayer player, int page) {
            CuiHelper.DestroyUi(player, "PrefixColor");
            var container = new CuiElementContainer();
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = $"0.5 0.56", AnchorMax = $"1 0.66", OffsetMax = "0 0"
                }
                , Image = {
                    Color = "0 0 0 0"
                }
            }
            , Layer, "PrefixColor");
            container.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = $"0.2 0.3", AnchorMax = $"0.3 0.7", OffsetMax = "0 0"
                }
                , Button = {
                    Color = page != 0 ? "1 1 1 0.2" : "1 1 1 0.15", Command = page != 0 ? $"chat prefixcolor {page - 1}" : ""
                }
                , Text = {
                    Text = "<", Color = page != 0 ? "1 1 1 0.9" : HexToCuiColor("#7f7d7d", 100), Align = TextAnchor.MiddleCenter, FontSize = 12, Font = "robotocondensed-regular.ttf", FadeIn = 1f
                }
            }
            , "PrefixColor");
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = $"0.3 0.3", AnchorMax = $"0.82 0.7", OffsetMax = "0 0"
                }
                , Image = {
                    Color = "1 1 1 0.1"
                }
            }
            , "PrefixColor", "PrefixText");
            string prefix = page != 0 ? DB[player.userID].Color : "Default";
            container.Add(new CuiLabel {
                RectTransform = {
                    AnchorMin = $"0 0", AnchorMax = $"1 1", OffsetMax = "0 0"
                }
                , Text = {
                    Text = prefix, Color = "1 1 1 0.5", Align = TextAnchor.MiddleCenter, FontSize = 10, Font = "robotocondensed-regular.ttf", FadeIn = 1f
                }
            }
            , "PrefixText");
            var prefixColor = config.settings.Where(z => (string.IsNullOrEmpty(z.Perm) || permission.UserHasPermission(player.UserIDString, z.Perm))).ToList();
            container.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = $"0.82 0.3", AnchorMax = $"0.92 0.7", OffsetMax = "0 0"
                }
                , Button = {
                    Color = prefixColor.Count() > (page + 1) ? "1 1 1 0.2" : "1 1 1 0.15", Command = prefixColor.Count() > (page + 1) ? $"chat prefixcolor {page + 1}" : ""
                }
                , Text = {
                    Text = ">", Color = prefixColor.Count() > (page + 1) ? "1 1 1 0.9" : HexToCuiColor("#7f7d7d", 100), Align = TextAnchor.MiddleCenter, FontSize = 12, Font = "robotocondensed-regular.ttf", FadeIn = 1f
                }
            }
            , "PrefixColor");
            CuiHelper.AddUi(player, container);
        }
        void HintsUI(BasePlayer player) {
            CuiHelper.DestroyUi(player, "Hints");
            var container = new CuiElementContainer();
            container.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = $"0 0.445", AnchorMax = $"1 0.548", OffsetMax = "0 0"
                }
                , Button = {
                    Color = "1 1 1 0.04", Material = "assets/content/ui/uibackgroundblur.mat", Command = DB[player.userID].Hints == true ? $"chat hints {false}" : $"chat hints {true}"
                }
                , Text = {
                    Text = ""
                }
            }
            , Layer, "Hints");
            var colorButton = !DB[player.userID].Hints ? HexToCuiColor("#e0947a", 30) : HexToCuiColor("#bbc47e", 30);
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = $"0.89 0.41", AnchorMax = $"0.97 0.59", OffsetMax = "0 0"
                }
                , Image = {
                    Color = colorButton
                }
            }
            , "Hints");
            var anchor = !DB[player.userID].Hints ? 0 : 0.04;
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = $"{0.89 + anchor} 0.25", AnchorMax = $"{0.93 + anchor} 0.75", OffsetMax = "0 0"
                }
                , Image = {
                    Color = colorButton
                }
            }
            , "Hints", "Text");
            var text = !DB[player.userID].Hints ? "○" : "|";
            container.Add(new CuiLabel {
                RectTransform = {
                    AnchorMin = $"0 0", AnchorMax = $"1 1", OffsetMax = "0 0"
                }
                , Text = {
                    Text = text, Color = "1 1 1 0.8", Align = TextAnchor.MiddleCenter, FontSize = 14, Font = "robotocondensed-regular.ttf", FadeIn = 1f
                }
            }
            , "Text");
            container.Add(new CuiLabel {
                RectTransform = {
                    AnchorMin = $"0.025 0", AnchorMax = $"0.96 1", OffsetMax = "0 0"
                }
                , Text = {
                    Text = "<size=14>Подсказки</size>\n<color=#ffffff40>информационные сообщения в глобальном чате</color>", Color = "1 1 1 0.5", Align = TextAnchor.MiddleLeft, FontSize = 10, Font = "robotocondensed-regular.ttf", FadeIn = 1f
                }
            }
            , "Hints");
            CuiHelper.AddUi(player, container);
        }
        void ChatEnableUI(BasePlayer player) {
            CuiHelper.DestroyUi(player, "ChatEnable");
            var container = new CuiElementContainer();
            container.Add(new CuiButton {
                RectTransform = {
                    AnchorMin = $"0 0.333", AnchorMax = $"1 0.433", OffsetMax = "0 0"
                }
                , Button = {
                    Color = "1 1 1 0.04", Material = "assets/content/ui/uibackgroundblur.mat", Command = DB[player.userID].ChatEnable == true ? $"chat chatenable {false}" : $"chat chatenable {true}"
                }
                , Text = {
                    Text = ""
                }
            }
            , Layer, "ChatEnable");
            var colorButton = !DB[player.userID].ChatEnable ? HexToCuiColor("#e0947a", 30) : HexToCuiColor("#bbc47e", 30);
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = $"0.89 0.41", AnchorMax = $"0.97 0.59", OffsetMax = "0 0"
                }
                , Image = {
                    Color = colorButton
                }
            }
            , "ChatEnable");
            var anchor = !DB[player.userID].ChatEnable ? 0 : 0.04;
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = $"{0.89 + anchor} 0.25", AnchorMax = $"{0.93 + anchor} 0.75", OffsetMax = "0 0"
                }
                , Image = {
                    Color = colorButton
                }
            }
            , "ChatEnable", "Text");
            var text = !DB[player.userID].ChatEnable ? "<color=#e0947a>○</color>" : "<color=#bbc47e>|</color>";
            container.Add(new CuiLabel {
                RectTransform = {
                    AnchorMin = $"0 0", AnchorMax = $"1 1", OffsetMax = "0 0"
                }
                , Text = {
                    Text = text, Color = HexToCuiColor("#e0947a", 100), Align = TextAnchor.MiddleCenter, FontSize = 16, Font = "robotocondensed-regular.ttf", FadeIn = 1f
                }
            }
            , "Text");
            container.Add(new CuiLabel {
                RectTransform = {
                    AnchorMin = $"0.025 0", AnchorMax = $"0.96 1", OffsetMax = "0 0"
                }
                , Text = {
                    Text = "<size=14>Глобальный чат</size>\n<color=#ffffff40>если отключить - сообщения от игры и сервера останутся</color>", Color = "1 1 1 0.5", Align = TextAnchor.MiddleLeft, FontSize = 10, Font = "robotocondensed-regular.ttf", FadeIn = 1f
                }
            }
            , "ChatEnable");
            CuiHelper.AddUi(player, container);
        }
        Timer Timer = null;
        void AlertUI(BasePlayer player, string message, string color) {
            if (Timer != null) Timer.Destroy();
            CuiHelper.DestroyUi(player, ".AlertInfo");
            var container = new CuiElementContainer();
            container.Add(new CuiPanel {
                RectTransform = {
                    AnchorMin = "0 1.01", AnchorMax = "1 1.07", OffsetMax = "0 0"
                }
                , Image = {
                    Color = color == "0" ? HexToCuiColor("#e0947a", 20) : HexToCuiColor("#bbc47e", 20)
                }
            }
            , Layer, ".AlertInfo");
            container.Add(new CuiLabel {
                RectTransform = {
                    AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = $"0 0"
                }
                , Text = {
                    Text = message, Align = TextAnchor.MiddleCenter, Font = "robotocondensed-regular.ttf", FontSize = 12, Color = color == "0" ? HexToCuiColor("#e0947a", 100) : HexToCuiColor("#bbc47e", 100)
                }
            }
            , ".AlertInfo");
            CuiHelper.AddUi(player, container);
            Timer = timer.In(5f, () => CuiHelper.DestroyUi(player, ".AlertInfo"));
        }
#endregion
#region Хелпер
        BasePlayer FindBasePlayer(string nameOrUserId) {
            nameOrUserId = nameOrUserId.ToLower();
            foreach (var player in BasePlayer.activePlayerList) {
                if (player.displayName.ToLower().Contains(nameOrUserId) || player.UserIDString == nameOrUserId) return player;
            }
            foreach (var player in BasePlayer.sleepingPlayerList) {
                if (player.displayName.ToLower().Contains(nameOrUserId) || player.UserIDString == nameOrUserId) return player;
            }
            return default(BasePlayer);
        }
        double CurTime() => new TimeSpan(DateTime.UtcNow.Ticks).TotalSeconds;
        public static string FormatShortTime(TimeSpan time) {
            string result = string.Empty;
            result = $"{time.TotalSeconds.ToString("00")}";
            return result;
        }
        public string HexToCuiColor(string HEX, float Alpha = 100) {
            if (string.IsNullOrEmpty(HEX)) HEX = "#FFFFFF";
            var str = HEX.Trim('#');
            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);
            return $"{(double)r / 255} {(double)g / 255} {(double)b / 255} {Alpha / 100}";
        }
#endregion
    }
}

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