Mafia II-DE v.1.0.1 вращение колёс
-
Захотель я ускорить тачку путём накрутки вращения колёс.
Но столкнулся с ситуацией.
Дело такое. Если я просто возьму и пропишу значение допустим 1000. То всё работает.mov [r14+000003BC],(float)1000 mulss xmm14,[r14+000003BC]
А ну да в инструкции срабатывает только 4 адреса моих колёс. Других нет.
Инструция на чтение.
Но хочется прикрутить горячую кнопку.И как только я делаю так.
[ENABLE] aobscanmodule(car_02,Mafia II Definitive Edition.exe,F3 45 ? ? ? ? ? ? ? F3 44 ? ? ? ? ? ? ? F3 44 ? ? ? ? ? ? ? 44 0F) alloc(newmem,$1000,car_02) label(return) label(hot_key) registersymbol(hot_key) registersymbol(car_02) newmem: cmp [hot_key],01 jne short @F mov [r14+000003BC],(float)1000 mov [hot_key],00 @@: mulss xmm14,[r14+000003BC] jmp return hot_key: dd 00 car_02: jmp newmem nop 4 return: [DISABLE] car_02: db F3 45 0F 59 B6 BC 03 00 00 unregistersymbol(*) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: Mafia II Definitive Edition.exe+4D8131 Mafia II Definitive Edition.exe+4D80E6: F3 41 0F 11 A6 1C 02 00 00 - movss [r14+0000021C],xmm4 Mafia II Definitive Edition.exe+4D80EF: F3 41 0F 10 86 D0 01 00 00 - movss xmm0,[r14+000001D0] Mafia II Definitive Edition.exe+4D80F8: F3 41 0F 10 8E E0 01 00 00 - movss xmm1,[r14+000001E0] Mafia II Definitive Edition.exe+4D8101: F3 41 0F 10 96 F0 01 00 00 - movss xmm2,[r14+000001F0] Mafia II Definitive Edition.exe+4D810A: F3 41 0F 11 86 00 02 00 00 - movss [r14+00000200],xmm0 Mafia II Definitive Edition.exe+4D8113: F3 41 0F 11 8E 10 02 00 00 - movss [r14+00000210],xmm1 Mafia II Definitive Edition.exe+4D811C: F3 41 0F 11 96 20 02 00 00 - movss [r14+00000220],xmm2 Mafia II Definitive Edition.exe+4D8125: 49 8B 86 48 04 00 00 - mov rax,[r14+00000448] Mafia II Definitive Edition.exe+4D812C: 48 85 C0 - test rax,rax Mafia II Definitive Edition.exe+4D812F: 74 1B - je "Mafia II Definitive Edition.exe"+4D814C // ---------- INJECTING HERE ---------- Mafia II Definitive Edition.exe+4D8131: F3 45 0F 59 B6 BC 03 00 00 - mulss xmm14,[r14+000003BC] // ---------- DONE INJECTING ---------- Mafia II Definitive Edition.exe+4D813A: F3 44 0F 58 B0 DC 03 00 00 - addss xmm14,[rax+000003DC] Mafia II Definitive Edition.exe+4D8143: F3 44 0F 11 B0 DC 03 00 00 - movss [rax+000003DC],xmm14 Mafia II Definitive Edition.exe+4D814C: 44 0F 28 74 24 40 - movaps xmm14,[rsp+40] Mafia II Definitive Edition.exe+4D8152: 4C 8D 9C 24 D0 00 00 00 - lea r11,[rsp+000000D0] Mafia II Definitive Edition.exe+4D815A: 49 8B 5B 10 - mov rbx,[r11+10] Mafia II Definitive Edition.exe+4D815E: 49 8B 73 18 - mov rsi,[r11+18] Mafia II Definitive Edition.exe+4D8162: 49 8B 7B 20 - mov rdi,[r11+20] Mafia II Definitive Edition.exe+4D8166: 41 0F 28 73 F0 - movaps xmm6,[r11-10] Mafia II Definitive Edition.exe+4D816B: 41 0F 28 7B E0 - movaps xmm7,[r11-20] Mafia II Definitive Edition.exe+4D8170: 45 0F 28 43 D0 - movaps xmm8,[r11-30] }
То по непонятной мне причине моё значение пишется только в 1 (первый) адрес.
Вопрос. Почему так происходит???
Первый раз с таким столкнулся.
Может из-за того что взял инструкцию с умножением? -
Пользователь @Partizan1078 написал в Mafia II-DE v.1.0.1 вращение колёс:
cmp [hot_key],01
jne short @F
mov [r14+000003BC],(float)1000
mov [hot_key],00 // просто не обнуляй, -
@Partizan1078 либо можно сделать счетчик на 4 записи, чтобы все 4 колеса получили 1000.
-
@garik66 Я тоже сразу подумал что за один проход не может эта инсрукция записать все 4 адреса. Прикручивал счётчик. Итог тот-же. Счётчик доводил до 100 циклов. Писалось только в первый адрес.
-
Пользователь @Partizan1078 написал в Mafia II-DE v.1.0.1 вращение колёс:
Попробуй все-таки так:newmem:
cmp [hot_key],01
jne short @F
mov [r14+000003BC],(float)1000
// mov [hot_key],00 // без этой строки
@@:
mulss xmm14,[r14+000003BC]
jmp return -
@garik66 Тогда как мне заставить машину больше не разгоняться. Если только в самой таблице вешать ещё одну кнопку на обнуление.
-
Пользователь @Partizan1078 написал в Mafia II-DE v.1.0.1 вращение колёс:
Если только в самой таблице вешать ещё одну кнопку на обнуление.
как вариант.
Странно что счетчик не сработал - я предполагал, что инструкция пробегает поочередно все 4 колеса. -
@garik66 инструкция может работать параллельно в четырех потоках, как вариант.
@Partizan1078 тебе нужно комплексное условие. Проще всего это сделать на Lua в СЕ, но можно и на ассемблере. Суть в том, что тебе нужен не один флаг, а четыре - на каждое колесо, и хранить во флаге не только сам флаг, но и адрес колеса. По адресу сверяться, включен ли флаг, а по горячей клавише выставлять флаг для всех четырех адресов. Если непонятно, пиши, попробую подробнее объяснить
-
Забил и сделал проще просто повесил на обнуление ещё одну кнопку. Проще говоря одна боковая кнопка мыши включает а другая боковая кнопка выключает.
cmp [hot_key],01 jne @F mov [r14+000003BC],(float)300 @@: mulss xmm14,[r14+000003BC]
А вот такой скрипт со счётчиком.
[ENABLE] aobscanmodule(car_02,Mafia II Definitive Edition.exe,F3 45 ? ? ? ? ? ? ? F3 44 ? ? ? ? ? ? ? F3 44 ? ? ? ? ? ? ? 44 0F) alloc(newmem,$1000,car_02) label(return) label(check) label(hot_key) registersymbol(hot_key) registersymbol(car_02) newmem: cmp [hot_key],01 jne @F mov [r14+000003BC],(float)100 add [check],01 cmp [check],03 jne newmem mov [hot_key],00 mov [check],00 @@: mulss xmm14,[r14+000003BC] jmp return hot_key: dd 00 check: dd 00 car_02: jmp newmem nop 4 return: [DISABLE] car_02: db F3 45 0F 59 B6 BC 03 00 00 unregistersymbol(*) dealloc(newmem)
И он не работает.
-
Пользователь @Partizan1078 написал в Mafia II-DE v.1.0.1 вращение колёс:
И он не работает.
так счетчик не верен, я так и предполагал - у тебя запись в адрес происходит только на четвертый раз.
-
Пользователь @Partizan1078 написал в Mafia II-DE v.1.0.1 вращение колёс:
И он не работает.
Попробуй так:
newmem: cmp [hot_key],01 jne @F mov [r14+000003BC],(float)100 add [check],01 cmp [check],03 jne @F mov [hot_key],00 mov [check],00 @@: mulss xmm14,[r14+000003BC] jmp return
К сожалению не знаю. как здесь юзать теги, прошу прощения.
Поправь скрипт, попробуй и отпишись пожалуйста - работает или нет. -
@garik66 Большое спасибо!
Чтот я тупанул и не обратил внимания на свою ошибку.
Сделал как вы посоветовали.
И всё заработало как надо.[ENABLE] aobscanmodule(car_02,Mafia II Definitive Edition.exe,F3 45 ? ? ? ? ? ? ? F3 44 ? ? ? ? ? ? ? F3 44 ? ? ? ? ? ? ? 44 0F) alloc(newmem,$1000,car_02) label(return) label(check) label(hot_key) registersymbol(hot_key) registersymbol(car_02) newmem: cmp [hot_key],01 jne @F mov [r14+000003BC],(float)500 add [check],01 cmp [check],64 jne @F mov [hot_key],00 mov [check],00 @@: mulss xmm14,[r14+000003BC] jmp return hot_key: dd 00 check: dd 00 car_02: jmp newmem nop 4 return: [DISABLE] car_02: db F3 45 0F 59 B6 BC 03 00 00 unregistersymbol(*) dealloc(newmem)
Чтобы скрипт обернуть в тег есть кнопочка "код"
-
Пользователь @Partizan1078 написал в Mafia II-DE v.1.0.1 вращение колёс:
И всё заработало как надо.
Рад
-
Предполагаю что ошибка в отсутствии pushfq и popfq.
Инструкция cmp меняет флаги. По правильному нужно всегда сохранять/восстанавливать регистр EFLAGS.newmem: pushfq cmp [hot_key],01 jne short @F mov [r14+000003BC],(float)1000 mov [hot_key],00 @@: popfq mulss xmm14,[r14+000003BC] jmp return
-
Пользователь @Antonshka написал в Mafia II-DE v.1.0.1 вращение колёс:
Предполагаю что ошибка в отсутствии pushfq и popfq.
вопрос же решили с партизаном.
по твоему скрипту тоже только одно колесо сработает. один раз.