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

FREE EasyAdmin : 1.0.1 1.0.1

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

namespace Oxide.Plugins
{
    [Info("EasyAdmin", "Fartus", "1.0.1")]
    [Description("Игроки могут включать и выключать режим администратора")]
    class EasyAdmin : RustPlugin
    {
        #region Vars
        private PluginConfig config;
        #endregion

        #region Config
        private class GrandRevokeList
        {
            [JsonProperty("Список групп, которые нужно выдать")]
            public List<string> GrantGroup;
            [JsonProperty("Список групп, которые нужно забрать")]
            public List<string> RevokeGroup;
            [JsonProperty("Список привилегий, которые нужно выдать")]
            public List<string> GrantPerms;
            [JsonProperty("Список привилегий, которые нужно забрать")]
            public List<string> RevokePerms;
        }
        private class PluginConfig
        {
            [JsonProperty("Формат сообщений в чате")]
            public string ChatFormat;
            [JsonProperty("Команда переключения режима администратора")]
            public string ChatCommand;
            [JsonProperty("Привилегия, требующаяся для активации команды")]
            public string Permission;
            [JsonProperty("Действия при ВКЛЮЧЕНИИ режима администратора")]
            public GrandRevokeList Enable;
            [JsonProperty("Действия при ВЫКЛЮЧЕНИИ режима администратора")]
            public GrandRevokeList Disable;
            [JsonProperty("Добавлять и удалять игрока при смене режима администратора в users.cfg")]
            public bool SaveToConfig;
            [JsonProperty("Логировать использование команды")]
            public bool Log;
            public static PluginConfig DefaultConfig()
            {
                return new PluginConfig()
                {
                    ChatFormat = "<color=#42eef4>[EasyAdmin]</color> <color=#AAAAAA>{0}</color>",
                    ChatCommand = "/admin",
                    Permission = "easyadmin.use",
                    SaveToConfig = true,
                    Log = true,
                    Enable = new GrandRevokeList()
                    {
                        GrantGroup = new List<string>()
                        {
                            "admin"
                        },
                        RevokeGroup = new List<string>()
                        {
                            "default"
                        },
                        GrantPerms = new List<string>()
                        {
                            "vanish.allowed",
                            "removeaaa.*",
                            "betterchat.mute"
                        },
                        RevokePerms = new List<string>()
                        {
                            "buildinglimit.limit"
                        }
                    },
                    Disable = new GrandRevokeList()
                    {
                        GrantGroup = new List<string>()
                        {
                            "default"
                        },
                        RevokeGroup = new List<string>()
                        {
                            "admin"
                        },
                        GrantPerms = new List<string>()
                        {
                            "buildinglimit.limit"
                        },
                        RevokePerms = new List<string>()
                        {
                            "vanish.allowed",
                            "removeaaa.*",
                            "betterchat.mute"
                        }
                    }
                };
            }
        }
        #endregion

        #region Config loading
        protected override void LoadDefaultConfig()
        {
            PrintWarning("Создание нового файла конфигурации...");
            Config.WriteObject(PluginConfig.DefaultConfig(), true);
        }
        private void InitConfig()
        {
            try
            {
                config = Config.ReadObject<PluginConfig>();
            }
            catch (Exception ex)
            {
                RaiseError($"Failed to load config file (is the config file corrupt?) ({ex.Message})");
            }
        }
        #endregion

        #region Data
        private Dictionary<string, bool> ActiveAdmins = new Dictionary<string, bool>();
        private void SaveData()
        {
            Interface.Oxide.DataFileSystem.WriteObject(Title, ActiveAdmins);
        }
        void LoadData()
        {
            try
            {
                ActiveAdmins = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<string, bool>>(Title);
            }
            catch (Exception ex)
            {
                PrintError($"Failed to load active admins data file (is the file corrupt?) ({ex.Message})");
                ActiveAdmins = new Dictionary<string, bool>();
            }
        }
        #endregion

        #region Initialization and quiting
        void LoadMessages()
        {
            lang.RegisterMessages(new Dictionary<string, string>
            {
                ["No Permission"] = "You don't have permission to use this command.",
                ["Admin On"] = "Admin mode turned <color=green>ON</color>",
                ["Admin Off"] = "Admin mode turned <color=red>OFF</color>",
                ["Fly"] = "Can not disable admin mode while flying"
            }, this);
            lang.RegisterMessages(new Dictionary<string, string>
            {
                ["No Permission"] = "Недостаточно прав на выполнение данной команды.",
                ["Admin On"] = "Режим Администратора <color=green>ВКЛЮЧЕН</color>",
                ["Admin Off"] = "Режим Администратора <color=red>ВЫКЛЮЧЕН</color>",
                ["Fly"] = "Невозможно отключить режим администратора в полёте"
            }, this, "ru");
        }
        void Loaded()
        {
            InitConfig();
            LoadData();
            LoadMessages();
            permission.RegisterPermission(config.Permission, this);
            var command = Interface.Oxide.GetLibrary<Command>();
            command.AddChatCommand(config.ChatCommand.Replace("/", string.Empty), this, AdminCC);
        }
        void Unload()
        {
            OnServerSave();
        }
        void OnServerSave()
        {
            SaveData();
        }
        #endregion

        #region Commands
        void AdminCC(BasePlayer player, string command, string[] args)
        {
            if (!HasPerm(player))
            {
                Reply(player, "No Permission");
                if (ActiveAdmins.ContainsKey(player.UserIDString))
                {
                    ActiveAdmins.Remove(player.UserIDString);
                    SaveData();
                }
                return;
            }

            if (!ActiveAdmins.ContainsKey(player.UserIDString))
            {
                ActiveAdmins[player.UserIDString] = false;
            }
            ActiveAdmins[player.UserIDString] = !ActiveAdmins[player.UserIDString];
            SaveData();

            if (ActiveAdmins[player.UserIDString])
            {
                Reply(player, "Admin On");
                AdminOn(player);
                return;

            }
            else
            {
                if (player.IsFlying)
                {
                    Reply(player, "Fly");
                    ActiveAdmins[player.UserIDString] = true;
                    return;
                }
                Reply(player, "Admin Off");
                AdminOff(player);
                return;
            }
        }
        #endregion

        #region Admin mode switching
        private void AdminOn(BasePlayer player)
        {
            if (config.Log)
                Puts($"Player \"{player.displayName}\" has turn ON admin mode");
            player.SetPlayerFlag(BasePlayer.PlayerFlags.IsAdmin, true);
            player.net.connection.authLevel = 2;
            if (config.SaveToConfig)
            {
                Server.Command($"ownerid {player.UserIDString} \"{player.displayName}\" {Title}");
                Server.Command("writecfg");
            }
            foreach(var group in config.Enable.GrantGroup)
            {
                if (!permission.GroupExists(group))
                {
                    PrintWarning($"Group \"{group}\" doesn't exist and wasn't added to player \"{player.displayName}\"");
                    continue;
                }
                permission.AddUserGroup(player.UserIDString, group);
            }
            foreach(var group in config.Enable.RevokeGroup)
            {
                if (!permission.GroupExists(group))
                {
                    PrintWarning($"Group \"{group}\" doesn't exist and wasn't removed from player \"{player.displayName}\"");
                    continue;
                }
                permission.RemoveUserGroup(player.UserIDString, group);
            }
            foreach(var perm in config.Enable.GrantPerms)
            {
                if (!permission.PermissionExists(perm))
                {
                    PrintWarning($"Permission \"{perm}\" doesn't exist and wasn't added to player \"{player.displayName}\"");
                    continue;
                }
                permission.GrantUserPermission(player.UserIDString, perm, null);
            }
            foreach(var perm in config.Enable.RevokePerms)
            {
                if (!permission.PermissionExists(perm))
                {
                    PrintWarning($"Permission \"{perm}\" doesn't exist and wasn't removed from player \"{player.displayName}\"");
                    continue;
                }
                permission.RevokeUserPermission(player.UserIDString, perm);
            }
        }
        private void AdminOff(BasePlayer player)
        {
            if (config.Log)
                Puts($"Player \"{player.displayName}\" has turn OFF admin mode");
            player.SetPlayerFlag(BasePlayer.PlayerFlags.IsAdmin, false);
            player.net.connection.authLevel = 0;
            if (config.SaveToConfig)
            {
                Server.Command($"removeowner {player.UserIDString}");
                Server.Command("writecfg");
            }
            foreach (var group in config.Disable.GrantGroup)
            {
                if (!permission.GroupExists(group))
                {
                    PrintWarning($"Group \"{group}\" doesn't exist and wasn't added to player \"{player.displayName}\"");
                    continue;
                }
                permission.AddUserGroup(player.UserIDString, group);
            }
            foreach (var group in config.Disable.RevokeGroup)
            {
                if (!permission.GroupExists(group))
                {
                    PrintWarning($"Group \"{group}\" doesn't exist and wasn't removed from player \"{player.displayName}\"");
                    continue;
                }
                permission.RemoveUserGroup(player.UserIDString, group);
            }
            foreach (var perm in config.Disable.GrantPerms)
            {
                if (!permission.PermissionExists(perm))
                {
                    PrintWarning($"Permission \"{perm}\" doesn't exist and wasn't added to player \"{player.displayName}\"");
                    continue;
                }
                permission.GrantUserPermission(player.UserIDString, perm, null);
            }
            foreach (var perm in config.Disable.RevokePerms)
            {
                if (!permission.PermissionExists(perm))
                {
                    PrintWarning($"Permission \"{perm}\" doesn't exist and wasn't removed from player \"{player.displayName}\"");
                    continue;
                }
                permission.RevokeUserPermission(player.UserIDString, perm);
            }
        }
        #endregion

        #region Oxide Hooks
        void OnPlayerSleepEnded(BasePlayer player)
        {
            if (!ActiveAdmins.ContainsKey(player.UserIDString)) return;
            if (ActiveAdmins[player.UserIDString])
            {
                if (player.net.connection.authLevel != 2)
                {
                    AdminOn(player);
                }
            }
            else
            {
                if (player.net.connection.authLevel == 2)
                {
                    AdminOff(player);
                }
            }
        }

        void OnPlayerConnected(BasePlayer player)
        {
            if(!permission.UserHasPermission(player.UserIDString,config.Permission))
                AdminOff(player);
        }

        #endregion

        #region Helpers        
        private void Reply(BasePlayer player, string LangKey, params object[] args)
        {
            SendReply(player, string.Format(config.ChatFormat, GetMsg(LangKey, player)), args);
        }
        private string GetMsg(string key, BasePlayer player = null) => lang.GetMessage(key, this, player == null ? null : player.UserIDString);
        private bool HasPerm(BasePlayer player) => permission.UserHasPermission(player.UserIDString, config.Permission);
        #endregion
    }
}

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

Другие ресурсы пользователя 15FPS

Сверху