Skip to content

Commit

Permalink
Added click on inventory back again, lots of bugs fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
b1scoito committed Mar 23, 2022
1 parent df992b3 commit b87fb52
Show file tree
Hide file tree
Showing 8 changed files with 284 additions and 252 deletions.
130 changes: 73 additions & 57 deletions clicker/clicker.cpp
Original file line number Diff line number Diff line change
@@ -1,27 +1,26 @@
#include "pch.hpp"
#include "clicker.hpp"

void c_clicker::initialize()
void c_clicker::thread()
{
// Loop while running
while ( vars::b_is_running )
{
if ( !this->is_right_clicking || !this->is_left_clicking )
if ( !this->b_is_right_clicking || !this->b_is_left_clicking )
std::this_thread::sleep_for( 1ms );

vars::key::clicker_enabled.i_mode = config.clicker.i_key_type;
vars::key::clicker_enabled.i_key = config.clicker.i_clicker_key;

if ( vars::key::clicker_enabled.get() ) {
if ( focus::window_think() && focus::cursor_think() ) {
// left
this->is_left_clicking = ( config.clicker.b_enable_left_clicker && vars::key::is_left_down.get());
if ( this->is_left_clicking )
this->send_click(input::mouse_button_t::left, config.clicker.f_left_cps);

// right
this->is_right_clicking = ( config.clicker.b_enable_right_clicker && vars::key::is_right_down.get());
if ( this->is_right_clicking )
this->send_click(input::mouse_button_t::right, config.clicker.f_right_cps);

// Left button
this->b_is_left_clicking = ( config.clicker.b_enable_left_clicker && vars::key::is_left_down.get());
if (this->b_is_left_clicking )
send_click(input::mouse_button_t::left, config.clicker.f_left_cps);

// Right button
this->b_is_right_clicking = ( config.clicker.b_enable_right_clicker && vars::key::is_right_down.get());
if (this->b_is_right_clicking )
send_click(input::mouse_button_t::right, config.clicker.f_right_cps);
}
}
}
Expand All @@ -31,93 +30,110 @@ void c_clicker::send_click(input::mouse_button_t b_button, float f_cps )
{
const auto start = std::chrono::high_resolution_clock::now();

if ( f_cps <= 0 )
if (f_cps <= 0 )
return;

if ( !config.clicker.b_enable_blatant )
f_cps += this->random;
f_cps += this->f_random;

this->delay = ( 1000 / f_cps ) / 2;
this->f_delay = (1000 / f_cps) / 2;

if ( !config.clicker.b_enable_blatant )
this->delay += rng::random_real<float>( -config.clicker.f_default_timer_randomization,
config.clicker.f_default_timer_randomization );
this->f_delay += rng::random_real<float>(1.f, config.clicker.f_default_timer_randomization );

PreciseSleep( this->delay );
// Down delay
PreciseSleep(this->f_delay );
input::click( input::mouse_input_type_t::down, b_button );

if ( config.clicker.b_enable_blockhit &&
config.clicker.i_blockhit_chance > 0 &&
std::rand() % ( 100 / config.clicker.i_blockhit_chance ) == 0 )
{
this->blockhitted = true;
input::click( input::mouse_input_type_t::down, input::mouse_button_t::right );
}

PreciseSleep( this->delay );
// Up delay
PreciseSleep(this->f_delay );
input::click( input::mouse_input_type_t::up, b_button );

if (this->blockhitted)
{
input::click(input::mouse_input_type_t::up, input::mouse_button_t::right );
blockhitted = false;
}

const auto end = std::chrono::high_resolution_clock::now();
std::chrono::duration<double, std::milli> elapsed { end - start };

vars::stats::f_average_cps = (float) ( 1000.f / elapsed.count() );

++vars::stats::i_clicks_this_session;

log_debug( "[%d, %s]: CPS: [ %.3f ] Delay: [ %.3fms ] Time elapsed: [ %.3fms ] Avg CPS: [ %.3f ]",
vars::stats::i_clicks_this_session,
log_debug( "(%s, %d): CPS: %.3f | delay: %.3fms | time elapsed: %.3fms | avg. CPS: %.3f",
config.clicker.i_send_input_method ? "PostMessage" : "SendMessage",
vars::stats::i_clicks_this_session,
f_cps,
( this->delay * 2 ),
(this->f_delay * 2 ),
elapsed.count(),
vars::stats::f_average_cps
);
}

void c_clicker::update()
void c_clicker::update_cps()
{
while ( vars::b_is_running )
{
if ( !this->is_right_clicking || !this->is_left_clicking )
if ( !this->b_is_right_clicking || !this->b_is_left_clicking )
std::this_thread::sleep_for( 1ms );

auto rate = rng::random_real<float>( 0, config.clicker.f_persistence_update_rate );
const auto rate = rng::random_real<float>( 1500.f, config.clicker.f_persistence_update_rate );

if ( this->should_update )
if ( b_should_update )
{
log_debug("Update %.3fms", rate);

// Persistence
if ( config.clicker.b_enable_persistence )
random = rng::random_real<float>( -config.clicker.f_persistence_value,
config.clicker.f_persistence_value );
if (config.clicker.b_enable_persistence)
this->f_random = rng::random_real<float>( 1.f, config.clicker.f_persistence_value );

// CPS Drops
if ( config.clicker.b_enable_cps_drops &&
config.clicker.i_cps_drop_chance > 0 &&
( std::rand() % ( 100 / config.clicker.i_cps_drop_chance ) == 0 ) )
if (config.clicker.b_enable_cps_drops &&
config.clicker.i_cps_drop_chance > 0 && (std::rand() % (100 / config.clicker.i_cps_drop_chance) == 0))
{
random -= config.clicker.f_cps_drop_remove;
this->f_random -= config.clicker.f_cps_drop_remove;
}

// CPS Spikes
if ( config.clicker.b_enable_cps_spikes &&
config.clicker.i_cps_spike_chance > 0 &&
( std::rand() % ( 100 / config.clicker.i_cps_spike_chance ) == 0 ) )
if (config.clicker.b_enable_cps_spikes &&
config.clicker.i_cps_spike_chance > 0 && (std::rand() % (100 / config.clicker.i_cps_spike_chance) == 0))
{
random += config.clicker.f_cps_spike_add;
this->f_random += config.clicker.f_cps_spike_add;
}

this->should_update = false;
this->b_should_update = false;
}

PreciseSleep( rate );
log_debug("Random after update %.1f", this->f_random);

this->random = {};
this->should_update = true;
PreciseSleep(rate);

this->f_random = {};
this->b_should_update = true;
}
}

void c_clicker::update_variables()
{
while (vars::b_is_running)
{
if (!this->b_is_right_clicking || !this->b_is_left_clicking)
std::this_thread::sleep_for(1ms);

vars::key::clicker_enabled.i_mode = config.clicker.i_key_type;
vars::key::clicker_enabled.i_key = config.clicker.i_clicker_key;

if (vars::key::clicker_enabled.get()) {
if (focus::window_think())
{
if (GetAsyncKeyState(69))
{
vars::key::b_inventory_opened = !vars::key::b_inventory_opened;
std::this_thread::sleep_for(std::chrono::milliseconds(200));
}

if (GetAsyncKeyState(VK_ESCAPE))
{
vars::key::b_inventory_opened = false;
std::this_thread::sleep_for(std::chrono::milliseconds(200));
}
}
}
}
}
21 changes: 9 additions & 12 deletions clicker/clicker.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,20 @@
class c_clicker
{
private:
void send_click( input::mouse_button_t b_button, float f_cps );
void send_click(input::mouse_button_t b_button, float f_cps);

float delay = 0.f;
float random = 0.f;
float f_delay = {};
float f_random = {};

bool blockhitted = false;
bool should_update = false;
bool b_should_update = {};

bool is_left_clicking = false;
bool is_right_clicking = false;
bool b_is_left_clicking = {};
bool b_is_right_clicking = {};

public:
void initialize();
void update();

~c_clicker() = default;
c_clicker() = default;
void thread();
void update_cps();
void update_variables();
};

inline auto g_clicker = std::make_unique<c_clicker>();
7 changes: 2 additions & 5 deletions clicker/config.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,19 +37,16 @@ class c_config
float f_left_cps { rng::random_real<float>( 9.5f, 12.5f ) };
float f_right_cps { rng::random_real<float>( 9.5f, 12.5f ) };

bool b_enable_blockhit { false };
int i_blockhit_chance { 5 };

bool b_enable_blatant { false };

int i_hide_window_key { 0 };

bool b_enable_advanced_options { false };

bool b_enable_persistence { false };
float f_persistence_value { rng::random_real<float>( 0.5f, 2.5f ) };
float f_persistence_value { rng::random_real<float>( 1.f, 5.f ) };

float f_persistence_update_rate { 2000.f };
float f_persistence_update_rate { 3000.f };
float f_default_timer_randomization { 5.f };

int i_cps_spike_chance { 5 };
Expand Down
19 changes: 14 additions & 5 deletions clicker/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,24 +6,33 @@
INT WINAPI WinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd )
{
std::atexit( [] {
// Dispose stuff
// Dispose
vars::b_is_running = false;
} );

// Set random seed
std::srand( (std::uint32_t) std::time( NULL ) );

std::thread(&c_clicker::initialize, c_clicker()).detach();
std::thread(&c_clicker::update, c_clicker()).detach();
// Initialize threads
std::thread(&c_clicker::thread, g_clicker.get()).detach();
std::thread(&c_clicker::update_cps, g_clicker.get()).detach();
std::thread(&c_clicker::update_variables, g_clicker.get()).detach();

// TODO: Custom config folder
config.run( "clicker" );

// Setup menu
log_debug( "Waiting for program end." );
if ( !g_menu->init( 600, 350 ) )
if ( !g_menu->setup() )
{
log_err( "Failed to create DX9 device!" );
log_err( "Failed to setup menu!" );
g_menu->destroy();

return EXIT_FAILURE;
}

// Menu renderer loop
g_menu->render();

return EXIT_SUCCESS;
}
Loading

0 comments on commit b87fb52

Please sign in to comment.