Вопрос Cmd setup

Тьомчик
Участник
Статус
Оффлайн
Регистрация
30 Июн 2020
Сообщения
731
Реакции[?]
150
Поинты[?]
58K
крч история такая измененяя cmd например jump он на локалке работает, а вот на сервере нет, шарю что ксго это мертвая тема, но я делаю для себя и столкнулся с такой проблемой
 
Пользователь
Статус
Оффлайн
Регистрация
12 Фев 2024
Сообщения
64
Реакции[?]
31
Поинты[?]
36K
крч история такая измененяя cmd например jump он на локалке работает, а вот на сервере нет, шарю что ксго это мертвая тема, но я делаю для себя и столкнулся с такой проблемой
1710612256037.png
 
Тьомчик
Участник
Статус
Оффлайн
Регистрация
30 Июн 2020
Сообщения
731
Реакции[?]
150
Поинты[?]
58K
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;
}
пробывал вызывать флаги перед предиктом в креатив муве та же самая фигня. пробывал чекать мувтайп там все в норме. возможно что-то в предикте
 
Последнее редактирование:
Пользователь
Статус
Оффлайн
Регистрация
12 Фев 2024
Сообщения
64
Реакции[?]
31
Поинты[?]
36K
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;
}
вызывай свой jump_bug в предикшене

like this ->

C++:
g_local_player->prediction( ).start( &cmd );

{
    g_move->process_jump_bug( cmd );
}

g_local_player->prediction( ).finish( );
 
Тьомчик
Участник
Статус
Оффлайн
Регистрация
30 Июн 2020
Сообщения
731
Реакции[?]
150
Поинты[?]
58K
Пользователь
Статус
Оффлайн
Регистрация
12 Фев 2024
Сообщения
64
Реакции[?]
31
Поинты[?]
36K
Тьомчик
Участник
Статус
Оффлайн
Регистрация
30 Июн 2020
Сообщения
731
Реакции[?]
150
Поинты[?]
58K
Пользователь
Статус
Оффлайн
Регистрация
12 Фев 2024
Сообщения
64
Реакции[?]
31
Поинты[?]
36K
Сверху Снизу