coder of the year
-
Автор темы
- #1
короче какая то хуйня с трейсами, но не пойму какая, hit_entity почему то по кд на нуле
хитшанс:
мб с классом что-то-то? но не припоминаю что он обновлялся
(без клоунов пожалуйста, хочу подробное разъяснение что это за хуйня, и как в будущем не допускать таких ошибок)
хитшанс:
C++:
if (g_CVar->FindVar("weapon_accuracy_nospread")->GetInt() == 1)
return true;
auto pWeapon = pEnt->m_hActiveWeapon();
const auto round_acc = [](const float accuracy) { return roundf(accuracy * 1000.f) / 1000.f; };
const auto sniper = g_LocalPlayer->m_hActiveWeapon()->IsSniper();
const auto crouched = g_LocalPlayer->m_fFlags() & FL_DUCKING;
const auto weapon_inaccuracy = pWeapon->GetInaccuracy();
if (!crouched)
{
if (round_acc(weapon_inaccuracy) == round_acc(sniper ? pWeapon->GetCSWeaponData()->flSpreadAlt : pWeapon->GetCSWeaponData()->flSpread))
return true;
}
Vector forward, right, up;
Vector src = g_LocalPlayer->GetEyePos();
Math::AngleVectors(position, forward, right, up);
int cHits = 0;
int cNeededHits = static_cast<int> (255.f * (chance / 100.f));
pWeapon->UpdateAccuracyPenalty();
float weap_spread = pWeapon->GetSpread();
float weap_inaccuracy = pWeapon->GetInaccuracy();
for (int i = 0; i < 255; i++)
{
float a = Math::RandomFloat(0.f, 1.f);
float b = Math::RandomFloat(0.f, 2.f * PI_F);
float c = Math::RandomFloat(0.f, 1.f);
float d = Math::RandomFloat(0.f, 2.f * PI_F);
float inaccuracy = a * weap_inaccuracy;
float spread = c * weap_spread;
Vector spreadView((cos(b) * inaccuracy) + (cos(d) * spread), (sin(b) * inaccuracy) + (sin(d) * spread), 0), direction;
direction.x = forward.x + (spreadView.x * right.x) + (spreadView.y * up.x);
direction.y = forward.y + (spreadView.x * right.y) + (spreadView.y * up.y);
direction.z = forward.z + (spreadView.x * right.z) + (spreadView.y * up.z);
direction.Normalized();
QAngle viewAnglesSpread;
Math::VectorAngles(direction, up, viewAnglesSpread);
viewAnglesSpread.Normalize();
Vector viewForward;
Math::AngleVectors(viewAnglesSpread, viewForward);
viewForward.NormalizeInPlace();
viewForward = src + (viewForward * pWeapon->GetCSWeaponData()->flRange);
trace_t tr;
Ray_t ray;
ray.Init(g_LocalPlayer->GetEyePos(), viewForward);
g_EngineTrace->ClipRayToEntity(ray, MASK_SHOT | CONTENTS_GRATE, pEnt, &tr);
if (tr.hit_entity == pEnt)
++cHits;
if (static_cast<int> ((static_cast<float> (cHits) / 255.f) * 100.f) > chance)
return true;
}
return false;
(без клоунов пожалуйста, хочу подробное разъяснение что это за хуйня, и как в будущем не допускать таких ошибок)