-
Автор темы
- #1
Есть сурс симпла, нужно обновить, чтобы не крашило, но как? Да, я чайник.
Пожалуйста, авторизуйтесь для просмотра ссылки.
#pragma once
#include "../Misc/CUserCmd.hpp"
#define MULTIPLAYER_BACKUP 150
class bf_write;
class bf_read;
class CInput
{
public:
char pad0[0xC];
bool m_fTrackIRAvailable;
bool m_fMouseInitialized;
bool m_fMouseActive;
char pad1[0x9A];
bool m_fCameraInThirdPerson;
char pad2[0x2];
Vector m_vecCameraOffset;
char pad3[0x38];
CUserCmd* m_pCommands;
CVerifiedUserCmd* m_pVerifiedCommands;
inline CUserCmd* GetUserCmd(int sequence_number);
inline CUserCmd* GetUserCmd(int nSlot, int sequence_number);
inline CVerifiedUserCmd* GetVerifiedCmd(int sequence_number);
};
CUserCmd* CInput::GetUserCmd(int sequence_number)
{
using OriginalFn = CUserCmd * (__thiscall*)(void*, int, int);
return CallVFunction<OriginalFn>(this, 8)(this, 0, sequence_number);
}
CUserCmd* CInput::GetUserCmd(int nSlot, int sequence_number)
{
typedef CUserCmd* (__thiscall* GetUserCmd_t)(void*, int, int);
return CallVFunction<GetUserCmd_t>(this, 8)(this, nSlot, sequence_number);
}
CVerifiedUserCmd* CInput::GetVerifiedCmd(int sequence_number)
{
auto verifiedCommands = *(CVerifiedUserCmd**)(reinterpret_cast<uint32_t>(this) + 0xF4);
return &verifiedCommands[sequence_number % MULTIPLAYER_BACKUP];
}
Помогло, но теперь крашает при выборе команды.CInput обнови
C++:#pragma once #include "../Misc/CUserCmd.hpp" #define MULTIPLAYER_BACKUP 150 class bf_write; class bf_read; class CInput { public: char pad0[0xC]; bool m_fTrackIRAvailable; bool m_fMouseInitialized; bool m_fMouseActive; char pad1[0x9A]; bool m_fCameraInThirdPerson; char pad2[0x2]; Vector m_vecCameraOffset; char pad3[0x38]; CUserCmd* m_pCommands; CVerifiedUserCmd* m_pVerifiedCommands; inline CUserCmd* GetUserCmd(int sequence_number); inline CUserCmd* GetUserCmd(int nSlot, int sequence_number); inline CVerifiedUserCmd* GetVerifiedCmd(int sequence_number); }; CUserCmd* CInput::GetUserCmd(int sequence_number) { using OriginalFn = CUserCmd * (__thiscall*)(void*, int, int); return CallVFunction<OriginalFn>(this, 8)(this, 0, sequence_number); } CUserCmd* CInput::GetUserCmd(int nSlot, int sequence_number) { typedef CUserCmd* (__thiscall* GetUserCmd_t)(void*, int, int); return CallVFunction<GetUserCmd_t>(this, 8)(this, nSlot, sequence_number); } CVerifiedUserCmd* CInput::GetVerifiedCmd(int sequence_number) { auto verifiedCommands = *(CVerifiedUserCmd**)(reinterpret_cast<uint32_t>(this) + 0xF4); return &verifiedCommands[sequence_number % MULTIPLAYER_BACKUP]; }
Попробуй обновить класс випон даты и получать випон дату не из интерфейса, а через call virtualПомогло, но теперь крашает при выборе команды.
По дебагу выдало это:
Проект предоставляет различный материал, относящийся к сфере киберспорта, программирования, ПО для игр, а также позволяет его участникам общаться на многие другие темы. Почта для жалоб: admin@yougame.biz