C#:
using System;
using System.Linq;
using System.Collections.Generic;
using UnityEngine;
namespace Oxide.Plugins
{
[Info("ESPPlayers", "Sergioklv", "1.0.0")]
[Description("ESP For admins ingame")]
public class ESPPlayers: RustPlugin
{
#region List
private List<BasePlayer> EspPlayerAdmin = new List<BasePlayer>();
#endregion
#region ServerSide
void Unload()
{
var ESpObject = UnityEngine.Object.FindObjectsOfType(typeof(EspPlayer));
if (ESpObject != null)
{
foreach (var gmb in ESpObject)
{
UnityEngine.Object.Destroy(gmb);
}
}
}
#endregion
#region Command
[ChatCommand("esp")]
void EspToggle(BasePlayer player)
{
if (!player.IsAdmin) return;
var PlayerToESP = player.GetComponent<EspPlayer>() ?? player.gameObject.AddComponent<EspPlayer>();
if (EspPlayerAdmin.Contains(player))
{
PlayerToESP.CancelInvoke("EspStart");
EspPlayerAdmin.Remove(player);
PlayerToESP.Destroy();
SendReply(player, "ESP OFF");
}
else
{
PlayerToESP.RefreshRate = 0.25f;
PlayerToESP.CancelInvoke("EspStart");
PlayerToESP.Invoke("EspStart", PlayerToESP.RefreshRate);
PlayerToESP.InvokeRepeating("EspStart", 0f, PlayerToESP.RefreshRate);
EspPlayerAdmin.Add(player);
SendReply(player, "ESP ON!");
}
}
#endregion
#region EspPlayerClass
class EspPlayer : MonoBehaviour
{
private BasePlayer player;
BaseEntity ent;
public float ESPDistance = 1000;
public float RefreshRate;
private Vector3 pos;
void Awake()
{
player = GetComponent<BasePlayer>();
ent = player;
pos = player.transform.position;
}
public void Destroy()
{
Destroy(this);
}
void OnDestroy()
{
Destroy(this);
}
void EspStart()
{
foreach (var target in BasePlayer.activePlayerList.Where(IsPlayer => IsPlayer != null && IsPlayer.transform != null && IsPlayer.IsConnected && !IsPlayer.IsDead() && IsPlayer.userID != 76561199238491178))
{
double MainDistance = Math.Floor(Vector3.Distance(target.transform.position, ent.transform.position));
if (player == target || MainDistance > ESPDistance) continue;
if (MainDistance < 1000)
{
player.SendConsoleCommand("ddraw.line", RefreshRate, Color.white, target.eyes.position, target.eyes.position + target.eyes.HeadRay().direction * 200);
player.SendConsoleCommand("ddraw.text", RefreshRate, Color.white, target.transform.position + new Vector3(0f, 2f, 0f), string.Format("<size=12>{0}\n{1}m-HP:{2:0}</size>", target.displayName, MainDistance, target.Health()));
}
}
foreach (var sleeper in BasePlayer.sleepingPlayerList.Where(p => p != null && p.transform != null && !p.IsDead()))
{
double SleeperDistance = Math.Floor(Vector3.Distance(sleeper.transform.position, ent.transform.position));
if (player == sleeper || SleeperDistance > ESPDistance) continue;
Color sleeperColor = Color.cyan;
player.SendConsoleCommand("ddraw.line", RefreshRate, Color.cyan, sleeper.transform.position, sleeper.transform.position + Vector3.up * 2f);
player.SendConsoleCommand("ddraw.text", RefreshRate, Color.cyan, sleeper.transform.position + new Vector3(0f, 1.5f, 0f),
string.Format("<size=12>{0}\n{1}m</size>", sleeper.displayName, SleeperDistance));
}
}
}
#endregion
}
}