From 41192d35c2f89699f2dc07148872cf935c482a16 Mon Sep 17 00:00:00 2001 From: Disquse Date: Sat, 29 Jul 2023 01:13:48 +0300 Subject: [PATCH] fix(net/five): wrong object "created by" offset Fixes #2072 Thanks to @gottfriedleibniz --- code/components/gta-net-five/src/CloneManager.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/code/components/gta-net-five/src/CloneManager.cpp b/code/components/gta-net-five/src/CloneManager.cpp index f712dbd2ef..ffb5311f09 100644 --- a/code/components/gta-net-five/src/CloneManager.cpp +++ b/code/components/gta-net-five/src/CloneManager.cpp @@ -48,6 +48,10 @@ static constexpr int kNetObjectTypeBitLength = 4; static constexpr int kNetObjectTypeBitLength = 5; #endif +#ifdef GTA_FIVE +static uint32_t g_objectCreatedByOffset = 0; +#endif + static constexpr int kSyncPacketMaxLength = 2400; void ObjectIds_AddObjectId(int objectId); @@ -1181,9 +1185,7 @@ bool CloneManagerLocal::HandleCloneCreate(const msgClone& msg) if (objectCreationDataNode) { - static int createdByOffset = xbr::IsGameBuildOrGreater<1604>() ? 332 : 0; - - int createdBy = *(int*)((char*)objectCreationDataNode + createdByOffset); + int createdBy = *(int*)((char*)objectCreationDataNode + g_objectCreatedByOffset); // random or fragment cache if (createdBy == 0 || createdBy == 2) @@ -1969,6 +1971,10 @@ static HookFunction hookFunctionOrigin([]() origin = hook::get_address(loc + 0xC); hook::set_call(&getCoordsFromOrigin, loc + 0x10); + +#ifdef GTA_FIVE + g_objectCreatedByOffset = *hook::get_pattern("F7 03 FD FF FF FF 0F 85 ? ? ? ? 48 8B", -0x1A); +#endif }); #ifdef GTA_FIVE