X86Jumps Опубликовано 19 августа, 2017 Поделиться Опубликовано 19 августа, 2017 Решил для разнообразия сделать примерный 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 Ссылка на комментарий Поделиться на другие сайты Поделиться
roma912 Опубликовано 19 августа, 2017 Поделиться Опубликовано 19 августа, 2017 Врятли тут такие гении, которые поймут столько самописного асм кода)) Ссылка на комментарий Поделиться на другие сайты Поделиться
X86Jumps Опубликовано 19 августа, 2017 Автор Поделиться Опубликовано 19 августа, 2017 а что там понимать) просто сложение, вычитание, нахождение длины вектора) нормализация в игре есть функция за напарником следить, V держишь и за напарником следишь если он не очень далеко то твоя камера крутится, если у двери стоишь и ждешь что он 2м откроет то тогда камера как спектатор переключается я думал если самому пытаться то может пригодится информация и опыт Ссылка на комментарий Поделиться на другие сайты Поделиться
X86Jumps Опубликовано 19 августа, 2017 Автор Поделиться Опубликовано 19 августа, 2017 (изменено) вот видео, может понятнее станет немного Изменено 19 августа, 2017 пользователем X86Jumps Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 19 августа, 2017 Поделиться Опубликовано 19 августа, 2017 Я бы по-другому сделал, использовал функцию автоаима с разными модификациями, чтобы расширить радиус действия, fov и прочее, это быстрее и думаю будет работать более стабильно и точно. Самое "сложное" бы было заставить думать игру, что играешь с джойстика. Ссылка на комментарий Поделиться на другие сайты Поделиться
X86Jumps Опубликовано 19 августа, 2017 Автор Поделиться Опубликовано 19 августа, 2017 1 час назад, partoftheworlD сказал: Я бы по-другому сделал, использовал функцию автоаима с разными модификациями, чтобы расширить радиус действия, fov и прочее, это быстрее и думаю будет работать более стабильно и точно. Самое "сложное" бы было заставить думать игру, что играешь с джойстика. в смысле задействовать встроенную функцию слежения за напарником?(V) вместо напарника занести bp врага?я быстро наспех делал вроде так но при прицеливании глючило, видимо не только 1 значение надо было заносить не очень понял что значит "с различными модификациями " а вообще? я то делают?даже на тетрадке расчертил точки и вроде все верно было, но это для камеры не 3го лица тут надо скорректировать я трейс смотрел как игра делает, сначала yaw крутит, потом pitch значение конечное находит, но потом плавно к нему идет я отнимаю от target координаты камеры, хотя в игре отнимает от игрока (владельца) потом еще что то делает (я толком не очень понял) просто я могу точно узнать как он значение находит, но думал просто подскажут как для 3го лица обычно оно выходит Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 19 августа, 2017 Поделиться Опубликовано 19 августа, 2017 32 минуты назад, X86Jumps сказал: в смысле задействовать встроенную функцию слежения за напарником? авто-прицеливание, когда наводишь на определенный хитбокс прицел, а дальше игра сама доводит прицел. 33 минуты назад, X86Jumps сказал: а вообще? я то делают?даже на тетрадке расчертил точки Я в матане или что это такое не силен, поэтому и предложил использовать уже встроенный в игру вариант, передаешь свои аргументы в вызов функции и игра сама за тебя все рассчитывает, это же легче, а модификации типа увеличить размер fov, чтобы авто-доведение срабатывало не только когда прицел на хитбоксе, а вообще всегда и получится аимбот. Ссылка на комментарий Поделиться на другие сайты Поделиться
X86Jumps Опубликовано 20 августа, 2017 Автор Поделиться Опубликовано 20 августа, 2017 я сделал на tab срабатывание моего кода (200мс задержка) как обычно для всех своих "читов" в ре6 (таб не как кнопка нажатая через getasynckeystate, а обращение к памяти для определения что нажато тогда работать может и с джойстиками) попробую разобраться почему у меня pitch глючит когда враги падают или стоят выше/ниже Ссылка на комментарий Поделиться на другие сайты Поделиться
X86Jumps Опубликовано 25 августа, 2017 Автор Поделиться Опубликовано 25 августа, 2017 (изменено) я нашел матрицу какую-то тут в игре через дамп 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 Изменено 25 августа, 2017 пользователем X86Jumps Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения