Appearance
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