-
Автор темы
- #1
Всем привет, что вообще можно добавить или, что убрать. Посоветуйте что-нибудь. Заранее предупреждаю, перед тем, как начать читать код обязательно приготовьте новые глаза)
aimbot.cpp:
Vector_t GetEntityEyePos(const C_CSPlayerPawn* Entity) {
if (!Entity)
return {};
uintptr_t game_scene_node = [I]reinterpret_cast<uintptr_t[/I]>((uintptr_t)Entity + SchemaFinder::Get(hash_32_fnv1a_const("C_BaseEntity->m_pGameSceneNode")));
auto Origin = [I]reinterpret_cast<Vector_t[/I]>(game_scene_node + SchemaFinder::Get(hash_32_fnv1a_const("CGameSceneNode->m_vecAbsOrigin")));
auto ViewOffset = [I]reinterpret_cast<Vector_t[/I]>((uintptr_t)Entity + SchemaFinder::Get(hash_32_fnv1a_const("C_BaseModelEntity->m_vecViewOffset")));
Vector_t Result = Origin + ViewOffset;
if (!glm::isfinite(Result.x) || !glm::isfinite(Result.y) || !glm::isfinite(Result.z))
return {};
return Result;
}
inline QAngle_t CalcAngles(const vec3& viewPos, const vec3& aimPos)
{
vec3 delta = aimPos - viewPos;
float deltaLength = glm::length(delta);
if (deltaLength < 0.001f)
return QAngle_t{ 0, 0, 0 };
QAngle_t angle;
angle.x = -glm::degrees(asin(delta.z / deltaLength));
angle.y = glm::degrees(atan2(delta.y, delta.x));
angle.z = 0;
return angle;
}
inline float GetFov(const QAngle_t& viewAngle, const QAngle_t& aimAngle)
{
vec3 viewVec = {
cos(radians(viewAngle.y)) * cos(radians(viewAngle.x)),
sin(radians(viewAngle.y)) * cos(radians(viewAngle.x)),
sin(radians(-viewAngle.x))
};
vec3 aimVec = {
cos(radians(aimAngle.y)) * cos(radians(aimAngle.x)),
sin(radians(aimAngle.y)) * cos(radians(aimAngle.x)),
sin(radians(-aimAngle.x))
};
return degrees(angle(viewVec, aimVec));
}
void Aimbot()
{
if (!Config::aimbot || !Config::rcs)
return;
static QAngle_t vecPreviousPunch = { 0, 0, 0 };
static bool bWasTargetFound = false;
C_CSPlayerPawn* pLocalPlayer = H::oGetLocalPlayer(0);
if (!pLocalPlayer || pLocalPlayer->getHealth() < 1)
{
bWasTargetFound = false;
return;
}
const Vector_t vecLocalEyePos = GetEntityEyePos(pLocalPlayer);
if (vecLocalEyePos.x == 0.f && vecLocalEyePos.y == 0.f && vecLocalEyePos.z == 0.f)
{
bWasTargetFound = false;
return;
}
QAngle_t* pViewAngles = reinterpret_cast<QAngle_t*>(modules.getModule("client") + 0x1AAE880);
if (!pViewAngles)
{
bWasTargetFound = false;
return;
}
const QAngle_t angCurrentPunch = [I](QAngle_t[/I])((uintptr_t)pLocalPlayer +
SchemaFinder::Get(hash_32_fnv1a_const("C_CSPlayerPawn->m_aimPunchAngle")));
const float rcsStrength = 2.0f;
const float yawBoost = 2.0f;
QAngle_t vecRCSCompensation = {
angCurrentPunch.x * rcsStrength,
angCurrentPunch.y * rcsStrength * yawBoost,
0.f
};
const int nMaxEntities = I::GameEntity->Instance->GetHighestEntityIndex();
float flBestFov = Config::aimbot_fov;
QAngle_t vecBestAngle = {};
bool bFoundTarget = false;
vec3 localEyePos(vecLocalEyePos.x, vecLocalEyePos.y, vecLocalEyePos.z);
QAngle_t viewAnglesWithRCS = *pViewAngles + vecRCSCompensation;
for (int i = 1; i <= nMaxEntities; i++)
{
C_BaseEntity* pEntity = I::GameEntity->Instance->Get(i);
if (!pEntity || !pEntity->handle().valid())
continue;
SchemaClassInfoData_t* pClassInfo = nullptr;
pEntity->dump_class_info(&pClassInfo);
if (!pClassInfo || HASH(pClassInfo->szName) != HASH("C_CSPlayerPawn"))
continue;
C_CSPlayerPawn* pEnemyPawn = reinterpret_cast<C_CSPlayerPawn*>(pEntity);
if (pEnemyPawn == pLocalPlayer ||
pEnemyPawn->getHealth() < 1 ||
pEnemyPawn->getTeam() == pLocalPlayer->getTeam())
continue;
const Vector_t vecEnemyEyePos = GetEntityEyePos(pEnemyPawn);
if (vecEnemyEyePos.x == 0.f && vecEnemyEyePos.y == 0.f && vecEnemyEyePos.z == 0.f)
continue;
vec3 enemyEyePos(vecEnemyEyePos.x, vecEnemyEyePos.y, vecEnemyEyePos.z);
const QAngle_t vecTargetAngle = CalcAngles(localEyePos, enemyEyePos);
const float flFov = GetFov(viewAnglesWithRCS, vecTargetAngle);
if (!std::isfinite(flFov) || flFov > flBestFov)
continue;
bFoundTarget = true;
flBestFov = flFov;
vecBestAngle = vecTargetAngle - vecRCSCompensation;
vecBestAngle.Normalize();
}
if (!bFoundTarget && bWasTargetFound)
{
vecPreviousPunch = { 0, 0, 0 };
}
bWasTargetFound = bFoundTarget;
if (bFoundTarget && flBestFov <= Config::aimbot_fov)
{
QAngle_t vecPunchDelta = vecPreviousPunch - angCurrentPunch;
vecPreviousPunch = angCurrentPunch;
*pViewAngles = vecBestAngle + vecPunchDelta;
pViewAngles->Normalize();
}
}