Вопрос Как улучшить логику аимбота?

Начинающий
Статус
Оффлайн
Регистрация
27 Мар 2020
Сообщения
50
Реакции[?]
5
Поинты[?]
0
Всем привет, что вообще можно добавить или, что убрать. Посоветуйте что-нибудь. Заранее предупреждаю, перед тем, как начать читать код обязательно приготовьте новые глаза)
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();
    }
}
 
Начинающий
Статус
Оффлайн
Регистрация
19 Янв 2024
Сообщения
124
Реакции[?]
2
Поинты[?]
2K
Всем привет, что вообще можно добавить или, что убрать. Посоветуйте что-нибудь. Заранее предупреждаю, перед тем, как начать читать код обязательно приготовьте новые глаза)
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();
    }
}
мне кажется аим из templeware хмм
 
Сверху Снизу