Advertisement
Guest User

Untitled

a guest
Oct 17th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.27 KB | None | 0 0
  1. auto cur = m_arrInfos.at(ent->GetIndex()).m_sRecords;
  2. if (cur.size() < 2)
  3. return;
  4.  
  5. if (IsEntityMoving(ent))
  6. ent->m_angm_angEyeAngles().y = ent->Getm_flLowerBodyYawTarget();
  7. else if (HasStaticRealAngle(cur))
  8. ent->m_angm_angEyeAngles().y = (cur.front().m_flm_flLowerBodyYawTarget);
  9. else if (HasStaticYawDifference(cur))
  10. ent->m_angm_angEyeAngles().y = (ent->Getm_angEyeAngles().y - (cur.front().m_angm_angEyeAngles.y - cur.front().m_flm_flLowerBodyYawTarget));
  11. else if (HasSteadyDifference(cur)) {
  12. float tickdif = (float)cur.front().tickcount - (float)cur.at(1).tickcount;
  13. float lbydif = GetDelta(cur.front().m_flm_flLowerBodyYawTarget, cur.at(1).m_flm_flLowerBodyYawTarget);
  14. float ntickdif = (float)G::UserCmd->tick_count - (float)cur.front().tickcount;
  15. ent->m_angm_angEyeAngles().y = ((lbydif / tickdif) * ntickdif);
  16. }
  17. else if (DeltaKeepsChanging(cur))
  18. ent->m_angm_angEyeAngles().y = (ent->Getm_angEyeAngles().y - GetDeltaByComparingTicks(cur));
  19. else if (LBYKeepsChanging(cur))
  20. ent->m_angm_angEyeAngles().y = (GetLBYByComparingTicks(cur));
  21. else
  22. ent->m_angm_angEyeAngles().y = (ent->Getm_angEyeAngles().y + 180);
  23. }
  24.  
  25.  
  26. bool& CResolver::LowerBodyYawChanged(CBaseEntity* ent) {
  27. return m_arrInfos.at(ent->GetIndex()).m_bLowerBodyYawChanged;
  28. }
  29.  
  30. void CResolver::StoreVars(CBaseEntity* ent) {
  31. if (m_arrInfos.at(ent->GetIndex()).m_sRecords.size() >= static_cast<size_t>(Config->Ragebot.ResolveTicks))
  32. m_arrInfos.at(ent->GetIndex()).m_sRecords.pop_back();
  33. m_arrInfos.at(ent->GetIndex()).m_sRecords.push_front(CTickRecord(ent));
  34. }
  35.  
  36. void CResolver::StoreVars(CBaseEntity* ent, QAngle ang, float lby, float simtime, float tick) {
  37. if (m_arrInfos.at(ent->GetIndex()).m_sRecords.size() >= static_cast<size_t>(Config->Ragebot.ResolveTicks))
  38. m_arrInfos.at(ent->GetIndex()).m_sRecords.pop_back();
  39. m_arrInfos.at(ent->GetIndex()).m_sRecords.push_front(CTickRecord(ent));
  40. }
  41.  
  42. bool& CResolver::BacktrackThisTick(CBaseEntity* ent) {
  43. return m_arrInfos.at(ent->GetIndex()).m_bBacktrackThisTick;
  44. }
  45.  
  46. bool CResolver::HasStaticRealAngle(const std::deque<CTickRecord>& l, float tolerance) {
  47. auto minmax = std::minmax_element(std::begin(l), std::end(l), [](const CTickRecord& t1, const CTickRecord& t2) { return t1.m_flm_flLowerBodyYawTarget < t2.m_flm_flLowerBodyYawTarget; });
  48. return (fabs(minmax.first->m_flm_flLowerBodyYawTarget - minmax.second->m_flm_flLowerBodyYawTarget) <= tolerance);
  49. }
  50.  
  51. bool CResolver::HasStaticRealAngle(int index, float tolerance) {
  52. return HasStaticRealAngle(m_arrInfos[index].m_sRecords, tolerance);
  53. }
  54.  
  55. bool CResolver::HasStaticYawDifference(const std::deque<CTickRecord>& l, float tolerance) {
  56. for (auto i = l.begin(); i < l.end() - 1;) {
  57. if (GetDelta(LBYDelta(*i), LBYDelta(*++i)) > tolerance)
  58. return false;
  59. }
  60. return true;
  61. }
  62.  
  63. bool CResolver::HasSteadyDifference(const std::deque<CTickRecord>& l, float tolerance) {
  64. size_t misses = 0;
  65. for (size_t i = 0; i < l.size() - 1; i++) {
  66. float tickdif = static_cast<float>(l.at(i).m_flSimulationTime - l.at(i + 1).tickcount);
  67. float lbydif = GetDelta(l.at(i).m_flm_flLowerBodyYawTarget, l.at(i + 1).m_flm_flLowerBodyYawTarget);
  68. float ntickdif = static_cast<float>(G::UserCmd->tick_count - l.at(i).tickcount);
  69. if (((lbydif / tickdif) * ntickdif) > tolerance) misses++;
  70. }
  71. return (misses <= (l.size() / 3));
  72. }
  73.  
  74. int CResolver::GetDifferentDeltas(const std::deque<CTickRecord>& l, float tolerance) {
  75. std::vector<float> vec;
  76. for (auto var : l) {
  77. float curdelta = LBYDelta(var);
  78. bool add = true;
  79. for (auto fl : vec) {
  80. if (!IsDifferent(curdelta, fl, tolerance))
  81. add = false;
  82. }
  83. if (add)
  84. vec.push_back(curdelta);
  85. }
  86. return vec.size();
  87. }
  88.  
  89. int CResolver::GetDifferentLBYs(const std::deque<CTickRecord>& l, float tolerance) {
  90. std::vector<float> vec;
  91. for (auto var : l) {
  92. float curyaw = var.m_flm_flLowerBodyYawTarget;
  93. bool add = true;
  94. for (auto fl : vec) {
  95. if (!IsDifferent(curyaw, fl, tolerance))
  96. add = false;
  97. }
  98. if (add)
  99. vec.push_back(curyaw);
  100. }
  101. return vec.size();
  102. }
  103.  
  104. float CResolver::GetLBYByComparingTicks(const std::deque<CTickRecord>& l) {
  105. int modulo = Config->Ragebot.ResolveModulo;
  106. int difangles = GetDifferentLBYs(l);
  107. int inc = modulo * difangles;
  108. for (auto var : l) {
  109. for (int lasttick = var.tickcount; lasttick < G::UserCmd->tick_count; lasttick += inc) {
  110. if (lasttick == G::UserCmd->tick_count)
  111. return var.m_flm_flLowerBodyYawTarget;
  112. }
  113. }
  114. return 0.f;
  115. }
  116.  
  117. float CResolver::GetDeltaByComparingTicks(const std::deque<CTickRecord>& l) {
  118. int modulo = Config->Ragebot.ResolveModulo;
  119. int difangles = GetDifferentDeltas(l);
  120. int inc = modulo * difangles;
  121. for (auto var : l) {
  122. for (int lasttick = var.tickcount; lasttick < G::UserCmd->tick_count; lasttick += inc) {
  123. if (lasttick == G::UserCmd->tick_count)
  124. return LBYDelta(var);
  125. }
  126. }
  127. return 0.f;
  128. }
  129.  
  130. bool CResolver::DeltaKeepsChanging(const std::deque<CTickRecord>& cur, float tolerance) {
  131. return (GetDifferentDeltas(cur) > (int) cur.size() / 2);
  132. }
  133.  
  134. bool CResolver::LBYKeepsChanging(const std::deque<CTickRecord>& cur, float tolerance) {
  135. return (GetDifferentLBYs(cur, tolerance) > (int)cur.size() / 2);
  136. }
  137.  
  138. bool CResolver::IsEntityMoving(CBaseEntity* ent) {
  139. return (ent->GetVelocity().Length2D() > 0.1f && ent->GetFlags() & FL_ONGROUND);
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement