Вопрос Restoreentitytopredictedframe ломает велосити

Начинающий
Статус
Оффлайн
Регистрация
30 Июл 2019
Сообщения
18
Реакции[?]
2
Поинты[?]
1K
пытаюсь сделать еджбаг для ксго мода на ксс (дада не удивляйтесь), нашёл сигу restoreentitytopredictedframe, и она вроде работает, но при попытке получить вело с рестором получаю нолики, лишь с промежутком в наверное секунду-полторы оно даёт предиктед велосити
Пожалуйста, авторизуйтесь для просмотра ссылки.
, без рестора велосити получается корректно
в чём может быть проблема
сам функ с предиктом

C++:
void Misc::EdgeBug(UserCmd* cmd)
{
    if (edgebugging) return;

        restoreEntityToPredictedFrame(client_prediction->Split->nCommandsPredicted - 1 );
        for (int i = 0; i < 64; i++) {
          
            c_engine_prediction::Get().start(cmd, globals::localPlayer);
            if (i == 63)
            {
            
            Vector3 velocity = globals::localPlayer->m_vecVelocity;

            std::stringstream ss;
            ss << "echo Current Velocity: X=" << velocity.x
                << " Y=" << velocity.y
                << " Z=" << velocity.z;

            std::string command = ss.str();
            engine->ClientCmd(command.c_str());
            }
            c_engine_prediction::Get().end(cmd, globals::localPlayer);
        }
}

ресторчик (вряд ли полезно but just in case):
inline void(__stdcall* restoreEntityToPredictedFrame)(int);
restoreEntityToPredictedFrame = reinterpret_cast<decltype(restoreEntityToPredictedFrame)>(util::PatternScan("client.dll", "55 8B EC E8 ? ? ? ? 85 C0 74 5D 8B 0D ? ? ? ? 8B 01 FF 50 44 85 C0 74 4E 8B 0D ? ? ? ? 53 56 8B 01 FF 50 04 8B D8 33 F6 85 DB 7E 37 57 8B 0D ? ? ? ? 56 8B 01 FF 10 8B F8 85 FF 74 1F 8B CF E8 ? ? ? ? 84 C0 74 14 8B 17 8B CF 6A 00 FF 75 08 68 ? ? ? ? FF 92 ? ? ? ? 46 3B F3 7C CB 5F 5E 5B 5D C2 04 00 "));
предикт класс и сплит:
class v_client_prediction {
public:
    std::byte        pad0[0x4];                        // 0x0000
    std::uintptr_t    hLastGround;                    // 0x0004
    bool            bInPrediction;                    // 0x0008
    bool            bIsFirstTimePredicted;            // 0x0009
    bool            bEnginePaused;                    // 0x000A
    bool            bOldCLPredictValue;                // 0x000B
    int                iPreviousStartFrame;            // 0x000C
    int                nIncomingPacketNumber;            // 0x0010
    float            flLastServerWorldTimeStamp;        // 0x0014

    struct Split_t
    {
        bool        bIsFirstTimePredicted;            // 0x0018
        std::byte    pad0[0x3];                        // 0x0019
        int            nCommandsPredicted;                // 0x001C
        int            nServerCommandsAcknowledged;    // 0x0020
        int            iPreviousAckHadErrors;            // 0x0024
        float        flIdealPitch;                    // 0x0028
        int            iLastCommandAcknowledged;        // 0x002C
        bool        bPreviousAckErrorTriggersFullLatchReset; // 0x0030
        bool        bPerformedTickShift;            // 0x0045
    };
    Split_t            Split[1];                        // 0x0018
    void setup_move(CEntity* player, UserCmd* cmd, void* move_helper, c_move_data* move_data) {
        typedef void(__thiscall* o_fn)(void*, CEntity*, UserCmd*, void*, c_move_data*);
        util::get_vfunc<o_fn>(18, this)(this, player, cmd, move_helper, move_data);
    }

    void finish_move(CEntity* player, UserCmd* cmd, c_move_data* move_data) {
        typedef void(__thiscall* o_fn)(void*, CEntity*, UserCmd*, c_move_data*);
        util::get_vfunc<o_fn>(19, this)(this, player, cmd, move_data);
    }
};
 
Сверху Снизу