using Facepunch.Steamworks; using Facepunch.Unity; using Facepunch.Utility; using Network; using RustHax; using UnityEngine; namespace Hacks { class Aimbot { public static void Aim() { Vector3 pos = GetPosTargetPlayer(); if (pos == Vector3.zero) return; Quaternion lookRotation = Quaternion.LookRotation(pos - MainCamera.mainCamera.transform.position, Vector3.right); float rotationX = lookRotation.eulerAngles.x; rotationX = (MainCamera.mainCamera.transform.position.y < pos.y) ? (-360 + rotationX) : rotationX; rotationX = Mathf.Clamp(rotationX, -89f, 89f); LocalPlayer.Entity.input.SetViewVars(new Vector3(rotationX, lookRotation.eulerAngles.y, 0)); Render.String(pos.x + 3f, Screen.height - (pos.y + 1f), $"X", Settings.animalsColor); } public static Vector3 GetEnemyVector() { Vector3 result = Vector3.zero; Vector2 middleScreen = new Vector2((float)(Screen.width / 2), (float)(Screen.height / 2)); float maxDistance = 4999f; foreach (BasePlayer player in BasePlayer.VisiblePlayerList) { if (((player != null) && (player.health > 0f)) && (!player.IsSleeping() && !player.IsLocalPlayer())) { Vector3 targetPlayerPosition; if (Settings.toggleAimbot) targetPlayerPosition = ESP.GetPositionBone(player.GetModel(), "headCenter"); if (targetPlayerPosition != Vector3.zero) { bool flag = ESP.IsVisible(targetPlayerPosition); if (flag) { Vector3 vector4 = MainCamera.mainCamera.WorldToScreenPoint(targetPlayerPosition); Vector2 enemyOnScreen = new Vector2(vector4.x, Screen.height - vector4.y); float fov = Mathf.Abs(Vector2.Distance(middleScreen, enemyOnScreen)); if ((fov <= maxDistance)) { result = targetPlayerPosition; Item activeItem = LocalPlayer.Entity.Belt.GetActiveItem(); if (activeItem != null && (activeItem.info.shortname.Contains("bow") || activeItem.info.shortname.Contains("smg.") || activeItem.info.shortname.Contains("pistol.") || activeItem.info.shortname.Contains("lmg.") || activeItem.info.shortname.Contains("rifle"))) { if (Settings.toggleAimbot) //bullet drop { float bulletSpeed = 250f; switch (activeItem.info.shortname) { case "rifle.bolt": bulletSpeed = 656.25f; break; case "rifle.ak": bulletSpeed = 375f; break; case "rifle.lr300": bulletSpeed = 375f; break; case "rifle.semiauto": bulletSpeed = 375f; break; case "smg.mp5": bulletSpeed = 180f; break; case "smg.thompson": bulletSpeed = 300f; break; case "smg.2": bulletSpeed = 240f; break; case "pistol.m92": bulletSpeed = 300f; break; case "pistol.semiauto": bulletSpeed = 300f; break; case "pistol.python": bulletSpeed = 300f; break; case "bow.hunting": bulletSpeed = 60f; break; case "nailgun": bulletSpeed = 50f; break; case "crossbow": bulletSpeed = 75f; break; default: break; } if (Settings.toggleAimbot) // velocity prediction { float flTime = Vector3.Distance(LocalPlayer.Entity.transform.position, targetPlayerPosition) / bulletSpeed; Vector3 velocity = (Vector3)player.playerModel.GetFieldValue("velocity"); result.x += (velocity.x * flTime); result.y += (velocity.y * flTime); } if (Settings.toggleAimbot) // for keypress result.y = result.y + BulletDrop(LocalPlayer.Entity.transform.position, targetPlayerPosition, bulletSpeed); } } maxDistance = fov; } } } } } return result; } public static float BulletDrop(Vector3 v1, Vector3 v2, float BulletSpeed) { float Dist = Vector3.Distance(v1, v2); if (Dist < 0.001) return 0; float m_gravity = 9.81f; float m_time = Dist / BulletSpeed; return (float)(0.5 * m_gravity * m_time * m_time); } private static Vector3 GetPosTargetPlayer() { Vector3 targetPlayerPosition = Vector3.zero; Vector2 centerScreen = new Vector2(Screen.width / 2, Screen.height / 2); float minDist = 999f; foreach (BasePlayer player in BasePlayer.VisiblePlayerList) { if (player == null || player.IsLocalPlayer() || player.IsSleeping() || player.health <= 0) continue; Vector3 headPos = ESP.GetPositionBone(player.GetModel(), "headCenter"); if (headPos == Vector3.zero) continue; bool isVisible = true; if (Settings.toggleVisibleCheck) isVisible = ESP.IsVisible(headPos); if (!isVisible) continue; Vector3 pos = ESP.GetScreenPos(headPos); if (pos.z <= 0f) continue; Vector2 screenPos = new Vector2(pos.x, Screen.height - pos.y); float distance = Mathf.Abs(Vector2.Distance(centerScreen, screenPos)); if (distance > Settings.aimbotFov || distance > minDist) continue; targetPlayerPosition = headPos; minDist = distance; } return targetPlayerPosition; } } }