Вопрос G_LocalPlayer smart prediction

Тьомчик
Пользователь
Статус
Оффлайн
Регистрация
30 Июн 2020
Сообщения
701
Реакции[?]
149
Поинты[?]
57K
C++:
#include "Misc/EHandle.hpp"

class C_LocalPlayer
{
    friend bool operator==(const C_LocalPlayer& lhs, void* rhs);
public:
    C_LocalPlayer() : m_local(nullptr) {}

    operator bool() const { return *m_local != nullptr; }
    operator C_BasePlayer* () const { return *m_local; }

    C_BasePlayer* operator->() { return *m_local; }

private:
    C_BasePlayer** m_local;
};

inline C_LocalPlayer g_LocalPlayer;
Screenshot_8.png
 
std::X$$V::Z::_Func_impl_no_alloc
Пользователь
Статус
Оффлайн
Регистрация
30 Мар 2019
Сообщения
389
Реакции[?]
103
Поинты[?]
1K
У тебя g_LocalPlayer имеет тип C_LocalPlayer. Покажи, пожалуйста этот класс
 
std::X$$V::Z::_Func_impl_no_alloc
Пользователь
Статус
Оффлайн
Регистрация
30 Мар 2019
Сообщения
389
Реакции[?]
103
Поинты[?]
1K
Скриншот скинул же
А, прости затупил. Значит проблема с интерфейсом предикта, т.к класс вроде в порядке. Посмотри не переписывается ли C_BasePlayer в предикте? И попробуй &g_LocalPlayer
 
sapphire dev
Пользователь
Статус
Оффлайн
Регистрация
15 Мар 2018
Сообщения
190
Реакции[?]
124
Поинты[?]
36K
C++:
#pragma once
//#include "../../sdk/math/vector3d.hpp"
//#include "../../sdk/classes/c_usercmd.hpp"

#include "../Math/QAngle.hpp"
#include "../Misc/CUserCmd.hpp"


#define CONCAT_IMPL( x, y ) x##y
#define MACRO_CONCAT( x, y ) CONCAT_IMPL( x, y )
#define PAD( size ) uint8_t MACRO_CONCAT( _pad, __COUNTER__ )[ size ];

enum ESoundLevel;
class PlayerMoveHelper {
public:
    bool    first_run_of_iunctions : 1;
    bool    game_code_moved_player : 1;
    int    player_handle;
    int    impulse_command;
    Vector    view_angles;
    Vector    abs_view_angles;
    int    buttons;
    int    old_buttons;
    float    forward_move;
    float    side_move;
    float    up_move;
    float    max_speed;
    float    client_max_speed;
    Vector    velocity;
    Vector    angles;
    Vector    old_angles;
    float    out_step_height;
    Vector    wish_velocity;
    Vector    jump_velocity;
    Vector    constraint_center;
    float    constraint_radius;
    float    constraint_width;
    float    constraint_speed_factor;
    float    u0[5];
    Vector    AbsOrigin;
    virtual    char const* GetName(void* hEntity) const = 0;
    virtual void                SetHost(C_BasePlayer* pHost) = 0;
    virtual void                ResetTouchList() = 0;
    virtual bool                AddToTouched(const trace_t& trace, const Vector& vecImpactVelocity) = 0;
    virtual void                ProcessImpacts() = 0;
    virtual void                Con_NPrintf(int nIndex, char const* fmt, ...) = 0;
    virtual void                StartSound(const Vector& vecOrigin, int iChannel, char const* szSample, float flVolume, ESoundLevel soundlevel, int fFlags, int iPitch) = 0;
    virtual void                StartSound(const Vector& vecOrigin, const char* soundname) = 0;
    virtual void                PlaybackEventFull(int fFlags, int nClientIndex, unsigned short uEventIndex, float flDelay, Vector& vecOrigin, Vector& vecAngles, float flParam1, float flParam2, int iParam1, int iParam2, int bParam1, int bParam2) = 0;
    virtual bool                PlayerFallingDamage(void) = 0;
    virtual void                PlayerSetAnimation(int playerAnimation) = 0;
};

class PlayerMoveData {
public:
    bool    first_run_of_instructions : 1;
    bool    game_code_moved_player : 1;
    int     player_handle;
    int     impulse_command;
    Vector    view_angles;
    Vector    abs_view_angles;
    int     buttons;
    int     old_buttons;
    float   fw_move;
    float   sd_move;
    float   up_move;
    float   max_speed;
    float   client_max_speed;
    Vector    velocity;
    Vector    angles;
    Vector    old_angles;
    float   step_height;
    Vector    wish_velocity;
    Vector    jump_velocity;
    Vector    constraint_center;
    float   constraint_radius;
    float   constraint_width;
    float   constraint_speed_factor;
    float   u0[5];
    Vector    AbsOrigin;
};

class VirtualGameMovement {

public:
    virtual                ~VirtualGameMovement(void) {}
    virtual void            ProcessMovement(C_BasePlayer* player, PlayerMoveData* move) = 0;
    virtual void            reset(void) = 0;
    virtual void            start_track_prediction_errors(C_BasePlayer* player) = 0;
    virtual void            finish_track_prediction_errors(C_BasePlayer* player) = 0;
    virtual void            diff_print(char const* fmt, ...) = 0;
    virtual Vector const& get_player_mins(bool ducked) const = 0;
    virtual Vector const& get_player_maxs(bool ducked) const = 0;
    virtual Vector const& get_player_view_offset(bool ducked) const = 0;
    virtual bool            IsMoving_player_stuck(void) const = 0;
    virtual C_BasePlayer* get_moving_player(void) const = 0;
    virtual void            unblock_posher(C_BasePlayer* player, C_BasePlayer* pusher) = 0;
    virtual void            setup_movement_bounds(PlayerMoveData* move) = 0;
};

class IPlayerGameMovement : public VirtualGameMovement {
public:
    virtual ~IPlayerGameMovement(void) { }
};

class PlayerPrediction {
public:
    PAD(0x4);
    int32_t m_last_ground;                // 0x0004
    bool    m_in_prediction;            // 0x0008
    bool    m_first_time_predicted;        // 0x0009
    bool    m_engine_paused;            // 0x000A
    bool    m_old_cl_predict_value;        // 0x000B
    int32_t m_previous_startframe;        // 0x000C
    int32_t m_commands_predicted;        // 0x0010
    PAD(0x38);                        // 0x0014
    float   m_backup_realtime;            // 0x004C
    PAD(0xC);                            // 0x0050
    float   m_backup_curtime;            // 0x005C
    PAD(0xC);                            // 0x0060
    float   m_backup_interval;            // 0x006C

    __forceinline void Update(int startframe, bool validframe, int incoming_acknowledged, int outgoing_command) {
        return Utils::CallVirtual< void(__thiscall*)(void*, int, bool, int, int) >(this, 3)(this, startframe, validframe, incoming_acknowledged, outgoing_command);
    }

    __forceinline void SetLocalViewAngles(const Vector& ang) {
        return Utils::CallVirtual< void(__thiscall*)(decltype(this), const Vector&) >(this, 13)(this, ang);
    }

    void CheckMovingGround(C_BasePlayer* pEntity, double dbFrametime) {
         Utils::CallVFunc<void>(this, 18, pEntity, dbFrametime);
    }

    __forceinline void SetupMove(C_BasePlayer* player, CUserCmd* cmd, PlayerMoveHelper* helper, PlayerMoveData* data) {
        return Utils::CallVirtual< void(__thiscall*)(decltype(this), C_BasePlayer*, CUserCmd*, PlayerMoveHelper*, PlayerMoveData*) >(this, 20)(this, player, cmd, helper, data);
    }

    __forceinline void FinishMove(C_BasePlayer* player, CUserCmd* cmd, PlayerMoveData* data) {
        return Utils::CallVirtual< void(__thiscall*)(decltype(this), C_BasePlayer*, CUserCmd*, PlayerMoveData*) >(this, 21)(this, player, cmd, data);
    }
};
1632310137279.png
У меня работает
 
std::X$$V::Z::_Func_impl_no_alloc
Пользователь
Статус
Оффлайн
Регистрация
30 Мар 2019
Сообщения
389
Реакции[?]
103
Поинты[?]
1K
BE GODLESS
Забаненный
Статус
Оффлайн
Регистрация
2 Сен 2021
Сообщения
72
Реакции[?]
27
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
C++:
#include "Misc/EHandle.hpp"

class C_LocalPlayer
{
    friend bool operator==(const C_LocalPlayer& lhs, void* rhs);
public:
    C_LocalPlayer() : m_local(nullptr) {}

    operator bool() const { return *m_local != nullptr; }
    operator C_BasePlayer* () const { return *m_local; }

    C_BasePlayer* operator->() { return *m_local; }

private:
    C_BasePlayer** m_local;
};

inline C_LocalPlayer g_LocalPlayer;
Посмотреть вложение 172851
(C_BasePlayer*)g_LocalPlayer...
Перестаньте тупо пастить, если вы даже не можете элементарное пофиксить
 
Похожие темы
Ответы
9
Просмотры
1K
Сверху Снизу