reaper
-
Автор темы
- #1
Реализация:
Если вам нужны смещения NetVar, обратитесь к потоку Structs,Offsets смещению или перечислите таблицы данных ClientClass.
Код:
Vector AimPunch = *(Vector*)((DWORD)pLocal + m_Local + m_aimPunchAngle);
По умолчанию это «2», но это может различаться на серверах сообщества, если у вас есть сомнения, обратитесь к значению Convar weapon_recoil_scale.
Код:
AimPunch *= 2.f;
Internal:
При использовании этого метода во время съемки
Код:
// Adjust viewangles for full recoil compensation.
UserCmd->ViewAngles -= *(Vector*)((DWORD)pLocal + m_Local + m_aimPunchAngle) * 2.f;
return false;
Код:
Vector OldAimPunch = Vector(0, 0, 0);
bool __stdcall CreateMove_NoRecoil(float SampleTime, CUserCmd* UserCmd) {
// Get LocalPlayer so we can read NetVars from it.
CBaseEntity* pLocal = g_EntityList->GetClientEntity(g_Engine->GetLocalPlayer());
if (!pLocal)
return false;
// Only compensate when firing.
if (UserCmd->Buttons & IN_ATTACK) {
// Get the current aim punch angles and multiply the recoil scale.
Vector AimPunch = *(Vector*)((DWORD)pLocal + m_Local + m_aimPunchAngle) * 2.f;
// Set compensated view angles.
UserCmd->ViewAngles += (OldAimPunch - AimPunch);
// Save old aim punch for next tick.
OldAimPunch = AimPunch;
return true;
} else {
// Reset when not firing.
OldAimPunch.X = OldAimPunch.Y = OldAimPunch.Z = 0;
}
External:
Код:
Vector OldAimPunch;
void RCS() {
bool bInAttack = (Game.ReadMemory<int>(hClient + m_dwForceAttack) == 5);
if (!bInAttack) {
OldAimPunch.X = OldAimPunch.Y = OldAimPunch.Z = 0;
continue;
}
Vector AimPunch = Game.ReadMemory<Vector>(dwLocalPlayer + m_Local + m_aimPunchAngle) * 2.f;
Vector CurrentViewAngles = Game.ReadMemory<Vector>(dwClientState + m_dwViewAngles);
Vector NewViewAngles = ((CurrentViewAngles + OldAimPunch) - AimPunch);
OldAimPunch = AimPunch;
Game.WriteMemory<Vector>(dwClientState + m_dwViewAngles, NewViewAngles);[/FONT]
}