Vasabist Опубликовано 26 февраля, 2017 Поделиться Опубликовано 26 февраля, 2017 (изменено) в идеале хочу написать скрипт или трейнер, где при нажатии кнопки перемещения + шифт, скорость увеличивается в разы, в данной игре этого нету. что имеем: задана некая скорость персонажа, скорость нпси, причем по скорости перемещения нпси отличаются. когда включал спидхак, увеличивается в разы скорость, ГГ вообще летает. нашел перемещение по оси х. почему то два адреса. первый адрес, при заморозке, возвращает после нажатия клавиши ГГ на место. второй адрес - заморозка, после нажатия, циклично возвращает и перемещает ГГ. при изменении кода игры, сделать инструкцию неактивной, вылетает игра. может из-за того, что эта инструкция отвечает не только за мое перемещение, не знаю. в принципе, понятно что происходит, в eax находятся мои координаты по оси Х и они копируются в адрес [edi+8]. но как что-либо поменять не пойму картинка 1 картинка 2 Изменено 26 февраля, 2017 пользователем Vasabist Ссылка на комментарий Поделиться на другие сайты Поделиться
srg91 Опубликовано 26 февраля, 2017 Поделиться Опубликовано 26 февраля, 2017 (изменено) Привет. Я думаю ты прав и эта инструкция работает с несколькими адресами. Возможно тебе поможет видео от Garik66, в котором он объясняет как можно написать фильтр для такой инструкции: Показать контент Изменено 26 февраля, 2017 пользователем srg91 Ссылка на комментарий Поделиться на другие сайты Поделиться
Vasabist Опубликовано 26 февраля, 2017 Автор Поделиться Опубликовано 26 февраля, 2017 В 26.02.2017 в 18:05, srg91 сказал: Привет. Я думаю ты прав и эта инструкция работает с несколькими адресами. Возможно тебе поможет видео от Garik66, в котором он объясняет как можно написать фильтр для такой инструкции: Показать контент Показать а как в будущем, сделать комбинацию стрелка+шифт. если шифт вообще не задействован в игре. и чтобы не только по оси Х, но и У. и что все-таки за два адреса отвечающие за перемещение по оси Х? так же и с осью У. там вообще разные координаты. одна как бы отвечает за перемещение на локальнйо карте, там значение небольшое, второе измеряется в тысячах, но не пойму, почему при заморозке адреса, ГГ циклично перемещается туда сюда( я пробовал найти базовый адрес, вообще не получилось, первый адрес со смещением, значение адресов совпадает. второй - значения отличаются. Ссылка на комментарий Поделиться на другие сайты Поделиться
Vasabist Опубликовано 26 февраля, 2017 Автор Поделиться Опубликовано 26 февраля, 2017 как удалить один пост и сделать другой видимым: Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 26 февраля, 2017 Поделиться Опубликовано 26 февраля, 2017 В 26.02.2017 в 18:18, Vasabist сказал: как удалить один пост и сделать другой видимым: Показать Уже сделал. Ссылка на комментарий Поделиться на другие сайты Поделиться
srg91 Опубликовано 26 февраля, 2017 Поделиться Опубликовано 26 февраля, 2017 В 26.02.2017 в 18:16, Vasabist сказал: а как в будущем, сделать комбинацию стрелка+шифт. если шифт вообще не задействован в игре. и чтобы не только по оси Х, но и У. и что все-таки за два адреса отвечающие за перемещение по оси Х? так же и с осью У. там вообще разные координаты. одна как бы отвечает за перемещение на локальнйо карте, там значение небольшое, второе измеряется в тысячах, но не пойму, почему при заморозке адреса, ГГ циклично перемещается туда сюда( я пробовал найти базовый адрес, вообще не получилось, первый адрес со смещением, значение адресов совпадает. второй - значения отличаются. Показать Не уверен, что подскажу про разные координаты, но с SHIFT сделать довольно просто. Сначала думал написать про хоткеи на скрипт, но они переключают скрипт каждые сколько-то миллисекунд. В общем если ты сделаешь правильную фильтрацию, предлагаю тебе вынести значение скорости в отдельную "переменную" (в скрипт speedUp). После чего по таймеру проверять - нажат ли SHIFT: Показать контент [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat {$lua} if timer then timer.destroy() timer = nil end function speedUp(...) if isKeyPressed(VK_SHIFT) then writeInteger('char_speed', 10) else writeInteger('char_speed', 1) end end timer = createTimer() timer.setInterval(200) timer.setOnTimer(speedUp) timer.setEnabled(true) {$asm} alloc(char_speed, 4) registersymbol(char_speed) char_speed: dd #1 [DISABLE] //code from here till the end of the code will be used to disable the cheat {$lua} if timer then timer.destroy() timer = nil end {$asm} char_speed: dd #1 dealloc(char_speed) unregistersymbol(char_speed) 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Vasabist Опубликовано 27 февраля, 2017 Автор Поделиться Опубликовано 27 февраля, 2017 (изменено) srg91, Серег, спасибо, но мне пока рано с луа. видимо у меня, просто непонимание самого перемещения по оси х и по оси у. раньше рассказывал, что на данной локации, по оси х нашел 2 разных адреса. один при заморозке пытается идти в сторону и возвращается на место. прибавляется +2 и отнимается. второй адрес при заморозке. перемещается циклично при единичном нажатии на кнопку. прибавляется +256 и отнимается циклично при перемещении на другую локацию, эти адреса меняют свои данные,.. то есть было [31,31]. (правая вертикальная грань прямоугольника, середина) при перемещение стало [1,51]. (ось оХ, координата левой грани, сторона прямоугольника по оси ОУ увеличились и поэтому значение середины оси оУ стало больше), но это все локальные значения,.. хотя мне и нужно увеличение скорости на локальных значениях.. там в игре кстати есть телепорт, перемещение с одной локации на другую, тоже интересно. сделать скрипт на увеличение координаты не получается, вылетает. push edx mov edx,eax cmp edx, адрес pop edx je returnhere вот так скрипт работает, но при написании дополнительной строчки, просто еще раз там pop edx или inc edx - вылет найти вроде скорость ГГ возможно, в cheat engine есть спидхак. но не факт, что не будет опять вылета. и инструкция анверно будет общей( с телепортом. вроде как можно при нахождении базового адреса перемещения по оси ОХ, не получается найти... первый раз со смещением, значение перемещения оси ОХ совпадает, все нормально. второй раз без смещения, новый ардес нашел, нормально. третий же раз, значение перемещения по оси ОХ нового адреса не совпадает, заморозка не работает.. наверное руки не оттуда растут( игра - легенда о царице опале Изменено 27 февраля, 2017 пользователем Vasabist Ссылка на комментарий Поделиться на другие сайты Поделиться
saiberpro Опубликовано 27 февраля, 2017 Поделиться Опубликовано 27 февраля, 2017 Я думаю тут проще отталкиваться от самого RPG Maker в виду того что все классы и модули доступны для редактирования и изучения, но единственный минус это язык на котором написан Редактор это Ruby. Ссылка на комментарий Поделиться на другие сайты Поделиться
srg91 Опубликовано 27 февраля, 2017 Поделиться Опубликовано 27 февраля, 2017 В 27.02.2017 в 17:21, saiberpro сказал: Я думаю тут проще отталкиваться от самого RPG Maker в виду того что все классы и модули доступны для редактирования и изучения, но единственный минус это язык на котором написан Редактор это Ruby. Показать Собственно это я и хотел предложить Для затравки кину данный скрипт, ну и пока сам попробую накидать изменение move_speed скриптом: Показать контент [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat globalalloc(run_script, 64) globalalloc(text, 1024) text: db 'print "Hello, World!"' run_script: push text call RGSSEval pop eax ret createthread(run_script) [DISABLE] //code from here till the end of the code will be used to disable the cheat dealloc(run_script) unregistersymbol(run_script) dealloc(text) unregistersymbol(text) 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
srg91 Опубликовано 27 февраля, 2017 Поделиться Опубликовано 27 февраля, 2017 Показать контент В 27.02.2017 в 12:05, Vasabist сказал: srg91, Серег, спасибо, но мне пока рано с луа. видимо у меня, просто непонимание самого перемещения по оси х и по оси у. раньше рассказывал, что на данной локации, по оси х нашел 2 разных адреса. один при заморозке пытается идти в сторону и возвращается на место. прибавляется +2 и отнимается. второй адрес при заморозке. перемещается циклично при единичном нажатии на кнопку. прибавляется +256 и отнимается циклично при перемещении на другую локацию, эти адреса меняют свои данные,.. то есть было [31,31]. (правая вертикальная грань прямоугольника, середина) при перемещение стало [1,51]. (ось оХ, координата левой грани, сторона прямоугольника по оси ОУ увеличились и поэтому значение середины оси оУ стало больше), но это все локальные значения,.. хотя мне и нужно увеличение скорости на локальных значениях.. там в игре кстати есть телепорт, перемещение с одной локации на другую, тоже интересно. сделать скрипт на увеличение координаты не получается, вылетает. push edx mov edx,eax cmp edx, адрес pop edx je returnhere вот так скрипт работает, но при написании дополнительной строчки, просто еще раз там pop edx или inc edx - вылет найти вроде скорость ГГ возможно, в cheat engine есть спидхак. но не факт, что не будет опять вылета. и инструкция анверно будет общей( с телепортом. вроде как можно при нахождении базового адреса перемещения по оси ОХ, не получается найти... первый раз со смещением, значение перемещения оси ОХ совпадает, все нормально. второй раз без смещения, новый ардес нашел, нормально. третий же раз, значение перемещения по оси ОХ нового адреса не совпадает, заморозка не работает.. наверное руки не оттуда растут( игра - легенда о царице опале Показать Привет. Получилось сделать через Ruby, лови скрипт: Показать контент [ENABLE] // выделяем память на вызов функции globalalloc(run_script, 64) // выделяем память для текстовой команды на руби globalalloc(text, 1024) // Дописываем исходный класс text: // $game_system.se_play($data_system.escape_se) db 'class Game_Player < Game_Player' #13 #10 db ' alias orig_initialize initialize' #13 #10 db ' alias orig_update update' #13 #10 db #13 #10 db ' attr_accessor :move_speed' #13 #10 db ' attr_accessor :walk_speed' #13 #10 db ' attr_accessor :run_speed' #13 #10 db #13 #10 db ' def initialize' #13 #10 db ' orig_initialize' #13 #10 db #13 #10 db ' @walk_speed = @move_speed' #13 #10 db ' @run_speed = 5' #13 #10 db ' end' #13 #10 db #13 #10 db ' def running?' #13 #10 db ' return (@move_speed == @run_speed)' #13 #10 db ' end' #13 #10 db #13 #10 db ' def start_run' #13 #10 db ' $game_system.se_play($data_system.escape_se)' #13 #10 db ' @move_speed = @run_speed' #13 #10 db ' end' #13 #10 db #13 #10 db ' def start_walk' #13 #10 db ' @move_speed = @walk_speed' #13 #10 db ' end' #13 #10 db #13 #10 db ' def update' #13 #10 db ' if Input.press?(Input::SHIFT)' #13 #10 db ' if !running?' #13 #10 db ' start_run' #13 #10 db ' end' #13 #10 db ' else' #13 #10 db ' if running?' #13 #10 db ' start_walk' #13 #10 db ' end' #13 #10 db ' end' #13 #10 db #13 #10 db ' orig_update' #13 #10 db ' end' #13 #10 db 'end' #13 #10 db 0 // наш вызов функции run_script: // передаем нашу команду push text // вызываем Eval call RGSSEval // двигаем стек за собой pop eax ret createthread(run_script) [DISABLE] dealloc(run_script) unregistersymbol(run_script) dealloc(text) unregistersymbol(text) Собственно пример использования: Показать контент Сделал через переопределение реальных классов, поэтому сработает только при включении чита в главном меню и только с новой игрой. А так же будущие сохранения можно будет загрузить только предварительно включив чит. Я думаю можно это обойти, но увы, на это у меня не было времени и скрипт превращается в кракозябры. Возможно немного позже Если надоест звук - просто убери строчку: db ' $game_system.se_play($data_system.escape_se)' #13 #10 Плюс расписал подробно, что делал - в статье. Спасибо тебе, что поднял эту тему - было интересно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Vasabist Опубликовано 27 февраля, 2017 Автор Поделиться Опубликовано 27 февраля, 2017 (изменено) В 27.02.2017 в 22:36, srg91 сказал: Показать контент Привет. Получилось сделать через Ruby, лови скрипт: Показать контент [ENABLE] // выделяем память на вызов функции globalalloc(run_script, 64) // выделяем память для текстовой команды на руби globalalloc(text, 1024) // Дописываем исходный класс text: // $game_system.se_play($data_system.escape_se) db 'class Game_Player < Game_Player' #13 #10 db ' alias orig_initialize initialize' #13 #10 db ' alias orig_update update' #13 #10 db #13 #10 db ' attr_accessor :move_speed' #13 #10 db ' attr_accessor :walk_speed' #13 #10 db ' attr_accessor :run_speed' #13 #10 db #13 #10 db ' def initialize' #13 #10 db ' orig_initialize' #13 #10 db #13 #10 db ' @walk_speed = @move_speed' #13 #10 db ' @run_speed = 5' #13 #10 db ' end' #13 #10 db #13 #10 db ' def running?' #13 #10 db ' return (@move_speed == @run_speed)' #13 #10 db ' end' #13 #10 db #13 #10 db ' def start_run' #13 #10 db ' $game_system.se_play($data_system.escape_se)' #13 #10 db ' @move_speed = @run_speed' #13 #10 db ' end' #13 #10 db #13 #10 db ' def start_walk' #13 #10 db ' @move_speed = @walk_speed' #13 #10 db ' end' #13 #10 db #13 #10 db ' def update' #13 #10 db ' if Input.press?(Input::SHIFT)' #13 #10 db ' if !running?' #13 #10 db ' start_run' #13 #10 db ' end' #13 #10 db ' else' #13 #10 db ' if running?' #13 #10 db ' start_walk' #13 #10 db ' end' #13 #10 db ' end' #13 #10 db #13 #10 db ' orig_update' #13 #10 db ' end' #13 #10 db 'end' #13 #10 db 0 // наш вызов функции run_script: // передаем нашу команду push text // вызываем Eval call RGSSEval // двигаем стек за собой pop eax ret createthread(run_script) [DISABLE] dealloc(run_script) unregistersymbol(run_script) dealloc(text) unregistersymbol(text) Собственно пример использования: Показать контент Сделал через переопределение реальных классов, поэтому сработает только при включении чита в главном меню и только с новой игрой. А так же будущие сохранения можно будет загрузить только предварительно включив чит. Я думаю можно это обойти, но увы, на это у меня не было времени и скрипт превращается в кракозябры. Возможно немного позже Если надоест звук - просто убери строчку: db ' $game_system.se_play($data_system.escape_se)' #13 #10 Плюс расписал подробно, что делал - в статье. Спасибо тебе, что поднял эту тему - было интересно. Показать спасиб тебе, а не мне) буду разбираться. но все-таки, в чем там проблема то была. одним CE взломать нельзя, нужен раби? на самом деле нельзя найти базовый адрес? открыл твою новую тему, пока темный лес. да и первое видео, разрешение маленькое. пока недосмотрел. в этой игре грамотно боевка сделана, а движок не так уж и стар. есть игры, где не особо упор на графику сделаны. те же браузерки, паразовики, railnation, или гладиаторы онлайн, в свое время там онлайн большой был. а дозоры онлайн, которые и сейчас бы норм были пы.сы. мне только расписывать не надо) итак неделю читать буду по буквам) кратко, да, нет. одним CE взломать можно? базовый адрес получилось найти? почему у меня вылетало при написании скрипта? скрипт подсоединить к инструкции ху? и пойду читать краткий мануал по раби Изменено 28 февраля, 2017 пользователем Vasabist Ссылка на комментарий Поделиться на другие сайты Поделиться
Vasabist Опубликовано 27 февраля, 2017 Автор Поделиться Опубликовано 27 февраля, 2017 ха, здоровский видос, прям констуктор Ссылка на комментарий Поделиться на другие сайты Поделиться
srg91 Опубликовано 28 февраля, 2017 Поделиться Опубликовано 28 февраля, 2017 В 27.02.2017 в 23:36, Vasabist сказал: спасиб тебе, а не мне) буду разбираться. но все-таки, в чем там проблема то была. одним CE взломать нельзя, нужен раби? на самом деле нельзя найти базовый адрес? открыл твою новую тему, пока темный лес. да и первое видео, разрешение маленькое. пока недосмотрел. Показать у меня что-то не получается может кто еще подскажет. в целом нужно выйти на move_speed, но это всё ruby-объекты и я не уверен как они выглядят в памяти. Опять же, получилось сделать небольшой скрипт, который можно использовать в любом месте игры. Просто добавь его через Memory Viewer - Tools - AutoAssembler, вставляешь текст и жмешь - File - Assign to current cheat table. Показать контент [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat {$lua} if timer then timer.destroy() timer = nil end is_player_running = false function speedUp(...) if isKeyPressed(VK_SHIFT) then if not is_player_running then is_player_running = true autoAssemble([[ cur_command: dd turn_on createthread(run_script) ]]) end else if is_player_running then is_player_running = false autoAssemble([[ cur_command: dd turn_off createthread(run_script) ]]) end end end timer = createTimer() timer.setInterval(200) timer.setOnTimer(speedUp) timer.setEnabled(true) {$asm} globalalloc(run_script, 64) globalalloc(cur_command, 4) globalalloc(turn_on, 256) globalalloc(turn_off, 256) turn_on: db '$game_player.instance_variable_set(:@move_speed, 5)' #13 #10 0 turn_off: db '$game_player.instance_variable_set(:@move_speed, 4)' #13 #10 0 cur_command: dd turn_off run_script: push [cur_command] call RGSSEval pop eax ret [DISABLE] //code from here till the end of the code will be used to disable the cheat {$lua} if timer then timer.destroy() timer = nil is_player_running = nil end {$asm} dealloc(run_script) unregistersymbol(run_script) dealloc(turn_on) unregistersymbol(turn_on) dealloc(turn_off) unregistersymbol(turn_off) dealloc(cur_command) unregistersymbol(cur_command) Ссылка на комментарий Поделиться на другие сайты Поделиться
Vasabist Опубликовано 28 февраля, 2017 Автор Поделиться Опубликовано 28 февраля, 2017 В 28.02.2017 в 06:48, srg91 сказал: у меня что-то не получается может кто еще подскажет. в целом нужно выйти на move_speed, но это всё ruby-объекты и я не уверен как они выглядят в памяти. Опять же, получилось сделать небольшой скрипт, который можно использовать в любом месте игры. Просто добавь его через Memory Viewer - Tools - AutoAssembler, вставляешь текст и жмешь - File - Assign to current cheat table. Показать контент [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat {$lua} if timer then timer.destroy() timer = nil end is_player_running = false function speedUp(...) if isKeyPressed(VK_SHIFT) then if not is_player_running then is_player_running = true autoAssemble([[ cur_command: dd turn_on createthread(run_script) ]]) end else if is_player_running then is_player_running = false autoAssemble([[ cur_command: dd turn_off createthread(run_script) ]]) end end end timer = createTimer() timer.setInterval(200) timer.setOnTimer(speedUp) timer.setEnabled(true) {$asm} globalalloc(run_script, 64) globalalloc(cur_command, 4) globalalloc(turn_on, 256) globalalloc(turn_off, 256) turn_on: db '$game_player.instance_variable_set(:@move_speed, 5)' #13 #10 0 turn_off: db '$game_player.instance_variable_set(:@move_speed, 4)' #13 #10 0 cur_command: dd turn_off run_script: push [cur_command] call RGSSEval pop eax ret [DISABLE] //code from here till the end of the code will be used to disable the cheat {$lua} if timer then timer.destroy() timer = nil is_player_running = nil end {$asm} dealloc(run_script) unregistersymbol(run_script) dealloc(turn_on) unregistersymbol(turn_on) dealloc(turn_off) unregistersymbol(turn_off) dealloc(cur_command) unregistersymbol(cur_command) Показать да спасиб за это, не все же сразу должно получаться, у меня вообще ничего. а про что игру делал на мейкере? видел же в той боевку? еще одну какую то запускал, так там вообще была анимация супер скилл приемов в боевке. вроде как флеш анимация, но я на вскидку, так как поверхностно только паскаль и си знаю, чтобы hello world написать) вообще, в CE как то подстраивается спидхак к игре, может с этой стороны смотреть. как написан сам этот спидхак... а адреса наверно в CE не все показывает именно от этой игры, мне в начале по оси Ох что читает вообще не показывал, может блокировка какая то стоит, не знаю, но вылетало при изменении ассебмлерского кода постоянно. может сама CE не идеальна Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения