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

FREE PlayerRadar : 1.0.2 1.0.2

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System.Collections.Generic;
using System;
using System.Reflection;
using System.Data;
using UnityEngine;
using Oxide.Core;
namespace Oxide.Plugins {
    [Info("PlayerRadar", "Reneb", "1.0.2", ResourceId = 1326)]
    class PlayerRadar : RustPlugin {
        private static int authlevel = 2;
        private static FieldInfo serverinput;
        static int playerCol;
        private static string xmin = "0.5";
        private static string xmax = "0.9";
        private static string ymin = "0.5";
        private static string ymax = "0.9";
        private static string refreshSpeed = "0.1";
        private static bool showSleepers = false;
        private static string permName = "canradar";
        private static string playerColor = "0 0.8 0 1";
        private static string npcColor = "1 0.5 0 1";
        private static string sleeperColor = "0.8 0 0 1";
        private static string radarUrl = "http://s28.postimg.org/r8ebzj1yl/radar_1.png";
        private static float refreshspeed = 0.1f;
        void LoadDefaultConfig() {
        }
        private void CheckCfg<T>(string Key, ref T var) {
            if (Config[Key] is T) var = (T)Config[Key];
            else Config[Key] = var;
        }
        void Init() {
            CheckCfg<int>("Admin - AuthLevel", ref authlevel);
            CheckCfg<string>("Admin - Permissions Name", ref permName);
            CheckCfg<string>("GUI - X Min", ref xmin);
            CheckCfg<string>("GUI - X Max", ref xmax);
            CheckCfg<string>("GUI - Y Min", ref ymin);
            CheckCfg<string>("GUI - Y Max", ref ymax);
            CheckCfg<bool>("Radar - Show Sleepers", ref showSleepers);
            CheckCfg<string>("Radar - Refresh Speed", ref refreshSpeed);
            CheckCfg<string>("Radar - Image URL", ref radarUrl);
            CheckCfg<string>("Radar - Color - Sleepers", ref sleeperColor);
            CheckCfg<string>("Radar - Color - Players", ref playerColor);
            CheckCfg<string>("Radar - Color - HumanNPC", ref npcColor);
            SaveConfig();
            refreshspeed = Convert.ToSingle(refreshSpeed);
        }
        void Unload() {
            var objects = GameObject.FindObjectsOfType(typeof(RadarClass));
            if (objects != null) foreach (var gameObj in objects) GameObject.Destroy(gameObj);
        }
        void Loaded() {
            serverinput = typeof(BasePlayer).GetField("serverInput", (BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic));
            playerCol = LayerMask.GetMask(new string[] {
                "Player (Server)"
            }
            );
            radaroverlay = radaroverlay.Replace("{xmin}", xmin).Replace("{xmax}", xmax).Replace("{ymin}", ymin).Replace("{ymax}", ymax).Replace("{radarurl}", radarUrl);
            if (!permission.PermissionExists(permName)) permission.RegisterPermission(permName, this);
        }
        public class RadarClass : MonoBehaviour {
            public BasePlayer player;
            public float distance;
            void Awake() {
                player = GetComponent<BasePlayer>();
                distance = 100f;
                InvokeRepeating("Radar", 0f, refreshspeed);
            }
            void Radar() {
                if (player == null) GameObject.Destroy(this);
                if (!player.IsConnected()) GameObject.Destroy(this);
                ShowGUI(player, distance);
            }
            void OnDestroy() {
                CommunityEntity.ServerInstance.ClientRPCEx(new Network.SendInfo() {
                    connection = player.net.connection
                }
                , null, "DestroyUI", "RadarUnderlay");
                CommunityEntity.ServerInstance.ClientRPCEx(new Network.SendInfo() {
                    connection = player.net.connection
                }
                , null, "DestroyUI", "RadarOverlay");
            }
        }
        public static string radaroverlay = @"[  
		                { 
							""name"": ""RadarOverlay"",
                            ""parent"": ""Overlay"",
                            ""components"":
                            [
                                {
                                     ""type"":""UnityEngine.UI.RawImage"",
                                    ""imagetype"":""Tiled"",
                                     ""url"":""{radarurl}"",
                                },
                                {
                                    ""type"":""RectTransform"",
                                    ""anchormin"": ""{xmin} {ymin}"",
                                    ""anchormax"": ""{xmax} {ymax}""
                                }
                            ]
                        },
                    ]
                    ";
        public static string radarunderlay = @"[
                        { 
							""name"": ""RadarUnderlay"",
                            ""parent"": ""RadarOverlay"",
                            ""components"":
                            [
                                {
                                     ""type"":""UnityEngine.UI.Image"",
                                     ""color"":""0.1 0.1 0.1 0"",
                                },
                                {
                                    ""type"":""RectTransform"",
                                    ""anchormin"": ""0 0"",
                                    ""anchormax"": ""1 1""
                                }
                            ]
                        }
                    ]
                    ";
        public static string playerjson = @"[  
		                { 
							""parent"": ""RadarUnderlay"",
                            ""components"":
                            [
                                {
                                     ""type"":""UnityEngine.UI.Image"",
                                     ""color"":""{color}"",
                                },
                                {
                                    ""type"":""RectTransform"",
                                    ""anchormin"": ""{xmin} {ymin}"",
                                    ""anchormax"": ""{xmax} {ymax}""
                                }
                            ]
                        }
                    ]
                    ";
        static void ShowGUI(BasePlayer player, float distance) {
            CommunityEntity.ServerInstance.ClientRPCEx(new Network.SendInfo() {
                connection = player.net.connection
            }
            , null, "DestroyUI", "RadarUnderlay");
            CommunityEntity.ServerInstance.ClientRPCEx(new Network.SendInfo() {
                connection = player.net.connection
            }
            , null, "AddUI", radarunderlay);
            var input = serverinput.GetValue(player) as InputState;
            var angle = input.current.aimAngles.y;
            var player_x = player.transform.position.x;
            var player_y = player.transform.position.z;
            string color = string.Empty;
            Collider playerCollider = player.GetComponentInChildren<Collider>();
            foreach (Collider col in Physics.OverlapSphere(player.transform.position, distance, playerCol)) {
                if (playerCollider == col) continue;
                BasePlayer targetplayer = col.GetComponentInParent<BasePlayer>();
                if (targetplayer == null) continue;
                color = targetplayer.IsConnected() ? playerColor : npcColor;
                float x = col.transform.position.x;
                float y = col.transform.position.z;
                int x2 = (int)((x - player_x) * Math.Cos(Math.PI * angle / 180) - (y - player_y) * Math.Sin(Math.PI * angle / 180)) * 50 / (int)distance + 50;
                int y2 = (int)((x - player_x) * Math.Sin(Math.PI * angle / 180) + (y - player_y) * Math.Cos(Math.PI * angle / 180)) * 50 / (int)distance + 50;
                var playerpos = playerjson.Replace("{xmin}", ((Convert.ToDecimal(x2) - 0.5m) / 100).ToString()).Replace("{color}", color).Replace("{xmax}", ((Convert.ToDecimal(x2) + 0.5m) / 100).ToString()).Replace("{ymin}", ((Convert.ToDecimal(y2) - 0.50m) / 100).ToString()).Replace("{ymax}", ((Convert.ToDecimal(y2) + 0.5m) / 100).ToString());
                CommunityEntity.ServerInstance.ClientRPCEx(new Network.SendInfo() {
                    connection = player.net.connection
                }
                , null, "AddUI", playerpos);
            }
            if (!showSleepers) return;
            color = sleeperColor;
            foreach (BasePlayer targetplayer in BasePlayer.sleepingPlayerList) {
                if (Vector3.Distance(targetplayer.transform.position, player.transform.position) > distance) continue;
                float x = targetplayer.transform.position.x;
                float y = targetplayer.transform.position.z;
                int x2 = (int)((x - player_x) * Math.Cos(Math.PI * angle / 180) - (y - player_y) * Math.Sin(Math.PI * angle / 180)) * 50 / (int)distance + 50;
                int y2 = (int)((x - player_x) * Math.Sin(Math.PI * angle / 180) + (y - player_y) * Math.Cos(Math.PI * angle / 180)) * 50 / (int)distance + 50;
                var playerpos = playerjson.Replace("{xmin}", ((Convert.ToDecimal(x2) - 0.5m) / 100).ToString()).Replace("{color}", color).Replace("{xmax}", ((Convert.ToDecimal(x2) + 0.5m) / 100).ToString()).Replace("{ymin}", ((Convert.ToDecimal(y2) - 0.50m) / 100).ToString()).Replace("{ymax}", ((Convert.ToDecimal(y2) + 0.5m) / 100).ToString());
                CommunityEntity.ServerInstance.ClientRPCEx(new Network.SendInfo() {
                    connection = player.net.connection
                }
                , null, "AddUI", playerpos);
            }
        }
        [ChatCommand("radar")]
        void cmdChatRadar(BasePlayer player, string command, string[] args) {
            if (player.net.connection.authLevel < authlevel && !permission.UserHasPermission(player.userID.ToString(), permName)) {
                SendReply(player, "You are not allowed to use this command");
                return;
            }
            RadarClass rplayer = player.GetComponent<RadarClass>();
            if (rplayer != null) {
                GameObject.Destroy(rplayer);
                if (args.Length == 0) return;
            }
            timer.Once(0.1f, () => {
                rplayer = player.gameObject.AddComponent<RadarClass>();
                CommunityEntity.ServerInstance.ClientRPCEx(new Network.SendInfo() {
                    connection = player.net.connection
                }
                , null, "AddUI", radaroverlay);
                float dist = 500f;
                if (args.Length > 0) float.TryParse(args[0], out dist);
                rplayer.distance = dist;
                rplayer.enabled = true;
            }
            );
        }
    }
}

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