bool aimbot::Think(CUserCmd* cmd) { float best = std::numeric_limits<float>::quiet_NaN(); if (css()) { if (!GetMaterialParameters) GetMaterialParameters = (void (__cdecl*)(int, float&, float&))util::FindPattern("client", "\x55\x8B\xEC\x8B\x45\x08\x83\xC0\xBD"); if (!GetBulletTypeParameters) GetBulletTypeParameters = (void (__stdcall*)(int, float&, float&))util::FindPattern("client", "\x55\x8B\xEC\x56\x8B\x75\x08\x68????\x56\xE8????\x83\xC4\x08\x84\xC0" ); } if (!bf) bf = new BulletFilter(); target_id = 0; bf->hSelf = lp; Vector sp = lp->GetShootPos(); Vector tp = Vector(); CBaseEntity* w = lp->GetActiveWeapon(); if (gmod() && MENU_SPAWPROT == 3 && ALPHA(lp->GetMDLColor()) == 200) return 0; int lteam = lp->GetTeam(); int maxcl = (MENU_NPCAIMBT ? ents->GetHighestEntityIndex() : globals->max_clients); for (int i = 1; i <= maxcl; ++i) if (CBaseEntity* pl = ents->GetClientEntity(i)) { if (pl == lp) continue; //if (pl->IsDormant()) // continue; if (!pl->GetModel()) continue; bool npc = i > globals->max_clients; bool lowp = 1; if (npc) { const char* cclass = pl->GetClientClass()->m_pNetworkName; if (gmod()) { RecvTable* p = pl->GetClientClass()->m_pRecvTable->m_pProps[0].m_pDataTable; if ((strcmp(cclass, "CAI_BaseNPC") && (!p || strcmp(p->m_pNetTableName, "DT_AI_BaseNPC"))) || !pl->IsAlive()) continue; } if (tf2()) { if ( lowp = ( strcmp(cclass, "CObjectSentrygun") || ReadPtr<bool>(pl, m_bHasSapper) ) && ( strcmp(cclass, "CTFGrenadePipebombProjectile") || !ReadPtr<int>(pl, m_iType) || !ReadPtr<bool>(pl, m_bTouched) || !pl->IsDummyProjectile() || sp.DistTo(lp->GetAbsOrigin()) > 768.f ) ) continue; if (pl->GetTeam() == lteam) continue; } } else if (!DoStateCheck(pl)) continue; if (!pl->UpdateBones()) continue; float rate = Rate(lp, pl, npc); if (!lowp) rate *= 0.1f; if (rate > best) continue; if (css() && pl->GetOrigin().DistTo(sp) > 8192.f) continue; int aim = GetAimBone(pl); bool doscan = 1; if (pl->GetHitbox(aim)) { Vector box = pl->GetBoxPos(aim); if (BulletTrace(sp, box, pl)) { target_id = i; best = rate; tp = box; continue; } } if (doscan && MENU_BONESCAN) { int m = pl->Hitboxes(); for (int j = 0; j < m; ++j) { if (j == aim) continue; if (pl->GetHitbox(j)) { Vector box = pl->GetBoxPos(j); if (BulletTrace(sp, box, pl)) { target_id = i; best = rate; tp = box; continue; } } } } } if (target_id > 0) { CBaseEntity* pl = ents->GetClientEntity(target_id); if (!pl) return 0; if (target_id > globals->max_clients) // TODO: predict non-lag comepnsated stuff { tp -= pl->GetAbsOrigin(); tp += pl->GetOrigin() + pl->GetVelocity() * engine->GetNetChannel()->GetPing(); } cmd->viewangles = (tp - sp).Angle(); NormalizeAngles(cmd->viewangles); if (MENU_AUTOSHOT) add(cmd->buttons, IN_ATTACK); return 1; } return 0; }