Advertisement
Guest User

Untitled

a guest
Jan 17th, 2019
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.85 KB | None | 0 0
  1. Я нашёл три метода десинка, решил слить самый первый из них.
  2.  
  3. Суть этого метода в том, что fake = netwoked, а real = abs_rotation.
  4. networked - угол, который устанавливается в тот тик, когда происходит отправка пакетов.
  5. abs_rotation - переменная из класса CBaseAnimstate, которая во многих sdk называется GoalFeetYaw.
  6.  
  7. Десинк АА ограничены максимальной дельтой, поэтому нам нужно её вычислить. В этом нам поможет код из SetupVelocity, уже опубликованный месяц назад.
  8.  
  9.  
  10. float GetMaxFakeDelta(SDK::CBaseEntity* entity)
  11. {
  12. auto animstate = entity->GetAnimState();
  13. float speedfactor = Clamp<float>(animstate->m_flSpeedFraction(), 0.0f, 1.0f);
  14. float unk1 = ((animstate->m_flLandingRatio() * -0.3f) - 0.2f) * speedfactor;
  15. float unk2 = unk1 + 1.0f;
  16. if (animstate->m_fDuckAmount > 0.0f) {
  17. float max_velocity = Clamp<float>(animstate->m_flMaxWeaponVelocity(), 0.0f, 1.0f);
  18. float duck_speed = animstate->m_fDuckAmount * max_velocity;
  19. unk2 += (duck_speed * (0.5f - unk2));
  20. }
  21.  
  22. return animstate->yaw_desync_adjustment() * unk2;
  23. }
  24. Вот некоторые переменные из animstate, которые здесь необычно названы:
  25.  
  26.  
  27. float& m_flSpeedFraction() {
  28. return *(float*)((uintptr_t)this + 0xF8);
  29. }
  30.  
  31. float& m_flMaxWeaponVelocity() { // ( 2.9411764 / flMaxPlayerSpeed ) * velocity
  32. return *(float*)((uintptr_t)this + 0xFC);
  33. }
  34.  
  35. float& yaw_desync_adjustment2() {
  36. return *(float*)((uintptr_t)this + 0x330);
  37. }
  38.  
  39. float& yaw_desync_adjustment() {
  40. return *(float*)((uintptr_t)this + 0x334);
  41. }
  42.  
  43. float& m_flLandingRatio() {
  44. return *(float*)((uintptr_t)this + 0x11C);
  45. }
  46.  
  47. float& m_flAbsRotation() {
  48. return *(float*)((uintptr_t)this + 0x80);
  49. }
  50.  
  51.  
  52. Если вы выведете на экран значения максимальной дельты, то увидите, что во время движения на максимальной скорости она 29, а когда игрок стоит, она 58.
  53.  
  54. По-скольку данный метод основан на abs_rotation, но угол не должен меняться больше, чем на максимальную дельту, есть 2 угла, от которых нельзя далеко отходить: последний угол перед отправкой пакетов и abs_rotation.
  55.  
  56. Начинаем писать десинк уже в функции АА:
  57.  
  58.  
  59. auto animstate = local_player->GetAnimState();
  60. float feet_yaw = animstate->m_flAbsRotation();
  61. static bool b_switch = false;
  62. if (GLOBAL::should_send_packet)
  63. b_switch = !b_switch;
  64. b_switch здесь нужен для джиттера по фейку.
  65.  
  66. Объявляем максимальную дельту десинка и дельту между предыдущим углом и реалом
  67.  
  68.  
  69. float feet_delta = MATH::NormalizeYaw(GLOBAL::real_angles.y - feet_yaw);
  70. float fake_yaw;
  71. float desync_delta = UTILS::GetMaxFakeDelta(local_player);
  72. К скрытому углу (тому, который отсылается перед отправкой пакетов) мы будем прибавлять 2 значения поочерёдно в разные стороны для джиттера.
  73.  
  74.  
  75. float delta = UTILS::Clamp<float>(MATH::NormalizeYaw(desync_delta - feet_delta), -desync_delta, desync_delta);
  76. float negative_delta = UTILS::Clamp<float>(MATH::NormalizeYaw(desync_delta + feet_delta), -desync_delta, desync_delta);
  77. Переменная, показывающая, какая из дельт больше
  78. bool c_switch = fabs(negative_delta) > fabs(delta);
  79. Если дельта между скрытым углом и реалом слишком большая, мы рискуем направить фейк в реал и получить тап от челика без ресольвера.
  80.  
  81. Направляем фейк по-дальше от реала:
  82.  
  83. if (fabs(feet_delta) > 20.f)
  84. b_switch = !c_switch;
  85. И теперь финал: делаем сам джиттер:
  86.  
  87.  
  88. if (b_switch)
  89. fake_yaw = GLOBAL::real_angles.y - negative_delta;
  90. else
  91. fake_yaw = GLOBAL::real_angles.y + delta;
  92. Ну это, думаю, и так понятно:
  93.  
  94. return GLOBAL::should_send_packet ? fake_yaw : DoRealYaw();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement