装备镶嵌修复

This commit is contained in:
lenheart
2024-12-10 20:14:37 +08:00
parent 59b0975bfb
commit 85375acd80
74 changed files with 261 additions and 288 deletions

View File

@@ -972,6 +972,35 @@ static SQInteger L_GetTimestampString(HSQUIRRELVM v)
return 1;
}
#define NSUBHOOK_INIT(func, addr) \
fn##func func = (fn##func)addr; \
FuncHook h##func
#define NSUBHOOK_SETUP(func) h##func.Hook((void **)&func, (void *)_##func)
typedef int (*fnInven_Item_reset)(void *a1);
typedef void *(*fnInven_Item_setcopy)(void *a1, void *a2);
NSUBHOOK_INIT(Inven_Item_reset, 0x080CB7D8);
int _Inven_Item_reset(void *item)
{
int ret = Inven_Item_reset(item);
memset(item, 0, 61);
return ret;
}
NSUBHOOK_INIT(Inven_Item_setcopy, 0x0814A62E);
void *_Inven_Item_setcopy(void *item, void *item2)
{
Inven_Item_setcopy(item, item2);
memcpy(item, item2, 61);
return item2;
}
static SQInteger L_HookEquimentUseJewel(HSQUIRRELVM v)
{
NSUBHOOK_SETUP(Inven_Item_setcopy);
NSUBHOOK_SETUP(Inven_Item_reset);
return 0;
}
static void RegisterGame(HSQUIRRELVM v)
{
getConfigPath(szGamePath, sizeof(szGamePath));
@@ -1040,4 +1069,6 @@ static void RegisterGame(HSQUIRRELVM v)
register_World_func(v, OutPutTable, _SC("Sq_OutPutTable"));
// 开启自动热重载
register_World_func(v, AutoReload, _SC("Sq_AutoReload"));
// Hook装备镶嵌
register_World_func(v, L_HookEquimentUseJewel, _SC("L_HookEquimentUseJewel"));
}