The voices are getting louder
-
Автор темы
- #1
Приветики мои зайки
Вы наверное захотели очередную порцию пасты? Тогда держите
На текущий момент всех интересует вопрос как сортировать противников по параметрам, к примеру приведу сортировку по наименьшему хп или дистанции
Мы должны создать структуру которая будет держать данные в Массиве (std::vector)
Вы наверное захотели очередную порцию пасты? Тогда держите
На текущий момент всех интересует вопрос как сортировать противников по параметрам, к примеру приведу сортировку по наименьшему хп или дистанции
Мы должны создать структуру которая будет держать данные в Массиве (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;
};
{
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;
};
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);
}
{
CBasePlayer* Entity = g_pIEntList->GetClientEntity(i);
if (!IsGoodTargeting(Entity))
continue;
EntList.push_back(Entity);
}
В данном коде описана проверка всех таргетов на их валидность (У каждого по разному)
Если всё в порядке то мы записываем в тот вектор именно информацию о человеке
После этого цикла мы выполняем саму сортировку кода:
std::sort(EntList.begin(), EntList.end(), sortTarget);
Потом сразу же делать авто цикл в котором уже будет сам хитскан. Что бы много фпс не жрало я сделал брейк после выстрела что бы сбросить цикл и не кушать фпс если уже таргет выбран
Если всё в порядке то мы записываем в тот вектор именно информацию о человеке
После этого цикла мы выполняем саму сортировку кода:
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;
}
{
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;
}
{
Vector vecAngle;
if (CreateAllBoxes(q.Entity, vecAngle) && Aim(q.Entity, vecAngle, bSendPacket))
break;
}
Ну а дальнейшим шагом у нас будет Accuracy Compensation / NoSpread / AutoCock и прочая херь
Написал тред за 10 минут так что не судите строго. Любая критика будет полезной для меня
Ждите новых тредов
Последнее редактирование: