Skip to content

Instantly share code, notes, and snippets.

@raspbianlike
Created August 11, 2019 14:08
Show Gist options
  • Save raspbianlike/7c221059d7eb5caf44ed61285270d591 to your computer and use it in GitHub Desktop.
Save raspbianlike/7c221059d7eb5caf44ed61285270d591 to your computer and use it in GitHub Desktop.
spookware silent autoknife
#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