Вопрос Отвалился хитшанс

Пользователь
Статус
Оффлайн
Регистрация
15 Июл 2021
Сообщения
233
Реакции[?]
85
Поинты[?]
0
я мог сделать по другому, но посмотрел как сделано в гладиаторе. вроде всё так же, мб я чет не заметил
C++:
bool F_Ragebot::CalculateChance(float& flFinalChance, CLagRecord* pRecord, const Vector vecAngles, const float flChance, int iHitbox, matrix* pMatrix)
{
    IBaseCombatWeapon* pWeapon;   CCSWeaponInfo* pWeaponData;
    if ( (pWeapon = g_Global->pWeapon) == nullptr || (pWeaponData = g_Global->pWeaponData) == nullptr || flChance == 0.0f) {
        flFinalChance = 0.0f; return true;
    }

    Vector vecForward, vecRight, vecUp; Vector vecStart = g_Global->pLocal->GetEyePosition();
    Math::AngleVector4(vecAngles, vecForward, vecRight, vecUp);

    int iHits = 0;
    int iNeededHits = static_cast<int>(255.0f * (flChance / 100.0f));

    float flSpread = pWeapon->GetSpread();
    float flInaccuracy = pWeapon->GetInaccuracy();

    for (int i = 0; i < 255; i++)
    {
        RandomSeed(i);
        float a = RandomFloat(0.0f, 1.0f);
        float b = RandomFloat(0.0f, 2.0f * PI);
        float c = RandomFloat(0.0f, 1.0f);
        float d = RandomFloat(0.0f, 2.0f * PI);

        float m_flInaccuracy = a * flInaccuracy;
        float m_flSpread = c * flSpread;

        if (pWeapon->GetItemDefinitionIndex() == WEAPON_REVOLVER)
            a = 1.0f - pow(a, 2.0f), a = 1.0f - pow(c, 2.0f);
        
        Vector vecSpreadView((cos(b) * m_flInaccuracy) + (cos(d) * m_flSpread), (sin(b) * m_flInaccuracy) + (sin(d) * m_flSpread), 0.f), vecDirection;

        vecDirection.x = vecForward.x + (vecSpreadView.x * vecRight.x) + (vecSpreadView.y * vecUp.x);
        vecDirection.y = vecForward.y + (vecSpreadView.x * vecRight.y) + (vecSpreadView.y * vecUp.y);
        vecDirection.z = vecForward.z + (vecSpreadView.x * vecRight.z) + (vecSpreadView.y * vecUp.z);
        vecDirection.Normalized();

        Vector vecViewanglesSpread;
        Math::VectorAngles(vecDirection, vecUp, vecViewanglesSpread);
        Math::Normalize(vecViewanglesSpread);

        Vector vecViewForward;
        Math::AngleVectors2(vecViewanglesSpread, vecViewForward);
        vecViewForward.NormalizeInPlace();
        vecViewForward = vecStart + (vecViewForward * pWeaponData->m_flRange);

        g_Interfaces.iDebugOverlay->AddLineOverlay(vecStart, vecViewForward, 0, 0, 255, false, 0.02f);
        if (CanHitHitbox(vecStart, vecViewForward, pRecord, iHitbox, pMatrix))
            ++iHits;

        if (static_cast<int>((static_cast<float>(iHits) / 255.0f) * 100.0f) >= flChance)
            return true;

        if ((255 - i + iHits) < iNeededHits)
            return false;
    }
    return false;
}
1642440693677.png
 
Сверху Снизу