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

FREE WipeAddon : 1.0.1 1.0.1

Нет прав для скачивания
C#:
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Libraries.Covalence;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;

namespace Oxide.Plugins
{
	[Info("WipeAddon", "King", "1.0.1")]
	public class WipeAddon : RustPlugin
	{
        #region [Vars]
        private const String IgnorePermission = "WipeAddon.ignore";
        private const Boolean LanguageEn = false;
		private Boolean WipeServer = false;
		private TimeSpan WipeTime = new TimeSpan();
		private static StringBuilder sb = null;
        #endregion

        #region [Data]
		private void SaveData()
		{
			Interface.Oxide.DataFileSystem.WriteObject($"{Name}", WipeServer);
		}

		private void LoadData()
		{
			try
			{
				WipeServer = Interface.Oxide.DataFileSystem.ReadObject<Boolean>($"{Name}");
			}
			catch (Exception e)
			{
				PrintError(e.ToString());
			}

			if (WipeServer == null) WipeServer = false;
		}
        #endregion

        #region [Oxide-Api]
		private void OnNewSave() =>
			WipeServer = true;

		private void Init()
		{
            LoadData();
            
			Unsubscribe(nameof(CanUserLogin));
			Unsubscribe(nameof(OnPlayerConnected));

            if (!permission.PermissionExists(IgnorePermission))
                permission.RegisterPermission(IgnorePermission, this);

			sb = new StringBuilder();
		}

        private void OnServerInitialized()
        {
			if (WipeServer)
			{
				WipeTime = new TimeSpan(config.Hours, config.Minutes, 0);
				DateTime Time = DateTime.Now;

				if (Time.TimeOfDay >= WipeTime)
				{
					Interface.Oxide.UnloadPlugin(this.Name);
					return;
				}

				Subscribe(nameof(CanUserLogin));
				Subscribe(nameof(OnPlayerConnected));

				foreach(BasePlayer player in BasePlayer.activePlayerList)
					OnPlayerConnected(player);

				PrintWarning(LanguageEn ? "The server is closed to players." : "Сервер закрыт для игроков.");
				ServerMgr.Instance.InvokeRepeating(TimeHandle, 1f, 1f);
			}
        }

		private void Unload()
		{
			ServerMgr.Instance.CancelInvoke(TimeHandle);
            
            SaveData();
			sb = null;
		}
        #endregion

        #region [Rust-Api]
        private object CanUserLogin(String name, String id)
        {
            IPlayer player = covalence.Players.FindPlayerById(id);
            if (player != null && !config.NoKickAdmin && player.IsAdmin || config.AdminList.Contains(UInt64.Parse(id)) || permission.UserHasPermission(id, IgnorePermission))  return null;

			DateTime Time = DateTime.Now;
            return $"{GetLang("KICK_TEXT", id, NumericalFormatter.FormatTime(WipeTime - Time.TimeOfDay, 5, lang.GetLanguage(id)))}";
        }

		private void OnPlayerConnected(BasePlayer player)
		{
			if (player == null || !config.NoKickAdmin && player.IsAdmin || config.AdminList.Contains(player.userID) || permission.UserHasPermission(player.UserIDString, IgnorePermission)) return;

			DateTime Time = DateTime.Now;
            player.Kick($"{GetLang("KICK_TEXT", player.UserIDString, NumericalFormatter.FormatTime(WipeTime - Time.TimeOfDay, 5, lang.GetLanguage(player.UserIDString)))}");
		}
        #endregion
        
        #region [Functional]
		private void TimeHandle()
		{
			DateTime Time = DateTime.Now;
			if (Time.TimeOfDay >= WipeTime)
			{
				Unsubscribe(nameof(CanUserLogin));
				Unsubscribe(nameof(OnPlayerConnected));

				SaveRestore.SaveCreatedTime = Time;
				rust.RunServerCommand("env.time 12");

				PrintWarning(LanguageEn ? "The server is open to players." : "Сервер открыт для игроков.");
				ServerMgr.Instance.CancelInvoke(TimeHandle);
                Interface.Oxide.UnloadPlugin(Name);
			}
		}
        #endregion

		#region [Time]
        public static class NumericalFormatter
        {
            public static String FormatTime(TimeSpan time, Int32 maxSubstr = 5, String language = "ru")
            {
                String result = String.Empty;
                switch (language)
                {
                    case "ru":
                        Int32 i = 0;
                        if (time.Days != 0 && i < maxSubstr)
                        {
                            if (!String.IsNullOrEmpty(result))
                                result += " ";

                            result += $"{Format(time.Days, " дней", " дня", " дней")}";
                            i++;
                        }
                        if (time.Hours != 0 && i < maxSubstr)
                        {
                            if (!String.IsNullOrEmpty(result))
                                result += " ";

                            result += $"{Format(time.Hours, " часов", " часа", " час")}";
                            i++;
                        }
                        if (time.Minutes != 0 && i < maxSubstr)
                        {
                            if (!String.IsNullOrEmpty(result))
                                result += " ";

                            result += $"{Format(time.Minutes, " минут", " минуты", " минуту")}";
                            i++;
                        }
                        if (time.Days == 0)
                        {
                            if (time.Seconds != 0 && i < maxSubstr)
                            {
                                if (!String.IsNullOrEmpty(result))
                                    result += " ";

                                result += $"{Format(time.Seconds, " секунд", " секунды", " секунду")}";
                                i++;
                            }
                        }
                        if (String.IsNullOrEmpty(result))
                            result = "0 секунд";
                        break;
                    default:
                        result = String.Format("{0}{1}{2}{3}",
                            time.Duration().Days > 0
                                ? $"{time.Days:0} day{(time.Days == 1 ? String.Empty : "s")}, "
                                : String.Empty,
                            time.Duration().Hours > 0
                                ? $"{time.Hours:0} hour{(time.Hours == 1 ? String.Empty : "s")}, "
                                : String.Empty,
                            time.Duration().Minutes > 0
                                ? $"{time.Minutes:0} minute{(time.Minutes == 1 ? String.Empty : "s")}, "
                                : String.Empty,
                            time.Duration().Seconds > 0
                                ? $"{time.Seconds:0} second{(time.Seconds == 1 ? String.Empty : "s")}"
                                : String.Empty);

                        if (result.EndsWith(", "))
                            result = result.Substring(0, result.Length - 2);

                        if (String.IsNullOrEmpty(result))
                            result = "0 seconds";
                        break;
                }
                return result;
            }

            private static String Format(Int32 units, String form1, String form2, String form3)
            {
                var tmp = units % 10;

                if (units >= 5 && units <= 20 || tmp >= 5 && tmp <= 9)
                    return $"{units}{form1}";

                if (tmp >= 2 && tmp <= 4)
                    return $"{units}{form2}";

                return $"{units}{form3}";
            }
        }
		#endregion

        #region [Lang]
		private new void LoadDefaultMessages()
        {
            lang.RegisterMessages(new Dictionary<String, String>
            {
                ["KICK_TEXT"] = "The server will work through: {0}"
            }, this);

            lang.RegisterMessages(new Dictionary<String, String>
            {
				["KICK_TEXT"] = "Сервер будет открыт через: {0}"
            }, this, "ru");
        }

        public String GetLang(String LangKey, String userID = null, params object[] args)
        {
            sb?.Clear();
            if (args != null)
            {
                sb?.AppendFormat(lang.GetMessage(LangKey, this, userID), args);
                return sb?.ToString();
            }
            return lang.GetMessage(LangKey, this, userID);
        }
        #endregion

        #region [Api]
        private Boolean IsBlocked() => WipeServer;
        #endregion

        #region [Config]
        private PluginConfig config;

        protected override void LoadDefaultConfig()
        {
            config = PluginConfig.DefaultConfig();
        }

        protected override void LoadConfig()
        {
            base.LoadConfig();
            config = Config.ReadObject<PluginConfig>();

            if (config.PluginVersion < Version)
                UpdateConfigValues();

            Config.WriteObject(config, true);
        }

        private void UpdateConfigValues()
        {
            PluginConfig baseConfig = PluginConfig.DefaultConfig();
            if (config.PluginVersion < Version)
            {
                config.PluginVersion = Version;
                /*if (Version == new VersionNumber(1, 0, 0))
                {

                }*/

                PrintWarning("Config checked completed!");
            }
            config.PluginVersion = Version;
        }

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

        private class PluginConfig
        {
			[JsonProperty(LanguageEn ? "Allow players with admin rights to enter the server ?" : "Разрешить игрокам с правами администратра заходить на сервер ?" )]
			public Boolean NoKickAdmin;

			[JsonProperty(LanguageEn ? "Players who can access the server [SteamID]" : "Игроки которым можно заходить на сервер [SteamID]" )]
			public List<UInt64> AdminList = new List<UInt64>();

			[JsonProperty(LanguageEn ? "Time to open the server | Hours" : "Время когда открывать сервер | Часы" )]
			public Int32 Hours;

			[JsonProperty(LanguageEn ? "Time to open the server | Minutes " : "Время когда открывать сервер | Минуты" )]
			public Int32 Minutes;

            [JsonProperty("Config version")]
            public VersionNumber PluginVersion = new VersionNumber();

            public static PluginConfig DefaultConfig()
            {
                return new PluginConfig()
                {
					NoKickAdmin = true,
                    AdminList = new List<UInt64>()
					{
						765600000000,
						765600000044,
						765600000123
					},
					Hours = 14,

                    PluginVersion = new VersionNumber()
                };
            }
        }
        #endregion
    }
}

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