Перейти к содержанию

Рекомендуемые сообщения

в идеале хочу написать скрипт или трейнер, где при нажатии кнопки перемещения + шифт, скорость увеличивается в разы, в данной игре этого нету.

что имеем: задана некая скорость персонажа, скорость нпси, причем по скорости перемещения нпси отличаются. когда включал спидхак, увеличивается в разы скорость, ГГ вообще летает. 

нашел перемещение по оси х. почему то два адреса. первый адрес, при заморозке, возвращает после нажатия клавиши ГГ на место. второй адрес - заморозка, после нажатия, циклично возвращает и перемещает ГГ.

 

при изменении кода игры, сделать инструкцию неактивной, вылетает игра. может из-за того, что эта инструкция отвечает не только за мое перемещение, не знаю. в принципе, понятно что происходит, в eax находятся мои координаты по оси Х и они копируются в адрес [edi+8].

но как что-либо поменять не пойму

картинка 1

картинка 2

Изменено пользователем Vasabist
Ссылка на комментарий
Поделиться на другие сайты

Привет. Я думаю ты прав и эта инструкция работает с несколькими адресами.

Возможно тебе поможет видео от Garik66, в котором он объясняет как можно написать фильтр для такой инструкции: 

Spoiler

 

 

 

Изменено пользователем srg91
Ссылка на комментарий
Поделиться на другие сайты

 

11 минуту назад, srg91 сказал:

Привет. Я думаю ты прав и эта инструкция работает с несколькими адресами.

Возможно тебе поможет видео от Garik66, в котором он объясняет как можно написать фильтр для такой инструкции: 

  Скрыть содержимое

 

 

 

 

а как в будущем, сделать комбинацию стрелка+шифт. если шифт вообще не задействован в игре. и чтобы не только по оси Х, но и У. и что все-таки за два адреса отвечающие за перемещение по оси Х? так же и с осью У. там вообще разные координаты. одна как бы отвечает за перемещение на локальнйо карте, там значение небольшое, второе измеряется в тысячах, но не пойму, почему при заморозке адреса, ГГ циклично перемещается туда сюда(

я пробовал найти базовый адрес, вообще не получилось, первый адрес со смещением, значение адресов совпадает. второй - значения отличаются.

 

Ссылка на комментарий
Поделиться на другие сайты

35 minutes ago, Vasabist said:

 

 

а как в будущем, сделать комбинацию стрелка+шифт. если шифт вообще не задействован в игре. и чтобы не только по оси Х, но и У. и что все-таки за два адреса отвечающие за перемещение по оси Х? так же и с осью У. там вообще разные координаты. одна как бы отвечает за перемещение на локальнйо карте, там значение небольшое, второе измеряется в тысячах, но не пойму, почему при заморозке адреса, ГГ циклично перемещается туда сюда(

я пробовал найти базовый адрес, вообще не получилось, первый адрес со смещением, значение адресов совпадает. второй - значения отличаются.

 

 

Не уверен, что подскажу про разные координаты, но с SHIFT сделать довольно просто.

Сначала думал написать про хоткеи на скрипт, но они переключают скрипт каждые сколько-то миллисекунд.

 

В общем если ты сделаешь правильную фильтрацию, предлагаю тебе вынести значение скорости в отдельную "переменную" (в скрипт speedUp).

После чего по таймеру проверять - нажат ли SHIFT:

Spoiler

[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
Ссылка на комментарий
Поделиться на другие сайты

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 есть спидхак. но не факт, что  не будет опять вылета. и инструкция анверно будет общей( с телепортом. вроде как можно 

 

при нахождении базового адреса перемещения по оси ОХ, не получается найти... первый раз со смещением, значение перемещения оси ОХ совпадает, все нормально. второй раз без смещения, новый ардес нашел, нормально. третий же раз, значение перемещения по оси ОХ нового адреса не совпадает, заморозка не работает.. наверное руки не оттуда растут( 

 

игра - легенда о царице опале

Изменено пользователем Vasabist
Ссылка на комментарий
Поделиться на другие сайты

Я думаю тут проще отталкиваться от самого RPG Maker в виду того что все классы и модули доступны для редактирования и изучения, но единственный минус это язык на котором написан Редактор это Ruby.

Ссылка на комментарий
Поделиться на другие сайты

23 minutes ago, saiberpro said:

Я думаю тут проще отталкиваться от самого RPG Maker в виду того что все классы и модули доступны для редактирования и изучения, но единственный минус это язык на котором написан Редактор это Ruby.

 

Собственно это я и хотел предложить :) 

Для затравки кину данный скрипт, ну и пока сам попробую накидать изменение move_speed скриптом:

Spoiler

[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
Ссылка на комментарий
Поделиться на другие сайты

Spoiler
10 hours ago, Vasabist said:

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, лови скрипт:

Spoiler

[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)

 

 

Собственно пример использования:

Spoiler

 

 

 

Сделал через переопределение реальных классов, поэтому сработает только при включении чита в главном меню и только с новой игрой.

А так же будущие сохранения можно будет загрузить только предварительно включив чит.

Я думаю можно это обойти, но увы, на это у меня не было времени и скрипт превращается в кракозябры. Возможно немного позже :) 

Если надоест звук - просто убери строчку:

db '    $game_system.se_play($data_system.escape_se)' #13 #10

 

Плюс расписал подробно, что делал - в статье.

Спасибо тебе, что поднял эту тему - было интересно.

Ссылка на комментарий
Поделиться на другие сайты

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 взломать можно? базовый адрес получилось найти? почему у меня вылетало при написании скрипта? 

скрипт подсоединить к инструкции ху? и пойду читать краткий мануал по раби

Изменено пользователем Vasabist
Ссылка на комментарий
Поделиться на другие сайты

7 hours ago, Vasabist said:

спасиб тебе, а не мне) буду разбираться. но все-таки, в чем там проблема то была. одним CE взломать нельзя, нужен раби? на самом деле нельзя найти базовый адрес? открыл твою новую тему, пока темный лес. да и первое видео, разрешение маленькое. пока недосмотрел.

 

у меня что-то не получается :) может кто еще подскажет. в целом нужно выйти на move_speed, но это всё ruby-объекты и я не уверен как они выглядят в памяти. 

 

Опять же, получилось сделать небольшой скрипт, который можно использовать в любом месте игры. Просто добавь его через Memory Viewer - Tools - AutoAssembler, вставляешь текст и жмешь - File - Assign to current cheat table.

Spoiler

[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)

 

 

Ссылка на комментарий
Поделиться на другие сайты

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 не идеальна

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.