Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "autoknife.h"
- bool AutoKnife::IsPlayerBehind(C_BasePlayer *localplayer, C_BasePlayer *player) {
- Vector toTarget = (localplayer->GetLocalOrigin() - player->GetLocalOrigin()).Normalize();
- Vector playerViewAngles;
- Math::AngleVectors(*player->GetEyeAngles(), playerViewAngles);
- if (toTarget.Dot(playerViewAngles) > -0.475f)
- return false;
- else
- return true;
- }
- int AutoKnife::GetKnifeDamageDone(C_BasePlayer *localplayer, C_BasePlayer *player) {
- //damage: unarmored/armored
- //leftclick: 39/33
- //rightclick: 55/65
- //backstab leftclick: 90/76
- //backstab rightclick: 180/153
- bool backstab = IsPlayerBehind(localplayer, player);
- int armor = player->GetArmor();
- if (!backstab) {
- if (armor > 0)
- return 33; // 21
- else
- return 39; // 25
- } else {
- if (armor > 0)
- return 76; // 76
- else
- return 90; // 90
- }
- }
- int AutoKnife::GetKnife2DamageDone(C_BasePlayer *localplayer, C_BasePlayer *player) {
- //damage: unarmored/armored
- //leftclick: 39/33
- //rightclick: 55/65
- //backstab leftclick: 90/76
- //backstab rightclick: 180/153
- bool backstab = IsPlayerBehind(localplayer, player);
- int armor = player->GetArmor();
- if (!backstab) {
- if (armor > 0)
- return 55;
- else
- return 65;
- } else {
- return 100;
- }
- }
- static Vector GetClosestSpot(CUserCmd *cmd, C_BasePlayer *localPlayer, C_BasePlayer *enemy) {
- QAngle viewAngles;
- engine->GetViewAngles(viewAngles);
- float tempFov = Settings::Aimbot::AutoAim::fov;
- float tempDistance = Settings::Aimbot::AutoAim::fov * 5.f;
- Vector pVecTarget = localPlayer->GetEyePosition();
- Vector tempSpot = {0, 0, 0};
- bool baimSpots[] =
- {
- //Head, Neck, Upper Spine, Middle Spine, Lower Spine, Pelvis, Hip
- true, true, true, true, true, true, true, // center mass
- //Collarbone, Shoulder, Armpit, Bicep, Elbow, Forearm, Wrist
- false, false, false, false, false, false, false, // left arm
- //Collarbone, Shoulder, Armpit, Bicep, Elbow, Forearm, Wrist
- false, false, false, false, false, false, false, // right arm
- //Buttcheek, Thigh, Knee, Ankle, Sole
- false, false, false, false, false, // left leg
- //Buttcheek, Thigh, Knee, Ankle, Sole
- false, false, false, false, false // right leg
- };
- const std::map<int, int> *modelType = Util::GetModelTypeBoneMap(enemy);
- static int len = 0;
- len = sizeof(Settings::Aimbot::AutoAim::desiredBones) / sizeof(Settings::Aimbot::AutoAim::desiredBones[0]);
- for (int i = 0; i < len; i++) {
- if (Resolver::shouldBaim) {
- if (!baimSpots[i])
- continue;
- } else {
- if (!Settings::Aimbot::AutoAim::desiredBones[i])
- continue;
- }
- int boneID = (*modelType).at(i);
- if (boneID == (int) Bone::INVALID)
- continue;
- Vector cbVecTarget = enemy->GetBonePosition(boneID);
- float cbFov = Math::GetFov(viewAngles, Math::CalcAngle(pVecTarget, cbVecTarget));
- if (cbFov < tempFov) {
- if (Entity::IsVisibleThroughEnemies(enemy, boneID)) {
- tempFov = cbFov;
- tempSpot = cbVecTarget;
- }
- }
- }
- return tempSpot;
- }
- void AutoKnife::CreateMove(CUserCmd *cmd) {
- if (!engine->IsInGame())
- return;
- if (!Settings::AutoKnife::enabled)
- return;
- if (!inputSystem->IsButtonDown(Settings::Triggerbot::key) && Settings::AutoKnife::onKey)
- return;
- C_BasePlayer *localplayer = (C_BasePlayer *) entityList->GetClientEntity(engine->GetLocalPlayer());
- if (!localplayer || !localplayer->GetAlive())
- return;
- C_BaseCombatWeapon *activeWeapon = (C_BaseCombatWeapon *) entityList->GetClientEntityFromHandle(
- localplayer->GetActiveWeapon());
- if (!activeWeapon)
- return;
- ItemDefinitionIndex itemDefinitionIndex = *activeWeapon->GetItemDefinitionIndex();
- if (!Util::Items::IsKnife(itemDefinitionIndex) && itemDefinitionIndex != ItemDefinitionIndex::WEAPON_TASER)
- return;
- if (itemDefinitionIndex == ItemDefinitionIndex::WEAPON_TASER && activeWeapon->GetAmmo() == 0)
- return;
- float oldForward = cmd->forwardmove;
- float oldSideMove = cmd->sidemove;
- QAngle oldAngle = cmd->viewangles;
- QAngle aimAngle;
- bool shouldAim = false;
- 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 (player->GetTeam() != localplayer->GetTeam() && !Settings::AutoKnife::Filters::enemies)
- continue;
- if (player->GetTeam() == localplayer->GetTeam() && !Settings::AutoKnife::Filters::allies)
- continue;
- float playerDistance = localplayer->GetLocalOrigin().DistTo(player->GetLocalOrigin());
- if (playerDistance > 183.0f)
- continue;
- if (!Entity::IsVisible(player, (int) Bone::BONE_PELVIS))
- return;
- if (activeWeapon->GetNextPrimaryAttack() < globalVars->curtime) {
- aimAngle = Math::CalcAngle(localplayer->GetEyePosition(), player->GetBonePosition((int) Bone::BONE_PELVIS));
- if (itemDefinitionIndex == ItemDefinitionIndex::WEAPON_TASER) {
- if (playerDistance <= ((localplayer->GetFlags() & FL_ONGROUND) ? 183.0f : 120.0f)) {
- cmd->buttons |= IN_ATTACK;
- shouldAim = true;
- }
- } else {
- if (playerDistance <= 65.0f && GetKnife2DamageDone(localplayer, player) >= player->GetHealth()) {
- cmd->buttons |= IN_ATTACK2;
- shouldAim = true;
- } else if (IsPlayerBehind(localplayer, player) && playerDistance <= 65.0f) {
- cmd->buttons |= IN_ATTACK2;
- shouldAim = true;
- } else if (playerDistance <= 78.0f) {
- if (IsPlayerBehind(localplayer, player))
- continue;
- shouldAim = true;
- if (playerDistance <= 65.0f &&
- (2 * (GetKnifeDamageDone(localplayer, player)) + GetKnife2DamageDone(localplayer, player) -
- 13) < player->GetHealth())
- cmd->buttons |= IN_ATTACK2;
- else
- cmd->buttons |= IN_ATTACK;
- }
- }
- if (shouldAim) {
- Math::ClampAngles(aimAngle);
- cmd->viewangles = aimAngle;
- if (!Settings::AutoKnife::silent)
- engine->SetViewAngles(cmd->viewangles);
- Math::CorrectMovement(oldAngle, cmd, oldForward, oldSideMove);
- //CreateMove::sendPacket = false; // prevent this kind of flicking thing on community servers
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement