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

FREE Shortmenu : 1.0.2 1.0.2

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

namespace Oxide.Plugins
{
    [Info("Shortmenu", "Greyghost", "1.0.2")]
    [Description("Interface for displaying game statistics")]
    public class Shortmenu : RustPlugin
    {
        #region [Reference]

#pragma warning disable CS0649
        [PluginReference] private Plugin ImageLibrary;
#pragma warning restore CS0649
        private StoredData _dataBase = new StoredData();

        #endregion

        #region [Configuraton] / [Конфигурация]

        private ConfigData _config;

        public class ConfigData
        {
            [JsonProperty(PropertyName = "ShortMenu - Настройка")]
            public MenuCFG MenuConfig = new MenuCFG();

            public class MenuCFG
            {
                [JsonProperty(PropertyName = "Черный список IP (192.168.0.1)")]
                public List<string> BlockedIP;
            }
        }

        private ConfigData GetDefaultConfig()
        {
            return new ConfigData
            {
                MenuConfig = new ConfigData.MenuCFG
                {
                    BlockedIP = new List<string>
                    {
                        "192.168.0.1"
                    }
                }
            };
        }

        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 [Vars]

        private const string UIMain = "Shortmenu.Main";
        private const string UIMenu = "Shortmenu.Main.Menu";

        private readonly WaitForSeconds _waitForSeconds = new WaitForSeconds(0.1f);

        private readonly Dictionary<string, string> _images = new Dictionary<string, string>
        {
            ["UI.Menu.Background1"] = "https://gspics.org/images/2022/07/01/0139bj.png",
            ["UI.Menu.Background2"] = "https://gspics.org/images/2022/07/01/0134ME.png",
        };

        #endregion

        #region [UI]

        private void OpenUI_Main(BasePlayer player)
        {
            var ui = new CuiElementContainer
            {
                {
                    new CuiPanel
                    {
                        CursorEnabled = true,
                        Image =
                        {
                            Color = "0.13 0.13 0.15 0.00"
                        },
                        RectTransform =
                        {
                            AnchorMin = "0.1557292 0.1870372",
                            AnchorMax = "0.8067709 0.8379631"
                        }
                    },
                    "Overlay", UIMain
                },
                new CuiElement
                {
                    Name = UIMenu,
                    Parent = UIMain,
                    Components =
                    {
                        new CuiRawImageComponent
                        {
                            Png = lang.GetLanguage(player.UserIDString) == "ru"
                                ? GetImage("UI.Menu.Background1")
                                : GetImage("UI.Menu.Background2")
                        },
                        new CuiRectTransformComponent
                        {
                            AnchorMin = "0 0",
                            AnchorMax = "1 1"
                        }
                    }
                },
                {
                    new CuiButton
                    {
                        Button =
                        {
                            Color = "0 0 0 0",
                            Close = UIMain,
                        },
                        RectTransform =
                        {
                            AnchorMin = "0 0",
                            AnchorMax = "1 1"
                        },
                        Text =
                        {
                            Text = ""
                        }
                    },
                    UIMenu
                }
            };

            CuiHelper.DestroyUi(player, UIMain);
            CuiHelper.AddUi(player, ui);
            if (!_dataBase.Players.Contains(player.userID))
            {
                _dataBase.Players.Add(player.userID);
            }
        }

        #endregion

        #region [Hooks]

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

        // ReSharper disable once UnusedMember.Local
        private void OnServerInitialized()
        {
            LoadData();
            ServerMgr.Instance.StartCoroutine(LoadImages());
            cmd.AddChatCommand("menu", this, "OpenStatistic");
        }

        // ReSharper disable once UnusedMember.Local
        // ReSharper disable once UnusedParameter.Local
        private void OnPlayerConnected(BasePlayer player, string reason)
        {
            if (_dataBase.Players.Contains(player.userID)) return;
            if (_config.MenuConfig.BlockedIP.Any(ip => player.Connection.ipaddress.Contains(ip))) return;
            NextFrame(() => OpenUI_Main(player));
        }

        // ReSharper disable once UnusedMember.Local
        // ReSharper disable once UnusedParameter.Local
        private void OnNewSave(string filename)
        {
            _dataBase.Players.Clear();
            SaveData();
        }

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

        #endregion

        #region [Commands]

        // ReSharper disable once UnusedMember.Local
        private void OpenStatistic(BasePlayer player)
        {
            OpenUI_Main(player);
        }

        [ConsoleCommand("CloseShortmenu")]
        // ReSharper disable once UnusedMember.Local
        private void CloseStatistic(ConsoleSystem.Arg args)
        {
            CuiHelper.DestroyUi(args.Player(), UIMain);
        }

        [ChatCommand("addblockip")]
        // ReSharper disable once UnusedMember.Local
        private void AddBlock(BasePlayer player, string Command, string[] args)
        {
            _config.MenuConfig.BlockedIP.Add(args[0]);
            // SaveData();
        }

        #endregion

        #region [DataBase]

        private class StoredData
        {
            public List<ulong> Players = new List<ulong>();
        }

        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

        #region [Helpers]

        private string GetImage(string image)
        {
            return (string) ImageLibrary.Call("GetImage", image);
        }

        private IEnumerator LoadImages()
        {
            PrintWarning("Load images...");
            foreach (var image in _images)
            {
                ImageLibrary.Call("AddImage", image.Value, image.Key);
                yield return _waitForSeconds;
            }

            PrintWarning("Images loaded");
            yield return 0;
        }

        #endregion
    }
}

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