Official site anti-cheat Ultra Core Protector

Home Download F.A.Q. Addons Monitor Forum Support Advertise English version site UCP Anti-Cheat  Russian version site UCP Anti-Cheat
Ultra Core Protector - is the client-server anti-cheat freeware, for server protection from unscrupulous players.

Abilities Supported games  
Half-Life
Condition Zero
Counter-Strike 1.6
Day of Defeat
Adrenaline Gamer
Team Fortress Classic
Counter-Strike Source
MU Online
Ragnarok Online
Half-Life 2 Deathmatch
Adrenaline Gamer 2
Team Fortress 2
CSGO: Backtrack Triggerbot

Hello. Here is a simple backtrack triggerbot. It shoots not only when your crosshair is at enemy, but also when it’s on one of the enemy’s previous records. It should be pretty obvious how it looks so I didn’t bothered making video. Call in CreateMove.

static std::optional GetIntersectionPoint(const Vector& start, const Vector& end, const Vector& mins, const Vector& maxs, float radius)
{
auto sphereRayIntersection = [start, end, radius](auto&& center) -> std::optional
{
auto direction = (end - start).Normalize();

auto q = center - start;
auto v = q.DotProduct(direction);
auto d = radius * radius - (q.LengthSqr() - v * v);

if (d < FLT_EPSILON) return {}; return start + direction * (v - std::sqrt(d)); }; auto delta = (maxs - mins).Normalize(); for (size_t i{}; i < std::floor(mins.Dist(maxs)); ++i) { if (auto intersection = sphereRayIntersection(mins + delta * float(i)); intersection) return intersection; } if (auto intersection = sphereRayIntersection(maxs); intersection) return intersection; return {}; } static std::optional GetTargetRecord(CEntity* entity, const Vector& start, const Vector& end)
{
auto hdr = Interfaces::ModelInfo->GetStudioModel(entity->GetModel());
if (!hdr)
return {};

auto set = hdr->GetHitboxSet(0);
if (!set)
return {};

for (auto& record : LagCompensation.GetRecordsForEntity(entity))
{
for (size_t i{}; i < set->numhitboxes; ++i)
{
auto hitbox = set->GetHitbox(i);
if (!hitbox || hitbox->radius == -1.f)
continue;

Vector mins, maxs;
VectorTransform(hitbox->bbmin, record.matrix[hitbox->bone], mins);
VectorTransform(hitbox->bbmax, record.matrix[hitbox->bone], maxs);

if (auto intersection = GetIntersectionPoint(start, end, mins, maxs, hitbox->radius); intersection)
{
Ray_t ray;
CGameTrace trace;
CTraceFilter filter;

filter.pSkip = CEntity::GetLocalPlayer();
ray.Init(start, *intersection);

Interfaces::Trace->TraceRay(ray, MASK_SHOT | CONTENTS_GRATE, &filter, &trace);
if (!trace.DidHit()) //position isn't behind wall
return record;
}
}
}

return {};
}

void BacktrackTrigger(CUserCmd* cmd)
{
auto local = CEntity::GetLocalPlayer();
auto weapon = local->GetWeapon();
auto data = weapon->GetWeaponData();

Vector viewangles;
Vector start = local->GetEyePos();
Vector end;

Interfaces::Engine->GetViewAngles(viewangles);

AngleVectors(viewangles + local->GetAimPunch(), &end);
end = start + (end * data->range);

for (size_t i{}; i <= Interfaces::GlobalVars->maxClients; ++i)
{
auto entity = Interfaces::EntityList->GetClientEntity(i);
if (!entity || !entity->IsEnemy() || !entity->GetHealth() || entity->IsDormant() || entity->IsImmune())
continue;

if (auto record = GetTargetRecord(entity, start, end); record)
{
if (!data->full_auto)
{
if (cmd->tick_count % 2) cmd->buttons |= IN_ATTACK;
else cmd->buttons &= ~IN_ATTACK;
}
else cmd->buttons |= IN_ATTACK;

//backtrack your target entity

break;
}
}
}

Credits: @superdoc1234 for ray capsule intersection algorithm.

EDIT: C++17 compiler is required due to usage of optional and if with initializers.