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

    как при деактивации скрипта вернуть первоначальное значение переменной

    Запланировано Прикреплена Закрыта Перенесена Взлом игр (вопросы и ответы)
    4 Сообщения 3 Posters 152 Просмотры
    Загружаем больше сообщений
    • Сначала старые
    • Сначала новые
    • По количеству голосов
    Ответить
    • Ответить, создав новую тему
    Авторизуйтесь, чтобы ответить
    Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
    • M
      Mr.Xleb
      отредактировано

      Здравствуйте, подскажите пожалуйста как при деактивации скрипта вернуть "Максимальное кол-во здоровья" к изначальному.

      [ENABLE]
      
      aobscanmodule(INJECT,CryGame.dll,39 B3 A0 00 00 00 0F 8E A9) 
      alloc(newmem,$1000)
      
      label(code)
      label(return)
      
      newmem:
        mov [ebx+E0],#1000 //Максимальное кол-во здоровья(изначально #255)
        push [ebx+E0]
        pop [ebx+A0] //Текуще кол-во здоровья
      code:
        cmp [ebx+000000A0],esi
        jmp return
      
      INJECT:
        jmp newmem
        nop
      return:
      registersymbol(INJECT)
      
      [DISABLE]
      
      INJECT:
        db 39 B3 A0 00 00 00
      
      unregistersymbol(INJECT)
      dealloc(newmem)
      
      1 ответ Последний ответ Ответить Цитировать 0
      • Partizan1078P
        Partizan1078
        отредактировано

        Можно попробовать вынести макс. значение жизней за пределы скрипта. И сначала поменять значение и только потом уже отключать скрипт.

        1 ответ Последний ответ Ответить Цитировать 0
        • hexH
          hex
          отредактировано

          Можно сделать так: один скрипт - базовый, который изменяет максимальное количество здоровья, а второй скрипт устанавливает флаг включен/отключен.
          Вот как получится:

          [ENABLE]
          
          aobscanmodule(INJECT,CryGame.dll,39 B3 A0 00 00 00 0F 8E A9) 
          alloc(newmem,$1000)
          alloc(bEnableMaxHealth,4)
          
          label(code)
          label(label_a)
          label(label_b)
          label(return)
          
          newmem:
            cmp byte ptr [bEnableMaxHealth],01
            jne label_a
            mov [ebx+E0],(int)1000
            jmp label_b
            label_a:
            mov [ebx+E0],(int)255
            label_b:
            push [ebx+E0]
            pop [ebx+A0]
          code:
            cmp [ebx+000000A0],esi
            jmp return
          
          INJECT:
            jmp newmem
            nop
          return:
          registersymbol(INJECT)
          registersymbol(bEnableMaxHealth)
          
          [DISABLE]
          
          INJECT:
            db 39 B3 A0 00 00 00
          
          unregistersymbol(*)
          dealloc(*)
          

          А второй скрипт будет такой:

          [ENABLE]
          
          bEnableMaxHealth:
            db 01
          
          [DISABLE]
          
          bEnableMaxHealth:
            db 00
          

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

          1 ответ Последний ответ Ответить Цитировать 2
          • M
            Mr.Xleb
            отредактировано

            Большое спасибо, всё получилось)

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