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

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

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

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

    S T P 3 ответов Последний ответ 9 нояб. 2023 г., 08:55 Ответить Цитировать 0
    • S
      StoneWeaver administrators @sinkhrophazatron
      отредактировано 9 нояб. 2023 г., 08:55

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

      S 1 ответ Последний ответ 9 нояб. 2023 г., 11:06 Ответить Цитировать 0
      • S
        sinkhrophazatron @StoneWeaver
        отредактировано 9 нояб. 2023 г., 11:06

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

        L 1 ответ Последний ответ 9 нояб. 2023 г., 14:03 Ответить Цитировать 0
        • L
          LIRW @sinkhrophazatron
          отредактировано 9 нояб. 2023 г., 14:03

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

          1 ответ Последний ответ Ответить Цитировать 1
          • T
            temtriss @sinkhrophazatron
            отредактировано 6 янв. 2024 г., 23:40

            @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
            • P
              Partizan1078 @sinkhrophazatron
              отредактировано Partizan1078 1 июл. 2024 г., 00:49 7 янв. 2024 г., 00:46

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

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