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

256 lines
7.3 KiB
C#

using System.Collections.Generic;
using EFT.Interactive;
using EFT.UI;
using stupid.solutions.Data;
using stupid.solutions.Utils;
using UnityEngine;
namespace stupid.solutions.Features.ESP;
public class ItemESP : MonoBehaviour
{
private static readonly float CacheLootItemsInterval = 5f;
private static readonly float clearcacheinterval = 600f;
private float _nextclearCacheTime;
private float _nextLootItemCacheTime;
public static List<GameLootItem> _gameLootItems = new List<GameLootItem>();
private Dictionary<Renderer, Shader> originalWeaponShaders = new Dictionary<Renderer, Shader>();
private bool addedwishitems;
private static Shader _cachedForceFieldShader;
public void Update()
{
if (Main.GameWorld == null && _gameLootItems.Count > 0)
{
_gameLootItems.Clear();
}
if (!Settings.DrawLootableContainers && !Settings.DrawLootItems)
{
return;
}
if (Main.LocalPlayer != null && !addedwishitems)
{
Main.GetWishlistItems();
addedwishitems = true;
ConsoleScreen.Log("Added wishlist items");
}
else if (Main.LocalPlayer == null && addedwishitems)
{
ClearWishlistItems();
}
if (!Settings.DrawLootItems)
{
return;
}
if (Time.time >= _nextLootItemCacheTime)
{
CacheLootItems();
_nextLootItemCacheTime = Time.time + CacheLootItemsInterval;
}
_gameLootItems.RemoveAll((GameLootItem li) => !GameUtils.IsLootItemValid(li.LootItem) || li == null || li.LootItem.transform == null);
foreach (GameLootItem gameLootItem in _gameLootItems)
{
if (gameLootItem != null && GameUtils.IsLootItemValid(gameLootItem.LootItem))
{
if (Main.GameWorld == null)
{
return;
}
gameLootItem.RecalculateDynamics();
if (gameLootItem.Itemcat == ItemCategories.Uninitialized)
{
gameLootItem.SetItemCat();
}
if (!gameLootItem.itemprice.HasValue)
{
gameLootItem.CalculateItemPrice();
}
}
}
if (Time.time >= _nextclearCacheTime)
{
_gameLootItems.Clear();
_nextclearCacheTime = Time.time + clearcacheinterval;
ConsoleScreen.Log("memory cleaned");
}
}
private void CacheLootItems()
{
if (Main.GameWorld == null || Main.GameWorld.LootItems == null)
{
return;
}
int num = 0;
for (int i = 0; i < Main.GameWorld.LootItems.Count; i++)
{
LootItem byIndex = Main.GameWorld.LootItems.GetByIndex(i);
if (!(byIndex == null) && GameUtils.IsLootItemValid(byIndex))
{
_ = byIndex.transform.position;
if (!(byIndex.Item.LocalizedName() == "Default Inventory"))
{
num++;
}
}
}
if (_gameLootItems.Count == num)
{
return;
}
_gameLootItems.Clear();
ConsoleScreen.Log("Item ESP Item Instance Mismatch, Updating...");
for (int j = 0; j < Main.GameWorld.LootItems.Count; j++)
{
LootItem byIndex2 = Main.GameWorld.LootItems.GetByIndex(j);
if (!(byIndex2 == null) && GameUtils.IsLootItemValid(byIndex2))
{
_ = byIndex2.transform.position;
if (!(byIndex2.Item.LocalizedName() == "Default Inventory"))
{
_gameLootItems.Add(new GameLootItem(byIndex2));
}
}
}
}
public void ClearWishlistItems()
{
Main.wishlistitemids.Clear();
Main.hideoutitemids.Clear();
addedwishitems = false;
}
private void RenderItemESP()
{
List<(Vector2, string, Color)> list = new List<(Vector2, string, Color)>();
foreach (GameLootItem gameLootItem in _gameLootItems)
{
if (gameLootItem != null && gameLootItem.IsOnScreen && !(gameLootItem.Distance > Settings.DrawLootItemsDistance))
{
_ = gameLootItem.LocalizedName;
_ = gameLootItem.ItemID;
string localizedName = gameLootItem.LocalizedName;
localizedName = ((!(gameLootItem.stackcount > 1)) ? gameLootItem.LocalizedName : $"{gameLootItem.LocalizedName}({gameLootItem.stackcount})");
int? itemprice = gameLootItem.itemprice;
bool flag = true;
if (Settings.DrawSimpleStrings)
{
Vector3 position = gameLootItem.LootItem.gameObject.transform.position;
flag = Aimbot.CaulculateInFov2(new Vector3(position.x, position.y, position.z)) <= Settings.SimpleStringsFOV;
}
string text = ((Settings.drawvalue && itemprice.HasValue) ? $"{localizedName} [{itemprice / 1000}K] - {gameLootItem.FormattedDistance} " : (localizedName + " - " + gameLootItem.FormattedDistance + " "));
string text2 = " + ";
string item = ((!Settings.DrawSimpleStrings) ? text : (flag ? text : text2));
ItemCategories itemcat = gameLootItem.Itemcat;
Vector2 screenPositionFinal = gameLootItem.ScreenPositionFinal;
Color itemColor = GameUtils.GetItemColor(itemcat);
if (itemcat == ItemCategories.Quest && Settings.quest)
{
list.Add((screenPositionFinal, item, itemColor));
}
else if (itemcat == ItemCategories.Superrare && Settings.superrare)
{
list.Add((screenPositionFinal, item, itemColor));
}
else if (itemcat == ItemCategories.Kappa && Settings.kappa)
{
list.Add((screenPositionFinal, item, itemColor));
}
else if (itemcat == ItemCategories.Stim && Settings.stim)
{
list.Add((screenPositionFinal, item, itemColor));
}
else if (itemcat == ItemCategories.Searched && Settings.searchItem)
{
list.Add((screenPositionFinal, item, itemColor));
}
else if (itemcat == ItemCategories.Wishlist && Settings.drawwishlistitem)
{
list.Add((screenPositionFinal, item, itemColor));
}
else if (itemcat == ItemCategories.Hideout && Settings.drawhideoutitems)
{
list.Add((screenPositionFinal, item, itemColor));
}
else if (itemcat == ItemCategories.Common && Settings.common && gameLootItem.Distance < Settings.commonitemdistance)
{
list.Add((screenPositionFinal, item, itemColor));
}
else if (gameLootItem.itemprice > Settings.ESPPRICEfiltervalue && Settings.ESPFilterbyprice)
{
list.Add((screenPositionFinal, item, itemColor));
}
}
}
foreach (var (position2, label, color) in list)
{
Render.DrawString(position2, label, color);
}
}
private void OnGUI()
{
if (Settings.DrawLootItems && !(Main.GameWorld == null) && !(Main.LocalPlayer == null))
{
RenderItemESP();
if (Settings.weaponchams)
{
weaponChams();
}
}
}
private void weaponChams()
{
if (Main.GameWorld == null || !Settings.weaponchams)
{
ResetWeaponChams();
return;
}
if (_cachedForceFieldShader == null)
{
_cachedForceFieldShader = Main.bundle.LoadAsset<Shader>("wireframe.shader");
}
Renderer[] componentsInChildren = Main.LocalPlayer.GetComponentsInChildren<Renderer>();
foreach (Renderer renderer in componentsInChildren)
{
Material material = renderer.material;
if (!(material == null))
{
if (!originalWeaponShaders.ContainsKey(renderer))
{
originalWeaponShaders[renderer] = material.shader;
}
material.shader = _cachedForceFieldShader;
material.SetColor("_VisibleColor", Settings.SelfChamsColor);
material.SetColor("_InvisibleColor", Settings.SelfChamsColor);
}
}
}
private void ResetWeaponChams()
{
Renderer[] componentsInChildren = Main.LocalPlayer.GetComponentsInChildren<Renderer>();
foreach (Renderer renderer in componentsInChildren)
{
if (!(renderer == null) && originalWeaponShaders.ContainsKey(renderer))
{
Material material = renderer.material;
if (!(material == null))
{
material.shader = originalWeaponShaders[renderer];
material.SetColor("_Color", Color.white);
}
}
}
originalWeaponShaders.Clear();
}
}