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

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

Решил для разнообразия сделать примерный aimbot

не нужно чтоб прям точно попадал, хотя бы примерно

игра от 3го лица, камера крутится вокруг что-то вроде сферы

знаю координаты камеры, координаты игрока на кого привязан

знаю что forward vector (0,0,1), т.е. вдоль z (y "в народе")

есть pitch и yaw, их можно более менее менять

почему-то не могу найти forward vector (может он временно высчитывается?)

нашел вот такие расчеты

Цитата

pitch = asin(-d.Y);
yaw = atan2(d.X, d.Z)

т.к. в fpu x87 есть только fpatan, то можно воспользоваться

Цитата

asin(x)=atan(x/(sqrt(1-x*x))

 

брал точку камеры, от цели (напарник, координаты головы кажется) отнимал точку камеры

нормализовал

передал в функцию fpatan эти данные

более менее направление правильно по yaw получалось

но глючило, потом пошел смотреть как игра высчитывает atan2

нашел функцию и ее вызываю (sse2, без fpu)

хотя потом понял причину, я забыл восстановить прежний стек fpu

 

по pitch понял что я считаю как камера поворачивалась бы на месте (в смысле вращалась бы а позицию не меняла бы)

а т.к. у меня она по сфере крутится, то чуть не точное я значение pitch получаю

сначала считал так

Цитата

pitch = asin(-d.Y);

потом посмотрев в dxut (из dx sdk) считал так

Цитата

    float fLen = sqrtf( pZBasis->z * pZBasis->z + pZBasis->x * pZBasis->x );
    m_fCameraPitchAngle = -atan2f( pZBasis->y, fLen );

за zbasis брал мой вектор разницы (не нормализованный)

чуть точнее получалось вроде

 

я вообще правильно делаю ?

нашел коллекцию npc/врагов

по ним ставил цель (через registersymbol указывал индекс массива)


 

Скрытый текст

 

movss xmm0,[eax+30]
movss xmm1,[eax+34]
movss xmm2,[eax+38]

 

mov ecx, eax
//mov ecx, ebx        //bp owner


//source, camera pos
movss xmm3, [ecx+50]
movss [data+14],xmm3
movss xmm4, [ecx+54]
movss [data+18],xmm4
movss xmm5, [ecx+58]
movss [data+1c],xmm5

subss xmm0, xmm3
subss xmm1, xmm4
//subss xmm4, xmm1
subss xmm2, xmm5


movss [data+20],xmm0
movss [data+24],xmm1
movss [data+28],xmm2

mulss xmm0,xmm0
mulss xmm1,xmm1
mulss xmm2,xmm2

addss xmm0, xmm1
addss xmm0, xmm2

sqrtss xmm0, xmm0

movss [data+2c], xmm0


movss xmm3,[data+20]
movss xmm4,[data+24]
movss xmm5,[data+28]

divss xmm3,xmm0
divss xmm4,xmm0
divss xmm5,xmm0

movss [data+30],xmm3
movss [data+34],xmm4
movss [data+38],xmm5

 

movss xmm0,[data+30]
movss xmm1,[data+38]
call atan2
movss [data+40], xmm0

 

movss xmm0,[data+34]
mulss xmm0,[const+30] //-y
call asin
movss [data+3c], xmm0

 

movss xmm0,[data+3c]
movss xmm1,[data+40]
//pitch
movss [eax+290],xmm0
//yaw
movss [eax+294],xmm1

 

....

//atan2(y,x)
atan2:
push eax
cvtps2pd xmm0,xmm0       //y
cvtps2pd xmm1,xmm1       //x
//cvtps2pd xmm0,[data+38]
//cvtps2pd xmm1,[data+30]
call 013ED5C9     //xmm0 result
cvtsd2ss xmm0,xmm0
pop eax
ret

//asin(x)
asin:
movss xmm3,xmm0
movss xmm1,[const+4]   //-1
mulss xmm0,xmm0
subss xmm1,xmm0
sqrtss xmm0,xmm1
divss xmm3,xmm0
movss xmm0,xmm3

movss xmm1,[const+4]  //1
call atan2
ret

 

 

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

а что там понимать)

просто сложение, вычитание, нахождение длины вектора)

нормализация

 

в игре есть функция за напарником следить, V держишь и за напарником следишь

