Skip to content

Evade

Using Evade SDK

WARNING

Before using the SDK you need to instantiate it using sdk_init::evade() - example provided on this page

Getting Evade State

INFO

This function returns true if Evade is currently evading

bool sdk::evade->is_evading()

Example
cpp
void __fastcall game_update()
{
	g_sdk->log_console( "Evading: %d", sdk::evade->is_evading() );
}
void __fastcall game_update()
{
	g_sdk->log_console( "Evading: %d", sdk::evade->is_evading() );
}

Cast Safely

INFO

This function returns true if the spell cast will not interfere with evading

bool sdk::evade->can_spell( int spell_slot, float cast_time )

Dash Safely

INFO

This function returns true if the dash will not interfere with evading

bool sdk::evade->can_dash( const math::vector3& pos, float dash_speed, float cast_time = 0.f )

Knowing if Position is Safe

INFO

This function returns true if the world position is outside a spell

bool sdk::evade->is_position_safe( const math::vector3& pos )

Knowing if a Spell is dangerous

INFO

This function returns true if the Spell is dangerous
This requires a sm_sdk::spell* from Spell Manager

bool sdk::evade->is_dangerous_spell( sm_sdk::spell* spell )

Example
cpp
sdk::spell_manager->iterate_spells( sm_sdk::spell_iteration::enemy, [ & ]( sm_sdk::spell* spell )
{
    g_sdk->log_console( "Spell is dangerous %d", sdk::evade->is_dangerous_spell( spell ) );
} );
sdk::spell_manager->iterate_spells( sm_sdk::spell_iteration::enemy, [ & ]( sm_sdk::spell* spell )
{
    g_sdk->log_console( "Spell is dangerous %d", sdk::evade->is_dangerous_spell( spell ) );
} );

Knowing if the Player is inside a Dangerous Spell

INFO

This function returns true if the Player is in a Dangerous Spell

bool sdk::evade->is_player_inside_dangerous_spell()

Example
cpp
void __fastcall game_update()
{
	g_sdk->log_console( "Player is inside dangerous spell: %d", sdk::evade->is_player_inside_dangerous_spell() );
}
void __fastcall game_update()
{
	g_sdk->log_console( "Player is inside dangerous spell: %d", sdk::evade->is_player_inside_dangerous_spell() );
}

Getting Spell Intersection Time

INFO

This function returns the spell intersection time
This requires a sm_sdk::spell* from Spell Manager

WARNING

The function returns -1.f if the spell will never collide

float sdk::evade->get_spell_intersection_time( const math::vector3& start_pos, const math::vector3& end_pos, float speed, sm_sdk::spell* spell )

Example
cpp
const auto player = g_sdk->object_manager->get_local_player();
const auto player_speed = player->get_move_speed();
const auto player_pos = player->get_position();
const auto cursor_pos = g_sdk->hud_manager->get_cursor_position();

sdk::spell_manager->iterate_spells( sm_sdk::spell_iteration::enemy, [ & ]( sm_sdk::spell* spell )
{
    const auto intersection_time = sdk::evade->get_spell_intersection_time( player_pos, cursor_pos, player_speed, spell );

    g_sdk->log_console( "Spell will hit player in: %.2f", intersection_time );
} );
const auto player = g_sdk->object_manager->get_local_player();
const auto player_speed = player->get_move_speed();
const auto player_pos = player->get_position();
const auto cursor_pos = g_sdk->hud_manager->get_cursor_position();

sdk::spell_manager->iterate_spells( sm_sdk::spell_iteration::enemy, [ & ]( sm_sdk::spell* spell )
{
    const auto intersection_time = sdk::evade->get_spell_intersection_time( player_pos, cursor_pos, player_speed, spell );

    g_sdk->log_console( "Spell will hit player in: %.2f", intersection_time );
} );

Evade Event Registering

In order to register to an evade event, sdk::evade->register_callback must be called inside PluginLoad

Example:

cpp
bool before_move()
{
    g_sdk->log_console( "Evade is going to issue a move order" );

    return true;
}

extern "C" __declspec( dllexport ) bool PluginLoad( core_sdk* sdk, void** custom_sdk )
{
    g_sdk = sdk;
    
    if ( !sdk_init::evade() )
        return false;

    sdk::evade->register_callback( evade_sdk::before_move, reinterpret_cast< void* >( before_move ) );

    g_sdk->log_console( "[+] ExampleModule loaded!" );

    return true;
}
bool before_move()
{
    g_sdk->log_console( "Evade is going to issue a move order" );

    return true;
}

extern "C" __declspec( dllexport ) bool PluginLoad( core_sdk* sdk, void** custom_sdk )
{
    g_sdk = sdk;
    
    if ( !sdk_init::evade() )
        return false;

    sdk::evade->register_callback( evade_sdk::before_move, reinterpret_cast< void* >( before_move ) );

    g_sdk->log_console( "[+] ExampleModule loaded!" );

    return true;
}

Evade Event Unregistering

In order to unregister from an evade event, sdk::evade->unregister_callback must be called inside PluginUnload

cpp
extern "C" __declspec( dllexport ) void PluginUnload()
{
    sdk::evade->unregister_callback( evade_sdk::before_move, reinterpret_cast< void* >( before_move ) );

    g_sdk->log_console( "[-] ExampleModule unloaded!" );
}
extern "C" __declspec( dllexport ) void PluginUnload()
{
    sdk::evade->unregister_callback( evade_sdk::before_move, reinterpret_cast< void* >( before_move ) );

    g_sdk->log_console( "[-] ExampleModule unloaded!" );
}

Evade Events

cpp
enum event_type: uint8_t
{
	before_move = 0,
};
enum event_type: uint8_t
{
	before_move = 0,
};

INFO

The return value should be false if we want to block move