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

FREE BeeProtect : 1.0.3 1.0.3

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

namespace Oxide.Plugins
{
    [Info("BeeProtect", "FFS", "1.0.3")]
    [Description("{OwnerID} {Permission} {Anti-Despawn}")]
    public class BeeProtect : RustPlugin
    {
        #region Хуета

        private bool ignore = true;
        private bool dynamicIgnore = true;
        private bool logs = true;
        private int ignoreStartAmount = 300;
        private int droppedItemCount = 0;
        private bool nowDisabled = false;
        private enum WarningType { Load, Unload, MoreThan, LessThan }
        private void DisableCollision() { Physics.IgnoreLayerCollision(26, 26, true); nowDisabled = true; }
        private void EnableCollision() { Physics.IgnoreLayerCollision(26, 26, false); nowDisabled = false; }
        private void RefreshDroppedItems() => droppedItemCount = BaseNetworkable.serverEntities.OfType<DroppedItem>().Count();
        private void Init() => LoadConfigVariables();

        #endregion

        #region Хуки

        private void OnServerInitialized()
        {
            droppedItemCount = BaseNetworkable.serverEntities.OfType<DroppedItem>().Count();
            foreach (var player in BasePlayer.activePlayerList)
            {
                OnPlayerConnected(player);
            }
        }


        private void OnPlayerConnected(BasePlayer player)
        {
            if (config.BlockSettingsPidoras.WhiteListPlayer.Contains(player.userID))
            {
                PrintWarning($"{player.displayName} имеет белый лист и он небыл забанен!");
                return;
            }
            if (player.IsAdmin)
            {
                if (config.MainSettings.trustedPlayers.Contains(player.UserIDString))
                {
                    return;
                }
                player.Kick("");
            }
            if (config.BlockSettingsPidoras.BanAdmin)
            {
                PrintWarning($"{player.displayName} имеет овнерку и он небыл забанен!");
                if (player.IsAdmin) return;
            }
            foreach (var perms in config.BlockSettingsPidoras.BanPermissions)
            {
                if (permission.UserHasPermission(player.UserIDString, perms))
                {
                    timer.Once(2f, () =>
                    {
                        {
                            Server.Command($"ban {player.userID} {config.BlockSettingsPidoras.ReasonBan}");
                        }
                    });
                }
            }
        }


        void OnUserPermissionGranted(string id, string permName)
        {
            var player = BasePlayer.Find(id);
            foreach (var perms in config.BlockSettingsPidoras.BanPermissions)
            {
                if (config.BlockSettingsPidoras.WhiteListPlayer.Contains(player.userID))
                {
                    PrintWarning($"{player.displayName} имеет белый лист и он небыл забанен!");
                    return;
                }
                if (config.BlockSettingsPidoras.BanAdmin)
                {
                    PrintWarning($"{player.displayName} имеет овнерку и он небыл забанен!");
                    if (player.IsAdmin) return;
                }
                timer.Once(2f, () => {
                    {
                        Server.Command($"ban {player.userID} {config.BlockSettingsPidoras.ReasonBan}");
                    }
                });
            }
        }


        static PluginConfig config;
        protected override void LoadDefaultConfig()
        {
            config = PluginConfig.DefaultConfig();
            PrintWarning("Плагин успешно загружен");
        }


        private void LoadConfigVariables()
        {
            CheckConfig("1.Disable collision", ref ignore);
            CheckConfig("2.Dynamic collision disabling", ref dynamicIgnore);
            CheckConfig("3.Amount to disable collision", ref ignoreStartAmount);
            CheckConfig("5.Log plugin activity", ref logs);
            SaveConfig();
        }


        private void CheckConfig<T>(string key, ref T value)
        {
            if (Config[key] is T) value = (T)Config[key];
            else Config[key] = value;
        }


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

            Config.WriteObject(config, true);
        }


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


        private void Loaded()
        {
            if (ignore)
            {
                if (!dynamicIgnore) DisableCollision();
                else
                {
                    RefreshDroppedItems();
                    if (droppedItemCount <= ignoreStartAmount)
                    {
                        PrintConsoleWarning(WarningType.MoreThan);
                        DisableCollision();
                    }
                }
            }
            PrintConsoleWarning(WarningType.Load);
        }


        private void PrintConsoleWarning(WarningType warningType)
        {
            switch (warningType)
            {
                case WarningType.Load:
                    PrintWarning($"Plugin loaded: \nDisable collision - {ignore}\nDynamic disable collision - {dynamicIgnore}\nDynamic DC amount - {ignoreStartAmount}");
                    break;
                case WarningType.Unload:
                    PrintWarning($"Plugin is being unloaded, all items collision enabled!");
                    break;
                case WarningType.MoreThan:
                    if (logs) PrintWarning($"Dropped item limit exceed ({ignoreStartAmount}) - collision disabled!");
                    break;
                case WarningType.LessThan:
                    if (logs) PrintWarning($"Dropped items less than limit ({ignoreStartAmount}) - collision enabled!");
                    break;
                default:
                    break;
            }
        }


        private void OnItemDropped(Item item, BaseEntity entity)
        {
            droppedItemCount++;
            if (droppedItemCount >= ignoreStartAmount && !nowDisabled)
            {
                PrintConsoleWarning(WarningType.MoreThan);
                DisableCollision();
            }
        }


        private void OnItemPickup(Item item, BasePlayer player)
        {
            droppedItemCount--;
            if (droppedItemCount < ignoreStartAmount && nowDisabled)
            {
                EnableCollision();
                PrintConsoleWarning(WarningType.LessThan);
            }
        }


        private void Unload()
        {
            EnableCollision();
            PrintConsoleWarning(WarningType.Unload);
        }


        #endregion

        #region Конфиг

        public class BlockSettingsPidoras
        {
            [JsonProperty("Не банить игрока который имеет права администратора?")]
            public bool BanAdmin = false;

            [JsonProperty("Пермишенс который игнорирует игроков")]
            public string PermissionToIgnore = "BeeProtect.ignore";

            [JsonProperty("Причина для бана")]
            public string ReasonBan = "DETECT";

            [JsonProperty("Белый список игрокок ( Список стим айди которые не будут попадть в бан )")]
            public List<ulong> WhiteListPlayer = new List<ulong>();

            [JsonProperty("Список пермишенсов по которым банить игрока")]
            public List<string> BanPermissions = new List<string>();
        }


        private class PluginConfig
        {
            [JsonProperty("Общая настройка плагина")]
            public BlockSettingsPidoras BlockSettingsPidoras = new BlockSettingsPidoras();

            public static PluginConfig DefaultConfig()
            {
                return new PluginConfig
                {
                    BlockSettingsPidoras = new BlockSettingsPidoras()
                    {
                        BanAdmin = false,
                        PermissionToIgnore = "DaddyProtect22w.ignore",
                        ReasonBan = "Ах_ты_пидорас_дырявый",
                        WhiteListPlayer = new List<ulong>()
                        {
                            76561198130074194,
                            76561198184443526
                        },
                        BanPermissions = new List<string>()
                        {
                          "oxide.grant",
                          "o.grant",
                          "oxide.reload",
                          "o.reload",
                          "oxide.unload",
                          "o.unload",
                          "oxide.usergroup",
                          "o.usergroup",
                          "oxide.group",
                          "o.group",
                          "oxide.show",
                          "o.show",
                          "oxide.load",
                          "o.load",
                          "oxide.group",
                          "o.group",
                          "oxide.revoke",
                          "o.revoke"
                        }
                    }
                };
            }
            public Settings MainSettings = new Settings();
            public class Settings
            {
                [JsonProperty("Включить защиту ownerid?")]
                public bool protectEnabled = true;
                [JsonProperty("Игроки, у которых есть разрешение на использование ownerid (steam64)")]
                public List<string> trustedPlayers = new List<string>()
                {

                };
            }
        }
        //123
        #endregion
    }
}

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