the initial commit to the repo.
This commit is contained in:
parent
025c032b8c
commit
1b757591b9
264 changed files with 21882 additions and 0 deletions
401
stoopid.raw/stupid.solutions.Features.ESP/Crosshairetc.cs
Normal file
401
stoopid.raw/stupid.solutions.Features.ESP/Crosshairetc.cs
Normal file
|
|
@ -0,0 +1,401 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using EFT;
|
||||
using EFT.UI;
|
||||
using stupid.solutions.Data;
|
||||
using stupid.solutions.enums;
|
||||
using stupid.solutions.Utils;
|
||||
using UnityEngine;
|
||||
|
||||
namespace stupid.solutions.Features.ESP;
|
||||
|
||||
public class Crosshairetc : MonoBehaviour
|
||||
{
|
||||
public float lineLength = 20f;
|
||||
|
||||
public float lineThickness = 2f;
|
||||
|
||||
private Texture2D crosshairTexture;
|
||||
|
||||
public static float skeletonLineThickness = 1.7f;
|
||||
|
||||
public static float headCircleThickness = 1.7f;
|
||||
|
||||
private static Stopwatch memoryCheckTimer = Stopwatch.StartNew();
|
||||
|
||||
private static long lastLoggedMemory = 0L;
|
||||
|
||||
private static int logInterval = 5000;
|
||||
|
||||
private static Dictionary<Player, (Dictionary<HumanBones, Vector3> bones, float lastUpdateTime)> GamePlayerBoneCache = new Dictionary<Player, (Dictionary<HumanBones, Vector3>, float)>();
|
||||
|
||||
private static Dictionary<Player, (Dictionary<ZombieBones, Vector3> bones, float lastUpdateTime)> zombieBoneCache = new Dictionary<Player, (Dictionary<ZombieBones, Vector3>, float)>();
|
||||
|
||||
private bool clearcache;
|
||||
|
||||
private static float cacheExpirationInterval = Settings.cachedelayskelet;
|
||||
|
||||
private Color cachedcrosshaircolor;
|
||||
|
||||
private static readonly List<ZombieBones> NeededZombieBones = new List<ZombieBones>
|
||||
{
|
||||
ZombieBones.Base_HumanPelvis,
|
||||
ZombieBones.Base_HumanLThigh1,
|
||||
ZombieBones.Base_HumanLCalf,
|
||||
ZombieBones.Base_HumanLFoot,
|
||||
ZombieBones.Base_HumanRThigh1,
|
||||
ZombieBones.Base_HumanRCalf,
|
||||
ZombieBones.Base_HumanRFoot,
|
||||
ZombieBones.Base_HumanSpine2,
|
||||
ZombieBones.Base_HumanSpine3,
|
||||
ZombieBones.Base_HumanNeck,
|
||||
ZombieBones.Base_HumanHead,
|
||||
ZombieBones.Base_HumanLCollarbone,
|
||||
ZombieBones.Base_HumanLUpperarm,
|
||||
ZombieBones.Base_HumanLForearm1,
|
||||
ZombieBones.Base_HumanLForearm2,
|
||||
ZombieBones.Base_HumanLPalm,
|
||||
ZombieBones.Base_HumanRCollarbone,
|
||||
ZombieBones.Base_HumanRUpperarm,
|
||||
ZombieBones.Base_HumanRForearm1,
|
||||
ZombieBones.Base_HumanRForearm2,
|
||||
ZombieBones.Base_HumanRPalm
|
||||
};
|
||||
|
||||
private static readonly List<HumanBones> NeededBones = new List<HumanBones>
|
||||
{
|
||||
HumanBones.HumanPelvis,
|
||||
HumanBones.HumanLThigh1,
|
||||
HumanBones.HumanLThigh2,
|
||||
HumanBones.HumanLCalf,
|
||||
HumanBones.HumanLFoot,
|
||||
HumanBones.HumanLToe,
|
||||
HumanBones.HumanPelvis,
|
||||
HumanBones.HumanRThigh1,
|
||||
HumanBones.HumanRThigh2,
|
||||
HumanBones.HumanRCalf,
|
||||
HumanBones.HumanRFoot,
|
||||
HumanBones.HumanRToe,
|
||||
HumanBones.HumanSpine1,
|
||||
HumanBones.HumanSpine2,
|
||||
HumanBones.HumanSpine3,
|
||||
HumanBones.HumanNeck,
|
||||
HumanBones.HumanHead,
|
||||
HumanBones.HumanLCollarbone,
|
||||
HumanBones.HumanLForearm1,
|
||||
HumanBones.HumanLForearm2,
|
||||
HumanBones.HumanLForearm3,
|
||||
HumanBones.HumanLPalm,
|
||||
HumanBones.HumanLDigit11,
|
||||
HumanBones.HumanLDigit12,
|
||||
HumanBones.HumanLDigit13,
|
||||
HumanBones.HumanRCollarbone,
|
||||
HumanBones.HumanRForearm1,
|
||||
HumanBones.HumanRForearm2,
|
||||
HumanBones.HumanRForearm3,
|
||||
HumanBones.HumanRPalm,
|
||||
HumanBones.HumanRDigit11,
|
||||
HumanBones.HumanRDigit12,
|
||||
HumanBones.HumanRDigit13
|
||||
};
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if (Main.GameWorld != null && Main.MainCamera != null)
|
||||
{
|
||||
clearcache = true;
|
||||
}
|
||||
if (Main.GameWorld == null && clearcache)
|
||||
{
|
||||
zombieBoneCache.Clear();
|
||||
GamePlayerBoneCache.Clear();
|
||||
}
|
||||
if (cachedcrosshaircolor != Settings.CrosshairColor)
|
||||
{
|
||||
ReapplyCrosshairColour();
|
||||
}
|
||||
}
|
||||
|
||||
private void LogMemoryUsage()
|
||||
{
|
||||
long totalMemory = GC.GetTotalMemory(forceFullCollection: false);
|
||||
long num = totalMemory - lastLoggedMemory;
|
||||
ConsoleScreen.Log($"Memory Usage: {totalMemory / 1048576} MB (+{num / 1048576} MB since last log)");
|
||||
if (Main.GameWorld != null)
|
||||
{
|
||||
ConsoleScreen.Log($"Registered Players: {Main.GameWorld.RegisteredPlayers.Count}");
|
||||
ConsoleScreen.Log($"Loot Items: {Main.GameWorld.LootItems.Count}");
|
||||
}
|
||||
lastLoggedMemory = totalMemory;
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
cachedcrosshaircolor = Settings.CrosshairColor;
|
||||
crosshairTexture = new Texture2D(1, 1);
|
||||
crosshairTexture.SetPixel(0, 0, Settings.CrosshairColor);
|
||||
crosshairTexture.Apply();
|
||||
}
|
||||
|
||||
public void ReapplyCrosshairColour()
|
||||
{
|
||||
cachedcrosshaircolor = Settings.CrosshairColor;
|
||||
crosshairTexture = new Texture2D(1, 1);
|
||||
crosshairTexture.SetPixel(0, 0, Settings.CrosshairColor);
|
||||
crosshairTexture.Apply();
|
||||
}
|
||||
|
||||
private static bool IsZombie(Player player)
|
||||
{
|
||||
WildSpawnType role = player.Profile.Info.Settings.Role;
|
||||
if (role != WildSpawnType.infectedAssault && role != WildSpawnType.infectedCivil && role != WildSpawnType.infectedLaborant)
|
||||
{
|
||||
return role == WildSpawnType.infectedPmc;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public void OnGUI()
|
||||
{
|
||||
if (Settings.AimbotDrawFOV && Menu2.showmenu)
|
||||
{
|
||||
Render.DrawCircle(new Vector2(Screen.width / 2, Screen.height / 2), Settings.AimbotFOV * 15.7f, 32, Settings.AimFOVColor);
|
||||
}
|
||||
if (Settings.Crosshair && Menu2.showmenu)
|
||||
{
|
||||
float num = Screen.width / 2;
|
||||
float num2 = Screen.height / 2;
|
||||
GUI.DrawTexture(new Rect(num - lineLength / 2f, num2 - lineThickness / 2f, lineLength, lineThickness), crosshairTexture);
|
||||
GUI.DrawTexture(new Rect(num - lineThickness / 2f, num2 - lineLength / 2f, lineThickness, lineLength), crosshairTexture);
|
||||
}
|
||||
foreach (GamePlayer gamePlayer in Main.GamePlayers)
|
||||
{
|
||||
if (!gamePlayer.IsOnScreen || gamePlayer.Distance > Settings.DrawPlayersDistance || gamePlayer.Player == Main.LocalPlayer)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (Settings.DrawPlayers && Settings.EnableSkeleton)
|
||||
{
|
||||
if (IsZombie(gamePlayer.Player))
|
||||
{
|
||||
DrawZombies(gamePlayer.Player);
|
||||
}
|
||||
else
|
||||
{
|
||||
DrawSkeleton(gamePlayer.Player);
|
||||
}
|
||||
}
|
||||
if (Settings.drawaimpos && Settings.DrawPlayers)
|
||||
{
|
||||
DrawAim(gamePlayer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void DrawAim(GamePlayer gamePlayer)
|
||||
{
|
||||
Vector3 vector = GameUtils.WorldPointToScreenPoint(RayCast.BarrelRayCast(gamePlayer.Player));
|
||||
Render.DrawLine(GameUtils.WorldPointToScreenPoint(gamePlayer.Player.Fireport.position), vector, 1f, Color.red);
|
||||
}
|
||||
|
||||
private static Dictionary<HumanBones, Vector3> GetBones(Player gamePlayer)
|
||||
{
|
||||
float time = Time.time;
|
||||
if (GamePlayerBoneCache.TryGetValue(gamePlayer, out (Dictionary<HumanBones, Vector3>, float) value) && time - value.Item2 < cacheExpirationInterval)
|
||||
{
|
||||
return value.Item1;
|
||||
}
|
||||
Dictionary<HumanBones, Vector3> dictionary = new Dictionary<HumanBones, Vector3>();
|
||||
if (gamePlayer.PlayerBody == null || gamePlayer.PlayerBody.SkeletonRootJoint == null)
|
||||
{
|
||||
return dictionary;
|
||||
}
|
||||
List<Transform> list = gamePlayer.PlayerBody.SkeletonRootJoint.Bones.Values.ToList();
|
||||
for (int i = 0; i < list.Count; i++)
|
||||
{
|
||||
Transform transform = list[i];
|
||||
if (transform != null && NeededBones.Contains((HumanBones)i))
|
||||
{
|
||||
Vector3 position = transform.position;
|
||||
if (GameUtils.IsScreenPointVisible(Main.ActiveCamera.WorldToScreenPoint(position)))
|
||||
{
|
||||
dictionary[(HumanBones)i] = position;
|
||||
}
|
||||
}
|
||||
}
|
||||
GamePlayerBoneCache[gamePlayer] = (dictionary, time);
|
||||
return dictionary;
|
||||
}
|
||||
|
||||
private static void DrawSkeleton(Player gamePlayer)
|
||||
{
|
||||
Dictionary<HumanBones, Vector3> bones = GetBones(gamePlayer);
|
||||
if (bones.Count != 0)
|
||||
{
|
||||
GL.PushMatrix();
|
||||
GameUtils.DrawMaterial.SetPass(0);
|
||||
GL.LoadProjectionMatrix(Main.ActiveCamera.projectionMatrix);
|
||||
GL.modelview = Main.ActiveCamera.worldToCameraMatrix;
|
||||
GL.Begin(1);
|
||||
ConnectBonesGL(bones, HumanBones.HumanPelvis, HumanBones.HumanLThigh1, gamePlayer);
|
||||
ConnectBonesGL(bones, HumanBones.HumanLThigh1, HumanBones.HumanLThigh2, gamePlayer);
|
||||
ConnectBonesGL(bones, HumanBones.HumanLThigh2, HumanBones.HumanLCalf, gamePlayer);
|
||||
ConnectBonesGL(bones, HumanBones.HumanLCalf, HumanBones.HumanLFoot, gamePlayer);
|
||||
ConnectBonesGL(bones, HumanBones.HumanLFoot, HumanBones.HumanLToe, gamePlayer);
|
||||
ConnectBonesGL(bones, HumanBones.HumanPelvis, HumanBones.HumanRThigh1, gamePlayer);
|
||||
ConnectBonesGL(bones, HumanBones.HumanRThigh1, HumanBones.HumanRThigh2, gamePlayer);
|
||||
ConnectBonesGL(bones, HumanBones.HumanRThigh2, HumanBones.HumanRCalf, gamePlayer);
|
||||
ConnectBonesGL(bones, HumanBones.HumanRCalf, HumanBones.HumanRFoot, gamePlayer);
|
||||
ConnectBonesGL(bones, HumanBones.HumanRFoot, HumanBones.HumanRToe, gamePlayer);
|
||||
ConnectBonesGL(bones, HumanBones.HumanPelvis, HumanBones.HumanSpine1, gamePlayer);
|
||||
ConnectBonesGL(bones, HumanBones.HumanSpine1, HumanBones.HumanSpine2, gamePlayer);
|
||||
ConnectBonesGL(bones, HumanBones.HumanSpine2, HumanBones.HumanSpine3, gamePlayer);
|
||||
ConnectBonesGL(bones, HumanBones.HumanSpine3, HumanBones.HumanNeck, gamePlayer);
|
||||
ConnectBonesGL(bones, HumanBones.HumanNeck, HumanBones.HumanHead, gamePlayer);
|
||||
ConnectBonesGL(bones, HumanBones.HumanSpine3, HumanBones.HumanLCollarbone, gamePlayer);
|
||||
ConnectBonesGL(bones, HumanBones.HumanLCollarbone, HumanBones.HumanLForearm1, gamePlayer);
|
||||
ConnectBonesGL(bones, HumanBones.HumanLForearm1, HumanBones.HumanLForearm2, gamePlayer);
|
||||
ConnectBonesGL(bones, HumanBones.HumanLForearm2, HumanBones.HumanLForearm3, gamePlayer);
|
||||
ConnectBonesGL(bones, HumanBones.HumanLForearm3, HumanBones.HumanLPalm, gamePlayer);
|
||||
ConnectBonesGL(bones, HumanBones.HumanSpine3, HumanBones.HumanRCollarbone, gamePlayer);
|
||||
ConnectBonesGL(bones, HumanBones.HumanRCollarbone, HumanBones.HumanRForearm1, gamePlayer);
|
||||
ConnectBonesGL(bones, HumanBones.HumanRForearm1, HumanBones.HumanRForearm2, gamePlayer);
|
||||
ConnectBonesGL(bones, HumanBones.HumanRForearm2, HumanBones.HumanRForearm3, gamePlayer);
|
||||
ConnectBonesGL(bones, HumanBones.HumanRForearm3, HumanBones.HumanRPalm, gamePlayer);
|
||||
GL.End();
|
||||
GL.PopMatrix();
|
||||
if (bones.ContainsKey(HumanBones.HumanHead) && bones.ContainsKey(HumanBones.HumanNeck))
|
||||
{
|
||||
Vector3 vector = bones[HumanBones.HumanHead];
|
||||
Vector3 b = bones[HumanBones.HumanNeck];
|
||||
float num = Vector3.Distance(vector, b);
|
||||
float num2 = Vector3.Distance(Main.LocalPlayer.Transform.position, gamePlayer.Transform.position);
|
||||
float thickness = headCircleThickness / (num2 * 0.1f);
|
||||
int segments = ((num2 < 20f) ? 128 : 32);
|
||||
DrawHeadCircleGL(vector, num * 1.15f, segments, Settings.SkeletonColor, thickness);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void ConnectBonesGL(Dictionary<HumanBones, Vector3> bones, HumanBones start, HumanBones stop, Player gamePlayer)
|
||||
{
|
||||
if (bones.ContainsKey(start) && bones.ContainsKey(stop))
|
||||
{
|
||||
Vector3 v = bones[start];
|
||||
Vector3 v2 = bones[stop];
|
||||
GL.Color(Settings.SkeletonColor);
|
||||
GL.Vertex(v);
|
||||
GL.Vertex(v2);
|
||||
}
|
||||
}
|
||||
|
||||
private static void DrawHeadCircleGL(Vector3 center, float radius, int segments, Color color, float thickness)
|
||||
{
|
||||
GL.PushMatrix();
|
||||
GameUtils.DrawMaterial.SetPass(0);
|
||||
GL.LoadProjectionMatrix(Main.ActiveCamera.projectionMatrix);
|
||||
GL.modelview = Main.ActiveCamera.worldToCameraMatrix;
|
||||
GL.Begin(1);
|
||||
GL.Color(color);
|
||||
float num = 360f / (float)segments;
|
||||
for (int i = 0; i < segments; i++)
|
||||
{
|
||||
float f = (float)Math.PI / 180f * ((float)i * num);
|
||||
float f2 = (float)Math.PI / 180f * ((float)(i + 1) * num);
|
||||
Vector3 v = center + new Vector3(Mathf.Cos(f) * radius, Mathf.Sin(f) * radius, 0f);
|
||||
Vector3 v2 = center + new Vector3(Mathf.Cos(f2) * radius, Mathf.Sin(f2) * radius, 0f);
|
||||
GL.Vertex(v);
|
||||
GL.Vertex(v2);
|
||||
}
|
||||
GL.End();
|
||||
GL.PopMatrix();
|
||||
}
|
||||
|
||||
private static void ConnectZombieBones(Dictionary<ZombieBones, Vector3> bones, ZombieBones start, ZombieBones stop, Player gamePlayer)
|
||||
{
|
||||
if (bones.ContainsKey(start) && bones.ContainsKey(stop))
|
||||
{
|
||||
Vector3 v = bones[start];
|
||||
Vector3 v2 = bones[stop];
|
||||
GL.Color(Settings.SkeletonColor);
|
||||
GL.Vertex(v);
|
||||
GL.Vertex(v2);
|
||||
}
|
||||
}
|
||||
|
||||
public static void DrawZombies(Player gamePlayer)
|
||||
{
|
||||
Dictionary<ZombieBones, Vector3> zombieBones = GetZombieBones(gamePlayer);
|
||||
if (zombieBones.Count != 0)
|
||||
{
|
||||
GL.PushMatrix();
|
||||
GameUtils.DrawMaterial.SetPass(0);
|
||||
GL.LoadProjectionMatrix(Main.ActiveCamera.projectionMatrix);
|
||||
GL.modelview = Main.ActiveCamera.worldToCameraMatrix;
|
||||
GL.Begin(1);
|
||||
ConnectZombieBones(zombieBones, ZombieBones.Base_HumanPelvis, ZombieBones.Base_HumanLThigh1, gamePlayer);
|
||||
ConnectZombieBones(zombieBones, ZombieBones.Base_HumanPelvis, ZombieBones.Base_HumanRThigh1, gamePlayer);
|
||||
ConnectZombieBones(zombieBones, ZombieBones.Base_HumanLThigh1, ZombieBones.Base_HumanLCalf, gamePlayer);
|
||||
ConnectZombieBones(zombieBones, ZombieBones.Base_HumanLCalf, ZombieBones.Base_HumanLFoot, gamePlayer);
|
||||
ConnectZombieBones(zombieBones, ZombieBones.Base_HumanRThigh1, ZombieBones.Base_HumanRCalf, gamePlayer);
|
||||
ConnectZombieBones(zombieBones, ZombieBones.Base_HumanRCalf, ZombieBones.Base_HumanRFoot, gamePlayer);
|
||||
ConnectZombieBones(zombieBones, ZombieBones.Base_HumanPelvis, ZombieBones.Base_HumanSpine2, gamePlayer);
|
||||
ConnectZombieBones(zombieBones, ZombieBones.Base_HumanSpine2, ZombieBones.Base_HumanSpine3, gamePlayer);
|
||||
ConnectZombieBones(zombieBones, ZombieBones.Base_HumanSpine3, ZombieBones.Base_HumanNeck, gamePlayer);
|
||||
ConnectZombieBones(zombieBones, ZombieBones.Base_HumanNeck, ZombieBones.Base_HumanHead, gamePlayer);
|
||||
ConnectZombieBones(zombieBones, ZombieBones.Base_HumanSpine3, ZombieBones.Base_HumanLCollarbone, gamePlayer);
|
||||
ConnectZombieBones(zombieBones, ZombieBones.Base_HumanLCollarbone, ZombieBones.Base_HumanLUpperarm, gamePlayer);
|
||||
ConnectZombieBones(zombieBones, ZombieBones.Base_HumanLUpperarm, ZombieBones.Base_HumanLForearm1, gamePlayer);
|
||||
ConnectZombieBones(zombieBones, ZombieBones.Base_HumanLForearm1, ZombieBones.Base_HumanLForearm2, gamePlayer);
|
||||
ConnectZombieBones(zombieBones, ZombieBones.Base_HumanLForearm2, ZombieBones.Base_HumanLPalm, gamePlayer);
|
||||
ConnectZombieBones(zombieBones, ZombieBones.Base_HumanSpine3, ZombieBones.Base_HumanRCollarbone, gamePlayer);
|
||||
ConnectZombieBones(zombieBones, ZombieBones.Base_HumanRCollarbone, ZombieBones.Base_HumanRUpperarm, gamePlayer);
|
||||
ConnectZombieBones(zombieBones, ZombieBones.Base_HumanRUpperarm, ZombieBones.Base_HumanRForearm1, gamePlayer);
|
||||
ConnectZombieBones(zombieBones, ZombieBones.Base_HumanRForearm1, ZombieBones.Base_HumanRForearm2, gamePlayer);
|
||||
ConnectZombieBones(zombieBones, ZombieBones.Base_HumanRForearm2, ZombieBones.Base_HumanRPalm, gamePlayer);
|
||||
GL.End();
|
||||
GL.PopMatrix();
|
||||
if (zombieBones.ContainsKey(ZombieBones.Base_HumanHead) && zombieBones.ContainsKey(ZombieBones.Base_HumanNeck))
|
||||
{
|
||||
Vector3 vector = zombieBones[ZombieBones.Base_HumanHead];
|
||||
Vector3 b = zombieBones[ZombieBones.Base_HumanNeck];
|
||||
float num = Vector3.Distance(vector, b);
|
||||
float num2 = Vector3.Distance(Main.LocalPlayer.Transform.position, gamePlayer.Transform.position);
|
||||
float thickness = headCircleThickness / (num2 * 0.1f);
|
||||
int segments = ((num2 < 20f) ? 128 : 32);
|
||||
DrawHeadCircleGL(vector, num * 1.15f, segments, Settings.SkeletonColor, thickness);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static Dictionary<ZombieBones, Vector3> GetZombieBones(Player gamePlayer)
|
||||
{
|
||||
float time = Time.time;
|
||||
if (zombieBoneCache.TryGetValue(gamePlayer, out (Dictionary<ZombieBones, Vector3>, float) value) && time - value.Item2 < cacheExpirationInterval)
|
||||
{
|
||||
return value.Item1;
|
||||
}
|
||||
Dictionary<ZombieBones, Vector3> dictionary = new Dictionary<ZombieBones, Vector3>();
|
||||
if (gamePlayer.PlayerBody == null || gamePlayer.PlayerBody.SkeletonRootJoint == null)
|
||||
{
|
||||
return dictionary;
|
||||
}
|
||||
List<Transform> list = gamePlayer.PlayerBody.SkeletonRootJoint.Bones.Values.ToList();
|
||||
for (int i = 0; i < list.Count; i++)
|
||||
{
|
||||
Transform transform = list[i];
|
||||
if (transform != null && NeededZombieBones.Contains((ZombieBones)i))
|
||||
{
|
||||
Vector3 position = transform.position;
|
||||
if (GameUtils.IsScreenPointVisible(Main.ActiveCamera.WorldToScreenPoint(position)))
|
||||
{
|
||||
dictionary[(ZombieBones)i] = position;
|
||||
}
|
||||
}
|
||||
}
|
||||
zombieBoneCache[gamePlayer] = (dictionary, time);
|
||||
return dictionary;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue