GameHackLab[RU]
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы
    • Зарегистрироваться
    • Войти

    Можно ли применить спидхак не ко всей игре, а к отдельной инструкции?

    Запланировано Прикреплена Закрыта Перенесена Взлом игр (начинающим)
    6 Сообщения 5 Posters 328 Просмотры
    Загружаем больше сообщений
    • Сначала старые
    • Сначала новые
    • По количеству голосов
    Ответить
    • Ответить, создав новую тему
    Авторизуйтесь, чтобы ответить
    Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
    • sinkhrophazatronS
      sinkhrophazatron
      отредактировано

      Суть в том, чтобы уменьшить интервал срабатывания инструкции.
      Скажем, ускорить таймер.
      Например (с потолка) инструкция inc eax раз в секунду увеличивает таймер на единицу. Соответственно, можно ли как-то сделать так, чтобы эта оригинальная инструкция срабатывала не 1 раз в секунду, а 1 раз в милисекунду, то есть 1000 раз в секунду?
      Конечно, можно просто записать любое значение в таймер, но меня такой вариант не устраивает.
      И дело не в конкретном примере. Примеров много разных, где это может пригодиться. Я хочу именно понять, можно ли, и как это выглядит в скрипте.
      То есть, понятно, что вот такой скрипт активирует спидхак x10 на всю игру целиком:
      [ENABLE]
      luacall(speedhack_setSpeed(10))
      [DISABLE]
      luacall(speedhack_setSpeed(1))
      А как привязать это к отдельной известной инструкции, найденной по адресу? На примере, скажем, того же inc eax
      Можно в качестве примера рассмотреть игру NFS PAYBACK. Там есть крутилка-рулетка на получение деталей для машин. Она очень медленно крутится. Было бы неплохо так ускорить локально рулетку, не трогая всю игру целиком. Повторюсь, это просто пример.

      StoneWeaverS T Partizan1078P 3 ответов Последний ответ Ответить Цитировать 0
      • StoneWeaverS
        StoneWeaver administrators @sinkhrophazatron
        отредактировано

        @sinkhrophazatron Это тебе надо руками делать спидхак на нужной инструкции. Встроенный в СЕ тут не поможет.

        sinkhrophazatronS 1 ответ Последний ответ Ответить Цитировать 0
        • sinkhrophazatronS
          sinkhrophazatron @StoneWeaver
          отредактировано

          @StoneWeaver Так об этом и речь! Как это делается? Как выглядит такой скрипт? Или, может, есть какие-то другие инструменты для изменения интервалов срабатывания инструкций. А так же еще вот такой, косвенно связанный вопрос - Есть оригинальная инструкция, допустим тоже inc eax, которая увеличивает значение какой-нибудь статистики для получения ачивки, но инструкция разовая, срабатывающая в конкретных условиях, а я, допустим, хочу из этой разовой оригинальной инструкции сделать цикличную, которая бы, скажем, увеличивала статистику на единицу каждые 3 секунды. И так далее. Или это вообще нереально? То есть, какие интервалы цикличности разрабы заложили, такие и будут всегда и повлиять на них нельзя?

          LIRWL 1 ответ Последний ответ Ответить Цитировать 0
          • LIRWL
            LIRW @sinkhrophazatron
            отредактировано

            @sinkhrophazatron
            Ищи тогда условие, которое вызывает эту функцию ( inc ) а то есть прибавление... Перетирай её или на неё делай безусловный переход и делай с этой функцией ( inc ) , всё что угодно.
            Она же не сама по себе работает, в определенный момент срабатывает, вот этот момент, тебе и нужен для реализации задуманного.

            1 ответ Последний ответ Ответить Цитировать 1
            • T
              temtriss @sinkhrophazatron
              отредактировано

              @sinkhrophazatron
              Ну самый простой способ как по мне увеличить скорость таймеров(как делает это CE, GetTickCount и прочих функций) во время выполнения этой функции. Такой вариант не устроит?
              что-то типо:

              function debugger_onBreakpoint()
                  if EIP == 0xDEADC0DE then
                           -- your function called...
                           print(string.format("Something to log 0x%x", 0xDEADC0DE ))
                            speedhack_setSpeed(10)
                  elseif EIP == 0xCAFEF00D then
                           -- another function called
                           print(string.format("Something to log 0x%x", 0xCAFEF00D))
                           speedhack_setSpeed(1)
                  else
                           print("ELSE...")
                  end
              
                  return 1
              end
              

              Типо 0xDEADC0DE - вызов твоей функции - рулетки. В 10 раз умножаются результаты функций-таймеров, для всей игры
              А 0xCAFEF00D - любая другая функция, которая вызывается после нужной тебе, если как пример был рулетка, то тут может быть получение результата это рулетки, который и востановит таймеры в нормальное положение :)

              P.S. Да я изобретаю велосипеды)
              P.S1. должно сработать :)

              No knowledge, no skill, no brains...

              1 ответ Последний ответ Ответить Цитировать 0
              • Partizan1078P
                Partizan1078 @sinkhrophazatron
                отредактировано Partizan1078

                @sinkhrophazatron Мне Почему-то пришла в голову идея с созданием своего потока. И вызывать нужную функцию по своему таймеру.

                1 ответ Последний ответ Ответить Цитировать 0
                • Первое сообщение
                  Последнее сообщение