Created
August 11, 2019 14:08
-
-
Save raspbianlike/7c221059d7eb5caf44ed61285270d591 to your computer and use it in GitHub Desktop.
spookware silent autoknife
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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 | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment