barsuuk Опубликовано 7 июня, 2017 Автор Поделиться Опубликовано 7 июня, 2017 А вот хз кстати)ща попробую перевести Ссылка на комментарий Поделиться на другие сайты Поделиться
barsuuk Опубликовано 7 июня, 2017 Автор Поделиться Опубликовано 7 июня, 2017 10 часов назад, Dino сказал: https://msdn.microsoft.com/ru-ru/library/system.math.cos(v=vs.110).aspx . А у тебя углы в радианах? не помогло(( Ссылка на комментарий Поделиться на другие сайты Поделиться
Dino Опубликовано 7 июня, 2017 Поделиться Опубликовано 7 июня, 2017 (изменено) причем тут помогло не помогло? углы должны быть представлены в радианах об этом ясно сказано в доках, тут нужно не пробовать, а делать. Новые координаты находятся по таким формулам x2 = x1 + dist*cos(angle); y2 = y1 + dist*sin(angle); еще можешь почитать это https://habrahabr.ru/post/131931/ и это http://gamehack.do.am/publ/ajmbot_dlja_mta_sa/1-1-0-4 Изменено 7 июня, 2017 пользователем Dino Ссылка на комментарий Поделиться на другие сайты Поделиться
barsuuk Опубликовано 7 июня, 2017 Автор Поделиться Опубликовано 7 июня, 2017 так, завелось но только во вертикали) Ссылка на комментарий Поделиться на другие сайты Поделиться
2zolo2 Опубликовано 8 июня, 2017 Поделиться Опубликовано 8 июня, 2017 Мы знаем координаты противника, и куда он смотрит, и рисуем линию через DrawPrimitive или DrawTransform, только придется узнать 2 координаты из угла обзора. https://www.unknowncheats.me/forum/d3d-tutorials-and-source/125811-draw-3d-line-d3d-world.html http://oocms.org/question/6232142/how-can-i-draw-2d-geometry-benind-3d-objects-in-directx-d3d9 Можно через AIMBOT, только придется рисовать крестики или круги,на зарубежном сайте было пример как сделать ESP из AIMBOT. Ссылка на комментарий Поделиться на другие сайты Поделиться
Dino Опубликовано 8 июня, 2017 Поделиться Опубликовано 8 июня, 2017 17 часов назад, barsuuk сказал: так, завелось но только во вертикали) во второй статье описано же как найти Z Ссылка на комментарий Поделиться на другие сайты Поделиться
barsuuk Опубликовано 8 июня, 2017 Автор Поделиться Опубликовано 8 июня, 2017 3 часа назад, 2zolo2 сказал: Мы знаем координаты противника, и куда он смотрит, и рисуем линию через DrawPrimitive или DrawTransform, только придется узнать 2 координаты из угла обзора. https://www.unknowncheats.me/forum/d3d-tutorials-and-source/125811-draw-3d-line-d3d-world.html http://oocms.org/question/6232142/how-can-i-draw-2d-geometry-benind-3d-objects-in-directx-d3d9 Можно через AIMBOT, только придется рисовать крестики или круги,на зарубежном сайте было пример как сделать ESP из AIMBOT. я рисую не через directx, а через gdi Ссылка на комментарий Поделиться на другие сайты Поделиться
barsuuk Опубликовано 8 июня, 2017 Автор Поделиться Опубликовано 8 июня, 2017 (изменено) нагуглил такую штуку как сферическая система координат, понял что это оно, подставил свои значения перевел в экранные и получил бурду(( private void EyesLine(ScreenVector s) { double bufx = Math.PI * (angles.X) / 180; double bufy = Math.PI * (angles.Y) / 180; double kx = head.X +(100 * Math.Cos(bufy) * Math.Sin(bufx)); double ky = head.Y +(100 * Math.Sin(bufy) * Math.Sin(bufx)); double kz = head.Z +(100 * Math.Cos(bufx)); ScreenVector kv = WorldToScreen((float)kx, (float)ky, (float)kz); if (!kv.Result) { return; }else bufferedGraphics.Graphics.DrawLine(new Pen(Color.Green, 2), s.X, s.Y, kv.X, kv.Y); } что я делаю не так? Изменено 8 июня, 2017 пользователем barsuuk Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 9 июня, 2017 Поделиться Опубликовано 9 июня, 2017 Готовый вариант не дам, но может поможет Если DrawLine должен рисовать две точки на GUI, то: 1. WorldToScreen из "3д-точки1" 2. WorldToScreen из "3д-точки2" 3. "3д-точка1" равна позиции глаз 4. "3д-точка2" = "3д-точка1" + ("3д-направление 3д-точки1") * дистанция взгляда 5. "3д-направление 3д-точки1" = нормализация ("кватернион 3д-точки1" * new Vector3(0f, 0f, 1f)) 6. Умножение кватерниона на вектор3 через определение оператора "умножение" Скрытый текст public static Vector3 operator *(Quaternion rotation, Vector3 point) { float num = rotation.x * 2f; float num2 = rotation.y * 2f; float num3 = rotation.z * 2f; float num4 = rotation.x * num; float num5 = rotation.y * num2; float num6 = rotation.z * num3; float num7 = rotation.x * num2; float num8 = rotation.x * num3; float num9 = rotation.y * num3; float num10 = rotation.w * num; float num11 = rotation.w * num2; float num12 = rotation.w * num3; Vector3 result; result.x = (1f - (num5 + num6)) * point.x + (num7 - num12) * point.y + (num8 + num11) * point.z; result.y = (num7 + num12) * point.x + (1f - (num4 + num6)) * point.y + (num9 - num10) * point.z; result.z = (num8 - num11) * point.x + (num9 + num10) * point.y + (1f - (num4 + num5)) * point.z; return result; } 7. Нормализация вектора3 Скрытый текст public static Vector3 Normalize(Vector3 value) { float num = Vector3.Magnitude(value); Vector3 result; if (num > 1E-05f) { result = value / num; } else { result = Vector3.zero; } return result; } // Для Vector3.Magnitude(value); public static float Magnitude(Vector3 a) { return Mathf.Sqrt(a.x * a.x + a.y * a.y + a.z * a.z); } //-------------------------------------------------- // Еще переопределяющие операторы (пишу пачкой, а то я мог пропустить какой-нибудь) public static Vector3 operator +(Vector3 a, Vector3 b) { return new Vector3(a.x + b.x, a.y + b.y, a.z + b.z); } public static Vector3 operator -(Vector3 a, Vector3 b) { return new Vector3(a.x - b.x, a.y - b.y, a.z - b.z); } public static Vector3 operator -(Vector3 a) { return new Vector3(-a.x, -a.y, -a.z); } public static Vector3 operator *(Vector3 a, float d) { return new Vector3(a.x * d, a.y * d, a.z * d); } public static Vector3 operator *(float d, Vector3 a) { return new Vector3(a.x * d, a.y * d, a.z * d); } public static Vector3 operator /(Vector3 a, float d) { return new Vector3(a.x / d, a.y / d, a.z / d); } public static bool operator ==(Vector3 lhs, Vector3 rhs) { return Vector3.SqrMagnitude(lhs - rhs) < 9.99999944E-11f; } public static bool operator !=(Vector3 lhs, Vector3 rhs) { return Vector3.SqrMagnitude(lhs - rhs) >= 9.99999944E-11f; } Не уверен, что это правильно, надо переводить на C++ и проверять. * Если в игре ось "вперед" не является Z, а другой осью Y, то new Vector3(0f, 1f, 0f) Ссылка на комментарий Поделиться на другие сайты Поделиться
barsuuk Опубликовано 10 июня, 2017 Автор Поделиться Опубликовано 10 июня, 2017 Воу, спасибо за обширный ответ, буду расбираться)) Ссылка на комментарий Поделиться на другие сайты Поделиться
barsuuk Опубликовано 12 июня, 2017 Автор Поделиться Опубликовано 12 июня, 2017 возник вопрос)) как получить кватернион из точки?? Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 13 июня, 2017 Поделиться Опубликовано 13 июня, 2017 18 часов назад, barsuuk сказал: возник вопрос)) как получить кватернион из точки?? Я думаю, можно найти адреса кватерниона в памяти рядом с адресами позиции. Это 4 раза по 4 байта X,Y,Z,W. Ссылка на комментарий Поделиться на другие сайты Поделиться
barsuuk Опубликовано 13 июня, 2017 Автор Поделиться Опубликовано 13 июня, 2017 так, позиция игрока имеет оффсет 134 рядом ничего похожего на кватернион нету(( Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 14 июня, 2017 Поделиться Опубликовано 14 июня, 2017 Можешь поискать в сканере памяти эейлеров угол вертикальной оси поворачивая персонажа влево и вправо. Тогда выйдешь на три адреса X,Y,Z эйлеровых углов. И по аналогии можно попробовать сделать Quaternion.Euler(transform.eulerAngles): Скрытый текст using System.Collections; using System.Collections.Generic; using UnityEngine; public class DrawPath : MonoBehaviour { public float distance = 1f; public RectTransform _2dPoint1; public RectTransform _2dPoint2; void Update() { Vector3 position1 = transform.position; // Для кватерниона //Vector3 position2 = position1 + (transform.rotation * Vector3.forward).normalized * distance; // Перевод эйлеровых в кватернион Vector3 position2 = position1 + (Quaternion.Euler(transform.eulerAngles) * Vector3.forward).normalized * distance; // Точка из глаза и точка на дистанции distance в экранных координатах _2dPoint1.position = Camera.main.WorldToScreenPoint(position1); _2dPoint2.position = Camera.main.WorldToScreenPoint(position2); } } Переписать код на C++ можно декомплировать .net библиотеку C:\Program Files\Unity\Editor\Data\Managed\UnityEngine.dll через ILSpay. Библиотеку это можно взять из Unity игр или установив движок Unity. Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 14 июня, 2017 Поделиться Опубликовано 14 июня, 2017 (изменено) уф, зачем так усложнять все?.Реверсь, тебе надо найти функцию которая отвечает за линию видимости (Line of sight) Линия видимости является невидимой прямой линией, используется для определения того, могут ли объекты видеть другие объекты в мире. Вот она как выглядит. И из неё можно достать координаты конца луча, только надо указывать от какого ID ты отправляешь луч. Либо изменив 4 байта, включить отладочную отрисовку этой линии и тогда не придется ничего делать, ну только найти эту функцию. Изменено 14 июня, 2017 пользователем partoftheworlD 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения