ЧВК EB_LAN
-
Автор темы
- #1
Я тут начал его пастить и короче, я не знаю правильно или нет оно работает. Кто сможет подсказать плохие моменты которые лучше рекоднуть?
Знаю что can_hit_hitbox нужен итд, мне пока лень пастить но я мб сегодня уже всё сделаю нормально и как надо.
И вектор 3д надо было бы спастить, но опять же мне легче закостылить...
Хитшанс крашит, и я не знаю как фикс тк лень дебажить. Помогите это зафиксеть:(
C++:
bool aim::calculate_hitchance(int& final_hitchance)
{
// generate look-up-table to enhance performance.
build_seed_table();
const auto info = g_ctx.globals.weapon->get_csweapon_info();
if (!info)
return false;
auto player = (player_t*)m_entitylist()->GetClientEntity(aim::get().last_target_index);
auto model = player->GetModel();
const auto studio_model = m_modelinfo()->GetStudioModel(model);
if (!studio_model)
return false;
const auto hitchance_cfg = g_cfg.ragebot.weapon[g_ctx.globals.current_weapon].hitchance_amount;
auto position = ZERO;
// performance optimization.
if ((g_ctx.local()->get_shoot_position() - position).Length() > info->flRange)
return false;
// setup calculation parameters.
const auto round_acc = [](const float accuracy) { return roundf(accuracy * 1000.f) / 1000.f; };
const auto sniper = g_ctx.globals.weapon->is_sniper();
const auto crouched = g_ctx.local()->m_fFlags() & FLAGS_FAKEDUCKING;
// calculate inaccuracy.
const auto weapon_inaccuracy = g_ctx.globals.weapon->get_inaccuracy();
// no need for hitchance, if we can't increase it anyway.
if (crouched)
{
if (round_acc(weapon_inaccuracy) == round_acc(sniper ? info->flInaccuracyCrouchAlt : info->flInaccuracyCrouch))
return true;
}
else
{
if (round_acc(weapon_inaccuracy) == round_acc(sniper ? info->flInaccuracyStandAlt : info->flInaccuracyStand))
return true;
}
// calculate start and angle.
const auto start = g_ctx.local()->get_shoot_position();
const auto aim_angle = math::calculate_angle(start, position);
auto forward = ZERO;
auto right = ZERO;
auto up = ZERO;
math::angle_vectors(aim_angle, &forward, &right, &up);
math::fast_vec_normalize(forward);
math::fast_vec_normalize(right);
math::fast_vec_normalize(up);
// keep track of all traces that hit the enemy.
auto current = 0;
// setup calculation parameters.
Vector total_spread, spread_angle, end;
float inaccuracy, spread_x, spread_y;
std::tuple<float, float, float>* seed;
// use look-up-table to find average hit probability.
for (auto i = 0u; i < 255; i++)
{
seed = &precomputed_seeds[i];
inaccuracy = std::get<0>(*seed) * weapon_inaccuracy;
spread_x = std::get<2>(*seed) * inaccuracy;
spread_y = std::get<1>(*seed) * inaccuracy;
total_spread = (forward + right * spread_x + up * spread_y);
total_spread.Normalize();
math::vector_angles(total_spread, spread_angle);
math::angle_vectors(spread_angle, end);
end = start + end.Normalize() * info->flRange;
CGameTrace tr;
m_trace()->ClipRayToEntity(Ray_t(g_ctx.globals.eye_pos, end), MASK_SHOT, final_target.record->player, &tr);
if (tr.hit_entity == final_target.record->player)
current++;
// abort if hitchance is already sufficent.
if (static_cast<float>(current) / static_cast<float>(255) >= hitchance_cfg)
return true;
// abort if we can no longer reach hitchance.
if (static_cast<float>(current + 255 - i) / static_cast<float>(255) < hitchance_cfg)
return false;
}
return static_cast<float>(current) / static_cast<float>(255) >= hitchance_cfg;
}
Пожалуйста, авторизуйтесь для просмотра ссылки.
Знаю что can_hit_hitbox нужен итд, мне пока лень пастить но я мб сегодня уже всё сделаю нормально и как надо.
И вектор 3д надо было бы спастить, но опять же мне легче закостылить...
Хитшанс крашит, и я не знаю как фикс тк лень дебажить. Помогите это зафиксеть:(
Последнее редактирование: