Гайд Клиент с нуля | Аим

PoC Life
Пользователь
Пользователь
Статус
Оффлайн
Регистрация
22 Авг 2022
Сообщения
824
Реакции
87
Сразу хочу подметить, что после выхода первой темы многие не поняли смысл, я здесь чтобы разжевать уже существующие способы реализации чего либо в читах. Если вы знаете способ лучше - поделитесь им с нами (ну ведь никто же не поделится ведь). Начинаем

Список:
1. Создаём главный класс + снимаем ограничения - https://yougame.biz/threads/325113
2. Автобус евентов - https://yougame.biz/threads/325114
3. OpenGL + Шейдеры + Рендер - https://yougame.biz/threads/325115
4. Аим - https://yougame.biz/threads/325188
5. GlowESP aka OpenGL Framebuffer - https://yougame.biz/threads/325211/
6. Текст, шрифты, атлас - https://yougame.biz/threads/325292

Теория
Итак представим, что мы нашли противника. Нарисуем небольшое представление как это выглядит на 3д графе (скрин не мой):
Pasted image 20240722132635.png


Чтобы нам было проще мы превратим её в 2д граф сверху вниз забыв про ось Y.
Теперь это выглядит вот так:
Pasted image 20240722133930.png


Как вы видите я нарисовал стрелочку исходящую из игрока. Это стрелочка показывает направление, туда, куда смотрит игрок. Обычно они базируются на углах Ейлера (yaw - поворот влево вправо, pitch - поворот вверх вниз, roll - мы не затрагиваем). Сейчас мы говорим только о yaw.

Давайте попробуем изменить направление игрока на противника и нарисовать треугольник:
Pasted image 20240722133905.png

Теперь нам ясно, что нужно найти альфа угол (я подсветил его красным). Если бы мы заранее знали этот угол, то через тангенс смогли бы высчитать противоположную и прилежащую сторону. Т.к. задача стоит у нас другая, то мы можем высчитать данный угол через обратный тангенс (atan), он и вернет нам угол поворота до игрока и сделает аим.

Практика
Для начала нужно найти противника. Т.к. я просто рассказываю концепт аима, то я просто найду ближайшего
Затем, нам нужно высчитать позицию противника относительно нас самих.
Java:
Expand Collapse Copy
float relativeX = (float) (enemy.getPosX() - mc.player.getPosX());
float relativeY = (float) (enemy.getPosY() - mc.player.getPosY());
float relativeZ = (float) (enemy.getPosZ() - mc.player.getPosZ());
Далее высчитаем yaw (угол поворота налево направо). Я использовал toDegrees потому, что atan возвращает результат не в уголах (degrees), а в радианах.
Java:
Expand Collapse Copy
float yaw = (float) Math.toDegrees(Math.atan(relativeZ / relativeX));
Предлагаю сразу не медлить, а проверить:
mc.player.rotationYaw = yaw;
qk8WjnA.png

Чето не так, где-то мы ошиблись, а точнее забыли, что на графе 0 - это справо, а не 90:
yIykAMp.png

OYqeoBl.png

Да, действительно всё работает, но мы можем улучшить наш код, заменив atan на atan2. Но зачем? Т.к. обратный тангенс не поддерживает негативные числа (которые меньше 0), то аим будет наводиться в противоположном значение если вдруг противник вне поле зрения:
Java:
Expand Collapse Copy
float yaw = (float) Math.toDegrees(Math.atan2(relativeZ, relativeX));
Такую же формулу мы возьмем и для pitch (угол поворота вверх вниз):
Java:
Expand Collapse Copy
double xzDistance = Math.hypot(diffX, diffZ); // Получаем расстояние до игрока высчитав гипотенузу по теореме пифагора
float pitch = (float) Math.toDegrees(Math.atan2(relativeY, xzDistance));
Проверяем:
aX4E5kX.png

RNDjLkQ.png


Да, теперь действительно всё максимально идеально. Опять же, я рассказал концепцию аима. О том, как текущие методы позволяют обойти античит чутка позже. Всем пока)
 
Последнее редактирование:
Прикольно, узнал что начинается с -90 ?
 
/del
 
Последнее редактирование:
тригонометрия и я вроде постарался объяснить максимально просто
 
Просто оставлю это здесь (не реклама):
Пожалуйста, авторизуйтесь для просмотра ссылки.


Тригонометрия конечно вещь сильная
 
Назад
Сверху Снизу