void Aimbot::CreateMove(CUserCmd* cmd) { Aimbot::UpdateValues(); if (!Settings::Aimbot::enabled) return; QAngle oldAngle; engine->GetViewAngles(oldAngle); float oldForward = cmd->forwardmove; float oldSideMove = cmd->sidemove; QAngle angle = cmd->viewangles; shouldAim = Settings::Aimbot::AutoShoot::enabled; C_BasePlayer* localplayer = (C_BasePlayer*) entityList->GetClientEntity(engine->GetLocalPlayer()); if (!localplayer || !localplayer->GetAlive()) return; if (Settings::Aimbot::IgnoreJump::enabled && !(localplayer->GetFlags() & FL_ONGROUND)) return; C_BaseCombatWeapon* activeWeapon = (C_BaseCombatWeapon*) entityList->GetClientEntityFromHandle(localplayer->GetActiveWeapon()); if (!activeWeapon || activeWeapon->GetInReload()) return; CSWeaponType weaponType = activeWeapon->GetCSWpnData()->GetWeaponType(); if (weaponType == CSWeaponType::WEAPONTYPE_C4 || weaponType == CSWeaponType::WEAPONTYPE_GRENADE || weaponType == CSWeaponType::WEAPONTYPE_KNIFE) return; Bone aw_bone; float bestDamage = 0.0f; C_BasePlayer* player = GetClosestPlayer(cmd, true, aw_bone, bestDamage); if (player) { bool skipPlayer = false; Vector eVecTarget = player->GetBonePosition((int) aw_bone); Vector pVecTarget = localplayer->GetEyePosition(); if (Settings::Aimbot::SmokeCheck::enabled && LineGoesThroughSmoke(pVecTarget, eVecTarget, true)) skipPlayer = true; if (Settings::Aimbot::FlashCheck::enabled && localplayer->GetFlashBangTime() - globalVars->curtime > 2.0f) skipPlayer = true; if (skipPlayer) player = nullptr; if (Settings::Aimbot::AutoAim::enabled && !skipPlayer) { if (cmd->buttons & IN_ATTACK && !Settings::Aimbot::aimkeyOnly) shouldAim = true; if (inputSystem->IsButtonDown(Settings::Aimbot::aimkey)) shouldAim = true; if (shouldAim) { if (Settings::Aimbot::Prediction::enabled) { pVecTarget = VelocityExtrapolate(localplayer, pVecTarget); // get eye pos next tick eVecTarget = VelocityExtrapolate(player, eVecTarget); // get target pos next tick } angle = Math::CalcAngle(pVecTarget, eVecTarget); if (Settings::Aimbot::ErrorMargin::enabled) ApplyErrorToAngle(&angle, Settings::Aimbot::ErrorMargin::value); } } } Aimbot::AimStep(player, angle, cmd); Aimbot::AutoCrouch(player, cmd); Aimbot::AutoSlow(player, oldForward, oldSideMove, bestDamage, activeWeapon, cmd); Aimbot::AutoPistol(activeWeapon, cmd); Aimbot::AutoShoot(player, activeWeapon, cmd); Aimbot::RCS(angle, player, cmd); Aimbot::Smooth(player, angle, cmd); Aimbot::ShootCheck(activeWeapon, cmd); Aimbot::NoShoot(activeWeapon, player, cmd); Math::NormalizeAngles(angle); Math::ClampAngles(angle); if (angle != cmd->viewangles) cmd->viewangles = angle; Math::CorrectMovement(oldAngle, cmd, oldForward, oldSideMove); if (!Settings::Aimbot::silent) engine->SetViewAngles(cmd->viewangles); }
C_BasePlayer* GetClosestPlayer(CUserCmd* cmd, bool visible, Bone& bestBone, float& bestDamage, AimTargetType aimTargetType = AimTargetType::FOV) { if (Settings::Aimbot::AutoAim::realDistance) aimTargetType = AimTargetType::REAL_DISTANCE; bestBone = static_cast<Bone>(Settings::Aimbot::bone); C_BasePlayer* localplayer = (C_BasePlayer*) entityList->GetClientEntity(engine->GetLocalPlayer()); C_BasePlayer* closestEntity = NULL; // TODO Change the big value with a distance/fov slider float bestFov = Settings::Aimbot::AutoAim::fov; float bestRealDistance = Settings::Aimbot::AutoAim::fov * 5.f; float bestDistance = 999999999.0f; int bestHp = 100; if (!localplayer) return NULL; for (int i = 1; i < engine->GetMaxClients(); ++i) { C_BasePlayer* player = (C_BasePlayer*) entityList->GetClientEntity(i); if (!player || player == localplayer || player->GetDormant() || !player->GetAlive() || player->GetImmune()) continue; if (!Settings::Aimbot::friendly && player->GetTeam() == localplayer->GetTeam()) continue; IEngineClient::player_info_t entityInformation; engine->GetPlayerInfo(i, &entityInformation); if (std::find(Aimbot::friends.begin(), Aimbot::friends.end(), entityInformation.xuid) != Aimbot::friends.end()) continue; Vector eVecTarget = player->GetBonePosition((int) Settings::Aimbot::bone); Vector pVecTarget = localplayer->GetEyePosition(); QAngle viewAngles; engine->GetViewAngles(viewAngles); float distance = pVecTarget.DistTo(eVecTarget); float fov = Math::GetFov(viewAngles, Math::CalcAngle(pVecTarget, eVecTarget)); float real_distance = GetRealDistanceFOV(distance, Math::CalcAngle(pVecTarget, eVecTarget), cmd); int hp = player->GetHealth(); if (aimTargetType == AimTargetType::DISTANCE && distance > bestDistance) continue; if (aimTargetType == AimTargetType::FOV && fov > bestFov) continue; if (aimTargetType == AimTargetType::REAL_DISTANCE && real_distance > bestRealDistance) continue; if (aimTargetType == AimTargetType::HP && hp > bestHp) continue; if (visible && !Settings::Aimbot::AutoWall::enabled && !Entity::IsVisible(player, Settings::Aimbot::bone)) continue; bestBone = static_cast<Bone>(Entity::GetBoneByName(player, targets[(int) Settings::Aimbot::bone])); if (Settings::Aimbot::AutoWall::enabled) { float damage = 0.0f; Bone bone; GetBestBone(player, damage, bone); if (damage >= bestDamage && damage >= Settings::Aimbot::AutoWall::value) { bestDamage = damage; bestBone = bone; closestEntity = player; } } else { closestEntity = player; bestFov = fov; bestRealDistance = real_distance; bestDistance = distance; bestHp = hp; } } return closestEntity; }