public unsafe void Init() { var scanner = Plugin.PluginInterface.TargetModuleScanner; var vfxCreateAddress = scanner.ScanText("E8 ?? ?? ?? ?? F3 0F 10 35 ?? ?? ?? ?? 48 89 43 08"); var vfxRunAddress = scanner.ScanText("E8 ?? ?? ?? ?? 0F 28 B4 24 ?? ?? ?? ?? 48 8B 8C 24 ?? ?? ?? ?? 48 33 CC E8 ?? ?? ?? ?? 48 8B 9C 24 ?? ?? ?? ?? 48 81 C4 ?? ?? ?? ?? 5F"); var vfxRemoveAddress = scanner.ScanText("40 53 48 83 EC 20 48 8B D9 48 8B 89 ?? ?? ?? ?? 48 85 C9 74 28 33 D2 E8 ?? ?? ?? ?? 48 8B 8B ?? ?? ?? ?? 48 85 C9"); var statusAddAddr = scanner.ScanText("40 53 55 56 57 48 81 EC ?? ?? ?? ?? 0F 29 B4 24 ?? ?? ?? ?? 48 8B 05 ?? ?? ?? ?? 48 33 C4 48 89 84 24 ?? ?? ?? ?? 0F B6 AC 24 ?? ?? ?? ?? 0F 28 F3 49 8B F8"); var statusRemoveAddr = scanner.ScanText("40 53 48 83 EC 20 48 8D 05 ?? ?? ?? ?? 48 8B D9 48 89 01 48 8D 05 ?? ?? ?? ?? 48 89 81 ?? ?? ?? ?? 48 8B 89 ?? ?? ?? ?? 48 85 C9 74 09 48 8B 01 48 8B D3"); var statusDeallocAddr = scanner.ScanText("48 85 C9 74 63 53 48 83 EC 20 48 83 3D ?? ?? ?? ?? ?? 48 8B D9 75 0A 48 83 C4 20 5B"); StatusRemove = Marshal.GetDelegateForFunctionPointer <StatusRemoveDelegate>(statusRemoveAddr); StatusAdd = Marshal.GetDelegateForFunctionPointer <StatusAddDelegate>(statusAddAddr); VfxRemove = Marshal.GetDelegateForFunctionPointer <VfxRemoveDelegate>(vfxRemoveAddress); VfxRun = Marshal.GetDelegateForFunctionPointer <VfxRunDelegate>(vfxRunAddress); VfxCreate = Marshal.GetDelegateForFunctionPointer <VfxCreateDelegate>(vfxCreateAddress); StatusDealloc = Marshal.GetDelegateForFunctionPointer <StatusDeallocDelegate>(statusDeallocAddr); // ========================= var readFileAddress = scanner.ScanText("E8 ?? ?? ?? ?? 84 C0 0F 84 ?? 00 00 00 4C 8B C3 BA 05"); var readSqpackAddress = scanner.ScanText("E8 ?? ?? ?? ?? EB 05 E8 ?? ?? ?? ?? 84 C0 0F 84 ?? 00 00 00 4C 8B C3"); var getResourceSyncAddress = scanner.ScanText("E8 ?? ?? 00 00 48 8D 4F ?? 48 89 87 ?? ?? 00 00"); var getResourceAsyncAddress = scanner.ScanText("E8 ?? ?? ?? 00 48 8B D8 EB ?? F0 FF 83 ?? ?? 00 00"); ReadSqpackHook = new Hook <ReadSqpackPrototype>(ReadSqpackHandler, ( long )readSqpackAddress); GetResourceSyncHook = new Hook <GetResourceSyncPrototype>(GetResourceSyncHandler, ( long )getResourceSyncAddress); GetResourceAsyncHook = new Hook <GetResourceAsyncPrototype>(GetResourceAsyncHandler, ( long )getResourceAsyncAddress); ReadFile = Marshal.GetDelegateForFunctionPointer <ReadFilePrototype>(readFileAddress); }
public unsafe void Init() { var scanner = Plugin.PluginInterface.TargetModuleScanner; var readFileAddress = scanner.ScanText("E8 ?? ?? ?? ?? 84 C0 0F 84 ?? 00 00 00 4C 8B C3 BA 05"); var readSqpackAddress = scanner.ScanText("E8 ?? ?? ?? ?? EB 05 E8 ?? ?? ?? ?? 84 C0 0F 84 ?? 00 00 00 4C 8B C3"); var getResourceSyncAddress = scanner.ScanText("E8 ?? ?? 00 00 48 8D 4F ?? 48 89 87 ?? ?? 00 00"); var getResourceAsyncAddress = scanner.ScanText("E8 ?? ?? ?? 00 48 8B D8 EB ?? F0 FF 83 ?? ?? 00 00"); ReadSqpackHook = new Hook <ReadSqpackPrototype>(ReadSqpackHandler, ( long )readSqpackAddress); GetResourceSyncHook = new Hook <GetResourceSyncPrototype>(GetResourceSyncHandler, ( long )getResourceSyncAddress); GetResourceAsyncHook = new Hook <GetResourceAsyncPrototype>(GetResourceAsyncHandler, ( long )getResourceAsyncAddress); ReadFile = Marshal.GetDelegateForFunctionPointer <ReadFilePrototype>(readFileAddress); }