Перейти к содержанию

текущий взгляд противника


Рекомендуемые сообщения

причем тут помогло не помогло? углы должны быть представлены в радианах об этом ясно сказано в доках, тут нужно не пробовать, а делать.

 

Новые координаты находятся по таким формулам

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

Изменено пользователем Dino
Ссылка на комментарий
Поделиться на другие сайты

Мы знаем координаты противника, и куда он смотрит, и рисуем линию через  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.

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

нагуглил такую штуку как сферическая система координат, понял что это оно, подставил свои значения перевел в экранные и получил бурду((

        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);
         

        }

что я делаю не так?

Изменено пользователем barsuuk
Ссылка на комментарий
Поделиться на другие сайты

Готовый вариант не дам, но может поможет

 

Если 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)

Ссылка на комментарий
Поделиться на другие сайты

18 часов назад, barsuuk сказал:

возник вопрос)) как получить кватернион из точки??

 

Я думаю, можно найти адреса кватерниона в памяти рядом с адресами позиции. Это 4 раза по 4 байта X,Y,Z,W.

Ссылка на комментарий
Поделиться на другие сайты

Можешь поискать в сканере памяти эейлеров угол вертикальной оси поворачивая персонажа влево и вправо. Тогда выйдешь на три адреса 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.

Ссылка на комментарий
Поделиться на другие сайты

уф, зачем так усложнять все?.Реверсь, тебе надо найти функцию которая отвечает за линию видимости (Line of sight)

Линия видимости является невидимой прямой линией, используется для определения того, могут ли объекты видеть другие объекты в мире. Вот она как выглядит. 
dKZrVssrwuE.jpg

 

И из неё можно достать координаты конца луча, только надо указывать от какого ID ты отправляешь луч.

 

p_nztFzQTU8.jpg

 

Либо изменив 4 байта, включить отладочную отрисовку этой линии и тогда не придется ничего делать, ну только найти эту функцию. 128.png

Изменено пользователем partoftheworlD
  • Плюс 2
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.