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

FREE WallHackAdmin : 1.0.0 1.0.0

Нет прав для скачивания
C#:
using System;
using System.Collections.Generic;
using UnityEngine;
using Oxide.Core;
using Oxide.Core.Plugins;

namespace Oxide.Plugins
{
    [Info("WallHack Admin", "VanDaMus", "1.0.0")]
    [Description("Показывает всех игроков через стены: боксы, линии и имена (steamcommunity.com/id/alexandr689/)")]
    public class WallHackAdmin : RustPlugin
    {
        #region Поля
        private const string PermUse = "wallhackadmin.use";
        private Dictionary<ulong, Timer> playerTimers = new Dictionary<ulong, Timer>();
        #endregion

        #region Инициализация
        private void Init()
        {
            permission.RegisterPermission(PermUse, this);
        }

        private void OnServerInitialized()
        {
            foreach (var ply in BasePlayer.activePlayerList)
            {
                if (ply == null) continue;
                if (IsPlayerAdmin(ply) && !permission.UserHasPermission(ply.UserIDString, PermUse))
                {
                    permission.GrantUserPermission(ply.UserIDString, PermUse, this);
                    Puts($"Выдано право {PermUse} игроку {ply.displayName} (ownerid)");
                }
            }
        }

        private void Unload()
        {
            foreach (var t in playerTimers.Values)
                t?.Destroy();
            playerTimers.Clear();
        }
        #endregion

        #region Команды
        [ChatCommand("whon")]
        private void CmdWhOn(BasePlayer player, string command, string[] args)
        {
            if (!IsPlayerAdmin(player))
            {
                SendReply(player, "У вас нет доступа к этой команде.");
                return;
            }

            if (playerTimers.ContainsKey(player.userID))
            {
                SendReply(player, "WH уже включен для вас.");
                return;
            }

            playerTimers[player.userID] = timer.Every(0.1f, () => DrawESP(player));
            SendReply(player, "WallHack <color=#00ff00>ВКЛЮЧЕН</color>.");
        }

        [ChatCommand("whoff")]
        private void CmdWhOff(BasePlayer player, string command, string[] args)
        {
            if (!IsPlayerAdmin(player))
            {
                SendReply(player, "У вас нет доступа к этой команде.");
                return;
            }

            if (playerTimers.TryGetValue(player.userID, out var t))
            {
                t.Destroy();
                playerTimers.Remove(player.userID);
                SendReply(player, "WallHack <color=#ff0000>ВЫКЛЮЧЕН</color>.");
            }
            else
            {
                SendReply(player, "WH уже выключен.");
            }
        }

        [ChatCommand("wh")]
        private void CmdWh(BasePlayer player, string command, string[] args)
        {
            if (!IsPlayerAdmin(player))
            {
                SendReply(player, "У вас нет доступа к этой команде.");
                return;
            }

            if (playerTimers.ContainsKey(player.userID))
            {
                CmdWhOff(player, "whoff", null);
            }
            else
            {
                CmdWhOn(player, "whon", null);
            }
        }
        #endregion

        #region Отрисовка
        private void DrawESP(BasePlayer viewer)
        {
            if (viewer == null || !viewer.IsConnected)
            {
                StopESP(viewer);
                return;
            }

            foreach (var target in BasePlayer.activePlayerList)
            {
                if (target == null || target == viewer || !target.IsConnected) continue;
                if (target.IsSleeping() || target.IsDead()) continue;
                
                
                

                var pos = target.transform.position;
                var headPos = pos + new Vector3(0, 1.8f, 0);
                var feetPos = pos + new Vector3(0, 0.05f, 0);

                
                Color boxColor = Color.red;
                
                
                if (viewer.currentTeam != 0 && target.currentTeam != 0 && viewer.currentTeam == target.currentTeam)
                {
                    boxColor = Color.green;
                }
                else if (target.IsBuildingAuthed())
                {
                    boxColor = Color.yellow;
                }

                
                
                DrawLine(viewer, feetPos + new Vector3(-0.4f, 0, -0.4f), feetPos + new Vector3(0.4f, 0, -0.4f), boxColor);
                DrawLine(viewer, feetPos + new Vector3(0.4f, 0, -0.4f), feetPos + new Vector3(0.4f, 0, 0.4f), boxColor);
                DrawLine(viewer, feetPos + new Vector3(0.4f, 0, 0.4f), feetPos + new Vector3(-0.4f, 0, 0.4f), boxColor);
                DrawLine(viewer, feetPos + new Vector3(-0.4f, 0, 0.4f), feetPos + new Vector3(-0.4f, 0, -0.4f), boxColor);
                
                
                var topPos = pos + new Vector3(0, 1.9f, 0);
                DrawLine(viewer, topPos + new Vector3(-0.4f, 0, -0.4f), topPos + new Vector3(0.4f, 0, -0.4f), boxColor);
                DrawLine(viewer, topPos + new Vector3(0.4f, 0, -0.4f), topPos + new Vector3(0.4f, 0, 0.4f), boxColor);
                DrawLine(viewer, topPos + new Vector3(0.4f, 0, 0.4f), topPos + new Vector3(-0.4f, 0, 0.4f), boxColor);
                DrawLine(viewer, topPos + new Vector3(-0.4f, 0, 0.4f), topPos + new Vector3(-0.4f, 0, -0.4f), boxColor);
                
                
                DrawLine(viewer, feetPos + new Vector3(-0.4f, 0, -0.4f), topPos + new Vector3(-0.4f, 0, -0.4f), boxColor);
                DrawLine(viewer, feetPos + new Vector3(0.4f, 0, -0.4f), topPos + new Vector3(0.4f, 0, -0.4f), boxColor);
                DrawLine(viewer, feetPos + new Vector3(0.4f, 0, 0.4f), topPos + new Vector3(0.4f, 0, 0.4f), boxColor);
                DrawLine(viewer, feetPos + new Vector3(-0.4f, 0, 0.4f), topPos + new Vector3(-0.4f, 0, 0.4f), boxColor);

                
                DrawText(viewer, headPos + new Vector3(0, 0.4f, 0), target.displayName, Color.white, 18);

                
                var distance = Vector3.Distance(viewer.transform.position, pos);
                DrawText(viewer, headPos + new Vector3(0, -0.4f, 0), $"{distance:F0}m", Color.white, 14);

                
                DrawLine(viewer, viewer.transform.position + new Vector3(0, 1.6f, 0), headPos, new Color(boxColor.r, boxColor.g, boxColor.b, 0.5f));
            }
        }

        private void DrawLine(BasePlayer player, Vector3 start, Vector3 end, Color color)
        {
            if (player == null || !player.IsConnected) return;
            player.SendConsoleCommand("ddraw.line", 0.15f, color, start, end);
        }

        private void DrawText(BasePlayer player, Vector3 position, string text, Color color, int size)
        {
            if (player == null || !player.IsConnected) return;
            player.SendConsoleCommand("ddraw.text", 0.15f, color, position, $"<size={size}>{text}</size>");
        }
        #endregion

        #region Вспомогательные методы
        private void StopESP(BasePlayer player)
        {
            if (player != null && playerTimers.TryGetValue(player.userID, out var t))
            {
                t.Destroy();
                playerTimers.Remove(player.userID);
            }
        }

        private void OnPlayerDisconnected(BasePlayer player, string reason)
        {
            StopESP(player);
        }

        private bool IsPlayerAdmin(BasePlayer player)
        {
            if (player == null) return false;
            return player.IsAdmin || player.net?.connection?.authLevel > 0;
        }
        #endregion
    }
}

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