Keep Ev0lving, Stay Fatal
-
Автор темы
- #1
Ах да, заранее скажу. Половина проверок будет скипаться из за неправильной логики.
В целом, антифристенд ресольверы это глупая вещь, которая работает 50 на 50.
Кстати, я заранее уже сделал такую вещь как TracingMode. Она поможет вам понять какие проверки чаще всего неправильно детектят, а также те, которые скипаются всегда. (Рад был стараться).
Многие не ожидали от меня такого говнокода. Спешу успокоить, я делал это в 4 часа ночи рофла ради.
В будущем постараюсь скидывать действительно полезные вещи, поэтому не обижайте.
В целом, антифристенд ресольверы это глупая вещь, которая работает 50 на 50.
Кстати, я заранее уже сделал такую вещь как TracingMode. Она поможет вам понять какие проверки чаще всего неправильно детектят, а также те, которые скипаются всегда. (Рад был стараться).
C++:
bool CResolver::DetectSide(IBasePlayer* player)
{
if (!player || !player->isAlive())
return false;
auto idx = player->GetIndex();
if (!idx)
return false;
if (flLeftDamage > 9 && flRightDamage > 9 /*&& flBackDamage < 10*/)
{
if (fabs(flLeftDamage - flRightDamage) > 10)
{
if (flLeftDamage > flRightDamage)
{
FreestandSide[idx] = 1; // ROTATE_LEFT
TracingMode[idx] = "dAA";
return true;
}
else
{
FreestandSide[idx] = -1; // ROTATE_RIGHT
TracingMode[idx] = "dBA";
return true;
}
}
else if (flBackDamage < 10)
{
if (flLeftDamage > flRightDamage)
{
FreestandSide[idx] = 1; // ROTATE_LEFT
TracingMode[idx] = "dCA";
return true;
}
else
{
FreestandSide[idx] = -1; // ROTATE_RIGHT
TracingMode[idx] = "dDA";
return true;
}
}
else
{
if (fabs(flLeftFraction - flRightFraction) < flBackFraction)
{
if (flLeftFraction > flRightFraction)
{
FreestandSide[idx] = 1;
TracingMode[idx] = "dEA";
return true;
}
else
{
FreestandSide[idx] = -1;
TracingMode[idx] = "dFA";
return true;
}
}
}
}
else if (flLeftDamage != flRightDamage)
{
if (flLeftDamage > flBackDamage && flRightDamage < flBackDamage)
{
FreestandSide[idx] = 1; // ROTATE_LEFT
TracingMode[idx] = "dGA";
return true;
}
else if (flRightDamage > flBackDamage && flLeftDamage < flBackDamage)
{
FreestandSide[idx] = -1; // ROTATE_RIGHT
TracingMode[idx] = "dHA";
return true;
}
else
{
if (fabs(flLeftFraction - flRightFraction) < flBackFraction)
{
if (flLeftFraction > flRightFraction)
{
FreestandSide[idx] = 1;
TracingMode[idx] = "fAA";
return true;
}
else
{
FreestandSide[idx] = -1;
TracingMode[idx] = "fBA";
return true;
}
}
}
}
else
{
if (flLeftDamage < 1 && flRightDamage < 1)
{
if (flLeftFraction != flRightFraction)
{
if (flLeftFraction > flBackFraction && flRightFraction < flBackFraction)
{
FreestandSide[idx] = 1; // ROTATE_LEFT
TracingMode[idx] = "fCA";
return true;
}
else if (flRightFraction > flBackFraction && flLeftFraction < flBackFraction)
{
FreestandSide[idx] = -1; // ROTATE_RIGHT
TracingMode[idx] = "fDA";
return true;
}
}
else if (fabs(flLeftFraction - flRightFraction) < flBackFraction)
{
if (flLeftFraction > flRightFraction)
{
FreestandSide[idx] = 1;
TracingMode[idx] = "fEA";
return true;
}
else
{
FreestandSide[idx] = -1;
TracingMode[idx] = "fFA";
return true;
}
}
else
{
if (flRightFraction < flLeftFraction)
{
FreestandSide[idx] = 1;
TracingMode[idx] = "fGA";
return true;
}
else
{
FreestandSide[idx] = -1;
TracingMode[idx] = "fHA";
return true;
}
}
}
else
{
if (fabs(flLeftFraction - flRightFraction) > flBackFraction)
{
if (flLeftFraction > flRightFraction)
{
FreestandSide[idx] = 1;
TracingMode[idx] = "fIA";
return true;
}
else
{
FreestandSide[idx] = -1;
TracingMode[idx] = "fJA";
return true;
}
}
else
{
if (flLeftFraction > flRightFraction)
{
FreestandSide[idx] = 1;
TracingMode[idx] = "fKA";
return true;
}
else
{
FreestandSide[idx] = -1;
TracingMode[idx] = "fLA";
return true;
}
}
}
}
return false;
}
C++:
void CResolver::StoreAntifreestand()
{
if (!csgo->local->isAlive())
return;
if (!csgo->weapon->IsGun())
return;
if (!vars.ragebot.resolver)
return;
static int delay_ticks[65] = { 0 };
for (int i = 0; i < interfaces.engine->GetMaxClients(); ++i)
{
auto player = interfaces.ent_list->GetClientEntity(i);
if (!player || !player->isAlive() || player->IsDormant()
|| player->GetTeam() == csgo->local->GetTeam() || csgo->actual_misses[player->GetIndex()] > 0) {
UseFreestandAngle[i] = false;
continue;
}
static int last_side = 0;
auto idx = player->GetIndex();
auto latest_animation = g_Animfix->get_latest_animation(player);
if (!latest_animation)
continue;
auto point = Ragebot::Get().GetAdvancedHeadPoints(player, latest_animation->unresolved_bones);
Ragebot::Get().BackupPlayer(latest_animation);
Ragebot::Get().SetAnims(latest_animation, latest_animation->unresolved_bones);
Vector direction_1, direction_2, direction_3;
Math::AngleVectors(Vector(0.f, Math::CalculateAngle(csgo->local->GetOrigin(), player->GetOrigin()).y - player->GetDSYDelta(), 0.f), direction_1);
Math::AngleVectors(Vector(0.f, Math::CalculateAngle(csgo->local->GetOrigin(), player->GetOrigin()).y + player->GetDSYDelta(), 0.f), direction_2);
Math::AngleVectors(Vector(0.f, Math::CalculateAngle(csgo->local->GetOrigin(), player->GetOrigin()).y, 0.f), direction_3);
const Vector height = player->GetBonePos(latest_animation->unresolved_bones, 8);
Vector CurrentLocalPose(csgo->local->GetEyeAngles().x, csgo->local->GetEyeAngles().y, csgo->local->GetEyeAngles().z);
const auto LeftEyePosition = player->GetOrigin() + Vector(0, 0, height.z) + (direction_1 * 40.f); // was 16.f
const auto RightEyePosition = player->GetOrigin() + Vector(0, 0, height.z) + (direction_2 * 40.f);
const auto BackEyePosition = player->GetOrigin() + Vector(0, 0, height.z) + (direction_3 * 40.f);
flLeftDamage = g_AutoWall.Think(LeftEyePosition, player, HITGROUP_HEAD).m_damage;
flRightDamage = g_AutoWall.Think(RightEyePosition, player, HITGROUP_HEAD).m_damage;
flBackDamage = g_AutoWall.Think(BackEyePosition, player, HITGROUP_HEAD).m_damage;
Ray_t ray;
trace_t trace;
CTraceFilter filter;
filter.pSkip = csgo->local;
ray.Init(CurrentLocalPose, LeftEyePosition);
interfaces.trace->TraceRay(ray, MASK_ALL, &filter, &trace);
flLeftFraction = trace.fraction;
ray.Init(CurrentLocalPose, RightEyePosition);
interfaces.trace->TraceRay(ray, MASK_ALL, &filter, &trace);
flRightFraction = trace.fraction;
ray.Init(CurrentLocalPose, BackEyePosition);
interfaces.trace->TraceRay(ray, MASK_ALL, &filter, &trace);
flBackFraction = trace.fraction;
Ragebot::Get().RestorePlayer(latest_animation);
if (!DetectSide(player))
return;
}
}
- dFA
- fHA
В будущем постараюсь скидывать действительно полезные вещи, поэтому не обижайте.