Hey, I'm making a CS2 cheat and started working on double tap but it's broken. Instead of firing two shots at once, it just keeps shooting non-stop wherever I'm looking. Can't figure out what's wrong. Has anyone dealt with this? Any help appreciated, thanks.
C++:
bool rage::process_doubletap( systems::input::usercmd* cmd, const systems::local::snapshot& local, bool charge_dt )
{
const auto& shared_ctx = g_shared.ctx( );
const auto& config = settings::g_combat.m_ragebot.get_group( shared_ctx.weapon_type );
if ( !config.doubletap.value )
{
return false;
}
const auto base_cmd = cmd->csgo_user_cmd.mutable_base( );
if ( !base_cmd )
{
return false;
}
const auto client_tick = base_cmd->client_tick( );
const auto next_primary = memory::read<int>( shared_ctx.weapon + SCHEMA( "C_BasePlayerWeapon", "m_nNextPrimaryAttackTick"_hash ) );
const auto tick_base = memory::read<int>( local.controller + SCHEMA( "CBasePlayerController", "m_nTickBase"_hash ) );
const auto can_attack = client_tick >= next_primary
&& tick_base >= g_shared.last_shoot_tick( ) + 2
&& !memory::read<bool>( shared_ctx.weapon + SCHEMA( "C_CSWeaponBase", "m_bInReload"_hash ) )
&& memory::read<int>( shared_ctx.weapon + SCHEMA( "C_BasePlayerWeapon", "m_iClip1"_hash ) ) > 0;
const auto should_attack = can_attack && charge_dt;
if ( should_attack )
{
if ( const auto subtick_moves = base_cmd->mutable_subtick_moves( ) )
{
const auto old_size = subtick_moves->m_current_size;
const auto press = systems::g_input.acquire_subtick_step( subtick_moves );
const auto release = systems::g_input.acquire_subtick_step( subtick_moves );
if ( press && release )
{
press->set_button( cstypes::command_buttons::in_attack );
press->set_pressed( true );
press->set_when( 0.0f );
press->set_analog_forward_delta( 0.0f );
press->set_analog_left_delta( 0.0f );
release->set_button( cstypes::command_buttons::in_attack );
release->set_pressed( false );
release->set_when( std::nextafter( 1.0f, 0.0f ) );
release->set_analog_forward_delta( 0.0f );
release->set_analog_left_delta( 0.0f );
cmd->buttons.value &= ~cstypes::command_buttons::in_attack;
cmd->buttons.value_changed |= cstypes::command_buttons::in_attack;
cmd->buttons.value_scroll &= ~cstypes::command_buttons::in_attack;
cmd->csgo_user_cmd.set_attack1_start_history_index( -1 );
return true;
}
subtick_moves->m_current_size = old_size;
}
}
cmd->buttons.value &= ~cstypes::command_buttons::in_attack;
cmd->buttons.value_changed |= cstypes::command_buttons::in_attack;
cmd->buttons.value_scroll &= ~cstypes::command_buttons::in_attack;
cmd->csgo_user_cmd.set_attack1_start_history_index( -1 );
return false;
}
Last edited by a moderator: