Начинающий
-
Автор темы
- #1
пытаюсь сделать еджбаг для ксго мода на ксс (дада не удивляйтесь), нашёл сигу 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);
}
};