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

241 lines
8.2 KiB
C#

using System.Collections.Generic;
using System.Linq;
using EFT.Interactive;
using EFT.InventoryLogic;
using EFT.UI;
using stupid.solutions.Data;
using stupid.solutions.stupid.solutions.Data;
using stupid.solutions.Utils;
using UnityEngine;
namespace stupid.solutions.Features.ESP;
public class LootableContainerESP : MonoBehaviour
{
private static readonly float CacheLootItemsInterval = 600f;
private float _nextLootContainerCacheTime;
public static List<GameLootContainer> _gameLootContainers;
private static readonly Color LootableContainerColor = new Color(1f, 0.2f, 0.09f);
private Dictionary<string, int?> lootItemPrices = new Dictionary<string, int?>();
private static readonly float ItemListCacheInterval = 10f;
private float _nextItemListCache;
private bool gameworldwasnotnull;
private bool repatchbecausenewgame;
public void Start()
{
_gameLootContainers = new List<GameLootContainer>();
}
public void Update()
{
if (!Settings.DrawLootableContainers)
{
return;
}
if ((Time.time >= _nextLootContainerCacheTime || repatchbecausenewgame) && Main.GameWorld != null && Main.GameWorld.LootItems != null && Main.LocalPlayer != null && Main.MainCamera != null)
{
repatchbecausenewgame = false;
_gameLootContainers.Clear();
ConsoleScreen.Log("Getting Container Instances (game start)");
LootableContainer[] array = Object.FindObjectsOfType<LootableContainer>();
foreach (LootableContainer lootableContainer in array)
{
if (GameUtils.IsLootableContainerValid(lootableContainer))
{
_gameLootContainers.Add(new GameLootContainer(lootableContainer));
}
}
_nextLootContainerCacheTime = Time.time + CacheLootItemsInterval;
gameworldwasnotnull = true;
}
if (gameworldwasnotnull && Main.GameWorld == null)
{
repatchbecausenewgame = true;
gameworldwasnotnull = false;
}
if (Main.GameWorld != null && _gameLootContainers.Count > 0)
{
foreach (GameLootContainer gameLootContainer2 in _gameLootContainers)
{
gameLootContainer2.RecalculateDynamics();
}
}
if (!(Time.time >= _nextItemListCache))
{
return;
}
foreach (GameLootContainer gameLootContainer in _gameLootContainers)
{
if (gameLootContainer.LootableContainer.ItemOwner.RootItem.GetAllItems().Count((Item item) => item != null && !gameLootContainer.IsContainerName(item.LocalizedName())) != gameLootContainer.CachedItemCount)
{
gameLootContainer.RefreshItems();
_ = gameLootContainer.ItemInit;
}
}
_nextItemListCache = Time.time + ItemListCacheInterval;
}
private void OnGUI()
{
if (!Settings.DrawLootableContainers || Main.MainCamera == null || (Main.GameWorld == null && Main.GameWorld.LootItems == null && Main.LocalPlayer == null))
{
return;
}
int xOffset = Settings.xOffset;
int initialYOffset = 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.white
}
};
GUIStyle gUIStyle = new GUIStyle(GUI.skin.label)
{
alignment = TextAnchor.UpperLeft,
fontSize = 12,
font = Main.TXTFONT
};
foreach (GameLootContainer gameLootContainer in _gameLootContainers)
{
if (!GameUtils.IsLootableContainerValid(gameLootContainer.LootableContainer) || !gameLootContainer.IsOnScreen || gameLootContainer.Distance > Settings.DrawLootableContainersDistance)
{
continue;
}
Vector2 vector = new Vector2(gameLootContainer.ScreenPosition.x, gameLootContainer.ScreenPosition.y);
if (!gameLootContainer.ItemInit)
{
gameLootContainer.RefreshItems();
}
if (gameLootContainer.LootItems.Count <= 0)
{
continue;
}
Vector3 position = gameLootContainer.LootableContainer.transform.position;
bool flag = Aimbot.CaulculateInFov2(new Vector3(position.x, position.y, position.z)) <= Settings.SimpleStringsFOV;
if (Settings.DrawSimpleStrings)
{
string text = "";
string text2 = "";
foreach (ContainerItem lootItem in gameLootContainer.LootItems)
{
if (GameUtils.ShouldDisplayItem(lootItem))
{
switch (lootItem.Itemcat)
{
case ItemCategories.Kappa:
{
string text10 = ColorUtility.ToHtmlStringRGB(Settings.KappaColor);
text2 = text2 + "<color=#" + text10 + ">+</color>";
break;
}
case ItemCategories.Superrare:
{
string text9 = ColorUtility.ToHtmlStringRGB(Settings.SuperrareColor);
text2 = text2 + "<color=#" + text9 + ">+</color>";
break;
}
case ItemCategories.Stim:
{
string text8 = ColorUtility.ToHtmlStringRGB(Settings.StimItemColor);
text2 = text2 + "<color=#" + text8 + ">+</color>";
break;
}
case ItemCategories.Quest:
{
string text7 = ColorUtility.ToHtmlStringRGB(Settings.QuestItemColor);
text2 = text2 + "<color=#" + text7 + ">+</color>";
break;
}
case ItemCategories.Wishlist:
{
string text6 = ColorUtility.ToHtmlStringRGB(Settings.WishlistColor);
text2 = text2 + "<color=#" + text6 + ">+</color>";
break;
}
case ItemCategories.Hideout:
{
string text5 = ColorUtility.ToHtmlStringRGB(Settings.HideoutColor);
text2 = text2 + "<color=#" + text5 + ">+</color>";
break;
}
case ItemCategories.Searched:
{
string text4 = ColorUtility.ToHtmlStringRGB(Settings.SearchedColor);
text2 = text2 + "<color=#" + text4 + ">+</color>";
break;
}
case ItemCategories.Common:
{
string text3 = ColorUtility.ToHtmlStringRGB(Settings.CommonItemColor);
text2 = text2 + "<color=#" + text3 + ">+</color>";
break;
}
}
}
}
if (!string.IsNullOrEmpty(text2))
{
text += text2;
}
if (!flag && 0 < gameLootContainer.LootItems.Count((ContainerItem item) => GameUtils.ShouldDisplayItem(item)))
{
if (gameLootContainer.LootItems.Count((ContainerItem item) => GameUtils.ShouldDisplayItem(item)) <= 0)
{
break;
}
GUI.Label(new Rect(vector.x - (float)lineX - (float)xOffset - 8f, vector.y - (float)initialYOffset - (float)itemLineHeight + 3f, 200f, itemLineHeight), " [" + text + "] ", style);
}
}
if (!(!Settings.DrawSimpleStrings || flag) || 0 >= gameLootContainer.LootItems.Count((ContainerItem item) => GameUtils.ShouldDisplayItem(item)))
{
continue;
}
int num = gameLootContainer.LootItems.Count((ContainerItem item) => GameUtils.ShouldDisplayItem(item));
if (num <= 0)
{
break;
}
new GUIStyle();
Texture2D texture2D = new Texture2D(1, 1);
texture2D.SetPixel(0, 0, Color.yellow);
texture2D.Apply();
GUI.DrawTexture(new Rect(vector.x - (float)lineX, vector.y - (float)initialYOffset, lineWidth, num * itemLineHeight + itemLineHeight - 25), texture2D);
int? totalprice = gameLootContainer.totalprice;
string text11 = "";
GUI.Label(text: (!Settings.drawvalue || !totalprice.HasValue) ? (gameLootContainer.ContainerName + " - " + gameLootContainer.FormattedDistance) : $"{gameLootContainer.ContainerName} [{totalprice / 1000}K] - {gameLootContainer.FormattedDistance}", position: new Rect(vector.x - (float)lineX - (float)xOffset - 8f, vector.y - (float)initialYOffset - (float)itemLineHeight + 3f, 200f, itemLineHeight), style: style);
int num2 = initialYOffset + itemLineHeight / 3;
foreach (ContainerItem lootItem2 in gameLootContainer.LootItems)
{
if (GameUtils.ShouldDisplayItem(lootItem2))
{
string localizedName = lootItem2.LocalizedName;
int count = lootItem2.Count;
Color itemColor = GameUtils.GetItemColor(lootItem2.Itemcat);
string text12 = ((count > 1) ? $" ({count})" : "");
string text13 = "";
int? itemprice = lootItem2.itemprice;
text13 = ((!Settings.drawvalue || !totalprice.HasValue) ? (localizedName + text12 + " ") : $"{localizedName} [{itemprice / 1000}K]{text12} ");
gUIStyle.normal.textColor = itemColor;
GUI.Label(new Rect(vector.x - (float)lineX - (float)xOffset, vector.y - (float)(num2 - itemLineHeight) - 16f, 200f, itemLineHeight), text13, gUIStyle);
num2 -= itemLineHeight;
}
}
}
}
}