Stalker Shadow of Chernobyl - движок OGSR - функция без перезарядки
-
Хочу разобраться, как на последних движках первого Сталкера реализовать функцию без перезарядки.
Цитата 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 }
-
Пользователь @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
Так сделать проще всего... Но ведь, даже поди и не понял, почему именно так ?
-
Да, у меня получилось сделать. Спасибо за образец!
-
@Templar Пожалуйста