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

FREE TimedCommandBlocker : 1.1.0 1.1.0

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

namespace Oxide.Plugins
{
    [Info("Command Blocker", "Orange", "1.1.0")]
    [Description("Block commands temporarily or permanently")]
    public class TimedCommandBlocker : RustPlugin
    {
        #region Oxide Hooks

        private void Init()
        {
            OnStart();
        }

        private object OnPlayerCommand(ConsoleSystem.Arg arg)
        {
            return CheckCommand(arg);
        }
        
        private object OnServerCommand(ConsoleSystem.Arg arg)
        {
            return CheckCommand(arg);
        }

        #endregion

        #region Helpers

        private void OnStart()
        {
            lang.RegisterMessages(EN, this);
        }
        
        private object CheckCommand(ConsoleSystem.Arg arg)
        {
            var player = arg.Player();
            if (player == null) {return null;}
            if (player.IsAdmin) {return null;}
            var command = arg.cmd.FullName;

            foreach (var a in arg.Args)
            {
                command += $" {a}";
            }
            
            command = command.Replace("chat.say /", string.Empty);
            
            var blocked = 0;

            foreach (var item in config.commands)
            {
                if (command.Contains(item.Key))
                {
                    var blocktime = item.Value;
                    
                    if (blocktime == 0)
                    {
                        blocked = 0;
                        break;
                    }

                    var left = blocktime - Passed(SaveTime());
                    
                    if (left > 0)
                    {
                        blocked = left;
                        break;
                    }

                    blocked = -1;
                }
            }

            if (blocked != -1)
            {
                message(player, "Blocked", command);
                
                if (blocked != 0)
                {
                    message(player, "Unblock", command, blocked, blocked / 60);
                }
                
                return false;
            }

            return null;
        }

        private static double Now()
        {
            return DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds;
        }

        private int Passed(double a)
        {
            return Convert.ToInt32(Now() - a);
        }
        
        private double SaveTime()
        {
            return SaveRestore.SaveCreatedTime.ToOADate();
        }

        #endregion
        
        #region Config
        
        private ConfigData config;
        
        private class ConfigData
        {    
            [JsonProperty(PropertyName = "Command - time in seconds")]
            public Dictionary<string, int> commands;
        }
        
        private ConfigData GetDefaultConfig()
        {
            return new ConfigData
            {
                commands = new Dictionary<string, int>
                {
                    ["test"] = 0,
                    ["kit orange"] = 86400,
                }
            };
        }
        
        protected override void LoadConfig()
        {
            base.LoadConfig();
   
            try
            {
                config = Config.ReadObject<ConfigData>();
            }
            catch
            {
                LoadDefaultConfig();
            }

            SaveConfig();
        }

        protected override void LoadDefaultConfig()
        {
            PrintError("Configuration file is corrupt(or not exists), creating new one!");
            config = GetDefaultConfig();
        }

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

        #endregion

        #region Localization

        private Dictionary<string, string> EN = new Dictionary<string, string>
        {
            {"Blocked", "Command '{0}' is blocked."},
            {"Unblock", "Unblock time {1} seconds [{2} min]"},
        };

        private void message(BasePlayer p, string key, params object[] args)
        {
            p.ChatMessage(string.Format(lang.GetMessage(key, this, p.UserIDString), args));
        }

        #endregion
    }
}

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