2017-12-06 16:54:16 +01:00
|
|
|
|
using System;
|
|
|
|
|
using EFT;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
namespace TarkovHax
|
|
|
|
|
{
|
|
|
|
|
public class TarkovHaxBehaviour : MonoBehaviour
|
|
|
|
|
{
|
2017-12-07 00:10:19 +01:00
|
|
|
|
public GameObject GameObjectHolder;
|
2017-12-06 16:54:16 +01:00
|
|
|
|
|
|
|
|
|
private UnityEngine.Object[] _playerObjects;
|
|
|
|
|
private UnityEngine.Object[] _lootableObjects;
|
|
|
|
|
private UnityEngine.Object[] _lootableContainerObjects;
|
|
|
|
|
|
2017-12-07 11:37:01 +01:00
|
|
|
|
private float _playerNextUpdateTime;
|
|
|
|
|
private float _lootNextUpdateTime;
|
|
|
|
|
private float _lootContainerNextUpdateTime;
|
|
|
|
|
private float _espUpdateInterval = 1f;
|
|
|
|
|
|
2017-12-06 16:54:16 +01:00
|
|
|
|
private bool _isESPMenuActive;
|
|
|
|
|
private bool _showPlayersESP;
|
|
|
|
|
private bool _showLootESP;
|
|
|
|
|
private bool _showLootableContainersESP;
|
|
|
|
|
|
|
|
|
|
private float _maxDrawingDistance = 15000f;
|
|
|
|
|
|
2017-12-07 00:10:19 +01:00
|
|
|
|
public void Load()
|
2017-12-06 16:54:16 +01:00
|
|
|
|
{
|
|
|
|
|
GameObjectHolder = new GameObject();
|
|
|
|
|
GameObjectHolder.AddComponent<TarkovHaxBehaviour>();
|
|
|
|
|
|
|
|
|
|
DontDestroyOnLoad(GameObjectHolder);
|
|
|
|
|
}
|
|
|
|
|
|
2017-12-07 00:10:19 +01:00
|
|
|
|
public void Unload()
|
2017-12-06 16:54:16 +01:00
|
|
|
|
{
|
2017-12-07 00:10:19 +01:00
|
|
|
|
Destroy(GameObjectHolder);
|
|
|
|
|
Destroy(this);
|
2017-12-06 16:54:16 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void Update()
|
|
|
|
|
{
|
|
|
|
|
if (Input.GetKeyDown(KeyCode.End))
|
|
|
|
|
{
|
|
|
|
|
Unload();
|
|
|
|
|
}
|
|
|
|
|
if (Input.GetKeyDown(KeyCode.Insert))
|
|
|
|
|
{
|
2017-12-07 00:15:00 +01:00
|
|
|
|
_isESPMenuActive = !_isESPMenuActive;
|
2017-12-06 16:54:16 +01:00
|
|
|
|
}
|
|
|
|
|
if (Input.GetKeyDown(KeyCode.Keypad0))
|
|
|
|
|
{
|
|
|
|
|
OpenDoors();
|
|
|
|
|
}
|
|
|
|
|
if (Input.GetKeyDown(KeyCode.Keypad1))
|
|
|
|
|
{
|
|
|
|
|
ToggleNightVision();
|
|
|
|
|
}
|
|
|
|
|
if (Input.GetKeyDown(KeyCode.KeypadPlus))
|
|
|
|
|
{
|
|
|
|
|
IncreaseFov();
|
|
|
|
|
}
|
|
|
|
|
if (Input.GetKeyDown(KeyCode.KeypadMinus))
|
|
|
|
|
{
|
|
|
|
|
DecreaseFov();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void IncreaseFov()
|
|
|
|
|
{
|
|
|
|
|
Camera.main.fieldOfView += 1f;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void DecreaseFov()
|
|
|
|
|
{
|
|
|
|
|
Camera.main.fieldOfView -= 1f;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OpenDoors()
|
|
|
|
|
{
|
|
|
|
|
var doors = FindObjectsOfType(typeof(Door));
|
|
|
|
|
foreach (Door door in doors)
|
|
|
|
|
{
|
|
|
|
|
if (door.DoorState == WorldInteractiveObject.EDoorState.Locked)
|
|
|
|
|
{
|
|
|
|
|
door.DoorState = WorldInteractiveObject.EDoorState.Shut;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private bool _nightVisionOn = false;
|
|
|
|
|
private void ToggleNightVision()
|
|
|
|
|
{
|
|
|
|
|
//var camera = (PlayerCameraController)FindObjectOfType(typeof(PlayerCameraController));
|
|
|
|
|
//if (_nightVisionOn)
|
|
|
|
|
//{
|
|
|
|
|
// var component = camera.gameObject.AddComponent<NightVision>();
|
|
|
|
|
// if (component != null)
|
|
|
|
|
// {
|
|
|
|
|
// DestroyImmediate(component);
|
|
|
|
|
// }
|
|
|
|
|
//}
|
|
|
|
|
//else
|
|
|
|
|
//{
|
|
|
|
|
// camera.gameObject.AddComponent<NightVision>();
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
//_nightVisionOn = !_nightVisionOn;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void OnGUI()
|
|
|
|
|
{
|
2017-12-07 00:15:00 +01:00
|
|
|
|
if (_isESPMenuActive)
|
2017-12-06 16:54:16 +01:00
|
|
|
|
{
|
|
|
|
|
DrawESPMenu();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
GUI.color = Color.red;
|
|
|
|
|
GUI.Label(new Rect(10f, 10f, 100f, 50f), "tarkov h4x");
|
|
|
|
|
|
2017-12-07 00:15:00 +01:00
|
|
|
|
if (Time.time >= _playerNextUpdateTime)
|
2017-12-06 16:54:16 +01:00
|
|
|
|
{
|
2017-12-07 00:15:00 +01:00
|
|
|
|
_playerObjects = FindObjectsOfType(typeof(Player));
|
2017-12-07 11:37:01 +01:00
|
|
|
|
_playerNextUpdateTime = Time.time + _espUpdateInterval;
|
2017-12-06 16:54:16 +01:00
|
|
|
|
}
|
|
|
|
|
|
2017-12-07 00:15:00 +01:00
|
|
|
|
if (_showLootESP && Time.time >= _lootNextUpdateTime)
|
2017-12-06 16:54:16 +01:00
|
|
|
|
{
|
2017-12-07 00:15:00 +01:00
|
|
|
|
_lootableObjects = FindObjectsOfType(typeof(LootItem));
|
2017-12-07 11:37:01 +01:00
|
|
|
|
_lootNextUpdateTime = Time.time + _espUpdateInterval;
|
2017-12-06 16:54:16 +01:00
|
|
|
|
}
|
|
|
|
|
|
2017-12-07 00:15:00 +01:00
|
|
|
|
if (_showLootableContainersESP && Time.time >= _lootContainerNextUpdateTime)
|
2017-12-06 16:54:16 +01:00
|
|
|
|
{
|
2017-12-07 00:15:00 +01:00
|
|
|
|
_lootableContainerObjects = FindObjectsOfType(typeof(LootableContainer));
|
2017-12-07 11:37:01 +01:00
|
|
|
|
_lootContainerNextUpdateTime = Time.time + _espUpdateInterval;
|
2017-12-06 16:54:16 +01:00
|
|
|
|
}
|
|
|
|
|
|
2017-12-07 00:15:00 +01:00
|
|
|
|
if (_showLootESP)
|
2017-12-06 16:54:16 +01:00
|
|
|
|
{
|
|
|
|
|
DrawLoot();
|
|
|
|
|
}
|
|
|
|
|
|
2017-12-07 00:15:00 +01:00
|
|
|
|
if (_showLootableContainersESP)
|
2017-12-06 16:54:16 +01:00
|
|
|
|
{
|
|
|
|
|
DrawLootableContainers();
|
|
|
|
|
}
|
|
|
|
|
|
2017-12-07 00:15:00 +01:00
|
|
|
|
if (_showPlayersESP)
|
2017-12-06 16:54:16 +01:00
|
|
|
|
{
|
|
|
|
|
DrawPlayers();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void DrawLoot()
|
|
|
|
|
{
|
2017-12-07 00:15:00 +01:00
|
|
|
|
foreach (LootItem lootItem in _lootableObjects)
|
2017-12-06 16:54:16 +01:00
|
|
|
|
{
|
|
|
|
|
float distanceToObject = Vector3.Distance(Camera.main.transform.position, lootItem.transform.position);
|
|
|
|
|
var viewTransform = new Vector3(
|
|
|
|
|
Camera.main.WorldToScreenPoint(lootItem.transform.position).x,
|
|
|
|
|
Camera.main.WorldToScreenPoint(lootItem.transform.position).y,
|
|
|
|
|
Camera.main.WorldToScreenPoint(lootItem.transform.position).z);
|
|
|
|
|
|
|
|
|
|
if (distanceToObject <= _maxDrawingDistance && viewTransform.z > 0.01f)
|
|
|
|
|
{
|
|
|
|
|
GUI.color = Color.green;
|
|
|
|
|
GUI.Label(new Rect(viewTransform.x - 50f, (float)Screen.height - viewTransform.y, 100f, 50f), lootItem.name);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void DrawLootableContainers()
|
|
|
|
|
{
|
2017-12-07 00:15:00 +01:00
|
|
|
|
foreach (LootableContainer lootableContainer in _lootableContainerObjects)
|
2017-12-06 16:54:16 +01:00
|
|
|
|
{
|
|
|
|
|
float distanceToObject = Vector3.Distance(Camera.main.transform.position, lootableContainer.transform.position);
|
|
|
|
|
var viewTransform = new Vector3(
|
|
|
|
|
Camera.main.WorldToScreenPoint(lootableContainer.transform.position).x,
|
|
|
|
|
Camera.main.WorldToScreenPoint(lootableContainer.transform.position).y,
|
|
|
|
|
Camera.main.WorldToScreenPoint(lootableContainer.transform.position).z);
|
|
|
|
|
|
|
|
|
|
if (distanceToObject <= _maxDrawingDistance && viewTransform.z > 0.01f)
|
|
|
|
|
{
|
|
|
|
|
GUI.color = Color.cyan;
|
|
|
|
|
GUI.Label(new Rect(viewTransform.x - 50f, (float)Screen.height - viewTransform.y, 100f, 50f), lootableContainer.name);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void DrawPlayers()
|
|
|
|
|
{
|
2017-12-07 00:15:00 +01:00
|
|
|
|
foreach (Player player in _playerObjects)
|
2017-12-06 16:54:16 +01:00
|
|
|
|
{
|
|
|
|
|
var playerBoundingVector = new Vector3(
|
|
|
|
|
Camera.main.WorldToScreenPoint(player.Transform.position).x,
|
|
|
|
|
Camera.main.WorldToScreenPoint(player.Transform.position).y,
|
|
|
|
|
Camera.main.WorldToScreenPoint(player.Transform.position).z);
|
|
|
|
|
|
|
|
|
|
var playerHeadVector = new Vector3(
|
|
|
|
|
Camera.main.WorldToScreenPoint(player.PlayerBones.Head.position).x,
|
|
|
|
|
Camera.main.WorldToScreenPoint(player.PlayerBones.Head.position).y,
|
|
|
|
|
Camera.main.WorldToScreenPoint(player.PlayerBones.Head.position).z);
|
|
|
|
|
|
|
|
|
|
float distanceToObject = Vector3.Distance(Camera.main.transform.position, player.Transform.position);
|
|
|
|
|
float boxXOffset = Camera.main.WorldToScreenPoint(player.Transform.position).x;
|
|
|
|
|
float boxYOffset = Camera.main.WorldToScreenPoint(player.PlayerBones.Head.position).y + 10f;
|
|
|
|
|
float boxHeight = Math.Abs(Camera.main.WorldToScreenPoint(player.PlayerBones.Head.position).y - Camera.main.WorldToScreenPoint(player.Transform.position).y) + 10f;
|
|
|
|
|
float boxWidth = boxHeight * 0.65f;
|
|
|
|
|
|
2017-12-07 00:13:03 +01:00
|
|
|
|
if (distanceToObject <= _maxDrawingDistance && playerBoundingVector.z > 0.01)
|
2017-12-06 16:54:16 +01:00
|
|
|
|
{
|
|
|
|
|
var uiColor = player.Profile.Health.IsAlive ? Color.red : Color.white;
|
|
|
|
|
GUI.color = uiColor;
|
|
|
|
|
|
|
|
|
|
GuiHelper.DrawBox(boxXOffset - boxWidth / 2f, (float)Screen.height - boxYOffset, boxWidth, boxHeight, uiColor);
|
|
|
|
|
GuiHelper.DrawLine(new Vector2(playerHeadVector.x - 2f, (float)Screen.height - playerHeadVector.y), new Vector2(playerHeadVector.x + 2f, (float)Screen.height - playerHeadVector.y), uiColor);
|
|
|
|
|
GuiHelper.DrawLine(new Vector2(playerHeadVector.x, (float)Screen.height - playerHeadVector.y - 2f), new Vector2(playerHeadVector.x, (float)Screen.height - playerHeadVector.y + 2f), uiColor);
|
|
|
|
|
|
|
|
|
|
string playerName = player.Profile.Health.IsAlive ? player.Profile.Info.Nickname : player.Profile.Info.Nickname + " (DEAD)";
|
|
|
|
|
int playerHealth = (int)player.HealthController.SummaryHealth.CurrentValue / 435 * 100;
|
|
|
|
|
int distance = (int)distanceToObject;
|
|
|
|
|
string playerText = $"[{playerHealth}%] {playerName} [{distance}m]";
|
|
|
|
|
|
|
|
|
|
var playerTextVector = GUI.skin.GetStyle(playerText).CalcSize(new GUIContent(playerText));
|
|
|
|
|
GUI.Label(new Rect(playerBoundingVector.x - playerTextVector.x / 2f, (float)Screen.height - boxYOffset - 20f, 300f, 50f), playerText);
|
|
|
|
|
|
|
|
|
|
var weaponTextVector = GUI.skin.GetStyle(player.Weapon.Template.ShortName).CalcSize(new GUIContent(player.Weapon.Template.ShortName));
|
|
|
|
|
GUI.Label(new Rect(playerBoundingVector.x - weaponTextVector.x / 2f, (float)Screen.height - playerBoundingVector.y + 2f, 100f, 20f), player.Weapon.Template.ShortName);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void DrawESPMenu()
|
|
|
|
|
{
|
|
|
|
|
GUI.color = Color.black;
|
|
|
|
|
GUI.Box(new Rect(100f, 100f, 190f, 190f), "");
|
|
|
|
|
|
|
|
|
|
GUI.color = Color.white;
|
|
|
|
|
GUI.Label(new Rect(180f, 110f, 50f, 20f), "ESP");
|
|
|
|
|
|
2017-12-07 00:15:00 +01:00
|
|
|
|
_showPlayersESP = GUI.Toggle(new Rect(110f, 140f, 120f, 20f), _showPlayersESP, " Players");
|
|
|
|
|
_showLootESP = GUI.Toggle(new Rect(110f, 160f, 120f, 20f), _showLootESP, " Loot");
|
|
|
|
|
_showLootableContainersESP = GUI.Toggle(new Rect(110f, 180f, 120f, 20f), _showLootableContainersESP, " Lootables");
|
2017-12-06 16:54:16 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private double GetDistance(double x1, double y1, double x2, double y2)
|
|
|
|
|
{
|
|
|
|
|
return Math.Sqrt(Math.Pow(x2 - x1, 2.0) + Math.Pow(y2 - y1, 2.0));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|