tarkov-hax/TarkovHax/TarkovHaxBehaviour.cs

266 lines
9.7 KiB
C#
Raw Normal View History

2017-12-06 16:54:16 +01:00
using System;
using System.Collections.Generic;
using System.Linq;
2017-12-06 16:54:16 +01:00
using UnityEngine;
using EFT;
2017-12-06 16:54:16 +01:00
namespace TarkovHax
{
public class TarkovHaxBehaviour : MonoBehaviour
{
2017-12-08 00:49:19 +01:00
public TarkovHaxBehaviour()
{
}
2017-12-08 00:58:05 +01:00
private GameObject GameObjectHolder;
2017-12-06 16:54:16 +01:00
private IEnumerable<Player> _players;
private IEnumerable<LootableContainer> _lootableContainers;
2017-12-06 16:54:16 +01:00
private float _playersNextUpdateTime;
private float _weaponBoxesNextUpdateTime;
private float _espUpdateInterval = 1f;
2017-12-06 16:54:16 +01:00
private bool _isESPMenuActive;
private bool _showPlayersESP;
private bool _showWeaponBoxesESP;
2017-12-06 16:54:16 +01:00
private float _maxDrawingDistance = 15000f;
2017-12-08 00:49:19 +01:00
private string _magicAppDomainString = "mvhYQbbHjrHM";
public void Load()
2017-12-06 16:54:16 +01:00
{
GameObjectHolder = new GameObject();
GameObjectHolder.AddComponent<TarkovHaxBehaviour>();
DontDestroyOnLoad(GameObjectHolder);
}
public void Unload()
2017-12-06 16:54:16 +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))
{
_isESPMenuActive = !_isESPMenuActive;
2017-12-06 16:54:16 +01:00
}
if (Input.GetKeyDown(KeyCode.Keypad0))
{
OpenDoors();
}
if (Input.GetKeyDown(KeyCode.Keypad1))
{
2017-12-08 00:49:19 +01:00
TeleportItemsToPlayer();
2017-12-06 16:54:16 +01:00
}
if (Input.GetKeyDown(KeyCode.Keypad2))
{
ToggleNightVision();
}
2017-12-06 16:54:16 +01:00
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<Door>();
2017-12-08 00:58:05 +01:00
foreach (var door in doors.Where(d => d.DoorState == WorldInteractiveObject.EDoorState.Locked))
2017-12-06 16:54:16 +01:00
{
2017-12-08 00:58:05 +01:00
door.DoorState = WorldInteractiveObject.EDoorState.Shut;
2017-12-06 16:54:16 +01:00
}
}
2017-12-08 00:58:05 +01:00
// TODO: draw in direction player is looking
// TODO: investigate why not all corpses are lootable
2017-12-08 00:49:19 +01:00
private void TeleportItemsToPlayer()
2017-12-06 16:54:16 +01:00
{
2017-12-08 00:49:19 +01:00
var lootItems = FindObjectsOfType<LootItem>();
float xOffset = 0f;
float yOffset = 0f;
foreach (var lootItem in lootItems)
{
var newPosition = new Vector3(
2017-12-08 00:58:05 +01:00
Camera.main.transform.position.x + xOffset,
Camera.main.transform.position.y,
Camera.main.transform.position.z + yOffset);
2017-12-08 00:49:19 +01:00
lootItem.transform.position = newPosition;
2017-12-08 00:58:05 +01:00
2017-12-08 00:49:19 +01:00
xOffset += 0.1f;
yOffset += 0.1f;
}
2017-12-06 16:54:16 +01:00
}
// does not work
private bool _nightVisionOn = false;
private void ToggleNightVision()
{
//var pc = FindObjectOfType<PlayerCameraController>();
//var nv = pc.Camera.gameObject.GetComponent<NightVision>();
//if (nv == null)
//{
// pc.Camera.gameObject.AddComponent<NightVision>();
//}
//nv._on = !nv._on;
//nv.enabled = nv._on;
//PlayerCameraController.OnPlayerCameraControllerCreated(pc, pc.Camera);
}
2017-12-06 16:54:16 +01:00
private void OnGUI()
{
if (_isESPMenuActive)
2017-12-06 16:54:16 +01:00
{
DrawESPMenu();
}
GUI.color = Color.red;
2017-12-08 00:49:19 +01:00
GUI.Label(new Rect(10f, 10f, 1000f, 500f), "tarkov h4x");
2017-12-06 16:54:16 +01:00
if (_showPlayersESP && Time.time >= _playersNextUpdateTime)
2017-12-06 16:54:16 +01:00
{
_players = FindObjectsOfType<Player>();
_playersNextUpdateTime = Time.time + _espUpdateInterval;
2017-12-06 16:54:16 +01:00
}
if (_showWeaponBoxesESP && Time.time >= _weaponBoxesNextUpdateTime)
2017-12-06 16:54:16 +01:00
{
_lootableContainers = FindObjectsOfType<LootableContainer>();
_weaponBoxesNextUpdateTime = Time.time + _espUpdateInterval;
2017-12-06 16:54:16 +01:00
}
if (_showWeaponBoxesESP)
2017-12-06 16:54:16 +01:00
{
DrawLootableContainers();
}
if (_showPlayersESP)
2017-12-06 16:54:16 +01:00
{
DrawPlayers();
}
}
private void DrawLootableContainers()
{
2017-12-08 00:58:05 +01:00
foreach (var lootableContainer in _lootableContainers.Where(lc => lc.name == "weapon_box_cover"))
2017-12-06 16:54:16 +01:00
{
float distanceToObject = Vector3.Distance(Camera.main.transform.position, lootableContainer.transform.position);
2017-12-08 00:59:36 +01:00
var lootableContainerBoundingVector = new Vector3(
2017-12-06 16:54:16 +01:00
Camera.main.WorldToScreenPoint(lootableContainer.transform.position).x,
Camera.main.WorldToScreenPoint(lootableContainer.transform.position).y,
Camera.main.WorldToScreenPoint(lootableContainer.transform.position).z);
2017-12-08 00:59:36 +01:00
if (distanceToObject <= _maxDrawingDistance && lootableContainerBoundingVector.z > 0.01)
2017-12-06 16:54:16 +01:00
{
GUI.color = Color.cyan;
int distance = (int)distanceToObject;
string boxText = $"[x] {distance}m";
2017-12-08 00:59:36 +01:00
GUI.Label(new Rect(lootableContainerBoundingVector.x - 50f, (float)Screen.height - lootableContainerBoundingVector.y, 100f, 50f), boxText);
2017-12-06 16:54:16 +01:00
}
}
}
private void DrawPlayers()
{
foreach (var player in _players)
2017-12-06 16:54:16 +01:00
{
2017-12-08 00:58:05 +01:00
float distanceToObject = Vector3.Distance(Camera.main.transform.position, player.Transform.position);
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);
2017-12-08 00:58:05 +01:00
if (distanceToObject <= _maxDrawingDistance && playerBoundingVector.z > 0.01)
{
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);
2017-12-06 16:54:16 +01:00
2017-12-08 00:58:05 +01:00
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-06 16:54:16 +01:00
var playerColor = GetPlayerColor(player.Side);
var isAi = player.Profile.Info.RegistrationDate <= 0;
var espColor = player.Profile.Health.IsAlive ? playerColor : Color.gray;
2017-12-06 16:54:16 +01:00
GUI.color = espColor;
GuiHelper.DrawBox(boxXOffset - boxWidth / 2f, (float)Screen.height - boxYOffset, boxWidth, boxHeight, espColor);
GuiHelper.DrawLine(new Vector2(playerHeadVector.x - 2f, (float)Screen.height - playerHeadVector.y), new Vector2(playerHeadVector.x + 2f, (float)Screen.height - playerHeadVector.y), espColor);
GuiHelper.DrawLine(new Vector2(playerHeadVector.x, (float)Screen.height - playerHeadVector.y - 2f), new Vector2(playerHeadVector.x, (float)Screen.height - playerHeadVector.y + 2f), espColor);
2017-12-06 16:54:16 +01:00
var playerName = isAi ? "AI" : player.Profile.Info.Nickname;
float playerHealth = player.HealthController.SummaryHealth.CurrentValue / 435f * 100f;
string playerDisplayName = player.Profile.Health.IsAlive ? playerName : playerName + " (DEAD)";
string playerText = $"[{(int)playerHealth}%] {playerDisplayName} [{(int)distanceToObject}m]";
2017-12-06 16:54:16 +01:00
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);
}
}
}
private Color GetPlayerColor(EPlayerSide side)
{
switch (side)
{
case EPlayerSide.Bear:
return Color.red;
case EPlayerSide.Usec:
return Color.blue;
case EPlayerSide.Savage:
return Color.white;
default:
return Color.white;
}
}
2017-12-06 16:54:16 +01:00
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");
_showPlayersESP = GUI.Toggle(new Rect(110f, 140f, 120f, 20f), _showPlayersESP, " Players");
_showWeaponBoxesESP = GUI.Toggle(new Rect(110f, 160f, 120f, 20f), _showWeaponBoxesESP, " Weapon boxes");
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));
}
}
}