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

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

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

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

    Цитата 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
    }
    
    L 1 ответ Последний ответ 3 февр. 2025 г., 17:54 Ответить Цитировать 0
    • L
      LIRW @Templar
      отредактировано 3 февр. 2025 г., 17:54

      Пользователь @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
      

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

      T 1 ответ Последний ответ 4 февр. 2025 г., 15:34 Ответить Цитировать 0
      • T
        Templar @LIRW
        отредактировано 4 февр. 2025 г., 15:34

        @LIRW

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

        L 1 ответ Последний ответ 4 февр. 2025 г., 19:30 Ответить Цитировать 0
        • L
          LIRW @Templar
          отредактировано 4 февр. 2025 г., 19:30

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

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