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

FREE MearsRadar : 1.0.1 1.0.1

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using Oxide.Core.Libraries.Covalence;
using System.Collections.Generic;
using System.Collections;
using UnityEngine;
using Network;
using Network.Visibility;
using Oxide.Core.Plugins;

namespace Oxide.Plugins
{
    [Info("(Mears) Radar", "Crunchy", "1.0.1")]
    internal class MearsRadar : CovalencePlugin
    {
        private const bool USE_NETWORK_GROUPS = false;

        private const float MAX_DISTANCE = 250f;
        private const float TICK_RATE = 0.25f;
        private static bool HideAdmins = false;

        private const string PERMS_ALLOWED = "mearsradar.allowed";
        private const string PERMS_HIDDEN = "mearsradar.hidden";

        private const string ENABLED = "You have <color=green>enabled</color> admin radar.";
        private const string DISABLED = "You have <color=red>disabled</color> admin radar.";

        private static MearsRadar s_PluginInstance;
        private static readonly Vector3 s_DrawNameOffset = new Vector3(0f, 2f, 0f);

        private static readonly string[] s_Colors = new[]
        {
            "#aa9980",
            "#aa5544",
            "#ee1122",
            "#225500",
            "#116655",
            "#f4bbcc",
            "#f7fb4b",
            "#ee2288",
            "#ee4499",
            "#77aaaa",
            "#ab1219",
            "#5d7f32",
            "#844012",
            "#006661",
            "#71acaf",
        };

#region Commands

        [Command("radar")]
        private void RadarCommand(IPlayer iPlayer, string cmd, string[] args)
        {
            BasePlayer player = iPlayer.Object as BasePlayer;
            if (player == null) return;

            if (!permission.UserHasPermission(player.UserIDString, PERMS_ALLOWED))
            {
                player.ChatMessage("You do not have permission to use this command.");
                return;
            }

            Radar radar = player.GetComponent<Radar>();

            if (radar == null)
            {
                player.gameObject.AddComponent<Radar>();
                player.ChatMessage(ENABLED);
            }
            else
            {
                UnityEngine.Object.Destroy(radar);
                player.ChatMessage(DISABLED);
            }
        }


        private static Dictionary<ulong, bool> PlayerHideAdmins = new Dictionary<ulong, bool>();

[Command("ha")]
private void HideAdminCommand(IPlayer iPlayer, string cmd, string[] args)
{
    BasePlayer player = iPlayer.Object as BasePlayer;
    if (player == null) return;

    if (!permission.UserHasPermission(player.UserIDString, PERMS_ALLOWED))
    {
        player.ChatMessage("You do not have permission to use this command.");
        return;
    }

    ulong playerId = player.userID;

    // Toggle the hide admin setting for this player
    if (PlayerHideAdmins.ContainsKey(playerId))
    {
        PlayerHideAdmins[playerId] = !PlayerHideAdmins[playerId];
    }
    else
    {
        PlayerHideAdmins[playerId] = true;
    }

    string status = PlayerHideAdmins[playerId] ? "<color=green>enabled</color>" : "<color=red>disabled</color>";
    player.ChatMessage($"Hiding admins from radar is now {status}.");
}



#endregion

#region Hooks

        private void Init()
        {
            s_PluginInstance = this;

            permission.RegisterPermission(PERMS_ALLOWED, this);
            permission.RegisterPermission(PERMS_HIDDEN, this);
        }

        private void Unload()
        {
            s_PluginInstance = null;
            var radars = UnityEngine.Object.FindObjectsOfType<Radar>();

            foreach (var radar in radars)
                UnityEngine.Object.Destroy(radar);
        }

        private void OnPlayerDisconnected(BasePlayer player, string reason)
        {
            Radar radar = player.GetComponent<Radar>();

            if (radar != null)
                UnityEngine.Object.Destroy(radar);
        }

#endregion

        private class Radar : FacepunchBehaviour
        {
            private bool m_HasHiddenPerms;
            private BasePlayer m_Owner;
            private List<BasePlayer> m_PlayerCloseBy;

            private void Awake()
            {
                m_Owner = GetComponent<BasePlayer>();
                m_PlayerCloseBy = Facepunch.Pool.GetList<BasePlayer>();

                if (IsPlayerNull()) return;

                m_HasHiddenPerms = s_PluginInstance.permission.UserHasPermission(m_Owner.UserIDString, PERMS_HIDDEN);
                InvokeRepeating(StartDrawingNames, 0, TICK_RATE);
            }

            private void OnDestroy()
            {
                Facepunch.Pool.FreeList(ref m_PlayerCloseBy);
            }

            private bool IsPlayerNull()
            {
                bool isNull = m_Owner == null;

                if (isNull)
                    Destroy(this);

                return isNull;
            }

            private void StartDrawingNames()
            {
                StartCoroutine(DrawNearbyPlayers());
            }

            private IEnumerator DrawNearbyPlayers()
{
    m_PlayerCloseBy.Clear();

    if (USE_NETWORK_GROUPS)
    {
        Group networkGroup = m_Owner.net.group;

        if (networkGroup != null)
        {
            foreach (Connection connection in networkGroup.subscribers)
            {
                BasePlayer player = connection.player as BasePlayer;

                if (player != null)
                    m_PlayerCloseBy.Add(player);
            }
        }
    }
    else
    {
        BaseNetworkable.GetCloseConnections(m_Owner.transform.position, MAX_DISTANCE, m_PlayerCloseBy);
    }

    for (int i = 0; i < m_PlayerCloseBy.Count; i++)
    {
        if (IsPlayerNull()) yield break;

        var target = m_PlayerCloseBy[i];
        if (target == null || target.userID == m_Owner.userID || !target.IsConnected) continue;

        uint targetAuthLevel = target.Connection.authLevel;

        // Check if this player has HideAdmins enabled
        bool hideAdmins = PlayerHideAdmins.TryGetValue(m_Owner.userID, out bool isHidden) && isHidden;

        if (hideAdmins && targetAuthLevel > 0) continue;
        if (!m_HasHiddenPerms && targetAuthLevel > 0 && s_PluginInstance.permission.UserHasPermission(target.UserIDString, PERMS_HIDDEN)) continue;

        int targetHealth = Mathf.RoundToInt(target.health);
        string healthColor = targetHealth == 0 ? "#000000" : targetHealth > 70 ? "#085407" : targetHealth > 35 ? "#D55200" : "#720E0B";

        float distance = Vector3.Distance(m_Owner.transform.position, target.transform.position);
        string distanceText = $"{distance:F1}m";

        string icon;
        var team = target.Team;
        string nameColor = team != null ? s_Colors[team.teamID % (ulong)s_Colors.Length] : null;

        if (targetAuthLevel > 0)
        {
            bool hasActiveRadar = target.GetComponent<Radar>() != null;
            string color = hasActiveRadar ? "#109906" : "#ff0000";
            icon = $"<color={color}>★</color>";
        }
        else
        {
            icon = nameColor == null ? string.Empty : $"<color={nameColor}><size=30>‣</size></color>";
        }

        Vector3 pos = target.transform.position + s_DrawNameOffset;
        string text = $"<size=20>{icon} {target.displayName}</size> <size=16><color={healthColor}>{targetHealth}HP</color> | <color=#ffffff>{distanceText}</color></size>";

        m_Owner.SendConsoleCommand("ddraw.text", TICK_RATE, Color.white, pos, text);

        if (i % 5 != 0) continue;

        yield return null;
    }



            }
        }
    }
}

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