EFTCheatPVE/stoopid.raw/stupid.solutions.Features.ESP/CorpseEsp.cs

243 lines
7.3 KiB
C#

using System.Collections.Generic;
using System.Linq;
using EFT.Interactive;
using stupid.solutions.Data;
using stupid.solutions.stupid.solutions.Data;
using stupid.solutions.Utils;
using UnityEngine;
namespace stupid.solutions.Features.ESP;
internal class CorpseEsp : MonoBehaviour
{
private Texture2D stex;
public static List<GameCorpse> Corpses = new List<GameCorpse>();
private float _nextBodyCacheTime;
private static readonly float CacheLootItemsInterval = 10f;
private int initialYOffset = Settings.initialYOffset;
private Dictionary<string, int?> lootItemPrices = new Dictionary<string, int?>();
private static readonly float ItemListCacheInterval = 30f;
private float _nextItemListCache;
private void Start()
{
stex = new Texture2D(1, 1);
stex.SetPixel(0, 0, Color.blue);
stex.Apply();
}
public void Update()
{
if (!Settings.BodyESP)
{
return;
}
if (Time.time >= _nextBodyCacheTime && Main.GameWorld != null && Main.GameWorld.ObservedPlayersCorpses != null)
{
Corpses.Clear();
Corpse[] array = Object.FindObjectsOfType<Corpse>();
foreach (Corpse corpse in array)
{
if (GameUtils.IsCorpseValid(corpse) && !(Vector3.Distance(Main.MainCamera.transform.position, corpse.transform.position) > Settings.DrawLootableContainersDistance))
{
Corpses.Add(new GameCorpse(corpse));
}
}
_nextBodyCacheTime = Time.time + CacheLootItemsInterval;
}
foreach (GameCorpse corpse2 in Corpses)
{
corpse2.RecalculateDynamics();
if (!(Time.time >= _nextItemListCache) || corpse2.Corpse.ItemOwner.RootItem.GetAllItems().Count() < 2)
{
continue;
}
int num = 1;
foreach (ContainerItem lootItem in corpse2.LootItems)
{
num += lootItem.Count * lootItem.Item.StackObjectsCount;
}
if (corpse2.Corpse.ItemOwner.RootItem.GetAllItems().Count() != num)
{
corpse2.RefreshItems();
}
_nextItemListCache = Time.time + ItemListCacheInterval;
}
if (Settings.playerWeapon)
{
initialYOffset = Settings.initialYOffset - 20;
}
if (!Input.GetKeyDown(KeyCode.Delete) || Settings.allinputdisabled)
{
return;
}
foreach (GameCorpse corpse3 in Corpses)
{
corpse3.RecalculateDynamics();
corpse3.RefreshItems();
}
}
private void OnGUI()
{
if (!Settings.BodyESP || Main.MainCamera == null || Main.GameWorld == null || Main.LocalPlayer == null)
{
return;
}
int xOffset = Settings.xOffset;
int num = Settings.initialYOffset;
int itemLineHeight = Settings.itemLineHeight;
int lineWidth = Settings.lineWidth;
int lineX = Settings.lineX;
GUIStyle style = new GUIStyle(GUI.skin.label)
{
alignment = TextAnchor.UpperLeft,
fontSize = 12,
font = Main.TXTFONT,
normal = new GUIStyleState
{
textColor = Color.cyan
}
};
GUIStyle gUIStyle = new GUIStyle(GUI.skin.label)
{
alignment = TextAnchor.UpperLeft,
fontSize = 12,
font = Main.TXTFONT
};
foreach (GameCorpse corpse in Corpses)
{
if (!corpse.IsOnScreen || corpse.Distance > Settings.DrawLootableContainersDistance)
{
continue;
}
Vector2 vector = new Vector2(corpse.ScreenPosition.x, corpse.ScreenPosition.y);
if (!corpse.ItemInit)
{
corpse.RefreshItems();
}
if (corpse.LootItems.Count <= 0)
{
continue;
}
Vector3 position = corpse.Corpse.transform.position;
bool flag = Aimbot.CaulculateInFov2(new Vector3(position.x, position.y, position.z)) <= Settings.SimpleStringsFOV;
if (Settings.DrawSimpleStrings)
{
string text = "";
string text2 = "";
string text3 = "";
foreach (ContainerItem lootItem in corpse.LootItems)
{
if (GameUtils.ShouldDisplayItem(lootItem))
{
switch (lootItem.Itemcat)
{
case ItemCategories.Kappa:
{
string text11 = ColorUtility.ToHtmlStringRGB(Settings.KappaColor);
text2 = text2 + "<color=#" + text11 + ">+</color>";
break;
}
case ItemCategories.Superrare:
{
string text10 = ColorUtility.ToHtmlStringRGB(Settings.SuperrareColor);
text2 = text2 + "<color=#" + text10 + ">+</color>";
break;
}
case ItemCategories.Stim:
{
string text9 = ColorUtility.ToHtmlStringRGB(Settings.StimItemColor);
text2 = text2 + "<color=#" + text9 + ">+</color>";
break;
}
case ItemCategories.Quest:
{
string text8 = ColorUtility.ToHtmlStringRGB(Settings.QuestItemColor);
text2 = text2 + "<color=#" + text8 + ">+</color>";
break;
}
case ItemCategories.Wishlist:
{
string text7 = ColorUtility.ToHtmlStringRGB(Settings.WishlistColor);
text2 = text2 + "<color=#" + text7 + ">+</color>";
break;
}
case ItemCategories.Hideout:
{
string text6 = ColorUtility.ToHtmlStringRGB(Settings.HideoutColor);
text2 = text2 + "<color=#" + text6 + ">+</color>";
break;
}
case ItemCategories.Searched:
{
string text5 = ColorUtility.ToHtmlStringRGB(Settings.SearchedColor);
text2 = text2 + "<color=#" + text5 + ">+</color>";
break;
}
case ItemCategories.Common:
{
string text4 = ColorUtility.ToHtmlStringRGB(Settings.CommonItemColor);
text2 = text2 + "<color=#" + text4 + ">+</color>";
break;
}
}
}
}
if (!string.IsNullOrEmpty(text2))
{
text += text2;
text3 = "<color=cyan>[</color>" + text + "<color=cyan>]</color>";
}
if (!flag)
{
GUI.Label(new Rect(vector.x - (float)lineX - (float)xOffset - 8f, vector.y - (float)num - (float)itemLineHeight + 3f, 200f, itemLineHeight), text3 ?? "", style);
}
}
if (!(!Settings.DrawSimpleStrings || flag) || 0 >= corpse.LootItems.Count((ContainerItem item) => GameUtils.ShouldDisplayItem(item)))
{
continue;
}
int num2 = corpse.LootItems.Count((ContainerItem item) => GameUtils.ShouldDisplayItem(item));
if (num2 <= 0)
{
break;
}
new GUIStyle();
Texture2D texture2D = new Texture2D(1, 1);
texture2D.SetPixel(0, 0, Color.yellow);
texture2D.Apply();
int? totalprice = corpse.totalprice;
GUI.DrawTexture(new Rect(vector.x - (float)lineX, vector.y - (float)num, lineWidth, num2 * itemLineHeight + itemLineHeight - 25), texture2D);
string text12 = ((totalprice.HasValue && Settings.drawvalue) ? $"Dead Body [{totalprice / 1000}K] - {corpse.FormattedDistance} " : ("Dead Body - " + corpse.FormattedDistance + " "));
GUI.Label(new Rect(vector.x - (float)lineX - (float)xOffset - 8f, vector.y - (float)num - (float)itemLineHeight + 3f, 200f, itemLineHeight), text12, style);
int num3 = num + itemLineHeight / 3;
foreach (ContainerItem lootItem2 in corpse.LootItems)
{
if (GameUtils.ShouldDisplayItem(lootItem2))
{
string shortName = lootItem2.ShortName;
int count = lootItem2.Count;
Color itemColor = GameUtils.GetItemColor(lootItem2.Itemcat);
string text13 = ((count > 1) ? $" ({count})" : "");
int? num4 = null;
if (Settings.drawvalue)
{
num4 = lootItem2.itemprice;
}
string text14 = ((num4.HasValue && Settings.drawvalue) ? $"{shortName} [{num4 / 1000}K]{text13}" : (shortName + text13));
gUIStyle.normal.textColor = itemColor;
GUI.Label(new Rect(vector.x - (float)lineX - (float)xOffset, vector.y - (float)(num3 - itemLineHeight) - 16f, 200f, itemLineHeight), text14, gUIStyle);
num3 -= itemLineHeight;
}
}
}
}
}