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

FREE AlertSystem : 1.0.0 1.0.0

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Collections.Generic;
using Facepunch.Extend;
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Game.Rust.Cui;
using UnityEngine;

namespace Oxide.Plugins
{ 
    [Info("AlertSystem", "Kira", "1.0.0")]
    [Description("Система оповещений")]
    public class  AlertSystem : RustPlugin
    {
        #region [Vars]

        private const string UIMain = "UI.Alert";
        private const string Blur = "assets/content/ui/uibackgroundblur.mat";
        private StoredData _dataBase = new StoredData();

        #endregion

        #region [Classes]

        public class Alert
        {
            [JsonProperty(PropertyName = "ID")] public int ID;

            [JsonProperty(PropertyName = "Оповещение одноразовое ?")]
            public bool IsRepit;

            [JsonProperty(PropertyName = "Shortname")]
            public string Shortname;

            [JsonProperty(PropertyName = "SkinID")]
            public ulong SkinID;

            [JsonProperty(PropertyName = "Текст [RU]")]
            public string TextRU;

            [JsonProperty(PropertyName = "Текст [ENG]")]
            public string TextENG;

            [JsonProperty(PropertyName = "Список команд выполняемых при нажатии на оповещение")]
            public List<string> Command = new List<string>();
        }

        public class AlertEvent
        {
            [JsonProperty(PropertyName = "ID")] public int ID;

            [JsonProperty(PropertyName = "Оповещение одноразовое ?")]
            public bool IsRepit;

            [JsonProperty(PropertyName = "Текст [RU]")]
            public string TextRU;

            [JsonProperty(PropertyName = "Текст [ENG]")]
            public string TextENG;

            [JsonProperty(PropertyName = "Список команд выполняемых при нажатии на оповещение")]
            public List<string> Command = new List<string>();
        }

        #endregion 
  
        #region [Configuraton]

        private ConfigData _config;

        public class ConfigData
        {
            [JsonProperty(PropertyName = "MoonInfoMenu - Config")]
            public AlertCFG AlertSettings = new AlertCFG();

            public class AlertCFG
            {
                [JsonProperty(PropertyName = "Скорость появления (float)")]
                public float FadeIn;

                [JsonProperty(PropertyName = "Скорость исчезания (float)")]
                public float FadeOut;

                [JsonProperty(PropertyName = "Цвет оповещения (Rust)")]
                public string Color;

                [JsonProperty(PropertyName = "Список оповещений [Предметы]")]
                public List<Alert> Alerts;

                [JsonProperty(PropertyName = "Список оповещений [Events]")]
                public List<AlertEvent> AlertsEvents;
            }
        }

        private ConfigData GetDefaultConfig()
        {
            return new ConfigData
            {
                AlertSettings = new ConfigData.AlertCFG
                {
                    FadeIn = 1f,
                    FadeOut = 5f,
                    Color = "0.56 0.50 0.47 0.15",
                    Alerts = new List<Alert>
                    {
                        new Alert
                        {
                            ID = 0,
                            IsRepit = true,
                            Shortname = "ducttape",
                            SkinID = 2814895972,
                            TextRU = "Вы нашли метеоритную пыль, нажмите на оповещение чтобы получить информацию",
                            TextENG = "You have found meteor dust, click on the alert to get information",
                            Command = new List<string>
                            {
                                "chat.say OK"
                            }
                        }
                    },
                    AlertsEvents = new List<AlertEvent>
                    {
                        new AlertEvent
                        {
                            ID = 1,
                            IsRepit = true,
                            TextRU = "123123123",
                            TextENG = "123123123",
                            Command = new List<string>()
                        }
                    }
                }
            };
        }

        protected override void LoadConfig()
        {
            base.LoadConfig();

            try
            {
                _config = Config.ReadObject<ConfigData>();
            }
            catch
            {
                LoadDefaultConfig();
            }

            SaveConfig();
        }

        protected override void LoadDefaultConfig()
        {
            PrintError("Файл конфигурации поврежден (или не существует), создан новый!");
            _config = GetDefaultConfig();
        }

        protected override void SaveConfig()
        {
            Config.WriteObject(_config);
        }

        #endregion 

        #region [DrawUI]

        private void DrawUI_Alert(BasePlayer player, Alert alert)
        {
            var ui = new CuiElementContainer();
            ui.Add(new CuiButton
            {
                Button =
                {
                    Color = _config.AlertSettings.Color,
                    Command = $"alert.send {alert.ID}",
                    Close = UIMain,
                    Material = Blur,
                    FadeIn = _config.AlertSettings.FadeIn
                },
                Text =
                {
                    Align = TextAnchor.MiddleCenter,
                    Color = "1 1 1 1",
                    FontSize = 14,
                    FadeIn = _config.AlertSettings.FadeIn,
                    Text = lang.GetLanguage(player.UserIDString) == "en" ? alert.TextENG : alert.TextRU
                },
                RectTransform =
                {
                    AnchorMin = "0.009895824 0.5490741",
                    AnchorMax = "0.2166667 0.7240741"
                }
            }, "Overlay", UIMain);

            ui.Add(new CuiButton
            {
                Button =
                {
                    Color = "0.81 0.18 0.04 0.9",
                    Close = UIMain,
                    FadeIn = _config.AlertSettings.FadeIn
                },
                Text =
                {
                    Align = TextAnchor.MiddleCenter,
                    Color = "1 1 1 0.8",
                    Text = "✖",
                    FontSize = 18,
                    FadeIn = _config.AlertSettings.FadeIn
                },
                RectTransform =
                {
                    AnchorMin = "0.8992443 0.7883595",
                    AnchorMax = "0.995 0.996"
                }
            }, UIMain);

            ui.Add(new CuiButton
            {
                Button =
                {
                    Color = "0.23 0.74 0.18 0.7",
                    Close = UIMain,
                    Command = $"alert.send {alert.ID}",
                    FadeIn = _config.AlertSettings.FadeIn
                },
                Text =
                {
                    Align = TextAnchor.MiddleCenter,
                    Color = "1 1 1 1",
                    FontSize = 14,
                    FadeIn = _config.AlertSettings.FadeIn,
                    Text = lang.GetLanguage(player.UserIDString) == "en" ? "GO" : "ПЕРЕЙТИ"
                },
                RectTransform =
                {
                    AnchorMin = "0.5692695 -0.2275134",
                    AnchorMax = "0.995 -0.005290791"
                }
            }, UIMain);

            CuiHelper.DestroyUi(player, UIMain);
            CuiHelper.AddUi(player, ui);
            timer.Once(_config.AlertSettings.FadeOut, () => CuiHelper.DestroyUi(player, UIMain));
        }

        private void DrawUI_AlertEvent(BasePlayer player, AlertEvent alert)
        {
            var ui = new CuiElementContainer();
            ui.Add(new CuiButton
            {
                Button =
                {
                    Color = _config.AlertSettings.Color,
                    Command = $"alert.send {alert.ID}",
                    Close = UIMain,
                    Material = Blur,
                    FadeIn = _config.AlertSettings.FadeIn
                },
                Text =
                {
                    Align = TextAnchor.MiddleCenter,
                    Color = "1 1 1 1",
                    FontSize = 14,
                    FadeIn = _config.AlertSettings.FadeIn,
                    Text = lang.GetLanguage(player.UserIDString) == "en" ? alert.TextENG : alert.TextRU
                },
                RectTransform =
                {
                    AnchorMin = "0.009895824 0.5490741",
                    AnchorMax = "0.2166667 0.7240741"
                }
            }, "Overlay", $"{UIMain}.Event");

            ui.Add(new CuiButton
            {
                Button =
                {
                    Color = "0.81 0.18 0.04 0.9",
                    Close = $"{UIMain}.Event",
                    FadeIn = _config.AlertSettings.FadeIn
                },
                Text =
                {
                    Align = TextAnchor.MiddleCenter,
                    Color = "1 1 1 0.8",
                    Text = "✖",
                    FontSize = 18,
                    FadeIn = _config.AlertSettings.FadeIn
                },
                RectTransform =
                {
                    AnchorMin = "0.8992443 0.7883595",
                    AnchorMax = "0.995 0.996"
                }
            }, $"{UIMain}.Event");

            ui.Add(new CuiButton
            {
                Button =
                {
                    Color = "0.23 0.74 0.18 0.7",
                    Close = $"{UIMain}.Event",
                    Command = $"alert.send {alert.ID}",
                    FadeIn = _config.AlertSettings.FadeIn
                },
                Text =
                {
                    Align = TextAnchor.MiddleCenter,
                    Color = "1 1 1 1",
                    FontSize = 14,
                    FadeIn = _config.AlertSettings.FadeIn,
                    Text = lang.GetLanguage(player.UserIDString) == "en" ? "GO" : "ПЕРЕЙТИ"
                },
                RectTransform =
                {
                    AnchorMin = "0.5692695 -0.2275134",
                    AnchorMax = "0.995 -0.005290791"
                }
            }, $"{UIMain}.Event");

            CuiHelper.DestroyUi(player, $"{UIMain}.Event");
            CuiHelper.AddUi(player, ui);
            timer.Once(_config.AlertSettings.FadeOut, () => CuiHelper.DestroyUi(player, $"{UIMain}.Event"));
        }

        #endregion
  
        #region [Hooks]

        // ReSharper disable once UnusedMember.Local
        private void OnServerInitialized()
        {
            LoadData();
        }

        // ReSharper disable once UnusedMember.Local
        private void OnItemAddedToContainer(ItemContainer container, Item item)
        {
            if (container == null | item == null) return;
            if (item.GetOwnerPlayer() == null) return;
            var player = item.GetOwnerPlayer();
            var alert = _config.AlertSettings.Alerts.Find(x =>
                x.Shortname == item.info.shortname
                & x.SkinID == item.skin);
            if (alert == null) return;
            if (!_dataBase.UsedAlerts.ContainsKey(player.userID))
                _dataBase.UsedAlerts.Add(player.userID, new List<int>());
            var db = _dataBase.UsedAlerts[player.userID];
            if (db.Contains(alert.ID))
                if (alert.IsRepit) DrawUI_Alert(player, alert);
                else return;
            DrawUI_Alert(player, alert);
            if (!db.Contains(alert.ID)) db.Add(alert.ID);
        }

        // ReSharper disable once UnusedMember.Local 
        private void AlertAll(int ID)
        {
            var alert = _config.AlertSettings.AlertsEvents.Find(f => f.ID == ID);
            if (alert == null) return;
            foreach (var player in BasePlayer.activePlayerList) DrawUI_AlertEvent(player, alert);
        }

        // ReSharper disable once UnusedMember.Local 
        private void Unload()
        {
            SaveData();
        }

        #endregion

        #region [Command]

        [ConsoleCommand("alert.send")]
        private void SendCommand(ConsoleSystem.Arg args)
        {
            if (args.Player() == null) return;
            var player = args.Player();
            var alert = _config.AlertSettings.Alerts.Find(i => i.ID == args.Args[0].ToInt());
            if (alert == null) return;
            if (alert.Command == null) return;
            foreach (var obj in alert.Command) player.SendConsoleCommand(obj);
        }

        #endregion

        #region [DataBase]

        private class StoredData
        {
            public Dictionary<ulong, List<int>> UsedAlerts = new Dictionary<ulong, List<int>>();
        }

        private void SaveData() => Interface.Oxide.DataFileSystem.WriteObject(Name, _dataBase);

        private void LoadData()
        {
            try
            {
                _dataBase = Interface.GetMod().DataFileSystem.ReadObject<StoredData>(Name);
            }
            catch (Exception)
            {
                _dataBase = new StoredData();
            }
        }

        #endregion
    }
}

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