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

FREE BetterAdmin : 1.0.0 1.0.0

Нет прав для скачивания
C#:
using Newtonsoft.Json;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("Better Admin", "Malmo", "1.0.0")]
    public class BetterAdmin : RustPlugin
    {
        #region Fields

        private const string PermissionPrefix = "betteradmin.";

        private PluginConfig _config;

        #endregion

        #region Setup & Teardown

        private void Init()
        {
            _config = Config.ReadObject<PluginConfig>();

            InitPermissions();
            SubscribeToHooks();
        }

        private void SubscribeToHooks()
        {
            ConditionalSubscribe(nameof(OnDefaultItemsReceive), _config.AdminSpawnWithoutStarterItems);
            ConditionalSubscribe(nameof(OnPlayerCorpseSpawn), _config.DisableAdminCorpses || _config.DisableAdminDropLoot || _config.KillAdminsOnDisconnect);
            ConditionalSubscribe(nameof(CanDropActiveItem), _config.DisableAdminCorpses);
            ConditionalSubscribe(nameof(OnItemDropped), _config.DisableAdminDropLoot);
            ConditionalSubscribe(nameof(OnTeamInvite), _config.DisableAdminTeamInvites);
            ConditionalSubscribe(nameof(OnNpcTarget), _config.DisableAdminTargeting);
            ConditionalSubscribe(nameof(OnHelicopterTarget), _config.DisableAdminTargeting);
            ConditionalSubscribe(nameof(OnTurretTarget), _config.DisableAdminTargeting);
            ConditionalSubscribe(nameof(CanBradleyApcTarget), _config.DisableAdminTargeting);
            ConditionalSubscribe(nameof(CanBeTargeted), _config.DisableAdminTargeting);
            ConditionalSubscribe(nameof(OnEntityMarkHostile), _config.DisableAdminHostile);
            ConditionalSubscribe(nameof(OnPlayerViolation), _config.DisableAntiHackViolations);
            ConditionalSubscribe(nameof(OnPlayerDisconnected), _config.KillAdminsOnDisconnect);
        }

        #endregion

        #region Oxide Hooks

        private object OnDefaultItemsReceive(PlayerInventory inventory)
        {
            var player = inventory.GetComponent<BasePlayer>();
            if (!IsBetter(player)) return null;

            if (_config.AdminSpawnWithoutStarterItems && !UserHasPermission(player, "bypass.starter-items"))
            {
                Debug("Removed starter items");
                return false;
            }

            return null;
        }

        private object OnPlayerViolation(BasePlayer player, AntiHackType type, float amount)
        {
            if (!IsBetter(player)) return null;

            if (_config.DisableAntiHackViolations && !UserHasPermission(player, "bypass.anti-hack"))
            {
                Debug("Disabled anti-hack violation");
                return false;
            }

            return null;
        }

        private void OnPlayerDisconnected(BasePlayer player, string reason)
        {
            if (!IsBetter(player)) return;

            if (_config.KillAdminsOnDisconnect && !UserHasPermission(player, "bypass.disconnect-die"))
            {
                Debug("Killed admin on disconnect");
                player.inventory.Strip();
                player.Die();
            }
        }

        private object OnPlayerCorpseSpawn(BasePlayer player)
        {
            if (!IsBetter(player)) return null;

            if (
                (_config.DisableAdminCorpses || _config.KillAdminsOnDisconnect || _config.DisableAdminDropLoot)
                && !UserHasPermission(player, "bypass.corpse"))
            {
                Debug("Disabled corpse");
                return false;
            }

            return null;
        }

        private object CanDropActiveItem(BasePlayer player)
        {
            if (!IsBetter(player)) return null;

            if (_config.DisableAdminCorpses && !UserHasPermission(player, "bypass.corpse"))
            {
                Debug("Dont drop active item");
                return false;
            }

            return null;
        }

        private void OnItemDropped(Item item, BaseEntity entity)
        {
            if (item == null || entity == null) return;
            var player = item?.GetOwnerPlayer();

            if (!IsBetter(player)) return;

            if (player != null && _config.DisableAdminDropLoot && !UserHasPermission(player, "bypass.drop-loot"))
            {
                Debug("Deleted dropped item");
                entity.Kill();
            }
        }

        private object OnTeamInvite(BasePlayer inviter, BasePlayer target)
        {
            if (!IsBetter(inviter)) return null;

            if (_config.DisableAdminTeamInvites && !UserHasPermission(inviter, "bypass.team-invite"))
            {
                Debug("Disabled team invite");
                return false;
            }

            return null;
        }

        #endregion

        #region Oxide Target Hooks

        private object OnNpcTarget(BaseEntity npc, BasePlayer entity)
        {
            return CheckTarget(entity);
        }

        private object OnHelicopterTarget(HelicopterTurret turret, BasePlayer entity)
        {
            return CheckTarget(entity);
        }

        private object OnTurretTarget(AutoTurret turret, BasePlayer entity)
        {
            return CheckTarget(entity);
        }

        private object CanBradleyApcTarget(BradleyAPC apc, BasePlayer entity)
        {
            return CheckTarget(entity);
        }

        private object CanBeTargeted(BasePlayer player, MonoBehaviour behaviour)
        {
            return CheckTarget(player);
        }

        private object CheckTarget(BasePlayer player)
        {
            if (player == null || !IsBetter(player)) return null;

            if (_config.DisableAdminTargeting && !UserHasPermission(player, "bypass.targeting"))
            {
                Debug("Disabled targeting");
                return false;
            }

            return null;
        }

        private object OnEntityMarkHostile(BasePlayer entity, float duration)
        {
            if (entity == null || !IsBetter(entity)) return null;

            if (_config.DisableAdminHostile && !UserHasPermission(entity, "bypass.hostile"))
            {
                Debug("Disabled hostile");
                return false;
            }

            return null;
        }

        #endregion

        #region Helper Methods

        private void Debug(string message)
        {
#if DEBUG
            PrintWarning(message);
#endif
        }

        private void ConditionalSubscribe(string hook, bool subscribe)
        {
            if (subscribe)
            {
                Subscribe(hook);
                Debug($"Subscribed to {hook}");
            }
            else
            {
                Unsubscribe(hook);
                Debug($"Unsubscribed from {hook}");
            }
        }

        #endregion

        #region Permissions

        private void InitPermissions()
        {
            permission.RegisterPermission(PermissionPrefix + "active", this);

            permission.RegisterPermission(PermissionPrefix + "bypass.corpse", this);
            permission.RegisterPermission(PermissionPrefix + "bypass.team-invite", this);
            permission.RegisterPermission(PermissionPrefix + "bypass.drop-loot", this);
            permission.RegisterPermission(PermissionPrefix + "bypass.disconnect-die", this);
            permission.RegisterPermission(PermissionPrefix + "bypass.targeting", this);
            permission.RegisterPermission(PermissionPrefix + "bypass.hostile", this);
        }

        private bool UserHasPermission(BasePlayer player, string permissionName) =>
            permission.UserHasPermission(player.UserIDString, PermissionPrefix + permissionName);

        private bool IsBetter(BasePlayer player)
        {
            if (player == null || player.IsNpc) return false;
            return UserHasPermission(player, "active");
        }

        #endregion

        #region Config

        internal class PluginConfig
        {
            [JsonProperty("Disable anti-hack violations for admins")]
            public bool DisableAntiHackViolations = true;
            [JsonProperty("Kill Admins on Disconnect (if true, admins get killed without corpse when they disconnect)")]
            public bool KillAdminsOnDisconnect = true;

            [JsonProperty("Admin Spawns without starter items")]
            public bool AdminSpawnWithoutStarterItems = true;

            [JsonProperty("Disabled Admin Corpses")]
            public bool DisableAdminCorpses = true;

            [JsonProperty("Disable Admin Team Invites (if true, admins can't invite players to their team)")]
            public bool DisableAdminTeamInvites = true;

            [JsonProperty("Disable Admin From Dropping Loot (if true, loot that admin drops gets deleted instead)")]
            public bool DisableAdminDropLoot = true;

            [JsonProperty("Disable npc/turret/environment targeting admins")]
            public bool DisableAdminTargeting = true;

            [JsonProperty("Disable admin hostile (if true, admins can't be hostile to safezone sentries)")]
            public bool DisableAdminHostile = true;
        }

        protected override void LoadDefaultConfig()
        {
            Config.WriteObject(GetDefaultConfig(), true);
        }

        private PluginConfig GetDefaultConfig()
        {
            return new PluginConfig();
        }

        #endregion
    }
}

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