Гайд Ragebot - Сортировка целей по FOV / HP / DISTANCE

The voices are getting louder
Участник
Статус
Оффлайн
Регистрация
19 Янв 2017
Сообщения
417
Реакции[?]
344
Поинты[?]
26K
Приветики мои зайки



Вы наверное захотели очередную порцию пасты? Тогда держите

На текущий момент всех интересует вопрос как сортировать противников по параметрам, к примеру приведу сортировку по наименьшему хп или дистанции



Мы должны создать структуру которая будет держать данные в Массиве (std::vector)​
struct sTargetSorting
{
sTargetSorting(CBasePlayer* ent)
{
Entity = ent;
hp = ent->GetHealth();
fov = g_pMath->GetFov(Globals::Cmd->viewangles, g_pMath->CalcAngle(Globals::pLocal->GetEyePosition(), ent->GetBonePosition(8)));
distance = g_pMath->VectorDistance(Globals::pLocal->GetEyePosition(), ent->GetBonePosition(8));
}

float hp;
float fov;
float distance;
CBasePlayer* Entity;
};​

В данной структуре мы собираем Самого игрока, Количество HP, FOV и Дистанцию

Затем мы должны создать Авто-Функцию в которой будет проверка первого плеера и второго на сортировку
auto sortTarget = [&](struct sTargetSorting a, struct sTargetSorting b) {
switch (rbot_selection)
{
case CST_FIELD_OF_VIEW: return a.fov >= b.fov; break;
case CST_BEST_HEALTH: return a.hp <= b.hp; break;
case CST_BEST_DISTANCE: return a.distance >= b.distance; break;
case CST_NEXT_SHOOT: return false; break;
default: return false; break;
}

return false;
};​

rbot_selection Это переменная (Var / Variable) для Комбо бокса
0 - CST_FIELD_OF_VIEW
1 - CST_BEST_HEALTH
2 - CST_BEST_DISTANCE
3 - CST_NEXT_SHOOT



Самое основное готово



Теперь переходим к самому Рейдж-Боту там где мы начинаем сканить всех игроков

Первым делом в начале Init функции мы создаём вектор с самим страктом: std::vector<sTargetSorting> EntList;​
Вторым шагом создаём цикл с проверкой всех игроков
for (int i = 0; i <= g_pGlobalVars->maxClients; i++)
{
CBasePlayer* Entity = g_pIEntList->GetClientEntity(i);
if (!IsGoodTargeting(Entity))
continue;

EntList.push_back(Entity);
}​
В данном коде описана проверка всех таргетов на их валидность (У каждого по разному)
Если всё в порядке то мы записываем в тот вектор именно информацию о человеке




После этого цикла мы выполняем саму сортировку кода:
std::sort(EntList.begin(), EntList.end(), sortTarget);

Потом сразу же делать авто цикл в котором уже будет сам хитскан. Что бы много фпс не жрало я сделал брейк после выстрела что бы сбросить цикл и не кушать фпс если уже таргет выбран
for (int i = 0; i < EntList.size(); i++)
{
Vector vecAngle;
auto q = EntList.at(i);

if (CreateAllBoxes(q.Entity, vecAngle) && Aim(q.Entity, vecAngle, bSendPacket))
break;
}​

Насчёт автоцикла, я не стал писать выше потому что я имел с этим проблеммы но если вам надо то держите
for (auto q : EntList)
{
Vector vecAngle;
if (CreateAllBoxes(q.Entity, vecAngle) && Aim(q.Entity, vecAngle, bSendPacket))
break;
}​

Ну а дальнейшим шагом у нас будет Accuracy Compensation / NoSpread / AutoCock и прочая херь



Написал тред за 10 минут так что не судите строго. Любая критика будет полезной для меня
Ждите новых тредов​
 
Последнее редактирование:
Сверху Снизу