Advertisement
Guest User

Untitled

a guest
Jan 29th, 2020
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 27.24 KB | None | 0 0
  1. #include "resolver.h"
  2. #include "../../../helpers/console.h"
  3.  
  4. #include "../../../helpers/debug_console.h"
  5.  
  6. #include "../../../helpers/math.hpp"
  7.  
  8. #include "../../../options.h"
  9.  
  10. #include "../../features.h"
  11.  
  12. // todo hooks setup_velocity and replace goal_feet_yaw at the end || find a way to overwrite goalFeetYaw
  13. // todo add anti-freestand
  14. // credits for me the best paster askdm (JOKE JOKE) hvh hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh my discord for fix erros LucasFlux#6694
  15. // You need make One Engine Prediction better for this cheat or fix the backtrack idk ''-'' this resolver is good for me
  16.  
  17. void c_resolver::on_create_move()
  18. {
  19. for (auto i = 0; i < interfaces::engine_client->get_max_clients(); i++)
  20. {
  21. const auto player = dynamic_cast<C_BasePlayer*> (interfaces::entity_list->get_client_entity(i));
  22.  
  23. if (!player || !player->is_alive() || player->is_dormant())
  24. continue;
  25.  
  26. if (!rdata.at(i).setup_player(player))
  27. continue;
  28.  
  29. if (this->rdata.at(i).last_update_simtime == player->simulation_time())
  30. continue;
  31.  
  32. this->rdata.at(i).last_update_simtime = player->simulation_time();
  33.  
  34. this->rdata.at(i).last_abs_yaw = abs(server_goal_feet_yaw(player));
  35.  
  36. this->rdata.at(i).is_resolving = false;
  37. this->rdata.at(i).last_angle = player->eye_angles();
  38.  
  39. resolve_yaw(player);
  40. }
  41. }
  42.  
  43. void c_resolver::on_frame_stage_notify()
  44. {
  45. if (!g_options.ragebot_resolver)
  46. return;
  47.  
  48. for (auto i = 0; i < interfaces::engine_client->get_max_clients(); i++)
  49. {
  50. const auto entity = dynamic_cast<C_BasePlayer*> (interfaces::entity_list->get_client_entity(i));
  51.  
  52. if (!entity || !entity->is_alive() || entity->is_dormant())
  53. continue;
  54.  
  55. //if ( this->rdata.at ( i ).last_update_simtime == entity->simulation_time( ) || interfaces::global_vars->tickcount == this->rdata.at ( i ).last_tickcount )
  56. // continue;
  57.  
  58. //this->rdata.at ( i ).last_tickcount = interfaces::global_vars->tickcount;
  59. //this->rdata.at ( i ).last_update_simtime = entity->simulation_time( );
  60.  
  61. //this->rdata.at ( i ).is_resolving = false;
  62. //this->rdata.at ( i ).last_angle = entity->eye_angles( );
  63.  
  64. resolve_yaw ( entity );
  65.  
  66. if (this->rdata.at(i).should_resolve)
  67. {
  68. auto state = entity->get_base_player_anim_state();
  69.  
  70. auto quick_normalize = [](float& yaw)
  71. {
  72. for (; yaw > 180.f; yaw = yaw - 360.f);
  73.  
  74. for (; yaw < -180.f; yaw = yaw + 360.f);
  75. };
  76.  
  77. if (state)
  78. {
  79. entity->eye_angles( ).yaw = this->rdata.at ( i ).last_abs_yaw;
  80. state->m_flYaw = entity->eye_angles( ).yaw + this->rdata.at ( i ).desync_add;
  81. state->m_flGoalFeetYaw = this->rdata.at ( i ).last_abs_yaw + this->rdata.at ( i ).desync_add;
  82. state->m_flGoalFeetYaw = server_goal_feet_yaw ( entity );
  83. quick_normalize ( state->m_flGoalFeetYaw );
  84. auto normalized_add = state->m_flGoalFeetYaw + this->rdata.at(i).desync_add;
  85. quick_normalize(normalized_add);
  86. entity->set_abs_angles(qangle_t(0.f, normalized_add, 0.f));
  87. this->rdata.at(i).resolver_abs_yaw = normalized_add;
  88. entity->eye_angles().yaw += this->rdata.at ( i ).desync_add;
  89. }
  90.  
  91. quick_normalize(entity->eye_angles().yaw);
  92. }
  93.  
  94. //this->rdata.at ( i ).last_resolved_angle = entity->eye_angles( );
  95. }
  96. }
  97.  
  98. bool c_resolver::get_is_desyncing(const int idx)
  99. {
  100. return this->rdata.at(idx).desyncing;
  101. }
  102.  
  103. bool c_resolver::get_is_tick_shifting(const int idx)
  104. {
  105. return this->rdata.at(idx).tick_shifting;
  106. }
  107.  
  108. void c_resolver::reset_resolver_data()
  109. {
  110. this->rdata = { };
  111. }
  112.  
  113. void c_resolver::reset_player_resolver_data(const int idx)
  114. {
  115. this->rdata.at(idx) = { };
  116. }
  117.  
  118. void c_resolver::count_player_shot(const int idx, const c_resolver::resolver_data_t rdata)
  119. {
  120. this->rdata.at(idx).count_shot(rdata);
  121. }
  122.  
  123. void c_resolver::remove_player_shot(const int idx, const c_resolver::resolver_data_t rdata)
  124. {
  125. this->rdata.at(idx).remove_shot(rdata);
  126. }
  127.  
  128. float c_resolver::server_goal_feet_yaw(C_BasePlayer* entity)
  129. {
  130. auto animstate = entity->get_base_player_anim_state();
  131.  
  132. if (!animstate)
  133. return 0.f;
  134.  
  135. /* data */
  136. auto ground_fraction = *(float*)(animstate + 0x11C);
  137. auto duck_ammount = *(float*)(animstate + 0xA4);
  138. auto ducking_speed = std::max(0.f, std::min(1.f, *reinterpret_cast<float*> (animstate + 0xFC)));
  139. auto running_speed = std::max(0.f, std::min(*reinterpret_cast<float*> (animstate + 0xF8), 1.f));
  140. /* offsets */
  141. auto backup_eflags = entity->eflag();
  142.  
  143. entity->eflag() = (1 << 12);
  144. auto abs_velocity = *reinterpret_cast<vector_t*> (uintptr_t(entity) + 0x94);
  145. entity->eflag() = backup_eflags;
  146.  
  147. auto speed = std::fmin(abs_velocity.length(), 260.0f);
  148.  
  149. auto goal_feet_yaw = animstate->m_flGoalFeetYaw;
  150.  
  151. auto angle_diff = [](float destAngle, float srcAngle) -> float
  152. {
  153. auto delta = 0.f;
  154.  
  155. delta = fmodf(destAngle - srcAngle, 360.0f);
  156.  
  157. if (destAngle > srcAngle)
  158. {
  159. if (delta >= 180)
  160. delta -= 360;
  161. }
  162. else
  163. {
  164. if (delta <= -180)
  165. delta += 360;
  166. }
  167.  
  168. return delta;
  169. };
  170.  
  171. auto eye_feet_delta = angle_diff(animstate->m_flYaw, goal_feet_yaw);
  172.  
  173. auto flYawModifier = (((ground_fraction * -0.3f) - 0.2f) * running_speed) + 1.0f;
  174.  
  175. if (duck_ammount > 0.0f)
  176. flYawModifier = flYawModifier + ((duck_ammount * ducking_speed) * (0.5f - flYawModifier));
  177.  
  178. auto flMaxYawModifier = flYawModifier * 58.f;
  179. auto flMinYawModifier = flYawModifier * -58.f;
  180.  
  181. if (eye_feet_delta <= flMaxYawModifier)
  182. {
  183. if (flMinYawModifier > eye_feet_delta)
  184. goal_feet_yaw = fabs(flMinYawModifier) + animstate->m_flYaw;
  185. }
  186. else
  187. goal_feet_yaw = animstate->m_flYaw - fabs(flMaxYawModifier);
  188.  
  189. if (goal_feet_yaw > 5000 || goal_feet_yaw < -5000)
  190. return 0.f;
  191.  
  192. g_math.normalize_yaw(goal_feet_yaw);
  193.  
  194. if (speed > 0.1f || fabs(abs_velocity.z) > 100.0f)
  195. {
  196. goal_feet_yaw = g_math.fl_approach_angle(
  197. animstate->m_flYaw,
  198. goal_feet_yaw,
  199. ((ground_fraction * 20.0f) + 30.0f)
  200. * animstate->m_flLastClientSideAnimationUpdateTime);
  201. }
  202. else
  203. {
  204. goal_feet_yaw = g_math.fl_approach_angle(
  205. entity->lower_body_yaw_target(),
  206. goal_feet_yaw,
  207. animstate->m_flLastClientSideAnimationUpdateTime * 100.0f);
  208. }
  209.  
  210. if (goal_feet_yaw > 5000 || goal_feet_yaw < -5000)
  211. return 0.f;
  212.  
  213. g_math.normalize_yaw(goal_feet_yaw);
  214.  
  215. return goal_feet_yaw;
  216. }
  217.  
  218. c_resolver::resolver_angle_overwrites_t c_resolver::resolver_data_t::get_brutforce_overwrite()
  219. {
  220. auto lowest_misses = std::numeric_limits< int >::max();
  221. auto best_mode = resolver_angle_overwrites_t::plus;
  222.  
  223. for (size_t i = 0; i < static_cast<size_t> (resolver_angle_overwrites_t::max); i++)
  224. {
  225. // ReSharper disable once CppIncompleteSwitchStatement
  226. switch (static_cast<resolver_angle_overwrites_t> (i))
  227. {
  228. case resolver_angle_overwrites_t::max:
  229. continue;
  230. }
  231.  
  232. if (this->overall_overwrites_shots[i] < lowest_misses)
  233. {
  234. lowest_misses = this->overall_overwrites_shots[i];
  235. best_mode = static_cast<resolver_angle_overwrites_t> (i);
  236. }
  237. }
  238.  
  239. return best_mode;
  240. }
  241.  
  242. c_resolver::resolver_modes_t c_resolver::resolver_data_t::get_best_resolver_mode() const
  243. {
  244. //constexpr auto damage_percentage = 1.f / 3.f;
  245.  
  246. //if(this.mod)
  247.  
  248. switch (this->shots % 2)
  249. {
  250. case 0:
  251. return resolver_modes_t::damage;
  252. break;
  253.  
  254. case 1:
  255. return resolver_modes_t::brutforce;
  256. break;
  257. }
  258.  
  259. return resolver_modes_t::damage;
  260. //if ( this->shots <= 0 )
  261. // return resolver_modes_t::damage;
  262.  
  263. //if ( this->shots % 3 )
  264. // return resolver_modes_t::damage;
  265.  
  266. //return resolver_modes_t::brutforce;
  267. }
  268.  
  269. bool c_resolver::resolver_data_t::is_playing_shot_anim()
  270. {
  271. const auto weapon_anim_layer = 1;
  272. const auto shooting_anim_layer = player->get_anim_overlay(weapon_anim_layer);
  273.  
  274. const auto current_activity = player->get_sequence_activity(shooting_anim_layer->sequence);
  275.  
  276. switch (current_activity)
  277. {
  278. case 961:
  279. case 964:
  280. return shooting_anim_layer->weight < 0.5f && shooting_anim_layer->cycle <= 0.04f;
  281.  
  282. default:
  283. break;
  284. }
  285.  
  286. return false;
  287. }
  288.  
  289. bool c_resolver::resolver_data_t::is_979_playing()
  290. {
  291. const auto l = player->get_anim_overlay(3);
  292.  
  293. if ((l == nullptr) || l->cycle == 0.f || l->weight == 0.f)
  294. return false;
  295.  
  296. const auto activity = player->get_sequence_activity(l->sequence);
  297.  
  298. if (l->cycle != this->previous_layer.cycle || l->weight == 1.f)
  299. {
  300. if ((activity == 979 && l->cycle < 0.01f) || (l->weight == 0.f && (this->previous_layer.cycle > 0.92f && l->cycle > 0.92f)))
  301. {
  302. this->previous_layer = *l;
  303. return true;
  304. }
  305. }
  306.  
  307. return false;
  308. }
  309.  
  310. bool c_resolver::resolver_data_t::is_desyncing()
  311. {
  312. if (this->in_shot)
  313. return false;
  314.  
  315. if (this->player->vec_velocity().length2d() > 0.1f)
  316. {
  317. if (detection_last_simtime == player->simulation_time() || detection_last_simtime == detection_pre_last_simtime)
  318. {
  319. detection_pre_last_simtime = detection_last_simtime;
  320. detection_last_simtime = player->simulation_time();
  321. return true;
  322. }
  323.  
  324. detection_pre_last_simtime = detection_last_simtime;
  325. detection_last_simtime = player->simulation_time();
  326. return false;
  327. }
  328.  
  329. detection_pre_last_simtime = detection_last_simtime;
  330. detection_last_simtime = player->simulation_time();
  331.  
  332. if (this->player->simulation_time() - this->times.last_979 <= 1.4f)
  333. return true;
  334.  
  335. if (this->player->simulation_time() - this->times.last_choke <= 1.4f)
  336. return true;
  337.  
  338. return false;
  339. }
  340.  
  341. void c_resolver::resolve_yaw(C_BasePlayer* player)
  342. {
  343. const auto index = player->ent_index();
  344.  
  345. this->rdata.at(index).should_resolve = false;
  346.  
  347. if (this->rdata.at(index).desyncing)
  348. {
  349. this->rdata.at(player->ent_index()).is_resolving = true;
  350.  
  351. player->eye_angles( ).yaw = get_resolved_yaw_by_anti_freestand ( player );
  352. return;
  353.  
  354. const auto resolver_mode = this->rdata.at(index).get_best_resolver_mode();
  355.  
  356. this->rdata.at(index).should_resolve = true;
  357.  
  358. //const auto distance = player->vec_origin().dot ( g_local->vec_origin() );
  359. //auto direction = 2 * ( distance <= 0.0f ) - 1;
  360.  
  361. //this->rdata.at ( index ).desync_add = 60.f * direction;
  362.  
  363. auto tmp = get_resolved_yaw_by_brutforce ( player );
  364. //this->rdata.at ( index ).desync_add = tmp;
  365.  
  366. switch (resolver_modes_t::damage)
  367. {
  368. case resolver_modes_t::damage:
  369. {
  370. auto tmp = get_resolved_yaw_by_damage(player);
  371.  
  372. if (tmp == 0.f)
  373. tmp = get_resolved_yaw_by_brutforce(player);
  374.  
  375. auto calc_ang = g_math.calc_angle ( g_local->vec_origin( ), player->vec_origin( ) ).yaw;
  376.  
  377. if (player->eye_angles().yaw < calc_ang)
  378. tmp = -60.f;
  379.  
  380. if ( player->eye_angles( ).yaw < calc_ang )
  381. tmp = 60.f;
  382.  
  383. this->rdata.at(index).desync_add = tmp;
  384. }
  385. break;
  386.  
  387. case resolver_modes_t::brutforce:
  388. {
  389. auto tmp = get_resolved_yaw_by_brutforce(player);
  390. this->rdata.at(index).desync_add = tmp;
  391. }
  392. break;
  393. }
  394.  
  395. tmp = get_resolved_yaw_by_brutforce ( player );
  396.  
  397. this->rdata.at ( index ).desync_add = tmp;
  398.  
  399. if ( this->rdata.at ( index ).last_hit_head.did_hit )
  400. {
  401. switch ( this->rdata.at ( index ).last_hit_head.addang )
  402. {
  403. case resolver_angle_overwrites_t::none:
  404. this->rdata.at ( index ).desync_add = 0.f;
  405. break;
  406.  
  407. case resolver_angle_overwrites_t::plus:
  408. this->rdata.at ( index ).desync_add = 60.f;
  409. break;
  410.  
  411. case resolver_angle_overwrites_t::minus:
  412. this->rdata.at ( index ).desync_add = -60.f;
  413. break;
  414.  
  415. default:
  416. ;
  417. }
  418. }
  419. else
  420. {
  421. auto tmp = get_resolved_yaw_by_damage ( player );
  422.  
  423. if ( tmp == 0.f )
  424. tmp = get_resolved_yaw_by_brutforce ( player );
  425. this->rdata.at ( index ).desync_add = tmp;
  426. switch ( resolver_mode )
  427. {
  428. case resolver_modes_t::damage:
  429. {
  430. auto tmp = get_resolved_yaw_by_damage ( player );
  431.  
  432. if ( tmp == 0.f )
  433. tmp = get_resolved_yaw_by_brutforce ( player );
  434.  
  435. this->rdata.at ( index ).desync_add = tmp;
  436. }
  437. break;
  438.  
  439. case resolver_modes_t::brutforce:
  440. this->rdata.at ( index ).desync_add = get_resolved_yaw_by_brutforce ( player );
  441. break;
  442.  
  443. default:
  444. ;
  445. }
  446. }
  447.  
  448. //auto state = player->get_base_player_anim_state( );
  449.  
  450. //if ( state && this->rdata.at ( index ).should_resolve )
  451. //{
  452. //state->m_goal_feet_yaw += g_features.resolver.rdata.at ( index ).desync_add;
  453.  
  454. //for ( ; state->m_goal_feet_yaw > 180.f ; state->m_goal_feet_yaw = state->m_goal_feet_yaw - 360.f );
  455.  
  456. // for ( ; state->m_goal_feet_yaw < -180.f ; state->m_goal_feet_yaw = state->m_goal_feet_yaw + 360.f );
  457. //}
  458.  
  459. // player->eye_angles( ).yaw += this->rdata.at ( index ).desync_add;
  460.  
  461. // this->rdata.at ( index ).last_yaw = player->eye_angles( ).yaw;
  462. }
  463. }
  464. bool Clamp(Vector& angles)
  465. {
  466. Vector a = angles;
  467. float angle;
  468. QAngle angless;
  469. g_math.angle_normalize(angle);
  470. g_math.clamp_angles(angless);
  471.  
  472. if (isnan(a.x) || isinf(a.x) ||
  473. isnan(a.y) || isinf(a.y) ||
  474. isnan(a.z) || isinf(a.z)) {
  475. return false;
  476. }
  477. else {
  478. angles = a;
  479. return true;
  480. }
  481. };
  482.  
  483. static auto GetSmoothedVelocity = [](float min_delta, Vector a, Vector b) {
  484. Vector delta = a - b;
  485. float delta_length = delta.length();
  486.  
  487. if (delta_length <= min_delta) {
  488. Vector result;
  489. if (-min_delta <= delta_length) {
  490. return a;
  491. }
  492. else {
  493. float iradius = 1.0f / (delta_length + FLT_EPSILON);
  494. return b - ((delta * iradius) * min_delta);
  495. }
  496. }
  497. else {
  498. float iradius = 1.0f / (delta_length + FLT_EPSILON);
  499. return b + ((delta * iradius) * min_delta);
  500. }
  501. };
  502. bool breaking_lby_animations(IClientEntity* e)
  503. {
  504. for (auto i = 0; i < interfaces::engine_client->get_max_clients(); i++)
  505. {
  506. const auto entity = dynamic_cast<C_BasePlayer*> (interfaces::entity_list->get_client_entity(i));
  507.  
  508. if (!e || e->is_dormant() || !entity->is_alive())
  509. return false;
  510.  
  511. for (size_t i = 0; i < entity->get_num_anim_overlays(); i++)
  512. {
  513. auto layer = entity->get_anim_overlay(i);
  514.  
  515. if (!layer)
  516. continue;
  517. if (entity->get_sequence_activity(layer->sequence) == 979)
  518. {
  519. if (layer->cycle != layer->cycle || layer->weight == 1.f)
  520. return true;
  521. }
  522. }
  523. }
  524.  
  525. return false;
  526. }
  527.  
  528. bool solve_desync_simple(IClientEntity* e)
  529.  
  530. {
  531. for (auto i = 0; i < interfaces::engine_client->get_max_clients(); i++)
  532. {
  533. const auto entity = dynamic_cast<C_BasePlayer*> (interfaces::entity_list->get_client_entity(i));
  534.  
  535. if (!e || e->is_dormant() || !entity->is_alive())
  536. return false;
  537.  
  538. bool can_miss;
  539. bool can_shoot;
  540.  
  541. if (can_miss)
  542. can_shoot = false;
  543.  
  544. for (size_t i = 0; i < entity->get_num_anim_overlays(); i++)
  545. {
  546. auto layer = entity->get_anim_overlay(i);
  547.  
  548. if (!layer)
  549. continue;
  550. if (entity->get_sequence_activity(layer->sequence) == 979)
  551. {
  552. if (layer->weight == 0.f && (layer->prev_cycle > 0.92f && layer->cycle > 0.92f))
  553. return true;
  554. }
  555. }
  556. }
  557.  
  558. return false;
  559. }
  560.  
  561. float feet_yaw_delta(float first, float second)
  562. {
  563. return first - second;
  564. }
  565. bool delta_35(float first, float second)
  566. {
  567. if (first - second <= 35.f && first - second >= -35.f)
  568. {
  569. return true;
  570. }
  571. return false;
  572. }
  573. bool delta_20(float first, float second)
  574. {
  575. if (first - second <= 20.f && first - second >= -20.f)
  576. {
  577. return true;
  578. }
  579. return false;
  580. }
  581.  
  582.  
  583. void c_resolver::resolve_brutao(C_BasePlayer* player)
  584. {
  585. // BRUTE FORCE FIXED BY sFlux
  586. // creditos para-> https://yougame.biz/threads/96665/
  587. const float at_target_yaw = g_math.calc_angle(player->vec_origin(), g_local->vec_origin()).yaw;
  588.  
  589. auto animstate = player->get_base_player_anim_state();
  590.  
  591. switch (this->rdata.at(player->ent_index()).shots % 2)
  592. {
  593. case 0:
  594. player->eye_angles().yaw = at_target_yaw + 180.0f;
  595. break;
  596. case 1:
  597. player->eye_angles().yaw = at_target_yaw - 180.0f;
  598. break;
  599. }
  600.  
  601.  
  602.  
  603. }
  604.  
  605. void c_resolver::resolve_pitch(C_BasePlayer* player)
  606. {
  607. // creditos para-> https://yougame.biz/threads/96665/
  608. auto animstate = player->get_base_player_anim_state();
  609.  
  610. /* data */
  611. auto ground_fraction = *(float*)(animstate + 0x11C);
  612. auto duck_ammount = *(float*)(animstate + 0xA4);
  613. auto ducking_speed = std::max(0.f, std::min(1.f, *reinterpret_cast<float*> (animstate + 0xFC)));
  614. auto running_speed = std::max(0.f, std::min(*reinterpret_cast<float*> (animstate + 0xF8), 1.f));
  615. /* offsets */
  616. auto& resolverInfo = this->rdata.at(player->ent_index());
  617. // Rebuild setup velocity to receive flMinBodyYaw and flMaxBodyYaw
  618. Vector velocity = player->vec_velocity();
  619. float spd = velocity.length();
  620. if (spd > std::powf(1.2f * 260.0f, 2.f)) {
  621. Vector velocity_normalized = velocity.normalized();
  622. velocity = velocity_normalized * (1.2f * 260.0f);
  623. }
  624.  
  625. float m_flChokedTime = player->GetSimulationTime() - player->GetOldSimulationTime();
  626. float v25 = animstate->m_fDuckAmount + animstate->m_fLandingDuckAdditiveSomething * (0.0f, 1.0f);
  627. float v26 = animstate->m_fDuckAmount;
  628. float v27 = m_flChokedTime * 6.0f;
  629. float v28;
  630.  
  631. // clamp
  632. if ((v25 - v26) <= v27) {
  633. if (-v27 <= (v25 - v26))
  634. v28 = v25;
  635. else
  636. v28 = v26 - v27;
  637. }
  638. else {
  639. v28 = v26 + v27;
  640. }
  641.  
  642. auto abs_velocity = *reinterpret_cast<vector_t*> (uintptr_t(player) + 0x94);
  643.  
  644. Vector animationVelocity = GetSmoothedVelocity(m_flChokedTime = 2000.0f, velocity, player->vec_velocity());
  645.  
  646. float speed = std::fminf(animationVelocity.length(), 260.0f);
  647.  
  648. auto weapon = g_local->active_weapon().get();
  649.  
  650. float flMaxMovementSpeed = 260.0f;
  651. if (weapon) {
  652. flMaxMovementSpeed = std::fmaxf(g_local->maxspeed(), 0.001f);
  653. }
  654.  
  655. float flRunningSpeed = speed / (flMaxMovementSpeed * 0.520f);
  656. float flDuckingSpeed = speed / (flMaxMovementSpeed * 0.340f);
  657.  
  658. flRunningSpeed = g_math.angle_normalize(flRunningSpeed * 0.0f > 1.0f);
  659.  
  660.  
  661. auto flYawModifier = (((ground_fraction * -0.3f) - 0.2f) * running_speed) + 1.0f;
  662.  
  663.  
  664. if (duck_ammount > 0.0f)
  665. flYawModifier = flYawModifier + ((duck_ammount * ducking_speed) * (0.5f - flYawModifier));
  666.  
  667. float m_flMaxBodyYaw = *(float*)(uintptr_t(animstate) + 0x334) * flYawModifier;
  668. float m_flMinBodyYaw = *(float*)(uintptr_t(animstate) + 0x330) * flYawModifier;
  669.  
  670. float flMinBodyYaw = std::fabsf(m_flMinBodyYaw * flYawModifier);
  671. float flMaxBodyYaw = std::fabsf(m_flMaxBodyYaw * flYawModifier);
  672.  
  673. float flEyeYaw = player->eye_angles().yaw;
  674. float flEyeDiff = std::remainderf(flEyeYaw - resolverInfo.goal_feet_yaw, 360.f);
  675.  
  676. if (flEyeDiff <= flMaxBodyYaw) {
  677. if (flMinBodyYaw > flEyeDiff)
  678. resolverInfo.goal_feet_yaw = fabs(flMinBodyYaw) + flEyeYaw;
  679. }
  680. else {
  681. resolverInfo.goal_feet_yaw = flEyeYaw - fabs(flMaxBodyYaw);
  682. }
  683.  
  684. resolverInfo.goal_feet_yaw = std::remainderf(resolverInfo.goal_feet_yaw, 360.f);
  685.  
  686. if (speed > 0.1f || fabs(velocity.z) > 100.0f) {
  687. resolverInfo.goal_feet_yaw = g_math.fl_approach_angle(
  688. flEyeYaw,
  689. resolverInfo.goal_feet_yaw,
  690. ((ground_fraction * 20.0f) + 30.0f)
  691. * m_flChokedTime);
  692. }
  693. else {
  694. resolverInfo.goal_feet_yaw = g_math.fl_approach_angle(
  695. player->lower_body_yaw_target(),
  696. resolverInfo.goal_feet_yaw,
  697. m_flChokedTime * 100.0f);
  698. }
  699.  
  700. float Left = flEyeYaw - flMinBodyYaw;
  701. float Right = flEyeYaw + flMaxBodyYaw;
  702.  
  703. float resolveYaw;
  704.  
  705. switch (this->rdata.at(player->ent_index()).shots % 2) {
  706. case 0: // brute left side
  707. resolveYaw = Left;
  708. break;
  709. case 1: // brute fake side
  710. resolveYaw = resolverInfo.goal_feet_yaw;
  711. break;
  712. case 2: // brute right side
  713. resolveYaw = Right;
  714. break;
  715. default:
  716. break;
  717. }
  718.  
  719. resolveYaw = animstate->m_flAbsRotation();
  720. }
  721.  
  722. float c_resolver::get_resolved_yaw_by_damage(C_BasePlayer* player)
  723. {
  724. if (player->simulation_time() == this->rdata.at(player->ent_index()).last_damage_data.simtime)
  725. {
  726. switch (this->rdata.at(player->ent_index()).last_damage_data.overwrite)
  727. {
  728. case resolver_angle_overwrites_t::none:
  729. return 0.f;
  730.  
  731. case resolver_angle_overwrites_t::plus:
  732. return 60.f;
  733.  
  734. case resolver_angle_overwrites_t::minus:
  735. return -60.f;
  736. }
  737. }
  738.  
  739. constexpr auto radius = 45.f;
  740. const auto eye_pos = player->get_eye_pos();
  741.  
  742. const auto get_head_pos = [&](float add_angle) -> vector_t
  743. {
  744. add_angle += player->eye_angles().yaw;
  745. return vector_t(radius * cos(deg2rad(add_angle)) + eye_pos.x, radius * sin(deg2rad(add_angle)) + eye_pos.y, eye_pos.z + 4.f);
  746. };
  747.  
  748. auto local_eye_pos = g_local->get_eye_pos();
  749.  
  750. auto tmp = get_head_pos(60.f);
  751. const auto t1 = g_features.autowall.get_thickness(local_eye_pos, tmp, -1.f);
  752. // const auto hit1 = g_features.autowall.can_hit_point ( tmp, g_local->get_eye_pos( ) );
  753. tmp = get_head_pos(-60.f);
  754. const auto t2 = g_features.autowall.get_thickness(local_eye_pos, tmp, -1.f);
  755. //const auto hit2 = g_features.autowall.can_hit_point ( tmp, g_local->get_eye_pos( ) );
  756.  
  757. auto overwrite_to_angle = [&](resolver_angle_overwrites_t mode) -> float
  758. {
  759. switch (mode)
  760. {
  761. case resolver_angle_overwrites_t::none:
  762. return 0.f;
  763.  
  764. case resolver_angle_overwrites_t::plus:
  765. return 60.f;
  766.  
  767. case resolver_angle_overwrites_t::minus:
  768. return -60.f;
  769.  
  770. case resolver_angle_overwrites_t::max:
  771. return 0.f;
  772.  
  773. default:
  774. return 0.f;
  775. }
  776. };
  777.  
  778. auto is_valid_direction = [](resolver_angle_overwrites_t mode) -> bool
  779. {
  780. switch (mode)
  781. {
  782. case resolver_angle_overwrites_t::none:
  783. return false;
  784.  
  785. case resolver_angle_overwrites_t::plus:
  786. return true;
  787.  
  788. case resolver_angle_overwrites_t::minus:
  789. return true;
  790.  
  791. case resolver_angle_overwrites_t::max:
  792. return false;
  793.  
  794. default:
  795. return false;
  796. }
  797. };
  798.  
  799. this->rdata.at(player->ent_index()).last_damage_data.simtime = player->simulation_time();
  800.  
  801. //if ( !hit1 && !hit2 && is_valid_direction ( this->rdata.at ( player->ent_index( ) ).last_can_hit_head_points.last_direction ) && player->simulation_time( )
  802. // - this->rdata.at ( player->ent_index( ) ).last_can_hit_head_points.last_simtime < 5.f )
  803. // return overwrite_to_angle ( this->rdata.at ( player->ent_index( ) ).last_can_hit_head_points.last_direction );
  804.  
  805. //if ( ( !hit1 && hit2 ) || ( !hit2 && hit1 ) )
  806. //{
  807. // if ( !hit1 && hit2 )
  808. // {
  809. // this->rdata.at ( player->ent_index( ) ).last_can_hit_head_points.last_simtime = player->simulation_time( );
  810. // this->rdata.at ( player->ent_index( ) ).last_can_hit_head_points.last_direction = resolver_angle_overwrites_t::plus;
  811. // return max_rotation;
  812. // }
  813.  
  814. // if ( !hit2 && hit1 )
  815. // {
  816. // this->rdata.at ( player->ent_index( ) ).last_can_hit_head_points.last_simtime = player->simulation_time( );
  817. // this->rdata.at ( player->ent_index( ) ).last_can_hit_head_points.last_direction = resolver_angle_overwrites_t::minus;
  818. // return -max_rotation;
  819. // }
  820. //}
  821.  
  822. if (t1 == t2)
  823. {
  824. this->rdata.at(player->ent_index()).last_damage_data.overwrite = resolver_angle_overwrites_t::none;
  825. return 0.f;
  826. }
  827.  
  828. if (t1 > t2)
  829. {
  830. this->rdata.at(player->ent_index()).last_damage_data.overwrite = resolver_angle_overwrites_t::plus;
  831. return 60.f;
  832. }
  833.  
  834. this->rdata.at(player->ent_index()).last_damage_data.overwrite = resolver_angle_overwrites_t::minus;
  835. return -60.f;
  836. }
  837.  
  838. float c_resolver::get_resolved_yaw_by_brutforce(C_BasePlayer* player) const
  839. {
  840. switch (this->rdata.at(player->ent_index()).shots % 2)
  841. {
  842. case 0:
  843. return 60.f;
  844.  
  845. case 1:
  846. return -60.f;
  847.  
  848. default:
  849. return 0.f;
  850. }
  851. }
  852.  
  853. float c_resolver::get_resolved_yaw_by_anti_freestand(C_BasePlayer* player)
  854. {
  855. auto local_eye_position = ctx::client.local->get_eye_pos(g_features.animations.m_real_state);
  856. auto enemy_eye_position = player->get_eye_pos();
  857.  
  858. const auto backwards = g_math.calc_angle(ctx::client.local->vec_origin(), player->vec_origin()).yaw - 180.f;
  859.  
  860. const auto get_thickness = [&](const float end_rot, const float used_radius = 60.f) -> float
  861. {
  862. auto rotation_pos = vector_t(used_radius * cos(deg2rad(end_rot)) + enemy_eye_position.x,
  863. used_radius * sin(deg2rad(end_rot)) + enemy_eye_position.y,
  864. enemy_eye_position.z + 4.f);
  865.  
  866. return g_features.autowall.get_thickness(local_eye_position, rotation_pos, 2048.f);
  867. };
  868.  
  869. const auto minus = get_thickness(backwards - 90.f);
  870. const auto plus = get_thickness(backwards + 90.f);
  871.  
  872. if (minus == plus)
  873. return player->eye_angles().yaw;
  874.  
  875. if (minus > plus)
  876. return backwards - 90.f;
  877.  
  878. return backwards + 90.f;
  879. }
  880.  
  881. bool resolverdata_t::update(C_BasePlayer* player)
  882. {
  883. if (!player || player->is_dormant() || !player->is_alive())
  884. return false;
  885.  
  886. if (!m_init)
  887. {
  888. m_last_simtime = player->simulation_time();
  889. m_init = true;
  890. }
  891.  
  892. return true;
  893. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement