alkayde123 Опубликовано 23 июля, 2020 Поделиться Опубликовано 23 июля, 2020 Здравствуйте. Сложилась такая проблемка, необходимо реализовать игнор коллизии + FlyHack на СЕ. 1. Про игнор коллизии копал в сторону адреса координат персонажа(указатели на них нашел), один раз получилось, занопил что-то, а в след. раз почему-то уже не вышло. Я подключил отладчик нашел функции которые записывают значение в координаты, проверил их(нопы) и персонаж не двигался, рядом что-то занопил, и смог игнорировать коллизии. По логике где-то в этом месте и должна быть проверка столкновения с коллизией, только вот снова найти не могу. 2. Каким образом можно реализовать FlyHack с игнором коллизии, к примеру, жмешь на кнопку - включается флайхак, и летай куда тебе угодно. Для GTA5 есть что-то похожее, или даже тот же самый Minecraft. 3. Каким образом можно реализовать Hotkey с помощью двух клавиш на Lua? К примеру Ctrl + R, Ctrl + F. Пробовал createHotkey(fnct, VK_CTRL + VK_F) - бьет ошибку. Буду благодарен любой информации, статье, видео, в общем любой информации. При надобности могу предоставить данные, которые у меня есть. Заранее всем спасибо. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 24 июля, 2020 Поделиться Опубликовано 24 июля, 2020 2 часа назад, alkayde123 сказал: Пробовал createHotkey(fnct, VK_CTRL + VK_F) - бьет ошибку. не +, а запятая. createHotkey(fnct, VK_CTRL, VK_F) по остальным вопросам долго, некоторая инфа уже есть на форуме. Ссылка на комментарий Поделиться на другие сайты Поделиться
alkayde123 Опубликовано 24 июля, 2020 Автор Поделиться Опубликовано 24 июля, 2020 (изменено) Цитата по остальным вопросам долго, некоторая инфа уже есть на форуме. Где, если быть точным? По поводу Hotkey - спасибо большое. По поводу отключения коллизий - готово уже нашел, что куда, теперь нужно только реализовать FlyHack. Координаты камеры тоже есть. Если есть информация или какие-то статьи по данной теме, или может шаблон - дай знать, буду благодарен. Изменено 24 июля, 2020 пользователем alkayde123 Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 24 июля, 2020 Поделиться Опубликовано 24 июля, 2020 4 часа назад, alkayde123 сказал: Где, если быть точным? В поиске, преимущественно. Ссылка на комментарий Поделиться на другие сайты Поделиться
alkayde123 Опубликовано 24 июля, 2020 Автор Поделиться Опубликовано 24 июля, 2020 (изменено) 5 часов назад, Xipho сказал: В поиске, преимущественно. Genius) Это понятно дело. Блин, мне нужно хоть где-то инфу взять по Fly Hack, по форуму шастал, ничего не нашел А если находил, то все не то вообще Изменено 24 июля, 2020 пользователем alkayde123 Ссылка на комментарий Поделиться на другие сайты Поделиться
Kvazimado Опубликовано 24 июля, 2020 Поделиться Опубликовано 24 июля, 2020 Что интересно, когда я делал поиск по форуму, нашел твой же вопрос годовой давности по теме "как проходить сквозь текстуры") И там ты написал что сделал это сам). Прошел год, вопрос остался. 1. Тык 2. Тык 2 3. Тык 3 Ссылка на комментарий Поделиться на другие сайты Поделиться
alkayde123 Опубликовано 24 июля, 2020 Автор Поделиться Опубликовано 24 июля, 2020 (изменено) Цитата Что интересно, когда я делал поиск по форуму, нашел твой же вопрос годовой давности по теме "как проходить сквозь текстуры") И там ты написал что сделал это сам). Прошел год, вопрос остался. Там был немного другой вариант, там просто перемещение по координатам, например +3 по хоткею, а сейчас именно отключение коллизии. А за информацию спасибо, проверю. 3 вроде подходит под то, что мне нужно. Изменено 24 июля, 2020 пользователем alkayde123 Ссылка на комментарий Поделиться на другие сайты Поделиться
alkayde123 Опубликовано 25 июля, 2020 Автор Поделиться Опубликовано 25 июля, 2020 @Kvazimado в общем это немного не то) Слушай, как можно реализовать такую штуку. У меня получается есть координаты игрока. Я нашел функцию, которая отвечает за перемещение(если занопать, то тупо двигаться не сможешь) Как можно сделать инъекцию, чтобы я мог с помощью этой функции перемещаться даже в воздухе? Ну и чтобы можно было свое ускорение сделать, чтобы быстрее бегать по воздуху/летать. Переписать её как-то, что-ли. Ссылка на комментарий Поделиться на другие сайты Поделиться
alkayde123 Опубликовано 26 июля, 2020 Автор Поделиться Опубликовано 26 июля, 2020 Upd. Так же нашел ускорение по осям, но все равно пока не могу допереть, как сделать FlyHack/Noclip. @Garik66, @MasterGH, @LIRW, @partoftheworlD помогите, буду безумно благодарен) Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 26 июля, 2020 Поделиться Опубликовано 26 июля, 2020 Как минимум два способа. Простой и сложный 1) Менять координаты по горячим клавишам. Тут даже скрипты писать не надо, если на CE делать. 3 координаты найти. И каждой по 2 поведения в опция выставить. 6 горячих клавиш. Три пары увеличивают и три пары уменьшают. Ничего программировать не нужно через CE. 2) Программировать. Аналогично по горячим клавишам писать полет. Язык программирования любой, который лучше всего знаешь и больше подходит. Есть пример на C#, но без записи в память чужого процесса. Можно этот код изучать и поменять Добавить код открытия процесса и добавить чтение и запись координат. MonoBehavior убрать, а update заменить таймером. Там же пример exe полета в том числе с вариантом движения вперед - по направлению камеры (с координатами углов) Спойлер p.s. Чтобы сделать надо искать и читать документацию как писать код. Ничего сверх сложного нет. И полеты лучше отрабатывать на игровом движке или взять любой готовый пример directX на C++ и поведение камеры сделать в dll. И её уже использовать. Ссылка на комментарий Поделиться на другие сайты Поделиться
alkayde123 Опубликовано 26 июля, 2020 Автор Поделиться Опубликовано 26 июля, 2020 В 27.07.2020 в 03:50, MasterGH сказал: Менять координаты по горячим клавишам Это уже есть. Давно уже сделал. В 27.07.2020 в 03:50, MasterGH сказал: Программировать. Аналогично по горячим клавишам писать полет А вот это хотелось бы как-нибудь сделать на самом CE. Мне кажется это возможно. Мне хотя бы понять, как можно сделать так, чтобы нажал именно W и персонаж летел вперед. Координаты сейчас то относительно мира, а мне нужно чтобы они правильно высчитывались и я перемещался именно вперед. Ссылка на комментарий Поделиться на другие сайты Поделиться
alkayde123 Опубликовано 27 июля, 2020 Автор Поделиться Опубликовано 27 июля, 2020 В 27.07.2020 в 03:50, MasterGH сказал: Чтобы сделать надо искать и читать документацию как писать код У меня панзарчик на CryEngine 2, что-то поискал инфу, документацию - ничего путного не нашел. Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 27 июля, 2020 Поделиться Опубликовано 27 июля, 2020 10 часов назад, alkayde123 сказал: помогите, буду безумно благодарен) Его можно самому написать. Как пример, на СЕ форуме есть 2 таблицы, одна от метро ласт лайт и вторая метро эксодус. Скачай либо ту, либо другую игру и погляди как это работает. Качать лучше ласт лайт, она по размеру меньше выйдет, а эксодус под 100 гигабайт. Вот пример от эксодус, а от ласт лайда, там на СЕ форуме найдешь. Всё паблик. Спойлер {$STRICT} {$lua} if syntaxcheck then return end [ENABLE] function _readInteger( Input ) -- thanks, Pox! local Value = readInteger( Input ) if Value < 0x80000000 then return Value else return Value - 0x100000000 end end function aobScanEx( aob, p, a, n, s, e, pb ) local p, a, n, s, e = p or '*X*W', a or fsmNotAligned, n or '0', s or 0x0, e or 0xffffffffffffffff local ms = pb and createMemScan( pb ) or createMemScan() local fl = createFoundList( ms ) ms.firstScan( soExactValue, vtByteArray, nil, aob, nil, s, e, p, a, n, true, false, false, false ) ms.waitTillDone() fl.initialize() local result = nil if fl ~= nil and fl.getCount() > 0 then result = createStringlist() for i = 1, fl.getCount() do result.add( fl.getAddress( i - 1 ) ) end end fl.destroy() ms.destroy() return result end local gameProcess = 'MetroExodus.exe' local gameModule = getAddress( gameProcess ) local t = aobScanEx( '48837B??0074??807B??000F94D084C075??85??74??F3', nil, nil, nil, gameModule, gameModule + getModuleSize( gameProcess ) ) local NoClip = tonumber( t[0], 16 ) unregisterSymbol( 'NoClip' ) registerSymbol( 'NoClip', NoClip, true ) local t = aobScanEx( '488B0D????????4885C90F84????????488B51??48895C24??48897C24??4885D274', nil, nil, nil, gameModule, gameModule + getModuleSize( gameProcess ) ) t = tonumber( t[0], 16 ) local PhysX = readQword( t + _readInteger( t + 0x3 ) + 0x7 ) unregisterSymbol( 'PhysX' ) registerSymbol( 'PhysX', PhysX, true ) autoAssemble([[ alloc( MovementHook, 0x1000, MetroExodus.exe ) registersymbol( MovementHook ) label( goback ) label( skip ) label( subGetAsyncKeyState ) label( fraction ) label( ZLock ) registersymbol( ZLock ) label( back ) MovementHook: push rdx mov rdx,PhysX mov rdx,[rdx+28] // leads to Player mov rdx,[rdx+758] mov rdx,[rdx+10] cmp rbx,rdx pop rdx jnz goback mov [ZLock],rbx mov byte ptr [rbx+30],4 mov rax,PhysX mov rax,[rax+28] // leads to Player test rax,rax jz goback cmp [rax+938],0 // check if camera vector is initialized jz goback push rax push rbx push rdx push rsi push rdi push rbp push r8 push r9 push r10 push r11 push r12 push r13 push r14 push r15 push rcx xor r10,r10 mov r11,1 // FORWARD mov ecx,'W' call short subGetAsyncKeyState mov r11,2 // BACKWARD mov ecx,'S' call short subGetAsyncKeyState mov r11,4 // STRAFE LEFT mov ecx,'A' call short subGetAsyncKeyState mov r11,8 // STRAFE RIGHT mov ecx,'D' call short subGetAsyncKeyState mov r11,10 // FASTER mov ecx,10 // Shift call short subGetAsyncKeyState mov r11,20 // Z UP mov ecx,20 // Space call short subGetAsyncKeyState mov r11,40 // Z DOWN mov ecx,11 // Ctrl call short subGetAsyncKeyState pop rcx test r10,r10 jz skip mov rdi,PhysX mov rdi,[rdi+28] mov rbx,rdi mov rdi,[rdi+928] // camera vector (already normalized) test rdi,rdi jz skip movups xmm1,[rdi+C0] xorps xmm15,xmm15 // this register will temporary keep sum of four vectors (forward, backward, strafe left, strafe right) test r10,01 // forward jz +4 addps xmm15,xmm1 test r10,02 // backward jz +4 subps xmm15,xmm1 // calc rotatedLeftBy90 vector shufps xmm1,xmm1,06 // camera struct (X,Z,Y), Z is up-down axis // now xmm1 contains (Y,Z,X) xorps xmm2,xmm2 subss xmm2,xmm1 movss xmm1,xmm2 // now xmm1 contains (-Y,Z,X); rotatedLeftBy90deg in Z-axis movaps xmm14,xmm1 // save for later // for strafing we have to set Z to zero mov eax,-1 movd xmm2,eax shufps xmm2,xmm2,08 andps xmm1,xmm2 // now xmm1 contains (-Y,0,X) test r10,04 // strafe left jz +4 addps xmm15,xmm1 test r10,08 // strafe right jz +4 subps xmm15,xmm1 // move in Z axis mov eax,(float)1 movd xmm1,eax shufps xmm1,xmm1,51 // now xmm1 contains (0,1,0) test r10,20 // Z axis UP jz +4 addps xmm15,xmm1 test r10,40 // Z axis DOWN jz +4 subps xmm15,xmm1 movups xmm1,[rdi+C0] // camVect movaps xmm2,xmm14 // rotLeft90camVect movaps xmm14,xmm1 shufps xmm1,xmm1,09 shufps xmm2,xmm2,12 shufps xmm14,xmm14,12 mulps xmm1,xmm2 shufps xmm2,xmm2,12 mulps xmm14,xmm2 subps xmm1,xmm14 // xmm1 now has cross product of camVect and rotLeft90camVect, lets call it V1 movaps xmm14,xmm1 subss xmm14,xmm1 subss xmm14,xmm1 shufps xmm14,xmm14,06 // xmm14 now has rotRight90V1, lets call it V2 addps xmm1,xmm14 // sum of V1 and V2 // normalize movaps xmm2,xmm1 mulps xmm2,xmm2 movss xmm14,xmm2 shufps xmm2,xmm2,21 addss xmm14,xmm2 movhlps xmm2,xmm2 addss xmm14,xmm2 sqrtss xmm14,xmm14 shufps xmm14,xmm14,0 divps xmm1,xmm14 movaps xmm1,xmm15 // xmm1 constains vector for No_Clip (sum of many vectors) xorps xmm2,xmm2 mulps xmm15,xmm15 addss xmm2,xmm15 shufps xmm15,xmm15,E1 addss xmm2,xmm15 movhlps xmm15,xmm15 addss xmm2,xmm15 sqrtss xmm2,xmm2 // xmm2 contains No_Clip vector length xorps xmm15,xmm15 comiss xmm2,xmm15 // deal with division by zero je short skip shufps xmm2,xmm2,00 divps xmm1,xmm2 // No_Clip vector is now normalized // before we add this vector to playerPos, we have to reduce it a bit movss xmm2,[fraction] shufps xmm2,xmm2,00 // faster test r10,10 jz +6 addps xmm2,xmm2 addps xmm2,xmm2 mulps xmm1,xmm2 // update player pos mov rbx,[rbx+758] test rbx,rbx jz short skip mov rbx,[rbx+10] movups xmm2,[rbx+BC] addps xmm2,xmm1 movq [rbx+BC],xmm2 movhlps xmm2,xmm2 movss [rbx+C4],xmm2 /* pop r15 pop r14 pop r13 pop r12 pop r11 pop r10 pop r9 pop r8 pop rbp pop rdi pop rsi pop rdx pop rbx pop rax jmp back+3C */ skip: pop r15 pop r14 pop r13 pop r12 pop r11 pop r10 pop r9 pop r8 pop rbp pop rdi pop rsi pop rdx pop rbx pop rax xor edi,edi goback: //movss xmm0,[rsp+40] cmp qword ptr [rbx+68],0 jmp back db CC CC CC CC subGetAsyncKeyState: push r10 push r11 sub rsp,8 call GetAsyncKeyState add rsp,8 pop r11 pop r10 test ax,8000 jz short @f or r10,r11 @@: ret db CC CC CC CC fraction: dd (float)0.025 ZLock: dq 0 db CC CC CC CC NoClip: jmp MovementHook back: ]]) [DISABLE] {$asm} [ZLock]+34: dd 08080000 [ZLock]+30: db 0 NoClip: cmp qword ptr [rbx+68],0 unregistersymbol( ZLock ) unregistersymbol( MovementHook ) dealloc( MovementHook ) unregistersymbol( PhysX ) unregistersymbol( NoClip ) Скрипт в действии... кстати, это его работа,а то есть автора канала. Спойлер Подход универсален, для любой игры подойдет. Ссылка на комментарий Поделиться на другие сайты Поделиться
alkayde123 Опубликовано 27 июля, 2020 Автор Поделиться Опубликовано 27 июля, 2020 В 27.07.2020 в 13:30, LIRW сказал: Подход универсален, для любой игры подойдет. Понял, гляну, попробую разобрать код, потом отпишусь что получится) Заранее спасибо) Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 27 июля, 2020 Поделиться Опубликовано 27 июля, 2020 21 час назад, alkayde123 сказал: Мне хотя бы понять, как можно сделать так, чтобы нажал именно W и персонаж летел вперед. Чтобы летел вперед нужно найти адрес координат камеры и адрес кватерниона. Этот кватернион умножаем на нормализованный свой эйлеров угол смотрящий по глобальной оси координат "вперед" (например это 0X-ось), который умножаем на скорость движения и дельту времени между кадрами отрисовки. Скорость движения для W положительная, а для S отрицательная. У игрового объекта есть позиция X,Y,Z и углы кватерниона X,Y,Z,W. К позиции прибавляем нормализованный вектор оси вперед. Возьми например 0,1,0. Спойлер // Vector3.forward = new Vector3(1,0,0); // Vector3.back = new Vector3(-1,0,0); // float speed = 1f // var timePerFrame = Time.deltaTime; разница между кадрами в игре Если 60 fps, то и рассчитать под них // transform.position = new Vector3(x,y,z); // transform.localRotation = new Quaternion(x,y,z,w) - кватернион в локальных координатах void Update() { timePerFrame = Time.deltaTime; if(Input.GetKey(KeyCode.W)) { Vector3 eulerAngle = Vector3.forward * speed * timePerFrame; transform.position = transform.position + ImullQuaternionToPeulerAngle(transform.localRotation, Vector3.forward * speed * timePerFrame); } if(Input.GetKey(KeyCode.S)) { Vector3 eulerAngle = Vector3.back * speed * timePerFrame); transform.position = transform.position + ImullQuaternionToEeulerAngle(transform.localRotation, eulerAngle); } } public Vector3 ImullQuaternionToEeulerAngle(Quaternion rotation, Vector3 eulerAngle) { 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)) * eulerAngle.x + (num7 - num12) * eulerAngle.y + (num8 + num11) * eulerAngle.z; result.y = (num7 + num12) * eulerAngle.x + (1f - (num4 + num6)) * eulerAngle.y + (num9 - num10) * eulerAngle.z; result.z = (num8 - num11) * eulerAngle.x + (num9 + num10) * eulerAngle.y + (1f - (num4 + num5)) * eulerAngle.z; return result; } Этот код на C# на CE Lua переписать с таймером и горячими клавишами. Посмотреть как работает. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
NubZilla Опубликовано 28 июля, 2020 Поделиться Опубликовано 28 июля, 2020 У меня получилось для своей игры, теперь думаю как убрать гравитацию. Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 30 июля, 2020 Поделиться Опубликовано 30 июля, 2020 (изменено) Для коллизии я раньше делал так - найти координаты автомобиля - подъехать вплотную к какому-либо объекту (например дереву) - начать искать какую-нибудь координату (напимер Х) этого дерева, используя значение какой-нибудь координаты (напимер Х) автомобиля. (координата Х автомобиля имеет значение 500, значит первый скан для поиска координаты Х дерева делать от 450 до 550) - менять по порциям найденные значения и каждый раз пробовать проехать сквозь это дерево - на найденную координату Х дерева поставить бряк на ЧТЕНИЕ - поменять поведение инструкции подсунув ей какие-нибудь левые большие значения (при таком способе оригинальные значения координат объектов в памяти не изменяются, поэтому в любой момент времени коллизию можно вернуть без перезагрузки карты) Суть способа переместить сам объект. Его текстура при этом остается на месте. У объекта есть координаты самого объекта, координаты его текстуры, координаты самого объекта для определения начала рендеринга, и некоторые другие. В 27.07.2020 в 02:50, MasterGH сказал: p.s. Чтобы сделать надо искать и читать документацию как писать код. Ничего сверх сложного нет. И полеты лучше отрабатывать на игровом движке или взять любой готовый пример directX на C++ и поведение камеры сделать в dll. И её уже использовать. Для новичков это сложно, по моему мнению. Некоторые игры не дают заинжектить dll, наприме Forza Horizon 4. В таких случаях с видовой матрицей придется работать вручную. Для новичков вполне достаточно иметь лишь только СЕ, луа, ассемблер, фантазию, смекалку, терпение, хитрость, упорство, время, и конечно же друзей единомышленников. В 24.07.2020 в 06:57, alkayde123 сказал: Если есть информация или какие-то статьи по данной теме, или может шаблон - дай знать, буду благодарен. Для того чтобы понять как работает матрица, я в свое время качал и устанавливал 3Ds max. Созданный объект в сцене был моим подопытным кроликом. С помощью СЕ я подключался к процессу 3Ds max, а с помощью сначала калькулятора, а затем и скрипта луа, я пытался понять алгоритм работы матрицы. Моей задачей было зафиксировать первый объект относительно второго объекта, во время вращения и перемещения второго объекта. Изменено 30 июля, 2020 пользователем Antonshka Ссылка на комментарий Поделиться на другие сайты Поделиться
alkayde123 Опубликовано 31 июля, 2020 Автор Поделиться Опубликовано 31 июля, 2020 14 часов назад, Antonshka сказал: Для коллизии я раньше делал так Да с коллизией я уже решил) Поставил бряк на чтение на координату одну и там уже функции начал нопать и чекать коллизию, по итогу нашел. Вот теперь не шарю как реализовать сам FlyHack ну или же тот самый noclip. Там вид от третьего лица в игре, камеру находил X и Y координаты, а в каком направлении двигаться дальше не пойму. Не могу именно понять как работает перемещение в пространстве. Находил даже ускорения по координатам всем. Есть к примеру я установлю ускорение по координате Y и заморожу её, то буду перемещаться вверх бесконечно со скоростью которую я указал. Вот как это можно все привести в нормальный вид - без понятия. Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 31 июля, 2020 Поделиться Опубликовано 31 июля, 2020 4 часа назад, alkayde123 сказал: Там вид от третьего лица в игре, камеру находил X и Y координаты, а в каком направлении двигаться дальше не пойму. Не могу именно понять как работает перемещение в пространстве. Перемещаться в пространстве мне больше нравиться с помощью координат. С помощью Velocity (ускорения) чувствую себя как бы ограниченным. С помощью координат и отключение коллизии не обязательно. Персонаж при таком способе через все стены пролетает спокойно . Для хорошего FlyHack нужны координаты и матрица поворотов. Иногда в памяти лежат уже готовые углы Yaw и Pitch, в таком случае сделать FlyHack проще. Однако чаще всего в памяти есть только матрица поворотов. Ссылка на комментарий Поделиться на другие сайты Поделиться
alkayde123 Опубликовано 1 августа, 2020 Автор Поделиться Опубликовано 1 августа, 2020 В 31.07.2020 в 10:19, Antonshka сказал: Однако чаще всего в памяти есть только матрица поворотов Ну я вроде видел что-то такое. Пытался их заморозить, но это ничего не дает даже Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 1 августа, 2020 Поделиться Опубликовано 1 августа, 2020 3 часа назад, alkayde123 сказал: Ну я вроде видел что-то такое. Пытался их заморозить, но это ничего не дает даже Возможно инструкция слишком часто пишет значения в эти адреса. Самый короткий путь к созданию FlyHack, как здесь уже писали, это качнуть из интернета готовую таблицу. Готовую таблицу где реализован либо FlyHack персонажа, либо FreeCamera. С матрицей кстати, я не встречал таких готовых таблиц. Вообще FlyHack это довольно таки серьезный мод. Просто так сразу и не напишешь. Ссылка на комментарий Поделиться на другие сайты Поделиться
alkayde123 Опубликовано 2 августа, 2020 Автор Поделиться Опубликовано 2 августа, 2020 8 часов назад, Antonshka сказал: С матрицей кстати, я не встречал таких готовых таблиц. Смотри,я получается нашел координаты поворота персонажа, в зависимости от них потом меняется ускорение персонажа на ту или иную ось. Мне достаточно было бы чтобы можно было перемещаться только по двум осям, тобишь X и Z. Можно ли как-то подобное реализовать имея данные значения? Спойлер Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 2 августа, 2020 Поделиться Опубликовано 2 августа, 2020 2 часа назад, alkayde123 сказал: Смотри,я получается нашел координаты поворота персонажа, в зависимости от них потом меняется ускорение персонажа на ту или иную ось. Мне достаточно было бы чтобы можно было перемещаться только по двум осям, тобишь X и Z. Можно ли как-то подобное реализовать имея данные значения? Показать контент X и Z - это горизонтальные оси? Координаты поворота на скрине это синус и косинус угла Yaw. Эти два значения можно напрямую использовать для FlyHack. Единственное ты не сможешь при полете направляться вверх или вниз, при движении мыши в этом направлении. Сможешь только лететь в сторону куда смотрит камера в горизонтальной плоскости. Для того чтобы была возможность направляться вверх или вниз нужен угол Pitch, но такой угол у персонажа равен 0, потому как он не наклоняется. Угол Pitch есть у камеры, но его тебе не вытащить как я понял, пока что. Вот по какой формуле я делал полет Спойлер //Forward //X fld dword ptr [rdx] fsin // Это синус угла Yaw fmul dword ptr [Camera_Mov_Only_Forward_Multiply_Changer] // Это множители, если они равны 0, то координаты не изменяется fadd dword ptr [rax] //X fstp dword ptr [rax] //X // Z fld dword ptr [rdx] fcos // Это косинус угла Yaw fmul dword ptr [Camera_Mov_Only_Forward_Multiply_Changer] fadd dword ptr [rcx] // Z fstp dword ptr [rcx] // Z //Backward //X fld dword ptr [rdx] fsin fmul dword ptr [Camera_Mov_Only_Backward_Multiply_Changer] fsubr dword ptr [rax] fstp dword ptr [rax] // Z fld dword ptr [rdx] fcos fmul dword ptr [Camera_Mov_Only_Backward_Multiply_Changer] fsubr dword ptr [rcx] fstp dword ptr [rcx] //Left //X fld dword ptr [rdx] fcos fmul dword ptr [Camera_Mov_Only_Left_Multiply_Changer] fsubr dword ptr [rax] fstp dword ptr [rax] // Z fld dword ptr [rdx] fsin fmul dword ptr [Camera_Mov_Only_Left_Multiply_Changer] fadd dword ptr [rcx] fstp dword ptr [rcx] //Right //X fld dword ptr [rdx] fcos fmul dword ptr [Camera_Mov_Only_Right_Multiply_Changer] fadd dword ptr [rax] fstp dword ptr [rax] // Z fld dword ptr [rdx] fsin fmul dword ptr [Camera_Mov_Only_Right_Multiply_Changer] fsubr dword ptr [rcx] fstp dword ptr [rcx] Ссылка на комментарий Поделиться на другие сайты Поделиться
alkayde123 Опубликовано 2 августа, 2020 Автор Поделиться Опубликовано 2 августа, 2020 5 минут назад, Antonshka сказал: X и Z - это горизонтальные оси? Да, горизонтальные. 5 минут назад, Antonshka сказал: Единственное ты не сможешь при полете направляться вверх или вниз, при движении мыши в этом направлении Это не важно, регулировать высоту я могу и по кнопке 6 минут назад, Antonshka сказал: Вот по какой формуле я делал полет Можно ли что-то подобное реализовать например на Lua? Может это все там как-то перемножается, делиться и т.д. Я просто не особо силен в математике, но все же Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 2 августа, 2020 Поделиться Опубликовано 2 августа, 2020 10 часов назад, alkayde123 сказал: Можно ли что-то подобное реализовать например на Lua? Может это все там как-то перемножается, делиться и т.д. Я просто не особо силен в математике, но все же На Lua можно. Для этого нужно будет занопить инструкцию пишущую значения в координаты. Либо на время активации полета подсовывать в читающую инструкцию адреса с новыми значениями координат. Но я бы не советовал на Lua. Вероятно возникновение дерганного полета. На пишущей или читающей инструкции самое то. То есть на ассемблере лучше написать. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения