X86Jumps Опубликовано 17 января, 2018 Поделиться Опубликовано 17 января, 2018 Записал видео в какой-то степени обучающего видео о том, как можно сделать спавн объектов и зомби. Сначала определяется как создаются объекты в игре, потом пытаемся воспроизвести спавн Так же используется condition breakpoint для отладки информации и еще некоторые возможности Cheat Engine (первое видео было записано 9 декабря 2017 года, второе - 24 декабря 2017 года) Видео 1 и скрипт к нему: Spoiler Скрытый текст [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat alloc(newmem,2048) label(returnhere) label(originalcode) label(exit) label(data) newmem: //this is allocated memory, you have read,write,execute access //place your code here pushad pushf push 9 call user32.GetAsyncKeyState cmp eax,0 je originalcode mov [data],esi mov eax,eax mov ebx, 017FAA00 mov esi,[017C54C0] push 0 push ebx mov ecx,esi call 005752B0 mov edi,[data] mov edx,[edi+50] mov [eax+50],edx mov edx,[edi+54] mov [eax+54],edx mov edx,[edi+58] mov [eax+58],edx originalcode: popf popad mov cl,[esi+00004E88] exit: jmp returnhere data: dd 0 dd 0 dd 0 dd 0 dd 0 "BH6.exe"+64D4E9: jmp newmem nop returnhere: [DISABLE] //code from here till the end of the code will be used to disable the cheat dealloc(newmem) "BH6.exe"+64D4E9: mov cl,[esi+00004E88] //Alt: db 8A 8E 88 4E 00 00 Видео 2 и скрипт к нему: Spoiler Скрытый текст [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat alloc(newmem,2048) label(returnhere) label(originalcode) label(exit) label(data) newmem: //this is allocated memory, you have read,write,execute access //place your code here pushad pushf mov [data],esi push 9 call user32.GetAsyncKeyState cmp eax,0 je originalcode call kernel32.GetTickCount sub eax,[data+4] cmp eax,200 jb @f /* mov eax,eax mov ebx, 017FAA00 mov esi,[017C54C0] push 0 push ebx mov ecx,esi call 005752B0 mov [data+8],eax mov esi,[data] mov ecx,[esi+50] mov [eax+50],ecx mov ecx,[esi+54] mov [eax+54],ecx mov ecx,[esi+58] mov [eax+58],ecx */ /* spawn item mov eax,[data] mov ecx,[017C54C0] push 1 push eax call 005786B0 */ mov esi,[017C540C] mov ebp, 17D105C push 0 push 0 push ebp mov eax,[esi] mov edx,[eax+40] mov ecx,esi call edx mov esi,[data] mov ecx,[esi+50] mov [eax+50],ecx mov ecx,[esi+54] mov [eax+54],ecx mov ecx,[esi+58] mov [eax+58],ecx call kernel32.GetTickCount mov [data+4],eax originalcode: popf popad mov cl,[esi+00004E88] exit: jmp returnhere data: dd 0 //esi dd 0 //tick dd 0 //last created "BH6.exe"+64D4E9: jmp newmem nop returnhere: [DISABLE] //code from here till the end of the code will be used to disable the cheat dealloc(newmem) "BH6.exe"+64D4E9: mov cl,[esi+00004E88] //Alt: db 8A 8E 88 4E 00 00 3 Ссылка на комментарий Поделиться на другие сайты Поделиться
MParker Опубликовано 17 января, 2018 Поделиться Опубликовано 17 января, 2018 Специфичный для MT Framework способ, еще ни одну игру не встречал, где бы такой способ работал. Ссылка на комментарий Поделиться на другие сайты Поделиться
X86Jumps Опубликовано 17 января, 2018 Автор Поделиться Опубликовано 17 января, 2018 (изменено) какой способ?)возможно тут сложнее чем в некоторых играх) потому что когда я спавню их (зомби), то они мне не дают ничего у них где то там еще инфа лежит о том, что примерно выпадает для ознакомительного видео я думаю хватит и того что есть это я еще не полез рассказывать про файлы .lot и еще другое) в первом видео я не сразу понял почему они были в начале на уровне головы там edi это CameraCtrl, поэтому у меня на видео они выше были чем голова Изменено 17 января, 2018 пользователем X86Jumps Ссылка на комментарий Поделиться на другие сайты Поделиться
MParker Опубликовано 17 января, 2018 Поделиться Опубликовано 17 января, 2018 9 минут назад, X86Jumps сказал: какой способ?) С поиском через название предметов Ссылка на комментарий Поделиться на другие сайты Поделиться
X86Jumps Опубликовано 17 января, 2018 Автор Поделиться Опубликовано 17 января, 2018 ну я же с чего-то должен был начать, нужна была зацепка в файлах спавна (.lot) указаны именно названия моделей, поэтому можно использовать хотя там же рядом есть вызов функции, которая по названию модели, вернула бы нужный указатель (который я вставлял) Ссылка на комментарий Поделиться на другие сайты Поделиться
MParker Опубликовано 17 января, 2018 Поделиться Опубликовано 17 января, 2018 11 минуту назад, X86Jumps сказал: хотя там же рядом есть вызов функции, которая по названию модели, вернула бы нужный указатель Ты её исследовал? Если да, то там есть какая-нибудь функция выделяющая память под структуру? Ссылка на комментарий Поделиться на другие сайты Поделиться
X86Jumps Опубликовано 17 января, 2018 Автор Поделиться Опубликовано 17 января, 2018 я находил функцию, которая возвращает нужный указатель по строке там ничего не выделяется, потому что все данные уже есть cSetItemInfo созданы уже были на каждый объект (бочки, зомби) Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения