Advertisement
Guest User

Untitled

a guest
Jun 24th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 21.22 KB | None | 0 0
  1. #include "../includes.h"
  2. #include "../UTILS/interfaces.h"
  3. #include "../SDK/IEngine.h"
  4. #include "../SDK/CUserCmd.h"
  5. #include "../SDK/CBaseEntity.h"
  6. #include "../SDK/CClientEntityList.h"
  7. #include "../SDK/CTrace.h"
  8. #include "../SDK/CBaseWeapon.h"
  9. #include "../SDK/CGlobalVars.h"
  10. #include "../SDK/ConVar.h"
  11. #include "../SDK/AnimLayer.h"
  12. #include "../UTILS/qangle.h"
  13. #include "../FEATURES/Aimbot.h"
  14. #include "../FEATURES/Resolver.h"
  15.  
  16. float Normalize(float delta) {
  17.  
  18. while (delta <= -180) delta += 360;
  19. while (delta > 180) delta -= 360;
  20.  
  21. return delta;
  22. }
  23.  
  24. const inline float GetDelta(float a, float b) {
  25. return abs(Normalize(a - b));
  26.  
  27.  
  28. }
  29.  
  30.  
  31.  
  32. Vector old_calcangle(Vector dst, Vector src)
  33. {
  34. Vector angles;
  35.  
  36. double delta[3] = { (src.x - dst.x), (src.y - dst.y), (src.z - dst.z) };
  37. double hyp = sqrt(delta[0] * delta[0] + delta[1] * delta[1]);
  38. angles.x = (float)(atan(delta[2] / hyp) * 180.0 / 3.14159265);
  39. angles.y = (float)(atanf(delta[1] / delta[0]) * 57.295779513082f);
  40. angles.z = 0.0f;
  41.  
  42. if (delta[0] >= 0.0)
  43. {
  44. angles.y += 180.0f;
  45. }
  46.  
  47. return angles;
  48. }
  49.  
  50. float old_normalize(float Yaw)
  51. {
  52. if (Yaw > 180)
  53. {
  54. Yaw -= (round(Yaw / 360) * 360.f);
  55. }
  56. else if (Yaw < -180)
  57. {
  58. Yaw += (round(Yaw / 360) * -360.f);
  59. }
  60. return Yaw;
  61. }
  62.  
  63. float curtime(SDK::CUserCmd* ucmd) {
  64. auto local_player = INTERFACES::ClientEntityList->GetClientEntity(INTERFACES::Engine->GetLocalPlayer());
  65.  
  66. if (!local_player)
  67. return 0;
  68.  
  69. int g_tick = 0;
  70. SDK::CUserCmd* g_pLastCmd = nullptr;
  71. if (!g_pLastCmd || g_pLastCmd->hasbeenpredicted) {
  72. g_tick = (float)local_player->GetTickBase();
  73. }
  74. else {
  75. ++g_tick;
  76. }
  77. g_pLastCmd = ucmd;
  78. float curtime = g_tick * INTERFACES::Globals->interval_per_tick;
  79. return curtime;
  80. }
  81.  
  82. bool find_layer(SDK::CBaseEntity* entity, int act, SDK::CAnimationLayer *set)
  83. {
  84. for (int i = 0; i < 13; i++)
  85. {
  86. SDK::CAnimationLayer layer = entity->GetAnimOverlay(i);
  87. const int activity = entity->GetSequenceActivity(layer.m_nSequence);
  88. if (activity == act) {
  89. *set = layer;
  90. return true;
  91. }
  92. }
  93. return false;
  94. }
  95.  
  96. void CResolver::record(SDK::CBaseEntity* entity, float new_yaw)
  97. {
  98. if (entity->GetVelocity().Length2D() > 36)
  99. return;
  100.  
  101. auto c_baseweapon = reinterpret_cast<SDK::CBaseWeapon*>(INTERFACES::ClientEntityList->GetClientEntity(entity->GetActiveWeaponIndex()));
  102.  
  103. if (!c_baseweapon)
  104. return;
  105.  
  106. auto &info = player_info[entity->GetIndex()];
  107.  
  108. if (entity->GetActiveWeaponIndex() && info.last_ammo < c_baseweapon->GetLoadedAmmo()) {
  109. //ignore the yaw when it is from shooting (will be looking at you/other player)
  110. info.last_ammo = c_baseweapon->GetLoadedAmmo();
  111. return;
  112. }
  113.  
  114. info.unresolved_yaw.insert(info.unresolved_yaw.begin(), new_yaw);
  115. if (info.unresolved_yaw.size() > 20) {
  116. info.unresolved_yaw.pop_back();
  117. }
  118.  
  119. if (info.unresolved_yaw.size() < 2)
  120. return;
  121.  
  122. auto average_unresolved_yaw = 0;
  123. for (auto val : info.unresolved_yaw)
  124. average_unresolved_yaw += val;
  125. average_unresolved_yaw /= info.unresolved_yaw.size();
  126.  
  127. int delta = average_unresolved_yaw - entity->GetLowerBodyYaw();
  128. auto big_math_delta = abs((((delta + 180) % 360 + 360) % 360 - 180));
  129.  
  130. info.lby_deltas.insert(info.lby_deltas.begin(), big_math_delta);
  131. if (info.lby_deltas.size() > 10) {
  132. info.lby_deltas.pop_back();
  133. }
  134. }
  135.  
  136. static void nospread_resolve(SDK::CBaseEntity* player, int entID) //gay but very effective reversed aw air resolver
  137. {
  138. auto local_player = INTERFACES::ClientEntityList->GetClientEntity(INTERFACES::Engine->GetLocalPlayer());
  139.  
  140.  
  141. if (!local_player)
  142. return;
  143.  
  144. Vector local_position = local_player->GetVecOrigin() + local_player->GetViewOffset();
  145.  
  146. float atTargetAngle = UTILS::CalcAngle(local_player->GetHealth() <= 0 ? local_player->GetVecOrigin() : local_position, player->GetVecOrigin()).y;
  147. Vector velocityAngle;
  148. MATH::VectorAngles(player->GetVelocity(), velocityAngle);
  149.  
  150. float primaryBaseAngle = player->GetLowerBodyYaw();
  151. float secondaryBaseAngle = velocityAngle.y;
  152.  
  153. switch ((shots_missed[entID]) % 15)
  154. {
  155. case 0:
  156. player->EasyEyeAngles()->yaw = atTargetAngle + 180.f;
  157. break;
  158. case 1:
  159. player->EasyEyeAngles()->yaw = velocityAngle.y + 180.f;
  160. break;
  161. case 2:
  162. player->EasyEyeAngles()->yaw = primaryBaseAngle;
  163. break;
  164. case 3:
  165. player->EasyEyeAngles()->yaw = primaryBaseAngle - 45.f;
  166. break;
  167. case 4:
  168. player->EasyEyeAngles()->yaw = primaryBaseAngle + 90.f;
  169. break;
  170. case 5:
  171. player->EasyEyeAngles()->yaw = primaryBaseAngle - 130.f;
  172. break;
  173. case 6:
  174. player->EasyEyeAngles()->yaw = primaryBaseAngle - 180.f;
  175. break;
  176. case 7:
  177. player->EasyEyeAngles()->yaw = secondaryBaseAngle;
  178. break;
  179. case 8:
  180. player->EasyEyeAngles()->yaw = secondaryBaseAngle - 40.f;
  181. break;
  182. case 9:
  183. player->EasyEyeAngles()->yaw = secondaryBaseAngle - 90.f;
  184. break;
  185. case 10:
  186. player->EasyEyeAngles()->yaw = secondaryBaseAngle - 130.f;
  187. break;
  188. case 11:
  189. player->EasyEyeAngles()->yaw = secondaryBaseAngle - 70.f;
  190. break;
  191. case 12:
  192. player->EasyEyeAngles()->yaw = primaryBaseAngle + 45.f;
  193. break;
  194. case 13:
  195. player->EasyEyeAngles()->yaw = primaryBaseAngle + 135.f;
  196. break;
  197. case 14:
  198. player->EasyEyeAngles()->yaw = primaryBaseAngle - 90.f;
  199. break;
  200. case 15:
  201. player->EasyEyeAngles()->yaw = primaryBaseAngle / 1.1;
  202. break;
  203. case 16:
  204. player->EasyEyeAngles()->yaw = primaryBaseAngle * 1.1;
  205. break;
  206. case 17:
  207. player->EasyEyeAngles()->yaw = secondaryBaseAngle / 1.13;
  208. break;
  209. case 18:
  210. player->EasyEyeAngles()->yaw = secondaryBaseAngle * 1.13;
  211. break;
  212. case 19:
  213. player->EasyEyeAngles()->yaw = atTargetAngle / 1.12;
  214. break;
  215. case 20:
  216. player->EasyEyeAngles()->yaw = atTargetAngle * 1.12;
  217. break;
  218. case 21:
  219. player->EasyEyeAngles()->yaw = atTargetAngle / 1.5;
  220. break;
  221. case 22:
  222. player->EasyEyeAngles()->yaw = atTargetAngle * 1.5;
  223. break;
  224. case 23:
  225. player->EasyEyeAngles()->roll = atTargetAngle * 1.12;
  226. break;
  227. }
  228. }
  229.  
  230.  
  231. void CResolver::resolve(SDK::CBaseEntity* entity)
  232. {
  233. auto local_player = INTERFACES::ClientEntityList->GetClientEntity(INTERFACES::Engine->GetLocalPlayer());
  234.  
  235. if (!entity)
  236. return;
  237.  
  238. if (!local_player)
  239. return;
  240.  
  241. bool is_local_player = entity == local_player;
  242. bool is_teammate = local_player->GetTeam() == entity->GetTeam() && !is_local_player;
  243.  
  244. if (is_local_player)
  245. return;
  246.  
  247. if (is_teammate)
  248. return;
  249.  
  250. if (entity->GetHealth() <= 0)
  251. return;
  252.  
  253. if (local_player->GetHealth() <= 0)
  254. return;
  255.  
  256. //--- Variable Declaration ---//;
  257. auto &info = player_info[entity->GetIndex()];
  258.  
  259. //--- Variable Defenitions/Checks ---//
  260. float fl_lby = entity->GetLowerBodyYaw();
  261.  
  262. info.lby = Vector(entity->GetEyeAngles().x, entity->GetLowerBodyYaw(), 0.f);
  263. info.inverse = Vector(entity->GetEyeAngles().x, entity->GetLowerBodyYaw() + 180.f, 0.f);
  264. info.last_lby = Vector(entity->GetEyeAngles().x, info.last_moving_lby, 0.f);
  265. info.inverse_left = Vector(entity->GetEyeAngles().x, entity->GetLowerBodyYaw() + 115.f, 0.f);
  266. info.inverse_right = Vector(entity->GetEyeAngles().x, entity->GetLowerBodyYaw() - 115.f, 0.f);
  267.  
  268.  
  269. info.back = Vector(entity->GetEyeAngles().x, UTILS::CalcAngle(entity->GetVecOrigin(), local_player->GetVecOrigin()).y + 180.f, 0.f);
  270.  
  271.  
  272. info.backtrack = Vector(entity->GetEyeAngles().x, lby_to_back[entity->GetIndex()], 0.f);
  273.  
  274. shots_missed[entity->GetIndex()] = shots_fired[entity->GetIndex()] - shots_hit[entity->GetIndex()];
  275.  
  276. info.is_moving = entity->GetVelocity().Length2D() > 0.1 && entity->GetFlags() & FL_ONGROUND;
  277. info.is_jumping = !entity->GetFlags() & FL_ONGROUND;
  278. info.could_be_slowmo = entity->GetVelocity().Length2D() > 6 && entity->GetVelocity().Length2D() < 36 && !info.is_crouching;
  279. info.is_crouching = entity->GetFlags() & FL_DUCKING;
  280. update_time[entity->GetIndex()] = info.next_lby_update_time;
  281. if (SETTINGS::settings.fakefix_bool)
  282. info.is_moving = entity->GetVelocity().Length2D() > 0.1 && entity->GetFlags() & FL_ONGROUND && !info.could_be_slowmo;
  283. else
  284. info.is_moving = entity->GetVelocity().Length2D() > 0.1 && entity->GetFlags() & FL_ONGROUND;
  285. info.is_jumping = !entity->GetFlags() & FL_ONGROUND;
  286. info.could_be_slowmo = entity->GetVelocity().Length2D() > 6 && entity->GetVelocity().Length2D() < 36 && !info.is_crouching;
  287. info.is_crouching = entity->GetFlags() & FL_DUCKING;
  288. update_time[entity->GetIndex()] = info.next_lby_update_time;
  289.  
  290. static float old_simtime[65];
  291. if (entity->GetSimTime() != old_simtime[entity->GetIndex()])
  292. {
  293. using_fake_angles[entity->GetIndex()] = entity->GetSimTime() - old_simtime[entity->GetIndex()] == INTERFACES::Globals->interval_per_tick; //entity->GetSimTime() - old_simtime[entity->GetIndex()] >= TICKS_TO_TIME(2)
  294. old_simtime[entity->GetIndex()] = entity->GetSimTime();
  295. }
  296.  
  297. //--- Actual Angle Resolving ---//
  298. if (!using_fake_angles[entity->GetIndex()])
  299. {
  300. if (backtrack_tick[entity->GetIndex()])
  301. {
  302. resolve_type[entity->GetIndex()] = 7;
  303. entity->SetEyeAngles(info.backtrack);
  304. }
  305. else if (info.stored_lby != entity->GetLowerBodyYaw() || entity->GetSimTime() > info.next_lby_update_time) //lby prediction
  306. {
  307. entity->SetEyeAngles(info.lby);
  308. info.next_lby_update_time = entity->GetSimTime() + 1.1;
  309. info.stored_lby = entity->GetLowerBodyYaw();
  310. resolve_type[entity->GetIndex()] = 3;
  311. entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw() / 1.1 + 120 * 2 / 1.23 + 22;
  312. entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw() / 1.2 * 1.1;
  313. entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw() / 1.4 * 1.1;
  314. entity->EasyEyeAngles()->yaw = entity->GetEyeAngles().z * 1.01;
  315. entity->EasyEyeAngles()->roll = entity->GetEyeAngles().z * 1.01;
  316. }
  317. else if (info.is_jumping)
  318. {
  319. nospread_resolve(entity, entity->GetIndex());
  320. }
  321. else if (info.is_moving) //while moving
  322. {
  323. entity->SetEyeAngles(info.lby);
  324. info.last_moving_lby = entity->GetLowerBodyYaw();
  325. info.stored_missed = shots_missed[entity->GetIndex()];
  326. resolve_type[entity->GetIndex()] = 1;
  327. entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw() / 1.1 + 4;
  328. entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw() / 1.34 * 0.53 + 27 / 1.32 * 1.63;
  329. entity->SetEyeAngles(info.last_lby);
  330. entity->EasyEyeAngles()->yaw = entity->GetEyeAngles().x;
  331. entity->EasyEyeAngles()->yaw = entity->GetEyeAngles().z * 1.01;
  332. entity->EasyEyeAngles()->roll = entity->GetEyeAngles().z * 1.01;
  333. entity->EasyEyeAngles()->roll = entity->GetEyeAngles().z * 1.03;
  334. entity->EasyEyeAngles()->yaw = entity->GetEyeAngles().y * 2;
  335. }
  336. else
  337. {
  338. if (shots_missed[entity->GetIndex()] > info.stored_missed) //if we have missed 1 shot since we have stopped moving
  339. {
  340. resolve_type[entity->GetIndex()] = 4;
  341. switch (shots_missed[entity->GetIndex()] % 4)
  342. {
  343. case 0: entity->SetEyeAngles(info.inverse); break;
  344. case 1: entity->SetEyeAngles(info.left); break;
  345. case 2: entity->SetEyeAngles(info.back); break;
  346. case 3: entity->SetEyeAngles(info.right); break;
  347. case 4: entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw() / 1.2 * 0.3; break;
  348. case 5: entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw() / 1.4 + 5 * 0.32 / 0.54; break;
  349. case 6: entity->SetEyeAngles(info.last_lby); break;
  350. case 7: entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw() + 40 * 0.2 / 0.13 + 4; break;
  351. case 8: entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw() / 2 * 1.3 - 40; break;
  352. case 9: entity->EasyEyeAngles()->yaw = entity->GetEyeAngles().z * 1.01; break;
  353. case 10: entity->EasyEyeAngles()->pitch = entity->GetEyeAngles().x; break;
  354. case 11: entity->EasyEyeAngles()->yaw = entity->GetEyeAngles().z * 1.02; break;
  355. case 12: entity->EasyEyeAngles()->yaw = entity->GetEyeAngles().y * 2; break;
  356. }
  357. }
  358. else //first thing we shoot when they stop
  359. {
  360. entity->SetEyeAngles(info.last_lby);
  361. resolve_type[entity->GetIndex()] = 5;
  362. entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw() / 1.1 + 4 * 0.2 + 16 * 0.3;
  363. entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw() + 4 / 1.1 * 0.9 + 20 / 1.6;
  364. entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw() / 1.1 + 4;
  365. entity->EasyEyeAngles()->yaw = entity->GetEyeAngles().x;
  366. entity->EasyEyeAngles()->yaw = entity->GetEyeAngles().z * 1.01;
  367. entity->EasyEyeAngles()->roll = entity->GetEyeAngles().z * 1.01;
  368. entity->EasyEyeAngles()->yaw = entity->GetEyeAngles().y * 2;
  369. }
  370. }
  371. if (resolve_type[entity->GetIndex()] = 5)
  372. {
  373. entity->SetEyeAngles(info.last_lby);
  374. resolve_type[entity->GetIndex()] = 5;
  375. entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw() / 1.2 * 0.2 / 1.1 + 42 * 1.2 + 62 / 1.2 * 1.3;
  376. entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw() * 1.1 + 3 / 1.54;
  377. entity->EasyEyeAngles()->yaw = entity->GetEyeAngles().z * 1.01;
  378. entity->EasyEyeAngles()->pitch = entity->GetEyeAngles().x;
  379. entity->EasyEyeAngles()->roll = entity->GetEyeAngles().z * 1.01;
  380. entity->EasyEyeAngles()->yaw = entity->GetEyeAngles().y * 2;
  381. }
  382. else
  383. {
  384. entity->SetEyeAngles(info.last_lby);
  385. resolve_type[entity->GetIndex()] = 5;
  386. entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw() / 1.4 * 0.5 / 2 * 1.2 + 120 * 2.5 + 3 / 1.2 * 1.1 + 42 / 2 * 1.34;
  387. entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw() + 2;
  388. entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw() - 2;
  389. entity->EasyEyeAngles()->yaw = entity->GetEyeAngles().z * 1.01;
  390. entity->EasyEyeAngles()->yaw = entity->GetEyeAngles().y * 2;
  391. }
  392. if (info.breaking_lby)
  393. {
  394. entity->SetEyeAngles(info.last_lby);
  395. entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw() + 120 * 2 + 30 / 1.1 * 1.5;
  396. resolve_type[entity->GetIndex()] = 5;
  397. entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw() / 1.3;
  398. entity->EasyEyeAngles()->roll = entity->GetEyeAngles().z * 1.03;
  399. entity->EasyEyeAngles()->roll = entity->GetLowerBodyYaw() / 1.3 + 30 * 1.2;
  400. entity->EasyEyeAngles()->yaw = entity->GetEyeAngles().y * 2;
  401. }
  402. else
  403. {
  404. if (entity->GetSimTime() + 1.1)
  405. {
  406. entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw() / 1.4 + 32 * 1.2;
  407. entity->EasyEyeAngles()->yaw = entity->GetEyeAngles().y * 2;
  408. entity->SetEyeAngles(info.last_lby);
  409. entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw() / 1.2 * 0.1;
  410. entity->EasyEyeAngles()->yaw = entity->GetEyeAngles().z * 1.01;
  411. entity->EasyEyeAngles()->roll = entity->GetEyeAngles().z * 1.01;
  412. resolve_type[entity->GetIndex()] = 5;
  413. entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw();
  414. }
  415. else
  416. {
  417. entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw() / 1.4 * 0.2;
  418. entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw() / 1.6 * 0.3;
  419. entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw() / 1.8 * 0.4;
  420. entity->EasyEyeAngles()->yaw = entity->GetEyeAngles().z * 1.01;
  421. entity->EasyEyeAngles()->roll = entity->GetEyeAngles().z * 1.01;
  422. entity->EasyEyeAngles()->yaw = entity->GetEyeAngles().y * 2;
  423. entity->SetEyeAngles(info.last_lby);
  424. resolve_type[entity->GetIndex()] = 5;
  425. for (int w = 0; w < 13; w++)
  426. {
  427. entity->GetAnimOverlay(w);
  428. resolve_type[entity->GetIndex()] = 5;
  429. entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw() / 2 * 1.5 + 40;
  430. entity->SetEyeAngles(info.last_lby);
  431. entity->EasyEyeAngles()->roll = entity->GetEyeAngles().z * 1.01;
  432. entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw() * 1.32;
  433. }
  434. if (GLOBAL::is_fakewalking = true)
  435. {
  436. for (int w = 0; w < 13; w++) {
  437. entity->EasyEyeAngles()->yaw = entity->GetLowerBodyYaw() / 1.32 + 4;
  438. entity->EasyEyeAngles()->roll = entity->GetEyeAngles().z * 1.03;
  439. entity->GetAnimOverlay(w);
  440. }
  441. }
  442. else
  443. {
  444. entity->EasyEyeAngles()->roll = entity->GetLowerBodyYaw() * 1.3 + 24 / 1.2;
  445. }
  446. }
  447. }
  448. }
  449.  
  450. SDK::CAnimationLayer layer = entity->GetAnimOverlay(0);
  451. if (entity->GetSimTime() != info.stored_simtime)
  452. {
  453. info.stored_simtime = entity->GetSimTime();
  454. info.prev_layer = info.backup_layer;
  455. SDK::CAnimationLayer dummy;
  456. info.backup_layer = find_layer(entity, 979, &dummy) ? dummy : layer;
  457. }
  458.  
  459. SDK::CAnimationLayer prev = info.prev_layer;
  460. auto server_time = local_player->GetTickBase() * INTERFACES::Globals->interval_per_tick; //i have a global dedicated to curtime but am using this because lemon is gay
  461.  
  462. if (info.is_moving && !info.could_be_slowmo)
  463. {
  464. entity->SetEyeAngles(info.lby);
  465. info.last_moving_lby = entity->GetLowerBodyYaw();
  466. info.stored_missed = shots_missed[entity->GetIndex()];
  467. info.last_move_time = server_time;
  468. info.reset_state = true;
  469. resolve_type[entity->GetIndex()] = 1;
  470. }
  471. else
  472. {
  473. if (info.stored_lby != entity->GetLowerBodyYaw())
  474. {
  475. entity->SetEyeAngles(info.lby);
  476. info.stored_lby = entity->GetLowerBodyYaw();
  477. info.next_lby_update_time = entity->GetSimTime() + 1.1;
  478. resolve_type[entity->GetIndex()] = 7;
  479. }
  480. else if (server_time - info.last_move_time < 0.1 && info.reset_state)
  481. {
  482. info.pre_anim_lby = entity->GetLowerBodyYaw();
  483. info.reset_state = false;
  484. info.breaking_lby = false;
  485. //std::cout << "reset and lby break is false!" << std::endl;
  486. }
  487. auto previous_is_valid = entity->GetSequenceActivity(prev.m_nSequence) == 979;
  488.  
  489. if (info.unresolved_yaw.size() < 2 || info.lby_deltas.size() < 2)
  490. return;
  491.  
  492. auto average_unresolved_yaw = 0;
  493. for (auto val : info.unresolved_yaw)
  494. average_unresolved_yaw += val;
  495. average_unresolved_yaw /= info.unresolved_yaw.size();
  496.  
  497. auto average_lby_delta = 0;
  498. for (auto val : info.lby_deltas)
  499. average_lby_delta += val;
  500. average_lby_delta /= info.lby_deltas.size();
  501.  
  502. int deltaxd = average_unresolved_yaw - entity->GetLowerBodyYaw();
  503. auto current_lby_delta = abs((((deltaxd + 180) % 360 + 360) % 360 - 180));
  504.  
  505. int update_delta = info.pre_anim_lby - entity->GetLowerBodyYaw();
  506. auto lby_update_delta = abs((((update_delta + 180) % 360 + 360) % 360 - 180));
  507.  
  508. if (find_layer(entity, 979, &layer)
  509. && previous_is_valid
  510. && (layer.m_flCycle != prev.m_flCycle
  511. || layer.m_flWeight == 1.f
  512. || server_time - info.last_move_time < 1.4
  513. && !info.breaking_lby
  514. && layer.m_flCycle >= 0.01
  515. && lby_update_delta > 75))
  516. {
  517. if (server_time - info.last_move_time < 1.4)
  518. {
  519. info.breaking_lby = true;
  520. //std::cout << "breaking lby" << std::endl;
  521. }
  522. entity->SetEyeAngles(info.inverse);
  523. resolve_type[entity->GetIndex()] = 6;
  524. }
  525. else
  526. {
  527. if (info.breaking_lby)
  528. {
  529. if (current_lby_delta > 130 && average_lby_delta > 130) {
  530. entity->SetEyeAngles(info.lby);
  531. resolve_type[entity->GetIndex()] = 7;
  532. }
  533. else {
  534. if (info.next_lby_update_time < entity->GetSimTime())
  535. {
  536. entity->SetEyeAngles(info.lby);
  537. info.next_lby_update_time = entity->GetSimTime() + 1.1;
  538. resolve_type[entity->GetIndex()] = 3;
  539. }
  540. else if (info.is_moving)
  541. {
  542. resolve_type[entity->GetIndex()] = 5;
  543. switch (shots_missed[entity->GetIndex()] % 2)
  544. {
  545. case 0: entity->SetEyeAngles(info.last_lby); break;
  546. case 1: entity->SetEyeAngles(info.inverse); break;
  547. }
  548. }
  549. else
  550. {
  551. if (shots_missed[entity->GetIndex()] > info.stored_missed)
  552. {
  553. resolve_type[entity->GetIndex()] = 4;
  554. switch (shots_missed[entity->GetIndex()] % 3)
  555. {
  556. case 0: entity->SetEyeAngles(info.inverse); break; //180
  557. case 1: entity->SetEyeAngles(info.inverse_left); break; //115
  558. case 2: entity->SetEyeAngles(info.inverse_right); break; //-115
  559. }
  560. }
  561. //else
  562. //{
  563. // resolve_type[entity->GetIndex()] = 2;
  564. // entity->SetEyeAngles(info.last_lby);
  565. //}
  566. }
  567. }
  568. }
  569. else
  570. {
  571. entity->SetEyeAngles(info.lby);
  572. resolve_type[entity->GetIndex()] = 7;
  573. }
  574. }
  575. }
  576. if (info.stored_lby != fl_lby)
  577. {
  578. entity->SetEyeAngles(info.lby);
  579. info.stored_lby = fl_lby;
  580. info.next_lby_update_time = entity->GetSimTime() + 1.1;
  581. resolve_type[entity->GetIndex()] = 1;
  582. }
  583. else if (info.next_lby_update_time < entity->GetSimTime())
  584. {
  585. entity->SetEyeAngles(info.lby);
  586. info.next_lby_update_time = entity->GetSimTime() + 1.1;
  587. resolve_type[entity->GetIndex()] = 3;
  588. }
  589. else if (info.is_moving && !info.could_be_slowmo)
  590. {
  591. entity->SetEyeAngles(info.lby);
  592. info.last_moving_lby = fl_lby;
  593. info.stored_missed = shots_missed[entity->GetIndex()];
  594. INTERFACES::Globals->curtime;
  595. resolve_type[entity->GetIndex()] = 1;
  596. }
  597. else
  598. {
  599. if (info.breaking_lby)
  600. {
  601. if (info.is_moving && !info.is_crouching)
  602. {
  603. resolve_type[entity->GetIndex()] = 5;
  604. switch (shots_missed[entity->GetIndex()] % 2)
  605. {
  606. case 0: entity->SetEyeAngles(info.last_lby); break;
  607. case 1: entity->SetEyeAngles(info.inverse); break;
  608. }
  609. }
  610. else {
  611. if (shots_missed[entity->GetIndex()] > info.stored_missed)
  612. {
  613. resolve_type[entity->GetIndex()] = 4;
  614. switch (shots_missed[entity->GetIndex()] % 4)
  615. {
  616. case 0: entity->SetEyeAngles(info.inverse); break;
  617. case 1: entity->SetEyeAngles(info.right); break;
  618. case 2: entity->SetEyeAngles(info.left); break;
  619. case 3: entity->SetEyeAngles(info.back); break;
  620. }
  621. }
  622. else
  623. {
  624. resolve_type[entity->GetIndex()] = 2;
  625. entity->SetEyeAngles(info.last_lby);
  626. }
  627. }
  628. }
  629. else
  630. {
  631. entity->SetEyeAngles(info.lby);
  632. resolve_type[entity->GetIndex()] = 1;
  633. }
  634. }
  635. }
  636.  
  637. CResolver* resolver = new CResolver();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement