the initial commit to the repo.

This commit is contained in:
NukedBart 2025-10-25 01:27:14 +08:00
parent 025c032b8c
commit 1b757591b9
264 changed files with 21882 additions and 0 deletions

View file

@ -0,0 +1,869 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using Diz.Skinning;
using EFT;
using EFT.CameraControl;
using EFT.Interactive;
using EFT.InventoryLogic;
using EFT.NextObservedPlayer;
using EFT.UI;
using stupid.solutions.Data;
using stupid.solutions.stupid.solutions.Data;
using UnityEngine;
namespace stupid.solutions.Utils;
public static class GameUtils
{
public class Tracer
{
public Vector3 StartPos;
public Vector3 EndPos;
public float Time;
}
public class HitMarker
{
public Vector3 HitPos;
public float Time;
}
public static Camera AimCamera;
public static Material DrawMaterial;
public static Vector2 ScreenCenter = new Vector2((float)Screen.width / 2f, (float)Screen.height / 2f);
public static void InitMaterial()
{
try
{
DrawMaterial = new Material(Shader.Find("Hidden/Internal-Colored"))
{
hideFlags = HideFlags.HideAndDontSave
};
if (DrawMaterial.shader == null)
{
throw new Exception("Shader 'Hidden/Internal-Colored' not found or unavailable.");
}
ConsoleScreen.Log("Found Tracer Material Shader");
DrawMaterial.SetInt("_SrcBlend", 5);
DrawMaterial.SetInt("_DstBlend", 10);
DrawMaterial.SetInt("_Cull", 0);
DrawMaterial.SetInt("_ZWrite", 0);
ConsoleScreen.Log("Set Tracer Material Parameters");
}
catch (Exception ex)
{
ConsoleScreen.LogError("[TracerESP] Failed to initialize material: " + ex.Message);
}
}
public static float Map(float value, float sourceFrom, float sourceTo, float destinationFrom, float destinationTo)
{
return (value - sourceFrom) / (sourceTo - sourceFrom) * (destinationTo - destinationFrom) + destinationFrom;
}
public static bool IsPlayerValid(Player player)
{
if (player != null && player.Transform != null && player.PlayerBones != null)
{
return player.PlayerBones.transform != null;
}
return false;
}
public static bool IsOPlayerValid(ObservedPlayerView player)
{
if (player != null && player.Transform != null && player.PlayerBones != null)
{
return player.PlayerBones.transform != null;
}
return false;
}
public static bool IsExfiltrationPointValid(ExfiltrationPoint lootItem)
{
return lootItem != null;
}
public static bool IsTransitPointValid(TransitPoint lootItem)
{
return lootItem != null;
}
public static bool IsLootItemValid(LootItem lootItem)
{
if (lootItem != null && lootItem.Item != null)
{
return lootItem.Item.Template != null;
}
return false;
}
public static int? GetItemPrice(GameLootItem item)
{
string itemid = item.LootItem.TemplateId;
List<ItemData> source = Menu2.pullItemIDs.itemList.Where((ItemData itemData2) => itemData2.Id == itemid).ToList();
if (source.Any())
{
ItemData itemData = source.First();
if (itemData.avg24hPrice > 0)
{
return itemData.avg24hPrice;
}
if (itemData.BasePrice > 0)
{
return itemData.BasePrice;
}
}
return 0;
}
public static int? GetItemPriceBYID(string itemid)
{
List<ItemData> source = Menu2.pullItemIDs.itemList.Where((ItemData itemData2) => itemData2.Id == itemid).ToList();
if (source.Any())
{
ItemData itemData = source.First();
if (itemData.avg24hPrice > 0)
{
return itemData.avg24hPrice;
}
if (itemData.BasePrice > 0)
{
return itemData.BasePrice;
}
}
return 0;
}
public static bool ShouldDisplayItem(ContainerItem lootItem)
{
if (lootItem == null || lootItem.Itemcat == ItemCategories.Uninitialized)
{
return false;
}
if (lootItem.Itemcat == ItemCategories.Superrare && Settings.superrare)
{
return true;
}
if (lootItem.Itemcat == ItemCategories.Kappa && Settings.kappa)
{
return true;
}
if (lootItem.Itemcat == ItemCategories.Quest && Settings.quest)
{
return true;
}
if (lootItem.Itemcat == ItemCategories.Wishlist && Settings.drawwishlistitem)
{
return true;
}
if (lootItem.Itemcat == ItemCategories.Stim && Settings.stim)
{
return true;
}
if (lootItem.Itemcat == ItemCategories.Hideout && Settings.drawhideoutitems)
{
return true;
}
if (lootItem.Itemcat == ItemCategories.Searched && Settings.searchItem)
{
return true;
}
if (lootItem.Itemcat == ItemCategories.Common && Settings.common)
{
return false;
}
if (lootItem.itemprice > Settings.ESPPRICEfiltervalue && Settings.ESPFilterbyprice)
{
return true;
}
return false;
}
public static Color GetItemColor(ItemCategories Itemcat)
{
if (Settings.searchItem && Itemcat == ItemCategories.Searched)
{
return Settings.SearchedColor;
}
if (Settings.kappa && Itemcat == ItemCategories.Kappa)
{
return Settings.KappaColor;
}
if (Settings.superrare && Itemcat == ItemCategories.Superrare)
{
return Settings.SuperrareColor;
}
if (Settings.stim && Itemcat == ItemCategories.Stim)
{
return Settings.StimItemColor;
}
if (Settings.quest && Itemcat == ItemCategories.Quest)
{
return Settings.QuestItemColor;
}
if (Settings.drawwishlistitem && Itemcat == ItemCategories.Wishlist)
{
return Settings.WishlistColor;
}
if (Settings.drawhideoutitems && Itemcat == ItemCategories.Hideout)
{
return Settings.HideoutColor;
}
if (Settings.common && Itemcat == ItemCategories.Common)
{
return Settings.CommonItemColor;
}
return Color.white;
}
public static (string playerText, string shorttext, Color playerColor) GetPlayerTextDetails(GamePlayer gamePlayer, WildSpawnType role)
{
string text = " ";
string text2 = " ";
Color white = Color.white;
if (gamePlayer.Player.Profile.Info.Settings.IsBoss())
{
if (Main.IsBossByName(gamePlayer.Player.Profile.Info.Nickname.Localized()))
{
text2 = " Boss ";
text = Main.TranslateBossName(gamePlayer.Player.Profile.Info.Nickname.Localized()) + " [" + gamePlayer.FormattedDistance + "] ";
white = Settings.BossandGuardColor;
}
else
{
switch (role)
{
case WildSpawnType.shooterBTR:
text2 = " BTR ";
text = " BTR [" + gamePlayer.FormattedDistance + "] ";
white = Settings.BTRColor;
break;
case WildSpawnType.peacefullZryachiyEvent:
case WildSpawnType.ravangeZryachiyEvent:
text2 = " Boss ";
text = " Event Zryachi [" + gamePlayer.FormattedDistance + "] ";
white = Settings.BossandGuardColor;
break;
case WildSpawnType.bossTagillaAgro:
text2 = " Boss ";
text = " Shadow of Tagilla [" + gamePlayer.FormattedDistance + "] ";
white = Settings.BossandGuardColor;
break;
case WildSpawnType.bossKillaAgro:
text2 = " Boss ";
text = " Shadow of Killa [" + gamePlayer.FormattedDistance + "] ";
white = Settings.BossandGuardColor;
break;
case WildSpawnType.tagillaHelperAgro:
text2 = " Guard ";
text = " Guard [" + gamePlayer.FormattedDistance + "] ";
white = Settings.GuardColor;
break;
case WildSpawnType.infectedTagilla:
text2 = " Boss ";
text = " Zombie Tagilla [" + gamePlayer.FormattedDistance + "] ";
white = Settings.BossandGuardColor;
break;
case WildSpawnType.exUsec:
text2 = " Rogue ";
text = " Rogue [" + gamePlayer.FormattedDistance + "] ";
white = Settings.RogueColor;
break;
case WildSpawnType.pmcUSEC:
text2 = " PMC ";
text = $" [USEC] {gamePlayer.Player.Profile.Info.Nickname} [{gamePlayer.Player.Profile.Info.Level}] [{gamePlayer.FormattedDistance}] ";
white = Settings.USECColor;
break;
case WildSpawnType.pmcBEAR:
text2 = " PMC ";
text = $" [BEAR] {gamePlayer.Player.Profile.Info.Nickname} [{gamePlayer.Player.Profile.Info.Level}] [{gamePlayer.FormattedDistance}] ";
white = Settings.BEARColor;
break;
case WildSpawnType.followerZryachiy:
case WildSpawnType.bossBoarSniper:
text2 = " Guard ";
text = " Guard [" + gamePlayer.FormattedDistance + "] ";
white = Settings.GuardColor;
break;
case WildSpawnType.pmcBot:
text2 = " Raider ";
text = " Raider [" + gamePlayer.FormattedDistance + "] ";
white = Settings.RaiderColor;
break;
case WildSpawnType.sectantPriest:
case WildSpawnType.sectactPriestEvent:
case WildSpawnType.sectantPredvestnik:
case WildSpawnType.sectantPrizrak:
case WildSpawnType.sectantOni:
text2 = " Cultist ";
text = " Cultist [" + gamePlayer.FormattedDistance + "] ";
white = Settings.CultistColor;
break;
case WildSpawnType.marksman:
case WildSpawnType.assault:
case WildSpawnType.assaultGroup:
text2 = " Scav ";
text = " Scav [" + gamePlayer.FormattedDistance + "] ";
white = Settings.ScavColor;
break;
case WildSpawnType.infectedAssault:
case WildSpawnType.infectedPmc:
case WildSpawnType.infectedCivil:
case WildSpawnType.infectedLaborant:
text2 = " [Z] ";
text = " Zombie [" + gamePlayer.FormattedDistance + "] ";
white = Settings.ZombieColor;
break;
default:
{
text2 = " U-Boss ";
string text3 = role.ToString();
text = " Unknown Boss Entity Name : " + gamePlayer.Player.Profile.Info.Nickname + " [" + gamePlayer.FormattedDistance + "] Role : " + text3 + " ";
white = Color.red;
break;
}
}
}
}
else
{
switch (role)
{
case WildSpawnType.sectantWarrior:
text2 = " Cultist ";
text = " Cultist[" + gamePlayer.FormattedDistance + "] ";
white = Settings.CultistColor;
break;
case WildSpawnType.marksman:
text2 = " Sniper ";
text = " Scav Sniper [" + gamePlayer.FormattedDistance + "] ";
white = Settings.ScavColor;
break;
case WildSpawnType.shooterBTR:
text2 = " BTR ";
text = " BTR [" + gamePlayer.FormattedDistance + "] ";
white = Settings.BTRColor;
break;
case WildSpawnType.infectedAssault:
case WildSpawnType.infectedPmc:
case WildSpawnType.infectedCivil:
case WildSpawnType.infectedLaborant:
text2 = " [Z] ";
text = " Zombie [" + gamePlayer.FormattedDistance + "] ";
white = Settings.ZombieColor;
break;
case WildSpawnType.arenaFighter:
text2 = " Fighter ";
text = " Arena Fighter [" + gamePlayer.FormattedDistance + "] ";
white = Settings.RaiderColor;
break;
default:
if (role != WildSpawnType.marksman && role != WildSpawnType.assault)
{
text2 = " Guard ";
text = " Guard [" + gamePlayer.FormattedDistance + "] ";
white = Settings.GuardColor;
}
else
{
text2 = " Scav ";
text = " Scav [" + gamePlayer.FormattedDistance + "] ";
white = Settings.ScavColor;
}
break;
}
}
return (playerText: text, shorttext: text2, playerColor: white);
}
public static (string playerText, string shorttext, Color playerColor) GetPlayerTextDetailsO(OnlineGamePlayer gamePlayer)
{
string item = " ";
string item2 = " ";
Color item3 = Color.white;
OnlineGamePlayer.PlayerType role = gamePlayer.role;
if (role == OnlineGamePlayer.PlayerType.Boss)
{
item2 = " Boss ";
item = Main.TranslateBossNameBYWST(gamePlayer.wst) + " [" + gamePlayer.FormattedDistance + "] ";
item3 = Settings.BossandGuardColor;
}
else if (role == OnlineGamePlayer.PlayerType.Guard)
{
item2 = " Guard ";
item = " Guard [" + gamePlayer.FormattedDistance + "] ";
item3 = Settings.GuardColor;
}
else if (role == OnlineGamePlayer.PlayerType.BTR)
{
item2 = " BTR ";
item = " BTR [" + gamePlayer.FormattedDistance + "] ";
item3 = Settings.BTRColor;
}
else if (role == OnlineGamePlayer.PlayerType.Cultist)
{
item2 = " Cultist ";
item = " Cultist [" + gamePlayer.FormattedDistance + "] ";
item3 = Settings.CultistColor;
}
else if (role == OnlineGamePlayer.PlayerType.Raider)
{
item2 = " Raider ";
item = " Raider [" + gamePlayer.FormattedDistance + "] ";
item3 = Settings.RaiderColor;
}
else if (role == OnlineGamePlayer.PlayerType.Rogue)
{
item2 = " Rogue ";
item = " Rogue [" + gamePlayer.FormattedDistance + "] ";
item3 = Settings.RogueColor;
}
else if (role == OnlineGamePlayer.PlayerType.Zombie)
{
item2 = " [Z] ";
item = " Zombie [" + gamePlayer.FormattedDistance + "] ";
item3 = Settings.ZombieColor;
}
else if (role == OnlineGamePlayer.PlayerType.Scav)
{
item2 = " Scav ";
item = " Scav [" + gamePlayer.FormattedDistance + "] ";
item3 = Settings.ScavColor;
}
else if (role == OnlineGamePlayer.PlayerType.Teammate && !gamePlayer.IsAI)
{
item2 = " [Teammate] ";
item = $" [Teammate] {gamePlayer.NickName} [KD : {gamePlayer.kd:f1}] [{gamePlayer.FormattedDistance}] ";
item3 = Settings.teammatecolor;
}
else if (role == OnlineGamePlayer.PlayerType.USEC && !gamePlayer.IsAI)
{
item2 = " USEC ";
item = $" [LVL {gamePlayer.level} USEC] {gamePlayer.NickName} [KD : {gamePlayer.kd:f1}] [{gamePlayer.FormattedDistance}] ";
item3 = Settings.USECColor;
}
else if (role == OnlineGamePlayer.PlayerType.BEAR && !gamePlayer.IsAI)
{
item2 = " BEAR ";
item = $" [LVL {gamePlayer.level} BEAR] {gamePlayer.NickName} [KD : {gamePlayer.kd:f1}] [{gamePlayer.FormattedDistance}] ";
item3 = Settings.BEARColor;
}
else if (role == OnlineGamePlayer.PlayerType.PlayerScav && !gamePlayer.IsAI)
{
item2 = " Player Scav ";
item = " [Player Scav] " + ConvertRussianToLatin(gamePlayer.NickName) + " [" + gamePlayer.FormattedDistance + "] ";
item3 = Settings.playerscavcolor;
}
return (playerText: item, shorttext: item2, playerColor: item3);
}
public static bool ContainsRussianCharacters(string input)
{
string pattern = "[\\u0400-\\u04FF]";
return Regex.IsMatch(input, pattern);
}
public static bool IsHealing(string input)
{
if (string.IsNullOrWhiteSpace(input))
{
return false;
}
return new HashSet<string>(StringComparer.OrdinalIgnoreCase)
{
"Splint", "CMS", "Surv12", "Aseptic", "Army", "CAT", "CALOK-B", "Esmarch", "AI-2", "Car",
"Salewa", "IFAK", "AFAK", "Grizzly"
}.Contains(input.Trim());
}
public static string ConvertRussianToLatin(string input)
{
if (string.IsNullOrWhiteSpace(input))
{
return input;
}
Dictionary<char, string> dictionary = new Dictionary<char, string>
{
{ 'А', "A" },
{ 'а', "a" },
{ 'Б', "B" },
{ 'б', "b" },
{ 'В', "V" },
{ 'в', "v" },
{ 'Г', "G" },
{ 'г', "g" },
{ 'Д', "D" },
{ 'д', "d" },
{ 'Е', "E" },
{ 'е', "e" },
{ 'Ё', "Yo" },
{ 'ё', "yo" },
{ 'Ж', "Zh" },
{ 'ж', "zh" },
{ 'З', "Z" },
{ 'з', "z" },
{ 'И', "I" },
{ 'и', "i" },
{ 'Й', "Y" },
{ 'й', "y" },
{ 'К', "K" },
{ 'к', "k" },
{ 'Л', "L" },
{ 'л', "l" },
{ 'М', "M" },
{ 'м', "m" },
{ 'Н', "N" },
{ 'н', "n" },
{ 'О', "O" },
{ 'о', "o" },
{ 'П', "P" },
{ 'п', "p" },
{ 'Р', "R" },
{ 'р', "r" },
{ 'С', "S" },
{ 'с', "s" },
{ 'Т', "T" },
{ 'т', "t" },
{ 'У', "U" },
{ 'у', "u" },
{ 'Ф', "F" },
{ 'ф', "f" },
{ 'Х', "Kh" },
{ 'х', "kh" },
{ 'Ц', "Ts" },
{ 'ц', "ts" },
{ 'Ч', "Ch" },
{ 'ч', "ch" },
{ 'Ш', "Sh" },
{ 'ш', "sh" },
{ 'Щ', "Shch" },
{ 'щ', "shch" },
{ 'Ъ', "" },
{ 'ъ', "" },
{ 'Ы', "Y" },
{ 'ы', "y" },
{ 'Ь', "" },
{ 'ь', "" },
{ 'Э', "E" },
{ 'э', "e" },
{ 'Ю', "Yu" },
{ 'ю', "yu" },
{ 'Я', "Ya" },
{ 'я', "ya" }
};
StringBuilder stringBuilder = new StringBuilder();
foreach (char c in input)
{
if (dictionary.TryGetValue(c, out var value))
{
stringBuilder.Append(value);
}
else
{
stringBuilder.Append(c);
}
}
return stringBuilder.ToString();
}
public static string ConvertLatinToRussian(string input)
{
if (string.IsNullOrWhiteSpace(input))
{
return input;
}
Dictionary<string, string> dictionary = new Dictionary<string, string>
{
{ "A", "А" },
{ "a", "а" },
{ "B", "Б" },
{ "b", "б" },
{ "V", "В" },
{ "v", "в" },
{ "G", "Г" },
{ "g", "г" },
{ "D", "Д" },
{ "d", "д" },
{ "E", "Е" },
{ "e", "е" },
{ "Yo", "Ё" },
{ "yo", "ё" },
{ "Zh", "Ж" },
{ "zh", "ж" },
{ "Z", "З" },
{ "z", "з" },
{ "I", "И" },
{ "i", "и" },
{ "Y", "Й" },
{ "y", "й" },
{ "K", "К" },
{ "k", "к" },
{ "L", "Л" },
{ "l", "л" },
{ "M", "М" },
{ "m", "м" },
{ "N", "Н" },
{ "n", "н" },
{ "O", "О" },
{ "o", "о" },
{ "P", "П" },
{ "p", "п" },
{ "R", "Р" },
{ "r", "р" },
{ "S", "С" },
{ "s", "с" },
{ "T", "Т" },
{ "t", "т" },
{ "U", "У" },
{ "u", "у" },
{ "F", "Ф" },
{ "f", "ф" },
{ "Kh", "Х" },
{ "kh", "х" },
{ "Ts", "Ц" },
{ "ts", "ц" },
{ "Ch", "Ч" },
{ "ch", "ч" },
{ "Sh", "Ш" },
{ "sh", "ш" },
{ "Shch", "Щ" },
{ "shch", "щ" },
{ "'", "ъ" },
{ "Y", "Ы" },
{ "y", "ы" },
{ "''", "ь" },
{ "E", "Э" },
{ "e", "э" },
{ "Yu", "Ю" },
{ "yu", "ю" },
{ "Ya", "Я" },
{ "ya", "я" }
};
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < input.Length; i++)
{
if (i < input.Length - 1)
{
string key = input.Substring(i, 2);
if (dictionary.TryGetValue(key, out var value))
{
stringBuilder.Append(value);
i++;
continue;
}
}
string text = input[i].ToString();
if (dictionary.TryGetValue(text, out var value2))
{
stringBuilder.Append(value2);
}
else
{
stringBuilder.Append(text);
}
}
return stringBuilder.ToString();
}
public static bool IsLootableContainerValid(LootableContainer lootableContainer)
{
if (lootableContainer != null)
{
return lootableContainer.Template != null;
}
return false;
}
public static bool IsPlayerAlive(Player player)
{
if (!IsPlayerValid(player))
{
return false;
}
if (player.HealthController == null)
{
return false;
}
return player.HealthController.IsAlive;
}
public static bool IsOPlayerAlive(ObservedPlayerView player)
{
if (!IsOPlayerValid(player))
{
return false;
}
if (player.HealthController == null)
{
return false;
}
return player.HealthController.IsAlive;
}
public static bool IsCorpseValid(Corpse corpse)
{
return corpse != null;
}
public static bool IsInventoryItemValid(Item item)
{
if (item != null)
{
return item.Template != null;
}
return false;
}
public static bool IsFriend(Player player)
{
if (Main.LocalPlayer.Profile.Info.GroupId == player.Profile.Info.GroupId && player.Profile.Info.GroupId != "0" && player.Profile.Info.GroupId != "")
{
return player.Profile.Info.GroupId != null;
}
return false;
}
public static bool IsInFov(Vector3 screenpos, float fovRadius)
{
Vector3 vector = screenpos;
float num = Screen.width;
float num2 = Screen.height;
Vector2 a = new Vector2(num / 2f, num2 / 2f);
Vector2 b = new Vector2(vector.x, vector.y);
return Vector2.Distance(a, b) <= fovRadius;
}
public static Vector3 WorldPointToScreenPoint(Vector3 worldPoint)
{
if (Main.MainCamera == null)
{
return Vector3.zero;
}
Vector3 result = Main.MainCamera.WorldToScreenPoint(worldPoint);
float num = (float)Screen.height / (float)Main.MainCamera.scaledPixelHeight;
result.y = (float)Screen.height - result.y * num;
result.x *= num;
return result;
}
private static bool IsPointInScopeView(Vector3 worldPoint, Camera opticCamera)
{
OpticSight componentInChildren = Main.LocalPlayer.ProceduralWeaponAnimation.HandsContainer.Weapon.GetComponentInChildren<OpticSight>();
if (componentInChildren == null)
{
return false;
}
Mesh mesh = componentInChildren.LensRenderer.GetComponent<MeshFilter>().mesh;
Vector3 position = componentInChildren.LensRenderer.transform.TransformPoint(mesh.bounds.max);
Vector3 position2 = componentInChildren.LensRenderer.transform.TransformPoint(mesh.bounds.min);
Vector3 vector = opticCamera.WorldToScreenPoint(position);
Vector3 vector2 = opticCamera.WorldToScreenPoint(position2);
Vector3 vector3 = opticCamera.WorldToScreenPoint(worldPoint);
if (vector3.x >= vector2.x && vector3.x <= vector.x && vector3.y >= vector2.y)
{
return vector3.y <= vector.y;
}
return false;
}
private static bool IsPointVisibleInCamera(Vector3 screenPoint, Camera camera)
{
Vector3 vector = camera.ScreenToViewportPoint(screenPoint);
if (screenPoint.z > 0.01f && vector.x >= 0f && vector.x <= 1f && vector.y >= 0f)
{
return vector.y <= 1f;
}
return false;
}
public static void DrawTracer(Vector3 worldpos, Color color)
{
Vector3 vector = Main.ActiveCamera.WorldToScreenPoint(worldpos);
vector.y = (float)Screen.height - vector.y;
GL.PushMatrix();
GL.Begin(1);
DrawMaterial.SetPass(0);
GL.Color(color);
GL.Vertex3(Screen.width / 2, Screen.height, 0f);
GL.Vertex3(vector.x, vector.y, 0f);
GL.End();
GL.PopMatrix();
}
public static bool IsScreenPointVisible(Vector3 screenPoint)
{
if (screenPoint.z > 0.01f && screenPoint.x > -5f && screenPoint.y > -5f && screenPoint.x < (float)Screen.width)
{
return screenPoint.y < (float)Screen.height;
}
return false;
}
public static Vector3 GetBonePosByID(Player player, int id)
{
try
{
return SkeletonBonePos(player.PlayerBones.AnimatedTransform.Original.gameObject.GetComponent<PlayerBody>().SkeletonRootJoint, id);
}
catch (Exception)
{
return Vector3.zero;
}
}
public static Vector3 GetBonePosByIDO(ObservedPlayerView player, int id)
{
try
{
return SkeletonBonePos(player.PlayerBones.AnimatedTransform.Original.gameObject.GetComponent<PlayerBody>().SkeletonRootJoint, id);
}
catch (Exception)
{
return Vector3.zero;
}
}
public static Vector3 SkeletonBonePos(Skeleton skeleton, int id)
{
return skeleton.Bones.ElementAt(id).Value.position;
}
public static Vector3 FinalVector(Player player, int bone)
{
try
{
return player.PlayerBody.SkeletonRootJoint.Bones.ElementAt(bone).Value.position;
}
catch
{
return Vector3.zero;
}
}
public static Vector3 FinalVectorO(ObservedPlayerView player, int bone)
{
try
{
return player.PlayerBody.SkeletonRootJoint.Bones.ElementAt(bone).Value.position;
}
catch
{
return Vector3.zero;
}
}
public static void UpdateCameraState(Player player)
{
Main.ActiveCamera = Main.MainCamera;
}
}