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

    Stalker Shadow of Chernobyl - движок OGSR - функция без перезарядки

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

      Хочу разобраться, как на последних движках первого Сталкера реализовать функцию без перезарядки.

      Цитата LIRW -
      Функция патрон в игре "add qword ptr [rbx+00000B20],-60" а не с которой работаешь в таблице. Я может по позже реализую её.. Принцип там прост (на первый взгляд) в ранних версиях, бралось максимальное количество патрон, пере умножалось на 60 (что такое 60 ? - это вычитая реального патрона за выстрел ) и накидывалось значение на него, ниже по офсету в -8 которое. То есть получалось. К примеру 30 патроны... и реализация такая: Ну типа такого....
      mov eax,[rcx+xxxxxxxx]
      imul eax,eax,60
      add eax,xxxxxxxx
      mov qword [rcx+xxxxxxxx],rax
      А с той функцией, что работаешь... Максимальное значение загнать в неё..
      Оно там по выше... вот и всё!

      Вот приволожу функцию из игры ниже -

      { Game   : xrEngine.exe
        Version: 
        Date   : 2025-02-01
        Author : Templar
      
        This script does blah blah blah
      }
      
      [ENABLE]
      
      aobscanmodule(NoReload,xrEngine.exe,01 B3 58 0B 00 00) // should be unique
      alloc(newmem,$1000,NoReload)
      
      label(code)
      label(return)
      
      newmem:
      
      code:
        add [rbx+00000B58],esi
        jmp return
      
      NoReload:
        jmp newmem
        nop
      return:
      registersymbol(NoReload)
      
      [DISABLE]
      
      NoReload:
        db 01 B3 58 0B 00 00
      
      unregistersymbol(NoReload)
      dealloc(newmem)
      
      {
      Address of signature = xrEngine.exe + 0x003EB539
      "\x01\xB3\x00\x00\x00\x00\x49\x8B", "xx????xx"
      "01 B3 ? ? ? ? 49 8B"
      // ORIGINAL CODE - INJECTION POINT: xrEngine.exe+3EB539
      
      xrEngine.exe+3EB510: 48 8B 47 A0              - mov rax,[rdi-60]
      xrEngine.exe+3EB514: 48 85 C0                 - test rax,rax
      xrEngine.exe+3EB517: 74 10                    - je xrEngine.exe+3EB529
      xrEngine.exe+3EB519: 01 08                    - add [rax],ecx
      xrEngine.exe+3EB51B: 48 8B 47 A0              - mov rax,[rdi-60]
      xrEngine.exe+3EB51F: 83 38 00                 - cmp dword ptr [rax],00
      xrEngine.exe+3EB522: 75 05                    - jne xrEngine.exe+3EB529
      xrEngine.exe+3EB524: 48 83 67 A0 00           - and qword ptr [rdi-60],00
      xrEngine.exe+3EB529: 48 83 83 B8 0B 00 00 A0  - add qword ptr [rbx+00000BB8],-60
      xrEngine.exe+3EB531: 4C 8D 9C 24 B0 00 00 00  - lea r11,[rsp+000000B0]
      // ---------- INJECTING HERE ----------
      xrEngine.exe+3EB539: 01 B3 58 0B 00 00        - add [rbx+00000B58],esi
      // ---------- DONE INJECTING  ----------
      xrEngine.exe+3EB53F: 49 8B 5B 20              - mov rbx,[r11+20]
      xrEngine.exe+3EB543: 49 8B 73 30              - mov rsi,[r11+30]
      xrEngine.exe+3EB547: 49 8B 6B 28              - mov rbp,[r11+28]
      xrEngine.exe+3EB54B: 49 8B 7B 38              - mov rdi,[r11+38]
      xrEngine.exe+3EB54F: 41 0F 28 73 F0           - movaps xmm6,[r11-10]
      xrEngine.exe+3EB554: 41 0F 28 7B E0           - movaps xmm7,[r11-20]
      xrEngine.exe+3EB559: 45 0F 28 43 D0           - movaps xmm8,[r11-30]
      xrEngine.exe+3EB55E: 45 0F 28 4B C0           - movaps xmm9,[r11-40]
      xrEngine.exe+3EB563: 49 8B E3                 - mov rsp,r11
      xrEngine.exe+3EB566: 41 5F                    - pop r15
      }
      
      LIRWL 1 ответ Последний ответ Ответить Цитировать 0
      • LIRWL
        LIRW @Templar
        отредактировано

        Пользователь @Templar написал в Stalker Shadow of Chernobyl - движок OGSR - функция без перезарядки:

        add qword ptr [rbx+00000BB8],-60

        По принципу делай как я и всё будет хорошо, многому не научишься.

        mem:
        cmp [ поинтер оружия],rbx
        jne code
        add qword ptr [rbx+00000BB8],60
        jmp @1f 
        code:
        add [rbx+00000B58],esi  // тут поди dec 'экранных патрон. 
        @1:
        ret
        

        Так сделать проще всего... Но ведь, даже поди и не понял, почему именно так ?

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

          @LIRW

          Да, у меня получилось сделать. Спасибо за образец!

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

            @Templar Пожалуйста :slightly_smiling_face:

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