1. 修复拦截离队后部分情况会卡死玩家的问题
2. 修复NLG.ShowWindowTalked data参数长度超过1024时崩端的问题,现在修改到支持8000
支持21.2a
- ffi.patch(0x0058BF06, { 0x34 });
- ffi.patch(0x0058C1EA, { 0x08 });
- ffi.patch(0x0058C1F0, { 0xCB });
- ffi.patch(0x0058C1F8, { 0xCB });
- print('[DEBUG] NLG_ShowWindowTalked_Patch done')
-
- ffi.patch(0x00438B89, {
- 0x8B, 0x45, 0xE4, 0xC7, 0x44, 0x24, 0x04, 0x39, 0x02, 0x00, 0x00, 0xC7, 0x04, 0x24, 0x80, 0x36, 0x61, 0x00,
- 0x89, 0x44, 0x24, 0x08, 0xE8, 0x0C, 0xEC, 0xFE, 0xFF, 0x85, 0xC0, 0x74, 0x15, 0x8B, 0x45, 0xE4,
- 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0xBA, 0x01, 0x00, 0x00, 0x00, 0x90, 0x90,
- })
-
- local fnA = ffi.cast('int (__cdecl*)(uint32_t a1)', 0x00438B70)
- local fnB = ffi.cast('int (__cdecl*) (uint32_t a1, uint32_t a2, int a3)', 0x005779E0);
- local function fnC(charPtr)
- if ffi.readMemoryDWORD(0x09613C88) ~= 0 then
- local targetCharPtr = ffi.readMemoryDWORD(charPtr + 0xA08);
- local res = fnB(charPtr, targetCharPtr, 1);
- if res == 0 then
- return 1;
- end
- end
- return fnA(charPtr);
- end
-
- local fnPtr = ffi.cast('int (__cdecl*)(uint32_t a1)', fnC)
- local fnPtr1 = ffi.new('uint32_t[?]', 2);
- fnPtr1[0] = ffi.cast('uint32_t', ffi.cast('void*', fnPtr)) - 0x0040EE50;
- fnPtr1 = ffi.cast('uint8_t*', fnPtr1);
- local s = {}
- for i = 1, 4 do
- s[i] = fnPtr1[i - 1]
- end
- ffi.patch(0x0040EE4C, s)
- _G.___script_buffer_RegPartyEvent = { fnPtr, fnC };
- print('[DEBUG] NL_RegPartyEvent_Patch done')
复制代码
CGMSV21.2a_Patch1.7z
(2.1 KB, 下载次数: 0)
|