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

FREE MagicDescription : 1.3.1 1.3.1

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

namespace Oxide.Plugins
{
    [Info("Magic Description", "Wulf/lukespragg", "1.3.1", ResourceId = 1447)]
    [Description("Adds dynamic information in the server description")]
    public class MagicDescription : RustPlugin
    {
        #region Configuration

        private Configuration config;

        public class Configuration
        {
            [JsonProperty(PropertyName = "Server description")]
            public string Description;

            [JsonProperty(PropertyName = "Update interval (seconds)")]
            public int UpdateInterval;

            [JsonProperty(PropertyName = "Show loaded plugins (true/false)")]
            public bool ShowPlugins;

            [JsonProperty(PropertyName = "Hidden plugins (filename or title)")]
            public List<string> HiddenPlugins;

            public static Configuration DefaultConfig()
            {
                return new Configuration
                {
                    Description = "Powered by Oxide {magic.version} for Rust {magic.version protocol}\\n\\n{server.pve}",
                    UpdateInterval = 300,
                    ShowPlugins = false,
                    HiddenPlugins = new List<string> { "PrivateStuff", "OtherName", "Epic Stuff" }
                };
            }
        }

        protected override void LoadConfig()
        {
            base.LoadConfig();
            try
            {
                config = Config.ReadObject<Configuration>();
                if (config?.Description == null)
                {
                    LoadDefaultConfig();
                    SaveConfig();
                }
            }
            catch
            {
                PrintWarning($"Could not read oxide/config/{Name}.json, creating new config file");
                LoadDefaultConfig();
            }
        }

        protected override void LoadDefaultConfig() => config = Configuration.DefaultConfig();

        protected override void SaveConfig() => Config.WriteObject(config);

        #endregion

        #region Initialization

        private static readonly Regex varRegex = new Regex(@"\{(.*?)\}");
        private static bool serverInitialized;

        private void OnServerInitialized()
        {
            UpdateDescription();
            serverInitialized = true;
            timer.Every(config.UpdateInterval, () => UpdateDescription());

            if (!config.ShowPlugins) { Unsubscribe(nameof(OnPluginLoaded)); Unsubscribe(nameof(OnPluginUnloaded)); }
        }

        #endregion

        #region Description Handling

        private void OnPluginLoaded()
        {
            if (serverInitialized) UpdateDescription();
        }

        private void OnPluginUnloaded() => UpdateDescription();

        private void UpdateDescription(string text = "")
        {
            if (!string.IsNullOrEmpty(text))
            {
                Config["Description"] = text;
                config.Description = text;
                SaveConfig();
            }

            var newDescription = new StringBuilder(config.Description);

            var matches = varRegex.Matches(config.Description);
            foreach (Match match in matches)
            {
                var command = match.Groups[1].Value;
                if (string.IsNullOrEmpty(command)) continue;

                var reply = ConsoleSystem.Run(ConsoleSystem.Option.Server.Quiet(), command);
                newDescription.Replace(match.ToString(), reply.Replace("\"", "") ?? "");
            }

            if (config.ShowPlugins)
            {
                var loaded = plugins.GetAll();
                if (loaded.Length == 0) return;

                var count = 0;
                string pluginList = null;
                foreach (var plugin in loaded.Where(p => !p.IsCorePlugin))
                {
                    if (config.HiddenPlugins.Contains(plugin.Title) || config.HiddenPlugins.Contains(plugin.Name)) continue;

                    pluginList += plugin.Title + ", ";
                    count++;
                }
                if (pluginList != null)
                {
                    if (pluginList.EndsWith(", ")) pluginList = pluginList.Remove(pluginList.Length - 2);
                    newDescription.Append($"\n\nPlugins ({count}): {pluginList}");
                }
            }

            if (newDescription.ToString() == ConVar.Server.description) return;

            ConVar.Server.description = newDescription.ToString();
            Puts("Server description updated!");
        }

        #endregion

        #region Command Handling

        private object OnServerCommand(ConsoleSystem.Arg arg)
        {
            if (!serverInitialized) return null;

            var command = arg.cmd.FullName;
            if (command != "server.description" || !arg.IsAdmin) return null;
            if (!arg.HasArgs() || arg.Args.GetValue(0) == null) return null;

            var newDescription = string.Join(" ", arg.Args.ToArray());
            UpdateDescription(newDescription);
            Interface.Oxide.LogInfo($"server.description: {newDescription}");
            return true;
        }

        [ConsoleCommand("magic.version")]
        private void VersionCommand(ConsoleSystem.Arg arg)
        {
            var oxide = Core.OxideMod.Version.ToString();
            var protocol = Rust.Protocol.printable;
            var branch = Facepunch.BuildInfo.Current.Scm.Branch;
            var date = Facepunch.BuildInfo.Current.BuildDate.ToLocalTime().ToString();

            var args = arg.FullString.ToLower();
            switch(args)
            {
                default:
                case "oxide":
                    arg.ReplyWith(oxide);
                    break;
                
                case "rust":
                case "protocol":
                    arg.ReplyWith(protocol);
                    break;

                case "branch":
                    arg.ReplyWith(branch);
                    break;

                case "date":
                case "builddate":
                    arg.ReplyWith(date);
                    break;
            }
        }

        #endregion
    }
}

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