Rookie HvHer
- User ID
 - 103729
 
- Messages
 - 12
 
- Reactions
 - 7
 
- Level
 - 6
 
No comments in code, don't ask why
Directly paste it into airflow source code
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
			
			Directly paste it into airflow source code
			
				C++:
			
		
		
		bool hitchance(vec3_t eye_pos, rage_player_t& rage, const rage_point_t& point, anim_record_t* record, const float& chance, matrix3x4_t* matrix, float* hitchance_out = nullptr)
{
    static auto weapon_accuracy_nospread = HACKS->convars.weapon_accuracy_nospread;
    if (weapon_accuracy_nospread && weapon_accuracy_nospread->get_bool())
    {
        if (hitchance_out) *hitchance_out = 1.f;
        return true;
    }
    auto net_vars = ENGINE_PREDICTION->get_networked_vars(HACKS->cmd->command_number);
    float inaccuracy = net_vars->inaccuracy + net_vars->spread;
    if ((HACKS->ideal_inaccuracy + 0.0005f) >= net_vars->inaccuracy)
    {
        if (hitchance_out) *hitchance_out = 1.f;
        return true;
    }
    auto matrix_to_aim = record->extrapolated ? record->predicted_matrix : record->matrix_orig.matrix;
    auto active_matrix = matrix ? matrix : matrix_to_aim;
    rage.restore.store(rage.player);
    LAGCOMP->set_record(rage.player, record, active_matrix);
    vec3_t aim_dir = (point.aim_point - eye_pos).normalized();
    float dist = eye_pos.dist_to(point.aim_point);
    float spread_r = dist * inaccuracy;
    float tgt_r = 0.f;
    vec3_t tgt_center{};
    if (auto hdr = HACKS->model_info->get_studio_model(rage.player->get_model()))
    {
        if (auto set = hdr->hitbox_set(0))
        {
            if (auto box = set->hitbox(point.hitbox))
            {
                vec3_t mn, mx;
                math::vector_transform(box->min, active_matrix[box->bone], mn);
                math::vector_transform(box->max, active_matrix[box->bone], mx);
                tgt_center = (mn + mx) * 0.5f;
                tgt_r = box->radius > 0.f ? box->radius : (mx - mn).length() * 0.5f;
            }
        }
    }
    vec3_t diff = tgt_center - point.aim_point;
    float d = (diff - aim_dir * diff.dot(aim_dir)).length();
    // Geometric analysis
    auto overlap_ratio = [&](float r1, float r2, float sep) -> float
        {
            if (r1 <= 0.f)
                return 0.f;
            if (sep >= r1 + r2)
                return 0.f;
            if (sep <= std::fabs(r1 - r2))
                return r2 <= r1 ? (r2 * r2) / (r1 * r1) : 1.f;
            float r1sq = r1 * r1, r2sq = r2 * r2;
            float alpha = std::acos((sep * sep + r1sq - r2sq) / (2.f * sep * r1));
            float beta = std::acos((sep * sep + r2sq - r1sq) / (2.f * sep * r2));
            float part = -sep + r1 + r2;
            float area = r1sq * alpha + r2sq * beta - 0.5f * std::sqrt(part * (sep + r1 - r2) * (sep - r1 + r2) * (sep + r1 + r2));
            return area / (M_PI * r1sq);
        };
    float probability = overlap_ratio(spread_r, tgt_r, d);
    if (hitchance_out)
        *hitchance_out = std::clamp(probability, 0.f, 1.f);
    rage.restore.restore(rage.player);
    return probability >= chance;
}
	
			
				Last edited: