Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "sdk.h"
- #include "Resolver.h"
- #include "global.h"
- #include "BacktrackingHelper.h"
- #include "Math.h"
- #include "GameUtils.h"
- #include "Menu.h"
- CResolver2* g_Resolver = new CResolver2;
- bool did_hs[64];
- bool did_hit[64];
- int hit_tick;
- int hit_tick2;
- bool ran_thru_resolverfloat ;
- float moving_vals[32];
- float storedlby[32];
- #define TICK_INTERVAL ( g_pGlobals->interval_per_tick )
- #define TIME_TO_TICKS( dt ) ( (int)( 0.5f + (float)(dt) / TICK_INTERVAL ) )
- #define TICKS_TO_TIME( t ) ( TICK_INTERVAL *( t ) )
- float logged_hits[64];
- int KillsPerRound;
- int GetServerSideID(int CBaseEntityIndex)
- {
- player_info_t pInfo;
- g_pEngine->GetPlayerInfo(CBaseEntityIndex, &pInfo);
- return pInfo.m_nUserID;
- }
- CResolver2::CTickRecord::CTickRecord(CBaseEntity* ent, int tickcount)
- {
- m_flLowerBodyYawTarget = ent->LowerBodyYaw();
- m_angEyeAngles = ent->GetEyeAngles();
- m_flCycle = ent->GetCycle();
- m_flSimulationTime = ent->GetSimulationTime();
- m_nSequence = ent->GetSequence();
- m_vecOrigin = ent->GetOrigin();
- m_vecVelocity = ent->GetVelocity();
- // m_flPoseParameter = ent->GetPoseParameters();
- m_angAbsAngles = ent->GetAbsAngles();
- m_vecAbsOrigin = ent->GetOrigin();
- this->tickcount = tickcount;
- }
- CResolver2::CTickRecord::CTickRecord(CBaseEntity* ent, Vector EyeAngles, float LowerBodyYaw)
- {
- m_flLowerBodyYawTarget = LowerBodyYaw;
- m_angEyeAngles = EyeAngles;//ent->GetEyeAngles();
- m_flCycle = ent->GetCycle();
- m_flSimulationTime = ent->GetSimulationTime();
- m_nSequence = ent->GetSequence();
- m_vecOrigin = ent->GetOrigin();
- m_vecVelocity = ent->GetVelocity();
- // m_flPoseParameter = ent->GetPoseParameters();
- m_angAbsAngles = ent->GetAbsAngles();
- m_vecAbsOrigin = ent->GetOrigin();
- tickcount = G::UserCmdForBacktracking->tick_count;
- }
- float tolerance = 10.f;
- const inline float LBYDelta(const CResolver2::CTickRecord& v) {
- return v.m_angEyeAngles.y - v.m_flLowerBodyYawTarget;
- }
- bool HasStaticRealAngle(const std::deque<CResolver2::CTickRecord>& l, float tolerance) {
- auto minmax = std::minmax_element(std::begin(l), std::end(l), [](const CResolver2::CTickRecord& t1, const CResolver2::CTickRecord& t2) { return t1.m_flLowerBodyYawTarget < t2.m_flLowerBodyYawTarget; });
- return (fabs(minmax.first->m_flLowerBodyYawTarget - minmax.second->m_flLowerBodyYawTarget) <= tolerance);
- }
- bool HasStaticYawDifference(const std::deque<CResolver2::CTickRecord>& l, float tolerance) {
- for (auto i = l.begin(); i < l.end() - 1;)
- {
- if (GetDelta(LBYDelta(*i), LBYDelta(*++i)) > tolerance)
- return false;
- }
- return true;
- }
- bool HasSteadyDifference(const std::deque<CResolver2::CTickRecord>& l, float tolerance, CBaseEntity* pEnt) {
- size_t misses = 0;
- for (size_t i = 0; i < l.size() - 1; i++) {
- float tickdif = static_cast<float>(l.at(i).m_flSimulationTime - l.at(i + 1).tickcount);
- float lbydif = GetDelta(l.at(i).m_flLowerBodyYawTarget, l.at(i + 1).m_flLowerBodyYawTarget);
- float ntickdif = static_cast<float>(G::UserCmdForBacktracking->tick_count - l.at(i).tickcount);
- if (((lbydif / tickdif) * ntickdif) > tolerance)
- misses++;
- }
- return (misses <= (l.size() / 3));
- }
- int GetDifferentDeltas(const std::deque<CResolver2::CTickRecord>& l, float tolerance) {
- std::vector<float> vec;
- for (auto var : l) {
- float curdelta = LBYDelta(var);
- bool add = true;
- for (auto fl : vec) {
- if (!IsDifferent(curdelta, fl, tolerance))
- add = false;
- }
- if (add)
- vec.push_back(curdelta);
- }
- return vec.size();
- }
- int GetDifferentLBYs(const std::deque<CResolver2::CTickRecord>& l, float tolerance) {
- std::vector<float> vec;
- for (auto var : l)
- {
- float curyaw = var.m_flLowerBodyYawTarget;
- bool add = true;
- for (auto fl : vec)
- {
- if (!IsDifferent(curyaw, fl, tolerance))
- add = false;
- }
- if (add)
- vec.push_back(curyaw);
- }
- return vec.size();
- }
- float GetLBYByComparingTicks(const std::deque<CResolver2::CTickRecord>& l, CBaseEntity* pEnt)
- {
- int modulo = 1;//;Config->GetValue<int>("Resolver", "Modulo");
- int difangles = GetDifferentLBYs(l, tolerance);
- int inc = modulo * difangles;
- for (auto var : l)
- {
- for (int lasttick = var.tickcount; lasttick < G::UserCmdForBacktracking->tick_count; lasttick += inc)
- {
- if (lasttick == G::UserCmdForBacktracking->tick_count)
- return var.m_flLowerBodyYawTarget;
- }
- }
- return 0.f;
- }
- float GetDeltaByComparingTicks(const std::deque<CResolver2::CTickRecord>& l, CBaseEntity* pEnt) {
- int modulo = 1;// Config->GetValue<int>("Resolver", "Modulo");
- int difangles = GetDifferentDeltas(l, tolerance);
- int inc = modulo * difangles;
- for (auto var : l)
- {
- for (int lasttick = var.tickcount; lasttick < G::UserCmdForBacktracking->tick_count; lasttick += inc) {
- if (lasttick == G::UserCmdForBacktracking->tick_count)
- return LBYDelta(var);
- }
- }
- return 0.f;
- }
- bool DeltaKeepsChanging(const std::deque<CResolver2::CTickRecord>& cur, float tolerance) {
- return (GetDifferentDeltas(cur, tolerance) >(int) cur.size() / 2);
- }
- bool LBYKeepsChanging(const std::deque<CResolver2::CTickRecord>& cur, float tolerance) {
- return (GetDifferentLBYs(cur, tolerance) > (int)cur.size() / 2);
- }
- void CResolver::Resolve_Bruteforce(CBaseEntity* pEntity, float org_yaw) {
- auto getdst = [](int a, int b) {
- int x = abs(b - a) % 360;
- return x > 180 ? 360 - x : x;
- };
- auto record = Backtracking->arr_infos.at(pEntity->GetIndex());
- int avg = 1;
- int count = 1;
- float prevlby = 0.f;
- for (auto& r : record.TickRecords) {
- if (r.m_flLowerBodyYawTarget == prevlby)
- continue;
- prevlby = r.m_flLowerBodyYawTarget;
- avg += getdst(static_cast<int>(r.m_angEyeAngles.y), static_cast<int>(r.m_flLowerBodyYawTarget));
- count++;
- }
- avg /= count;
- float add = 0;
- if (avg > 145)
- add = 180;
- else if (avg > 110)
- add = 135;
- else if (avg > 75)
- add = 90;
- else if (avg > 40)
- add = 45;
- pEntity->GetEyeAnglesPtr()->y += (G::UserCmd->command_number % 2) ? add : -add;
- pEntity->GetEyeAnglesPtr()->y = ClampYaw(pEntity->GetEyeAngles().y);
- }
- void CResolver::Resolve_Predict(CBaseEntity* pEntity, float org_yaw) {
- auto record = Backtracking->arr_infos.at(pEntity->GetIndex());
- float prevlby = 0.f;
- int avg = 1;
- int count = 1;
- for (auto& r : record.TickRecords) {
- if (r.m_flLowerBodyYawTarget == prevlby)
- continue;
- prevlby = r.m_flLowerBodyYawTarget;
- float diff = r.m_flLowerBodyYawTarget - prevlby;
- avg += static_cast<int>(diff);
- count++;
- }
- avg /= count;
- pEntity->GetEyeAnglesPtr()->y += avg;
- }
- void CResolver::Resolve_Delta(CBaseEntity* pEntity, float org_yaw)
- {
- float last_simtime[64] = { 0.f };
- float last_lby[64] = { 0.f };
- float last_lby_delta[64] = { 0.f };
- float large_lby_delta[64] = { 0.f };
- float moving_lby[64] = { 0.f };
- bool was_moving[64] = { false };
- const auto local = G::LocalPlayer;
- if (!local) return;
- for (auto i = 0; i < g_pEngine->GetMaxClients(); ++i) {
- const auto player = const_cast <CBaseEntity*>(g_pEntitylist->GetClientEntity(i));
- if (!player || local == player || player->GetTeamNum() == local->GetTeamNum() || player->IsDormant()) {
- last_simtime[i] = 0.f;
- last_lby[i] = 0.f;
- last_lby_delta[i] = 0.f;
- large_lby_delta[i] = 0.f;
- was_moving[i] = false;
- continue;
- }
- //grab values from player
- const auto lby = player->LowerBodyYaw();
- const auto eye = player->GetEyeAnglesPtr();
- const auto sim = player->GetSimulationTime();
- const auto vel = player->GetVelocity().Length2D();
- //auto missed = Globals::missedshots;
- auto missed = G::fired - G::hit;
- while (missed > 5) missed -= 5;
- while (missed < 0) missed += 5;
- auto is_legit = false;
- auto update = false;
- if (sim - last_simtime[i] >= 1) {
- if (sim - last_simtime[i] == 1)
- {
- is_legit = true;
- }
- last_simtime[i] = sim;
- }
- if (lby != last_lby[i]) {
- update = true;
- auto delta = fabsf(lby - last_lby[i]);
- last_lby_delta[i] = delta;
- if (delta > 90)
- {
- large_lby_delta[i] = delta;
- }
- last_lby[i] = lby;
- }
- auto angle = 0.f;
- if (is_legit)
- {
- if (GetAsyncKeyState(0x4D))
- {
- angle = lby;
- }
- else
- angle = eye->y;
- }
- else if (update)
- {
- angle = lby;
- }
- else if (vel > 35) {
- angle = lby;
- moving_lby[i] = lby;
- was_moving[i] = true;
- }
- else if (was_moving[i])
- {
- if (GetAsyncKeyState(0x4D))
- {
- angle = lby;
- }
- else
- {
- switch (missed) {
- case 0: angle = moving_lby[i]; break;
- case 1: angle = lby + large_lby_delta[i]; break;
- case 2: angle = lby + last_lby_delta[i]; break;
- case 3: angle = moving_lby[i]; break;
- case 4: angle = moving_lby[i] + 180; break;
- default: angle = lby - 120;
- }
- }
- }
- else {
- if (GetAsyncKeyState(0x4D))
- {
- angle = lby;
- }
- else
- {
- switch (missed) {
- case 0:angle = lby - 120; break;
- case 1: angle = lby + large_lby_delta[i]; break;
- case 2: angle = lby + last_lby_delta[i]; break;
- case 3: angle = moving_lby[i] - 35; break;
- case 4: angle = moving_lby[i] + 145; break;
- default: angle = lby + (90 * (missed + 1));
- }
- }
- }
- player->GetEyeAnglesPtr()->y = angle;
- }
- }
- /*void CResolver::Resolve(CBaseEntity * pEntity) {
- int resolvermode = Clientvariables->Ragebot.AutomaticResolver;
- if (resolvermode == RESOLVERMODE_OFF)
- return;
- if (pEntity->IsMoving())
- pEntity->GetEyeAnglesPtr()->y = pEntity->LowerBodyYaw();
- else {
- if (Backtracking->arr_infos.at(pEntity->GetIndex()).TickRecords.size() < 3)
- return;
- switch (resolvermode) {
- case RESOLVERMODE_PREDICT:
- Resolve_Predict(pEntity);
- break;
- case RESOLVERMODE_BRUTEFORCE:
- Resolve_Bruteforce(pEntity);
- break;
- case RESOLVERMODE_DELTA:
- Resolve_Delta(pEntity);
- break;
- default:
- return;
- break;
- }
- }
- }*/
- CPredictable::CPredictable(float lby, float sim)
- {
- m_flLowerBodyYawTarget = lby;
- m_flSimulationTime = sim;
- }
- void CResolver::Animation(CBaseEntity* pEntity, float org_yaw) {
- auto record = Backtracking->arr_infos.at(pEntity->GetIndex());
- std::vector<CPredictable> m_predictable;
- float last_lby = 0.0f;
- bool is_breaking_lby = false;
- int sequence = g_pModelInfo->GetStudioModel(pEntity->GetModel())->pSeqdesc(pEntity->GetSequence())->activity;
- for (auto &r : record.TickRecords)
- {
- if (sequence == Activity::ACT_CSGO_IDLE_TURN_BALANCEADJUST) // ACT_CSGO_IDLE_TURN_BALANCEADJUST
- {
- printf("cool");
- m_predictable.push_back(CPredictable(r.m_angEyeAngles.y, r.m_flSimulationTime));
- }
- if (GetDelta(r.m_flLowerBodyYawTarget, last_lby) < 35)
- continue;
- if (GetDelta(r.m_flLowerBodyYawTarget, r.m_angEyeAngles.y) < 35)
- continue;
- last_lby = r.m_flLowerBodyYawTarget;
- }
- int idx = pEntity->GetIndex();
- float new_yaw = pEntity->LowerBodyYaw();
- AnimationLayer curBalanceLayer, prevBalanceLayer;
- if (GetAsyncKeyState(Clientvariables->Ragebot.BruteForceKey) && Clientvariables->Ragebot.BruteForce)
- {
- new_yaw = pEntity->LowerBodyYaw();
- switch (Clientvariables->Ragebot.BruteForce2)
- {
- case 0:
- new_yaw += 180.f;
- break;
- case 1:
- new_yaw = moving_vals[pEntity->GetIndex()];
- break;
- case 2:
- new_yaw = storedlby[pEntity->GetIndex()];
- break;
- }
- new_yaw = ClampYaw(new_yaw);
- pEntity->GetEyeAnglesPtr()->y = new_yaw;
- pEntity->SetPoseAngles(new_yaw, pEntity->GetEyeAngles().x);
- //player->m_angRotation() = QAngle(0, 0, 0);
- pEntity->GetAngRotation() = QAngle(0, 0, 0);
- return;
- }
- for (auto c : m_predictable)
- {
- //dont want to be using outdated data
- if (IsDifferent(c.m_flSimulationTime, pEntity->GetSimulationTime(), 0.170f) /* 170ms is good for now */)
- continue;
- if (GetDelta(c.m_flLowerBodyYawTarget, pEntity->GetEyeAngles().y) < 90)
- continue;
- is_breaking_lby = true;
- last_lby = c.m_flLowerBodyYawTarget;
- }
- static float moving_lby[64];
- if (pEntity->Velocity().Length() > 40.f && *pEntity->GetFlags() & FL_ONGROUND) {
- G::ResolverMode[pEntity->GetIndex()] = 0;
- pEntity->GetEyeAnglesPtr()->y = pEntity->LowerBodyYaw();
- moving_lby[pEntity->GetIndex()] = pEntity->LowerBodyYaw();
- }
- else
- {
- if (is_breaking_lby)
- {
- G::ResolverMode[pEntity->GetIndex()] = 1;
- float offset = 90.0f;
- if (GetDelta(last_lby, pEntity->GetEyeAngles().y) < 270.0f && GetDelta(last_lby, pEntity->GetEyeAngles().y) > 90.0f)
- {
- offset = 180.0f;
- }
- switch (G::Shots[pEntity->GetIndex()] % 5)
- {
- case 0: pEntity->GetEyeAnglesPtr()->y = moving_lby[pEntity->GetIndex()]; break;
- case 1: pEntity->GetEyeAnglesPtr()->y += offset; break;
- case 2: pEntity->GetEyeAnglesPtr()->y += offset + 35.0f; break;
- case 3: pEntity->GetEyeAnglesPtr()->y -= offset + 35.0f; break;
- case 4: pEntity->GetEyeAnglesPtr()->y -= offset; break;
- }
- }
- else if (IsDifferent(last_lby, pEntity->GetEyeAngles().y))
- {
- G::ResolverMode[pEntity->GetIndex()] = 2;
- switch (G::Shots[pEntity->GetIndex()] % 7)
- {
- case 0: pEntity->GetEyeAnglesPtr()->y = moving_lby[pEntity->GetIndex()]; break;
- case 1: pEntity->GetEyeAnglesPtr()->y = logged_hits[pEntity->GetIndex()]; break;
- case 2: pEntity->GetEyeAnglesPtr()->y = last_lby; break;
- case 3:pEntity->GetEyeAnglesPtr()->y = last_lby + 35.0f; break;
- case 4: pEntity->GetEyeAnglesPtr()->y = last_lby - 35.0f; break;
- case 5: pEntity->GetEyeAnglesPtr()->y = pEntity->LowerBodyYaw() + 90.f; break;
- case 6: pEntity->GetEyeAnglesPtr()->y = pEntity->LowerBodyYaw() - 90.f; break;
- }
- }
- }
- pEntity->GetEyeAnglesPtr()->NormalizeVec();
- }
- float CResolver::ResolvePitch(CBaseEntity* pPlayer, float org_pitch)
- {
- auto new_pitch = org_pitch;
- /*bruteforce method*/
- if (org_pitch > 181 && org_pitch < 271)
- {
- new_pitch = 269.0;
- }
- else if (org_pitch > 89 && org_pitch < 181)
- {
- new_pitch = 89.0;
- }
- else
- {
- if (!(*pPlayer->GetFlags() & FL_ONGROUND))
- {
- new_pitch = 89;
- }
- else
- {
- /*proper dynamic fix*/
- if (org_pitch > 181 && org_pitch < 271)
- {
- new_pitch = 269.0;
- }
- else if (org_pitch > 89 && org_pitch < 181)
- {
- new_pitch = 89.0;
- }
- else if (org_pitch <= -66)
- new_pitch = 89;
- else if (org_pitch == 0)
- new_pitch = 89;
- //}
- }
- }
- return new_pitch;
- }
- float CResolver2::ResolvePitch(CBaseEntity* pPlayer, float org_pitch)
- {
- auto new_pitch = org_pitch;
- /*bruteforce method*/
- if (org_pitch > 181 && org_pitch < 271)
- {
- new_pitch = 269.0;
- }
- else if (org_pitch > 89 && org_pitch < 181)
- {
- new_pitch = 89.0;
- }
- else
- {
- if (!(*pPlayer->GetFlags() & FL_ONGROUND))
- {
- new_pitch = 89;
- }
- else
- {
- /*proper dynamic fix*/
- if (org_pitch > 181 && org_pitch < 271)
- {
- new_pitch = 269.0;
- }
- else if (org_pitch > 89 && org_pitch < 181)
- {
- new_pitch = 89.0;
- }
- else if (org_pitch <= -66)
- new_pitch = 89;
- else if (org_pitch == 0)
- new_pitch = 89;
- //}
- }
- }
- return new_pitch;
- }
- enum at_target_antiaims
- {
- Undefined,
- Backwards,
- Left,
- Right
- };
- float CResolver2::ResolveYaw(CBaseEntity* pPlayer, float org_yaw)
- {
- auto index = pPlayer->Index();
- auto GetYawToNearestPlayer = [](CBaseEntity* pCenter) -> QAngle
- {
- auto get3ddist = [](Vector myCoords, Vector enemyCoords) -> float
- {
- return sqrt(
- pow(double(enemyCoords.x - myCoords.x), 2.0) +
- pow(double(enemyCoords.y - myCoords.y), 2.0) +
- pow(double(enemyCoords.z - myCoords.z), 2.0));
- };
- float best_dist = 9999;
- CBaseEntity* selected_player = nullptr;
- Vector vEyePos = pCenter->GetEyePosition();
- for (int i = 1; i < g_pGlobals->maxClients; i++)
- {
- CBaseEntity* pCBaseEntity = g_pEntitylist->GetClientEntity(i);
- if (pCBaseEntity)
- {
- if (pCBaseEntity->GetHealth() > 0 && !pCBaseEntity->IsDormant() && pCBaseEntity->GetTeamNum() != pCenter->GetTeamNum() && pCBaseEntity != pCenter)
- {
- float dist = get3ddist(vEyePos, pCBaseEntity->GetEyePosition());
- if (best_dist > dist)
- {
- best_dist = dist;
- selected_player = pCBaseEntity;
- }
- }
- }
- }
- if (selected_player)
- {
- return GameUtils::CalculateAngle(vEyePos, selected_player->GetEyePosition());
- }
- return QAngle(-1, -1, -1);
- };
- QAngle at_target = GetYawToNearestPlayer(pPlayer);
- at_target.y = Math::NormalizeYaw(at_target.y);
- auto new_yaw = org_yaw;
- bool is_moving = pPlayer->GetVelocity().Length() > 29.f;
- bool is_onground = *pPlayer->GetFlags() & FL_ONGROUND;
- if (pPlayer->LowerBodyYaw() != LatestLowerBodyYaw[index] || (is_moving && is_onground))
- {
- LatestLowerBodyYaw[index] = pPlayer->LowerBodyYaw();
- OldYawDifference[index] = YawDifference[index];
- YawDifference[index] = Math::NormalizeYaw(new_yaw - pPlayer->LowerBodyYaw());
- aa_info[index] = "lby update";
- LatestLowerBodyYawUpdateTime[index] = g_pGlobals->curtime;//pPlayer->GetSimulationTime();
- return Math::NormalizeYaw(pPlayer->LowerBodyYaw());
- }
- if (is_moving)
- {
- aa_info[index] = "lby update";
- }
- else /*On ground resolver*/
- {
- if (((g_pGlobals->curtime - LatestLowerBodyYawUpdateTime[index]) >= 0.5))
- {
- new_yaw -= 180;
- aa_info[index] = "static";
- }
- else
- {
- auto cur = this->m_arrInfos.at(index).m_sRecords;
- if (cur.size() > 1)
- {
- if (HasStaticRealAngle(cur, 5))
- new_yaw = (cur.front().m_flLowerBodyYawTarget) + (Math::RandomFloat(0.f, 1.f) > 0.5f ? 10 : -10);
- else if (HasStaticYawDifference(cur, 10))
- new_yaw -= (cur.front().m_angEyeAngles.y - cur.front().m_flLowerBodyYawTarget);
- else if (HasSteadyDifference(cur, 10, pPlayer)) {
- float tickdif = static_cast<float>(cur.front().tickcount - cur.at(1).tickcount);
- float lbydif = GetDelta(cur.front().m_flLowerBodyYawTarget, cur.at(1).m_flLowerBodyYawTarget);
- float ntickdif = static_cast<float>(TIME_TO_TICKS(g_pGlobals->curtime) - cur.front().tickcount);
- new_yaw = (lbydif / tickdif) * ntickdif;
- }
- else if (DeltaKeepsChanging(cur, 10))
- new_yaw -= GetDeltaByComparingTicks(cur, pPlayer);
- else if (LBYKeepsChanging(cur, 10))
- new_yaw = GetLBYByComparingTicks(cur, pPlayer);
- aa_info[index] = "stored";
- }
- else
- {
- // do all other logic here
- new_yaw = pPlayer->LowerBodyYaw() + Math::RandomFloat(-45, 45);
- aa_info[index] = "bruteforce";
- }
- }
- }
- new_yaw = Math::NormalizeYaw(new_yaw);
- return new_yaw;
- }
- void CResolver2::Run(CBaseEntity* pPlayer)
- {
- Vector* eye_angles = pPlayer->GetEyeAnglesPtr();
- static Vector old_resolved[64];
- int index = pPlayer->GetIndex();
- static int shotsfired[64];
- if (G::LocalPlayer->GetHealth() > 0 && (pPlayer->IsTargettingLocal() || shotsfired[index] < pPlayer->GetShotsFired()))
- {
- shotsfired[index] = pPlayer->GetShotsFired();
- eye_angles->x = g_BacktrackHelper->PlayerRecord[index].EyeAngles.x;//old_resolved[index].x;
- eye_angles->y = g_BacktrackHelper->PlayerRecord[index].EyeAngles.y;//old_resolved[index].y;
- return;
- }
- shotsfired[index] = pPlayer->GetShotsFired();
- int CBaseEntityServerID = GetServerSideID(pPlayer->Index());
- if (PlayerData[CBaseEntityServerID].MissedShots >= 2)
- {
- PlayerData[CBaseEntityServerID].LastAnglesHit.Invalidate();
- PlayerData[CBaseEntityServerID].MissedShots = 0;
- Msg("Angles Invalidated %i", CBaseEntityServerID);
- }
- Vector eye_ang = pPlayer->GetEyeAngles();
- if (Clientvariables->Ragebot.AutomaticResolver)
- {
- float pitch = ResolvePitch(pPlayer, g_BacktrackHelper->PlayerRecord[index].EyeAngles.x/*eye_ang.x*/);
- float yaw = ResolveYaw(pPlayer, g_BacktrackHelper->PlayerRecord[index].EyeAngles.y/*eye_ang.y*/);
- eye_angles->x = pitch;
- eye_angles->y = yaw;
- old_resolved[index] = Vector(pitch, yaw);
- }
- }
- void CResolver::Resolve(CBaseEntity * pEntity) {
- int resolvermode = Clientvariables->Ragebot.AutomaticResolver;
- if (resolvermode == RESOLVERMODE_OFF)
- return;
- int index = pEntity->GetIndex();
- if (pEntity->IsMoving())
- pEntity->GetEyeAnglesPtr()->y = pEntity->LowerBodyYaw();
- else {
- if (Backtracking->arr_infos.at(pEntity->GetIndex()).TickRecords.size() < 3)
- return;
- {
- switch (Clientvariables->Ragebot.AutomaticResolver)
- {
- case 0:
- ResolvePitch(pEntity, g_BacktrackHelper->PlayerRecord[index].EyeAngles.x/*eye_ang.x*/);
- Resolve_Predict(pEntity, g_BacktrackHelper->PlayerRecord[index].EyeAngles.y);
- break;
- case 1:
- ResolvePitch(pEntity, g_BacktrackHelper->PlayerRecord[index].EyeAngles.x/*eye_ang.x*/);
- Resolve_Bruteforce(pEntity, g_BacktrackHelper->PlayerRecord[index].EyeAngles.y);
- break;
- case 2:
- ResolvePitch(pEntity, g_BacktrackHelper->PlayerRecord[index].EyeAngles.x/*eye_ang.x*/);
- Resolve_Delta(pEntity, g_BacktrackHelper->PlayerRecord[index].EyeAngles.y);
- break;
- case 3:
- ResolvePitch(pEntity, g_BacktrackHelper->PlayerRecord[index].EyeAngles.x/*eye_ang.x*/);
- Animation(pEntity, g_BacktrackHelper->PlayerRecord[index].EyeAngles.y);
- break;
- case 4:
- g_Resolver->Run(pEntity);
- break;
- }
- }
- }
- }
- void CResolver::Store(CBaseEntity * Entity) {
- if (!G::UserCmd || !Entity || Entity->GetIndex() < 1 || Entity->GetIndex() > 32)
- return;
- auto record = &Backtracking->arr_infos.at(Entity->GetIndex());
- record->Entity = Entity;
- if (record->TickRecords.size() > 1 && record->TickRecords.front().tickcount == G::UserCmd->tick_count)
- return;
- record->TickRecords.push_front(CTickRecord(Entity));
- while ((int)record->TickRecords.size() > Clientvariables->Ragebot.ResolvoTicks)
- record->TickRecords.pop_back();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement