Vasabist
-
Постов
10 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные Vasabist
-
-
4 часа назад, 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 не идеальна
-
да какая рубрика о проблемах, тут целая статья. я вообще ничего сделать не мог, да и сейчас после прочитанного.. тоже)))
-
ха, здоровский видос, прям констуктор
-
1 час назад, 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 взломать можно? базовый адрес получилось найти? почему у меня вылетало при написании скрипта?
скрипт подсоединить к инструкции ху? и пойду читать краткий мануал по раби
-
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 есть спидхак. но не факт, что не будет опять вылета. и инструкция анверно будет общей( с телепортом. вроде как можно
при нахождении базового адреса перемещения по оси ОХ, не получается найти... первый раз со смещением, значение перемещения оси ОХ совпадает, все нормально. второй раз без смещения, новый ардес нашел, нормально. третий же раз, значение перемещения по оси ОХ нового адреса не совпадает, заморозка не работает.. наверное руки не оттуда растут(
игра - легенда о царице опале
-
как удалить один пост и сделать другой видимым:
-
11 минуту назад, srg91 сказал:
Привет. Я думаю ты прав и эта инструкция работает с несколькими адресами.
Возможно тебе поможет видео от Garik66, в котором он объясняет как можно написать фильтр для такой инструкции:
а как в будущем, сделать комбинацию стрелка+шифт. если шифт вообще не задействован в игре. и чтобы не только по оси Х, но и У. и что все-таки за два адреса отвечающие за перемещение по оси Х? так же и с осью У. там вообще разные координаты. одна как бы отвечает за перемещение на локальнйо карте, там значение небольшое, второе измеряется в тысячах, но не пойму, почему при заморозке адреса, ГГ циклично перемещается туда сюда(
я пробовал найти базовый адрес, вообще не получилось, первый адрес со смещением, значение адресов совпадает. второй - значения отличаются.
-
в идеале хочу написать скрипт или трейнер, где при нажатии кнопки перемещения + шифт, скорость увеличивается в разы, в данной игре этого нету.
что имеем: задана некая скорость персонажа, скорость нпси, причем по скорости перемещения нпси отличаются. когда включал спидхак, увеличивается в разы скорость, ГГ вообще летает.
нашел перемещение по оси х. почему то два адреса. первый адрес, при заморозке, возвращает после нажатия клавиши ГГ на место. второй адрес - заморозка, после нажатия, циклично возвращает и перемещает ГГ.
при изменении кода игры, сделать инструкцию неактивной, вылетает игра. может из-за того, что эта инструкция отвечает не только за мое перемещение, не знаю. в принципе, понятно что происходит, в eax находятся мои координаты по оси Х и они копируются в адрес [edi+8].
но как что-либо поменять не пойму
Ломаем RPG Maker XP через RGSSEval
in Статьи для продвинутых
Опубликовано · Изменено пользователем Vasabist
Серег, круто это) пасиб. так что у тебя со своей игрой то? дальше писать будешь?)