фыв
This commit is contained in:
@@ -390,129 +390,256 @@ void Aimbot() {
|
||||
prevAimbotState = aimbotActive;
|
||||
}
|
||||
|
||||
//void SilentAimbot(CUserCmd* pCmd) {
|
||||
// if (!Config::silent_aim || !pCmd) return;
|
||||
// static C_CSPlayerPawn* lockedTarget = nullptr;
|
||||
// static bool prevSilentState = false;
|
||||
// static QAngle_t last_punch_angle = {0,0,0};
|
||||
// static int shotCount = 0;
|
||||
// C_CSPlayerPawn* lp = H::oGetLocalPlayer(0);
|
||||
// if (!lp || !lp->handle().valid() || lp->getHealth() <= 0) return;
|
||||
// Vector_t lep = GetEntityEyePos(lp);
|
||||
// QAngle_t* cur = (QAngle_t*)(modules.getModule("client") + 0x1A78650);
|
||||
// if (!cur) return;
|
||||
// bool silentActive = Config::always_on_silent_aim ? true : (GetAsyncKeyState(Config::silent_aim_key) & 0x8000);
|
||||
// // --- shooterAfterAim + triggerbot_key для сайлент аимбота ---
|
||||
// if (Config::silent_shooterAfterAim && (GetAsyncKeyState(Config::triggerbot_key) & 0x8000)) {
|
||||
// silentActive = true;
|
||||
// }
|
||||
// int shotsFired = lp ? lp->getShotsFired() : 0;
|
||||
// shotCount = shotsFired;
|
||||
//
|
||||
// // Если кнопка только что нажата — ищем новую цель
|
||||
// if (silentActive && !prevSilentState) {
|
||||
// int nMaxHighestEntity = I::GameEntity->Instance->GetHighestEntityIndex();
|
||||
// float bestFov = Config::aimbot_fov;
|
||||
// C_CSPlayerPawn* bestTarget = nullptr;
|
||||
// QAngle_t bestAngle = { 0, 0, 0 };
|
||||
// for (int i = 1; i <= nMaxHighestEntity; i++) {
|
||||
// auto Entity = I::GameEntity->Instance->Get(i);
|
||||
// if (!Entity) continue;
|
||||
// if (!Entity->handle().valid()) continue;
|
||||
// SchemaClassInfoData_t* _class = nullptr;
|
||||
// Entity->dump_class_info(&_class);
|
||||
// if (!_class) continue;
|
||||
// const uint32_t hash = HASH(_class->szName);
|
||||
// if (hash == HASH("C_CSPlayerPawn")) {
|
||||
// C_CSPlayerPawn* pawn = (C_CSPlayerPawn*)Entity;
|
||||
// if (!pawn) continue;
|
||||
// if (pawn->get_entity_by_handle() == lp->get_entity_by_handle()) continue;
|
||||
// if (pawn->getHealth() <= 0) continue;
|
||||
// if (Config::team_check && pawn->getTeam() == lp->getTeam()) continue;
|
||||
// Vector_t target_pos = GetAimbotTargetPos(pawn, lep, *cur);
|
||||
// QAngle_t angle = CalcAngles(target_pos, lep);
|
||||
// angle.x *= -1.f;
|
||||
// angle.y += 180.f;
|
||||
// float fov = GetFov(*cur, angle);
|
||||
// if (!std::isfinite(fov) || fov > bestFov) continue;
|
||||
// bestFov = fov;
|
||||
// bestTarget = pawn;
|
||||
// bestAngle = angle;
|
||||
// }
|
||||
// }
|
||||
// lockedTarget = bestTarget;
|
||||
// last_punch_angle = {0,0,0};
|
||||
// }
|
||||
//
|
||||
// // Если кнопка зажата, цели нет — постоянный поиск цели
|
||||
// if (silentActive && !lockedTarget) {
|
||||
// int nMaxHighestEntity = I::GameEntity->Instance->GetHighestEntityIndex();
|
||||
// float bestFov = Config::aimbot_fov;
|
||||
// C_CSPlayerPawn* bestTarget = nullptr;
|
||||
// QAngle_t bestAngle = { 0, 0, 0 };
|
||||
// for (int i = 1; i <= nMaxHighestEntity; i++) {
|
||||
// auto Entity = I::GameEntity->Instance->Get(i);
|
||||
// if (!Entity) continue;
|
||||
// if (!Entity->handle().valid()) continue;
|
||||
// SchemaClassInfoData_t* _class = nullptr;
|
||||
// Entity->dump_class_info(&_class);
|
||||
// if (!_class) continue;
|
||||
// const uint32_t hash = HASH(_class->szName);
|
||||
// if (hash == HASH("C_CSPlayerPawn")) {
|
||||
// C_CSPlayerPawn* pawn = (C_CSPlayerPawn*)Entity;
|
||||
// if (!pawn) continue;
|
||||
// if (pawn->get_entity_by_handle() == lp->get_entity_by_handle()) continue;
|
||||
// if (pawn->getHealth() <= 0) continue;
|
||||
// if (Config::team_check && pawn->getTeam() == lp->getTeam()) continue;
|
||||
// Vector_t target_pos = GetAimbotTargetPos(pawn, lep, *cur);
|
||||
// QAngle_t angle = CalcAngles(target_pos, lep);
|
||||
// angle.x *= -1.f;
|
||||
// angle.y += 180.f;
|
||||
// float fov = GetFov(*cur, angle);
|
||||
// if (!std::isfinite(fov) || fov > bestFov) continue;
|
||||
// bestFov = fov;
|
||||
// bestTarget = pawn;
|
||||
// bestAngle = angle;
|
||||
// }
|
||||
// }
|
||||
// lockedTarget = bestTarget;
|
||||
// last_punch_angle = {0,0,0};
|
||||
// }
|
||||
//
|
||||
// // Если кнопка отпущена — сбрасываем захват
|
||||
// if (!silentActive) {
|
||||
// lockedTarget = nullptr;
|
||||
// last_punch_angle = {0,0,0};
|
||||
// }
|
||||
//
|
||||
// // Если есть захваченная цель и кнопка удерживается
|
||||
// if (silentActive && lockedTarget) {
|
||||
// // Проверяем, что цель всё ещё валидна
|
||||
// if (!lp || !lp->handle().valid() || lp->getHealth() <= 0 ||
|
||||
// lockedTarget->get_entity_by_handle() == lp->get_entity_by_handle() ||
|
||||
// lockedTarget->getHealth() <= 0 ||
|
||||
// !lockedTarget->handle().valid() ||
|
||||
// (Config::team_check && lockedTarget->getTeam() == lp->getTeam())) {
|
||||
// lockedTarget = nullptr;
|
||||
// last_punch_angle = {0,0,0};
|
||||
// prevSilentState = silentActive;
|
||||
// return;
|
||||
// }
|
||||
// Vector_t target_pos = GetAimbotTargetPos(lockedTarget, lep, *cur);
|
||||
// QAngle_t angle = CalcAngles(target_pos, lep);
|
||||
// angle.x *= -1.f;
|
||||
// angle.y += 180.f;
|
||||
// //QAngle_t cur_punch_angle = *(QAngle_t*)((uintptr_t)lp + SchemaFinder::Get(hash_32_fnv1a_const("C_CSPlayerPawn->m_aimPunchAngle")));
|
||||
// //// --- RCS ---
|
||||
// //bool rcsActive = (Config::rcs || Config::silent_shooterAfterAim) && (shotCount > Config::rcsActivationShots);
|
||||
// //if (rcsActive && shotCount > 1) {
|
||||
// // angle -= cur_punch_angle * 2.f;
|
||||
// // last_punch_angle = cur_punch_angle;
|
||||
// //} else {
|
||||
// // last_punch_angle = {0,0,0};
|
||||
// //}
|
||||
// //angle.z = 0.f;
|
||||
// //angle = angle.Normalize();
|
||||
// // --- Smooth ---
|
||||
// if (Config::silent_aim_smooth > 0.f) {
|
||||
// QAngle_t delta = (angle - *cur).Normalize();
|
||||
// float smooth = Config::silent_aim_smooth;
|
||||
// angle = *cur + delta * (1.f / smooth);
|
||||
// angle = angle.Normalize();
|
||||
// }
|
||||
// *cur = angle;
|
||||
// }
|
||||
// prevSilentState = silentActive;
|
||||
//}
|
||||
//
|
||||
|
||||
void SilentAimbot(CUserCmd* pCmd) {
|
||||
// --- Silent Aim: чистая и безопасная реализация ---
|
||||
if (!Config::silent_aim || !pCmd) return;
|
||||
static C_CSPlayerPawn* lockedTarget = nullptr;
|
||||
static bool prevSilentState = false;
|
||||
static QAngle_t last_punch_angle = {0,0,0};
|
||||
static QAngle_t last_punch_angle = { 0,0,0 };
|
||||
static int shotCount = 0;
|
||||
static bool targetWasLost = false;
|
||||
static bool targetWasLockedThisPress = false;
|
||||
C_CSPlayerPawn* lp = H::oGetLocalPlayer(0);
|
||||
if (!lp || !lp->handle().valid() || lp->getHealth() <= 0) return;
|
||||
Vector_t lep = GetEntityEyePos(lp);
|
||||
// Получаем viewangles только из CUserCmd!
|
||||
QAngle_t* cur = (QAngle_t*)(modules.getModule("client") + 0x1A78650);
|
||||
if (!cur) return;
|
||||
// --- Кнопка активации ---
|
||||
bool silentActive = Config::always_on_silent_aim ? true : (GetAsyncKeyState(Config::silent_aim_key) & 0x8000);
|
||||
// --- shooterAfterAim + triggerbot_key для сайлент аимбота ---
|
||||
if (Config::silent_shooterAfterAim && (GetAsyncKeyState(Config::triggerbot_key) & 0x8000)) {
|
||||
silentActive = true;
|
||||
}
|
||||
int shotsFired = lp ? lp->getShotsFired() : 0;
|
||||
shotCount = shotsFired;
|
||||
|
||||
// Если кнопка только что нажата — ищем новую цель
|
||||
// --- Сброс флагов при новом нажатии ---
|
||||
if (silentActive && !prevSilentState) {
|
||||
int nMaxHighestEntity = I::GameEntity->Instance->GetHighestEntityIndex();
|
||||
float bestFov = Config::aimbot_fov;
|
||||
C_CSPlayerPawn* bestTarget = nullptr;
|
||||
QAngle_t bestAngle = { 0, 0, 0 };
|
||||
for (int i = 1; i <= nMaxHighestEntity; i++) {
|
||||
auto Entity = I::GameEntity->Instance->Get(i);
|
||||
if (!Entity) continue;
|
||||
if (!Entity->handle().valid()) continue;
|
||||
SchemaClassInfoData_t* _class = nullptr;
|
||||
Entity->dump_class_info(&_class);
|
||||
if (!_class) continue;
|
||||
const uint32_t hash = HASH(_class->szName);
|
||||
if (hash == HASH("C_CSPlayerPawn")) {
|
||||
C_CSPlayerPawn* pawn = (C_CSPlayerPawn*)Entity;
|
||||
if (!pawn) continue;
|
||||
if (pawn->get_entity_by_handle() == lp->get_entity_by_handle()) continue;
|
||||
if (pawn->getHealth() <= 0) continue;
|
||||
if (Config::team_check && pawn->getTeam() == lp->getTeam()) continue;
|
||||
Vector_t target_pos = GetAimbotTargetPos(pawn, lep, *cur);
|
||||
QAngle_t angle = CalcAngles(target_pos, lep);
|
||||
angle.x *= -1.f;
|
||||
angle.y += 180.f;
|
||||
float fov = GetFov(*cur, angle);
|
||||
if (!std::isfinite(fov) || fov > bestFov) continue;
|
||||
bestFov = fov;
|
||||
bestTarget = pawn;
|
||||
bestAngle = angle;
|
||||
}
|
||||
}
|
||||
lockedTarget = bestTarget;
|
||||
last_punch_angle = {0,0,0};
|
||||
targetWasLost = false;
|
||||
targetWasLockedThisPress = false;
|
||||
}
|
||||
|
||||
// Если кнопка зажата, цели нет — постоянный поиск цели
|
||||
// --- Поиск цели ---
|
||||
if (silentActive && !lockedTarget) {
|
||||
int nMaxHighestEntity = I::GameEntity->Instance->GetHighestEntityIndex();
|
||||
float bestFov = Config::aimbot_fov;
|
||||
C_CSPlayerPawn* bestTarget = nullptr;
|
||||
QAngle_t bestAngle = { 0, 0, 0 };
|
||||
for (int i = 1; i <= nMaxHighestEntity; i++) {
|
||||
auto Entity = I::GameEntity->Instance->Get(i);
|
||||
if (!Entity) continue;
|
||||
if (!Entity->handle().valid()) continue;
|
||||
SchemaClassInfoData_t* _class = nullptr;
|
||||
Entity->dump_class_info(&_class);
|
||||
if (!_class) continue;
|
||||
const uint32_t hash = HASH(_class->szName);
|
||||
if (hash == HASH("C_CSPlayerPawn")) {
|
||||
C_CSPlayerPawn* pawn = (C_CSPlayerPawn*)Entity;
|
||||
if (!pawn) continue;
|
||||
if (pawn->get_entity_by_handle() == lp->get_entity_by_handle()) continue;
|
||||
if (pawn->getHealth() <= 0) continue;
|
||||
if (Config::team_check && pawn->getTeam() == lp->getTeam()) continue;
|
||||
Vector_t target_pos = GetAimbotTargetPos(pawn, lep, *cur);
|
||||
QAngle_t angle = CalcAngles(target_pos, lep);
|
||||
angle.x *= -1.f;
|
||||
angle.y += 180.f;
|
||||
float fov = GetFov(*cur, angle);
|
||||
if (!std::isfinite(fov) || fov > bestFov) continue;
|
||||
bestFov = fov;
|
||||
bestTarget = pawn;
|
||||
bestAngle = angle;
|
||||
if ((!targetWasLost && !targetWasLockedThisPress)) {
|
||||
int nMaxHighestEntity = I::GameEntity->Instance->GetHighestEntityIndex();
|
||||
float bestFov = Config::silent_aim_fov;
|
||||
C_CSPlayerPawn* bestTarget = nullptr;
|
||||
QAngle_t bestAngle = { 0, 0, 0 };
|
||||
for (int i = 1; i <= nMaxHighestEntity; i++) {
|
||||
auto Entity = I::GameEntity->Instance->Get(i);
|
||||
if (!Entity) continue;
|
||||
if (!Entity->handle().valid()) continue;
|
||||
SchemaClassInfoData_t* _class = nullptr;
|
||||
Entity->dump_class_info(&_class);
|
||||
if (!_class) continue;
|
||||
const uint32_t hash = HASH(_class->szName);
|
||||
if (hash == HASH("C_CSPlayerPawn")) {
|
||||
C_CSPlayerPawn* pawn = (C_CSPlayerPawn*)Entity;
|
||||
if (!pawn) continue;
|
||||
if (pawn->get_entity_by_handle() == lp->get_entity_by_handle()) continue;
|
||||
if (pawn->getHealth() <= 0) continue;
|
||||
if (Config::team_check && pawn->getTeam() == lp->getTeam()) continue;
|
||||
// --- Выбор кости для silent aim ---
|
||||
Vector_t target_pos;
|
||||
switch (Config::silent_aim_bone) {
|
||||
case Config::BONE_HEAD:
|
||||
target_pos = GetBonePosition(pawn, BONE_INDEX_HEAD); break;
|
||||
case Config::BONE_NECK:
|
||||
target_pos = GetBonePosition(pawn, BONE_INDEX_NECK); break;
|
||||
case Config::BONE_BODY:
|
||||
target_pos = GetBonePosition(pawn, BONE_INDEX_BODY); break;
|
||||
case Config::BONE_NEAREST:
|
||||
default:
|
||||
target_pos = GetAimbotTargetPos(pawn, lep, *cur); break;
|
||||
}
|
||||
QAngle_t angle = CalcAngles(target_pos, lep);
|
||||
angle.x *= -1.f;
|
||||
angle.y += 180.f;
|
||||
float fov = GetFov(*cur, angle);
|
||||
if (!std::isfinite(fov) || fov > bestFov) continue;
|
||||
bestFov = fov;
|
||||
bestTarget = pawn;
|
||||
bestAngle = angle;
|
||||
}
|
||||
}
|
||||
lockedTarget = bestTarget;
|
||||
last_punch_angle = { 0,0,0 };
|
||||
if (lockedTarget) targetWasLockedThisPress = true;
|
||||
if (!lockedTarget) targetWasLost = true;
|
||||
}
|
||||
lockedTarget = bestTarget;
|
||||
last_punch_angle = {0,0,0};
|
||||
}
|
||||
|
||||
// Если кнопка отпущена — сбрасываем захват
|
||||
// --- Сброс при отпускании кнопки ---
|
||||
if (!silentActive) {
|
||||
lockedTarget = nullptr;
|
||||
last_punch_angle = {0,0,0};
|
||||
last_punch_angle = { 0,0,0 };
|
||||
targetWasLost = false;
|
||||
targetWasLockedThisPress = false;
|
||||
}
|
||||
|
||||
// Если есть захваченная цель и кнопка удерживается
|
||||
// --- Наведение на цель ---
|
||||
if (silentActive && lockedTarget) {
|
||||
// Проверяем, что цель всё ещё валидна
|
||||
// Проверка валидности цели
|
||||
if (!lp || !lp->handle().valid() || lp->getHealth() <= 0 ||
|
||||
lockedTarget->get_entity_by_handle() == lp->get_entity_by_handle() ||
|
||||
lockedTarget->getHealth() <= 0 ||
|
||||
!lockedTarget->handle().valid() ||
|
||||
(Config::team_check && lockedTarget->getTeam() == lp->getTeam())) {
|
||||
lockedTarget = nullptr;
|
||||
last_punch_angle = {0,0,0};
|
||||
last_punch_angle = { 0,0,0 };
|
||||
targetWasLost = true;
|
||||
prevSilentState = silentActive;
|
||||
return;
|
||||
}
|
||||
Vector_t target_pos = GetAimbotTargetPos(lockedTarget, lep, *cur);
|
||||
// --- Выбор кости для silent aim ---
|
||||
Vector_t target_pos;
|
||||
switch (Config::silent_aim_bone) {
|
||||
case Config::BONE_HEAD:
|
||||
target_pos = GetBonePosition(lockedTarget, BONE_INDEX_HEAD); break;
|
||||
case Config::BONE_NECK:
|
||||
target_pos = GetBonePosition(lockedTarget, BONE_INDEX_NECK); break;
|
||||
case Config::BONE_BODY:
|
||||
target_pos = GetBonePosition(lockedTarget, BONE_INDEX_BODY); break;
|
||||
case Config::BONE_NEAREST:
|
||||
default:
|
||||
target_pos = GetAimbotTargetPos(lockedTarget, lep, *cur); break;
|
||||
}
|
||||
QAngle_t angle = CalcAngles(target_pos, lep);
|
||||
angle.x *= -1.f;
|
||||
angle.y += 180.f;
|
||||
//QAngle_t cur_punch_angle = *(QAngle_t*)((uintptr_t)lp + SchemaFinder::Get(hash_32_fnv1a_const("C_CSPlayerPawn->m_aimPunchAngle")));
|
||||
//// --- RCS ---
|
||||
//bool rcsActive = (Config::rcs || Config::silent_shooterAfterAim) && (shotCount > Config::rcsActivationShots);
|
||||
//if (rcsActive && shotCount > 1) {
|
||||
// angle -= cur_punch_angle * 2.f;
|
||||
// last_punch_angle = cur_punch_angle;
|
||||
//} else {
|
||||
// last_punch_angle = {0,0,0};
|
||||
//}
|
||||
//angle.z = 0.f;
|
||||
//angle = angle.Normalize();
|
||||
// --- Smooth ---
|
||||
if (Config::silent_aim_smooth > 0.f) {
|
||||
QAngle_t delta = (angle - *cur).Normalize();
|
||||
@@ -523,4 +650,4 @@ void SilentAimbot(CUserCmd* pCmd) {
|
||||
*cur = angle;
|
||||
}
|
||||
prevSilentState = silentActive;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user