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

FREE SemiAdmin : 0.0.2 0.0.2

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

namespace Oxide.Plugins
{
    [Info("SemiAdmin", "MaltrzD", "0.0.2")]
    class SemiAdmin : RustPlugin
    {
        private static SemiAdmin _ins;
        private ConfigData _config;

        #region [ OXIDE HOOK ] 
        private void Loaded()
        {
            ReadConfig();

            _ins = this;

            PermissionService.RegisterPermissions(_config.SemiAdminCmds.Select(x => x.Permission).ToList());

            foreach (var sac in _config.SemiAdminCmds)
            {
                cmd.AddChatCommand(sac.ChatCmd, this, SemiAdminCommand_ChatCommand);
            }
        }
        #endregion

        private void SemiAdminCommand_ChatCommand(BasePlayer player, string cmd, string[] args)
        {
            SemiAdminCmd sac = _config.SemiAdminCmds.Where(x => x.ChatCmd == cmd).FirstOrDefault();
            if (string.IsNullOrEmpty(cmd) == false)
            {
                if (PermissionService.HasPermission(player.UserIDString, sac.Permission) == false)
                {
                    player.ChatMessage("У вас нет прав чтобы использовать эту команду!");
                    return;
                }

                string argsToString = string.Empty;
                foreach (var arg in args)
                {
                    argsToString += arg + " ";
                }
             
                if (player.IsAdmin == false)
                {
                    SetPlayerFlag(player, BasePlayer.PlayerFlags.IsAdmin, true);

                    player.Command($"{sac.ConsoleCmd}", args);

                    SetPlayerFlag(player, BasePlayer.PlayerFlags.IsAdmin, false);
                }
                else
                {
                    player.Command($"{sac.ConsoleCmd} \"{argsToString}\"");
                }
            }
        }

        #region [ EXT ]
        public static class PermissionService
        {
            public static void RegisterPermissions(List<string> perms)
            {
                foreach (var perm in perms)
                    if (_ins.permission.PermissionExists(perm, _ins) == false)
                        _ins.permission.RegisterPermission(perm, _ins);
            }
            public static void RegisterPermission(string perm)
            {
                if (_ins.permission.PermissionExists(perm, _ins) == false)
                    _ins.permission.RegisterPermission(perm, _ins);
            }
            public static bool HasPermission(string uid, string perm)
                => _ins.permission.UserHasPermission(uid, perm);
        }
        private void SetPlayerFlag(BasePlayer player, BasePlayer.PlayerFlags f, bool b) 
        { 
            if (b)
            {
                if (player.HasPlayerFlag(f)) return;

                player.playerFlags |= f;
            } 
            else 
            {
                if (!player.HasPlayerFlag(f)) return; 

                player.playerFlags &= ~f; 
            } 

            player.SendNetworkUpdateImmediate(false);
        }
        #endregion

        #region [ CONFIG ]
        class ConfigData
        {
            public List<SemiAdminCmd> SemiAdminCmds = new List<SemiAdminCmd>()
            {
                new SemiAdminCmd(),
                new SemiAdminCmd() { ChatCmd = "respawn", ConsoleCmd = "respawn", Permission = "semiadmin.respawn" },
                new SemiAdminCmd() { ChatCmd = "dcamera", ConsoleCmd = "debugcamera", Permission = "semiadmin.debugcamera" },
                new SemiAdminCmd() { ChatCmd = "noclip", ConsoleCmd = "noclip", Permission = "semiadmin.noclip" },
            };
        }
        protected override void LoadDefaultConfig()
        {
            var config = new ConfigData();

            SaveConfig(config);
        }
        void SaveConfig(object config)
        {
            Config.WriteObject(config, true);
        }
        void ReadConfig()
        {
            base.Config.Settings.ObjectCreationHandling = ObjectCreationHandling.Replace;
            _config = Config.ReadObject<ConfigData>();
            SaveConfig(_config);
        }
        #endregion
        public class SemiAdminCmd
        {
            [JsonProperty("Консольная команда")]
            public string ConsoleCmd { get; set; } = "spectate";
            [JsonProperty("Чат команда")]
            public string ChatCmd { get; set; } = "spectate";
            [JsonProperty("Право на использование чат команды")]
            public string Permission { get; set; } = "semiadmin.spectate";
        }
    }
}

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