mirror of
https://github.com/sfall-team/sfall.git
synced 2026-07-27 16:52:34 -07:00
HOOK_STEAL: add ret0 value 2 to fail "silently"
This commit is contained in:
@@ -377,7 +377,7 @@
|
|||||||
int arg3 - 0 when stealing, 1 when planting
|
int arg3 - 0 when stealing, 1 when planting
|
||||||
int arg4 - quantity of items being stolen
|
int arg4 - quantity of items being stolen
|
||||||
|
|
||||||
int ret0 - overrides hard-coded handler (1 - force success, 0 - force fail, -1 - use engine handler)
|
int ret0 - overrides hard-coded handler (2 - force fail without closing window, 1 - force success, 0 - force fail, -1 - use engine handler)
|
||||||
int ret1 - overrides experience points gained for stealing this item
|
int ret1 - overrides experience points gained for stealing this item
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -480,7 +480,7 @@ Item arg2 - Item being stolen/planted
|
|||||||
int arg3 - 0 when stealing, 1 when planting
|
int arg3 - 0 when stealing, 1 when planting
|
||||||
int arg4 - quantity of items being stolen
|
int arg4 - quantity of items being stolen
|
||||||
|
|
||||||
int ret0 - overrides hard-coded handler (1 - force success, 0 - force fail, -1 - use engine handler)
|
int ret0 - overrides hard-coded handler (2 - force fail without closing window, 1 - force success, 0 - force fail, -1 - use engine handler)
|
||||||
int ret1 - overrides experience points gained for stealing this item
|
int ret1 - overrides experience points gained for stealing this item
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -225,6 +225,7 @@ end:
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void __declspec(naked) StealCheckHook() {
|
static void __declspec(naked) StealCheckHook() {
|
||||||
|
static const unsigned long StealSkip_addr = 0x474B18;
|
||||||
__asm {
|
__asm {
|
||||||
HookBegin;
|
HookBegin;
|
||||||
mov args[0], eax; // thief
|
mov args[0], eax; // thief
|
||||||
@@ -242,16 +243,22 @@ static void __declspec(naked) StealCheckHook() {
|
|||||||
__asm {
|
__asm {
|
||||||
popadc;
|
popadc;
|
||||||
cmp cRet, 1;
|
cmp cRet, 1;
|
||||||
jl defaultHandler;
|
jl defaultHandler; // no return values, use vanilla path
|
||||||
cmp cRet, 2;
|
cmp cRet, 2;
|
||||||
jl skipExpOverride;
|
jl skipExpOverride;
|
||||||
push eax;
|
push eax;
|
||||||
mov eax, rets[4];
|
mov eax, rets[4]; // override experience points for steal
|
||||||
mov stealExpOverride, eax;
|
mov stealExpOverride, eax;
|
||||||
pop eax;
|
pop eax;
|
||||||
skipExpOverride:
|
skipExpOverride:
|
||||||
cmp rets[0], -1;
|
cmp rets[0], -1; // if <= -1, use vanilla path
|
||||||
jle defaultHandler;
|
jle defaultHandler;
|
||||||
|
cmp rets[0], 2; // 2 - steal failed but didn't get cought
|
||||||
|
jnz normalReturn;
|
||||||
|
HookEnd;
|
||||||
|
pop eax;
|
||||||
|
jmp StealSkip_addr;
|
||||||
|
normalReturn:
|
||||||
mov eax, rets[0];
|
mov eax, rets[0];
|
||||||
HookEnd;
|
HookEnd;
|
||||||
retn;
|
retn;
|
||||||
|
|||||||
Reference in New Issue
Block a user