если он не очень далеко то твоя камера крутится, если у двери стоишь и ждешь что он 2м откроет

то тогда камера как спектатор переключается

 

я думал если самому пытаться то может пригодится информация и опыт

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

Я бы по-другому сделал, использовал функцию автоаима с разными модификациями, чтобы расширить радиус действия, fov и прочее, это быстрее и думаю будет работать более стабильно и точно. Самое "сложное" бы было заставить думать игру, что играешь с джойстика.

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

1 час назад, partoftheworlD сказал:

Я бы по-другому сделал, использовал функцию автоаима с разными модификациями, чтобы расширить радиус действия, fov и прочее, это быстрее и думаю будет работать более стабильно и точно. Самое "сложное" бы было заставить думать игру, что играешь с джойстика.

в смысле задействовать встроенную функцию слежения за напарником?(V)

вместо напарника занести bp врага?я быстро наспех делал вроде так

но при прицеливании глючило, видимо не только 1 значение надо было заносить

 

не очень понял что значит "с различными модификациями "

 

а вообще? я то делают?даже на тетрадке расчертил точки

и вроде все верно было, но это для камеры не 3го лица

тут надо скорректировать

я трейс смотрел как игра делает, сначала yaw крутит, потом pitch

значение конечное находит, но потом плавно к нему идет

я отнимаю от target координаты камеры, хотя в игре отнимает от игрока (владельца)

потом еще что то делает (я толком не очень понял)

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

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

32 минуты назад, X86Jumps сказал:

в смысле задействовать встроенную функцию слежения за напарником?

авто-прицеливание, когда наводишь на определенный хитбокс прицел, а дальше игра сама доводит прицел.

 

33 минуты назад, X86Jumps сказал:

а вообще? я то делают?даже на тетрадке расчертил точки

Я в матане или что это такое не силен, поэтому и предложил использовать уже встроенный в игру вариант, передаешь свои аргументы в вызов функции и игра сама за тебя все рассчитывает, это же легче, а модификации типа увеличить размер fov, чтобы авто-доведение срабатывало не только когда прицел на хитбоксе, а вообще всегда и получится аимбот.

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

я сделал на tab срабатывание моего кода (200мс задержка)

как обычно для всех своих "читов" в ре6

(таб не как кнопка нажатая через getasynckeystate, а обращение к памяти для определения что нажато

тогда работать может и с джойстиками)

попробую разобраться почему у меня pitch глючит когда враги падают или стоят выше/ниже

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

я нашел матрицу какую-то

тут в игре через дамп vertex shader многих

я увидел что везде первым параметром идет

Цитата

//   Name                            Reg   Size
//   ------------------------------- ----- ----
//   fViewProj                       c1       4
//   CBROPTest__packed0              c5       1

тогда как например в простых шейдерах типа того
 

Цитата

 

float4x4 WorldViewProj : WORLDVIEWPROJ;

struct VS_OUTPUT
{
    float4 Pos  : POSITION;
};

VS_OUTPUT main(float4 inPos : POSITION )
{
    VS_OUTPUT Out;

    Out.Pos = mul(inPos,  WorldViewProj );

    return Out;
};

 

вот похожий из Irrlicht Engine

Цитата

 

// part of the Irrlicht Engine Shader example.
// These simple Direct3D9 pixel and vertex shaders will be loaded by the shaders
// example. Please note that these example shaders don't do anything really useful.
// They only demonstrate that shaders can be used in Irrlicht.

//-----------------------------------------------------------------------------
// Global variables
//-----------------------------------------------------------------------------
float4x4 mWorldViewProj; // World * View * Projection transformation
float4x4 mInvWorld;      // Inverted world matrix
float4x4 mTransWorld;    // Transposed world matrix

 

    // transform position to clip space
    Output.Position = mul(vPosition, mWorldViewProj);

 

 

я через Nsight 4.1 запустил игру

и увидел что почти все меши рисуются с первым параметром матрицы которую  я нашел

(например такая в тот момент, когда сделал frame capture)
 

Цитата

 

1.66 0.00 0.16 0.16

0.00 2.99 0.00 0.00

0.27 0.01 -0.99 -0.99

86.18 -374.67 -651.33 -635.32

 

 

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

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

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

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