bool __stdcall sdk::hooks::create_move::create_move(float sampletime, c_usercmd* cmd )
{
sdk::hooks::create_move::ofunc(sampletime, cmd);
if (!cmd || !cmd->command_number)
return true;
g::local = static_cast<player_t*>(interfaces::ent_list->get_client_entity(interfaces::engine->get_local_player()));
g::cmd = cmd;
interfaces::engine->get_screen_size(g::width, g::height);
prediction::initialize();
prediction::start(cmd);
{
// aim, trigger, backtrack work fine
}
prediction::stop();
// function
features::movement::jump_bug(cmd);
return false;
}
void features::movement::jump_bug(c_usercmd* cmd)
{
// setup cmd idk i tested that on another source and it work fine
if (!(prediction::data.flags & fl_onground) && g::local->flags() & fl_onground)
{
cmd->buttons |= in_duck;
cmd->buttons &= ~in_jump;
}
}
void prediction::updatepacket()
{
if (!g::local || !g::local->is_alive())
{
return;
}
if (interfaces::client_state->delta_tick > 0)
{
interfaces::prediction->update(
interfaces::client_state->delta_tick,
interfaces::client_state->delta_tick > 0,
interfaces::client_state->last_command_ack,
interfaces::client_state->last_outgoing_command + interfaces::client_state->choked_commands
);
}
}
void prediction::initialize()
{
if (!data.prediction_player)
{
data.prediction_player = [I]reinterpret_cast<player_t**[/I]>(find_pattern("client.dll", "89 35 ? ? ? ? F3 0F 10 48") + 0x2);
}
if (!data.prediction_random_seed)
{
data.prediction_random_seed = [I]reinterpret_cast<uint32_t*[/I]>(find_pattern("client.dll", "A3 ? ? ? ? 66 0F 6E 86") + 0x1);
}
if (!data.md5_pseudo_random)
{
data.md5_pseudo_random = reinterpret_cast<md5_pseudo_random_fn>(find_pattern("client.dll", "55 8B EC 83 E4 F8 83 EC 70 6A"));
}
data.in_prediction = interfaces::prediction->in_prediction;
data.first_time_predicted = interfaces::prediction->is_first_time_predicted;
data.flags = g::local->flags();
data.velocity = g::local->velocity();
data.origin = g::local->abs_origin();
data.movetype = g::local->move_type();
data.curtime = interfaces::globals->cur_time;
data.frametime = interfaces::globals->frame_time;
updatepacket();
data.in_prediction = true;
data.first_time_predicted = false;
}
#pragma once
#include "../../../sdk/sdk.hpp"
#define TICK_INTERVAL ( interfaces::globals->interval_per_tick )
#define TIME_TO_TICKS( t ) ( (int)( 0.5f + (float)( t ) / TICK_INTERVAL ) )
#define TICKS_TO_TIME( t ) ( TICK_INTERVAL * (float)( t ) )
#define ROUND_TO_TICKS( t ) ( TICK_INTERVAL * time_to_ticks( t ) )
using md5_pseudo_random_fn = uint32_t(__thiscall*)(uint32_t);
namespace prediction
{
void initialize();
void restore_ent_to_predicted_frame(int predicted_frame);
void start(c_usercmd* cmd);
void stop();
void updatepacket();
struct prediction_data
{
int flags;
int movetype;
vec3_t velocity;
vec3_t origin;
float curtime = 0.0f;
float frametime = 0.0f;
bool in_prediction = false;
bool first_time_predicted = false;
md5_pseudo_random_fn md5_pseudo_random;
uint32_t* prediction_random_seed;
player_t** prediction_player;
player_move_data move_data;
};
inline bool using_prediction;
inline prediction_data data;
}
вызывай свой jump_bug в предикшенеcreate move:bool __stdcall sdk::hooks::create_move::create_move(float sampletime, c_usercmd* cmd ) { sdk::hooks::create_move::ofunc(sampletime, cmd); if (!cmd || !cmd->command_number) return true; g::local = static_cast<player_t*>(interfaces::ent_list->get_client_entity(interfaces::engine->get_local_player())); g::cmd = cmd; interfaces::engine->get_screen_size(g::width, g::height); prediction::initialize(); prediction::start(cmd); { // aim, trigger, backtrack work fine } prediction::stop(); // function features::movement::jump_bug(cmd); return false; }
function jumpbug:void features::movement::jump_bug(c_usercmd* cmd) { // setup cmd idk i tested that on another source and it work fine if (!(prediction::data.flags & fl_onground) && g::local->flags() & fl_onground) { cmd->buttons |= in_duck; cmd->buttons &= ~in_jump; } }
engine prediction for get prediction flags:void prediction::updatepacket() { if (!g::local || !g::local->is_alive()) { return; } if (interfaces::client_state->delta_tick > 0) { interfaces::prediction->update( interfaces::client_state->delta_tick, interfaces::client_state->delta_tick > 0, interfaces::client_state->last_command_ack, interfaces::client_state->last_outgoing_command + interfaces::client_state->choked_commands ); } } void prediction::initialize() { if (!data.prediction_player) { data.prediction_player = [I]reinterpret_cast<player_t**[/I]>(find_pattern("client.dll", "89 35 ? ? ? ? F3 0F 10 48") + 0x2); } if (!data.prediction_random_seed) { data.prediction_random_seed = [I]reinterpret_cast<uint32_t*[/I]>(find_pattern("client.dll", "A3 ? ? ? ? 66 0F 6E 86") + 0x1); } if (!data.md5_pseudo_random) { data.md5_pseudo_random = reinterpret_cast<md5_pseudo_random_fn>(find_pattern("client.dll", "55 8B EC 83 E4 F8 83 EC 70 6A")); } data.in_prediction = interfaces::prediction->in_prediction; data.first_time_predicted = interfaces::prediction->is_first_time_predicted; data.flags = g::local->flags(); data.velocity = g::local->velocity(); data.origin = g::local->abs_origin(); data.movetype = g::local->move_type(); data.curtime = interfaces::globals->cur_time; data.frametime = interfaces::globals->frame_time; updatepacket(); data.in_prediction = true; data.first_time_predicted = false; }
engine prediction .hpp:#pragma once #include "../../../sdk/sdk.hpp" #define TICK_INTERVAL ( interfaces::globals->interval_per_tick ) #define TIME_TO_TICKS( t ) ( (int)( 0.5f + (float)( t ) / TICK_INTERVAL ) ) #define TICKS_TO_TIME( t ) ( TICK_INTERVAL * (float)( t ) ) #define ROUND_TO_TICKS( t ) ( TICK_INTERVAL * time_to_ticks( t ) ) using md5_pseudo_random_fn = uint32_t(__thiscall*)(uint32_t); namespace prediction { void initialize(); void restore_ent_to_predicted_frame(int predicted_frame); void start(c_usercmd* cmd); void stop(); void updatepacket(); struct prediction_data { int flags; int movetype; vec3_t velocity; vec3_t origin; float curtime = 0.0f; float frametime = 0.0f; bool in_prediction = false; bool first_time_predicted = false; md5_pseudo_random_fn md5_pseudo_random; uint32_t* prediction_random_seed; player_t** prediction_player; player_move_data move_data; }; inline bool using_prediction; inline prediction_data data; }
g_local_player->prediction( ).start( &cmd );
{
g_move->process_jump_bug( cmd );
}
g_local_player->prediction( ).finish( );
вот не задача это я тоже пробывал делать не помогло.вызывай свой jump_bug в предикшене
like this ->
C++:g_local_player->prediction( ).start( &cmd ); { g_move->process_jump_bug( cmd ); } g_local_player->prediction( ).finish( );
невозможновот не задача это я тоже пробывал делать не помогло.
Пожалуйста, зарегистрируйтесь или авторизуйтесь, чтобы увидеть содержимое.
ну все пиздецСкрытое содержимое
кинь дс свойда пиздец он с локальным игроком не хочет нихуя делать... почему при переходе из аира на землю становиться вообще вот так
Посмотреть вложение 272649
Пожалуйста, зарегистрируйтесь или авторизуйтесь, чтобы увидеть содержимое.
+Скрытое содержимое
Проект предоставляет различный материал, относящийся к сфере киберспорта, программирования, ПО для игр, а также позволяет его участникам общаться на многие другие темы. Почта для жалоб: admin@yougame.biz