Skip to content

Commit 772985d

Browse files
committed
tweak(rdr): remove support for older rdr builds
Since these are used by almost nobody (latest stats show there was a total of two players on a build older than 1491). Older game builds (1311 and 1355) were already broken due to legitimacy changes and overlay changes. This should make it easier for newer community PR's to validate changes since they will only have test against the latest version (which most were already doing anyways).
1 parent b4e669b commit 772985d

File tree

27 files changed

+134
-650
lines changed

27 files changed

+134
-650
lines changed

code/client/launcher/ExecutableLoader.Snapshot.cpp

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -108,22 +108,7 @@ inline uintptr_t GetTriggerEP()
108108
return ep;
109109
}
110110

111-
if (xbr::IsGameBuild<1355>())
112-
{
113-
return 0x142DE455C; // 1355.18
114-
}
115-
116-
if (xbr::IsGameBuild<1436>())
117-
{
118-
return 0x142E13DA4; // 1436.31
119-
}
120-
121-
if (xbr::IsGameBuild<1491>())
122-
{
123-
return 0x142E4FAD0; // 1491.50
124-
}
125-
126-
return 0x142E0F92C; // 1311.20
111+
return 0x142E4FAD0; // 1491.50
127112
}
128113

129114
#define TRIGGER_EP (GetTriggerEP())

code/client/launcher/GameCache.cpp

Lines changed: 1 addition & 191 deletions
Large diffs are not rendered by default.

code/components/citizen-server-impl/include/state/ServerGameState.h

Lines changed: 0 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -174,36 +174,6 @@ inline bool Is3407()
174174
return value;
175175
}
176176
#elif defined(STATE_RDR3)
177-
inline bool Is1311()
178-
{
179-
static bool value = ([]()
180-
{
181-
return fx::GetEnforcedGameBuildNumber() >= 1311;
182-
})();
183-
184-
return value;
185-
}
186-
187-
inline bool Is1355()
188-
{
189-
static bool value = ([]()
190-
{
191-
return fx::GetEnforcedGameBuildNumber() >= 1355;
192-
})();
193-
194-
return value;
195-
}
196-
197-
inline bool Is1436()
198-
{
199-
static bool value = ([]()
200-
{
201-
return fx::GetEnforcedGameBuildNumber() >= 1436;
202-
})();
203-
204-
return value;
205-
}
206-
207177
inline bool Is1491()
208178
{
209179
static bool value = ([]()

code/components/citizen-server-impl/include/state/SyncTrees_RDR3.h

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -435,10 +435,7 @@ struct CBoatGameStateDataNode
435435
bool unk52 = state.buffer.ReadBit();
436436
bool forcedBoatLocationWhenAnchored = state.buffer.ReadBit();
437437

438-
if (Is1355())
439-
{
440-
bool unk54 = state.buffer.ReadBit();
441-
}
438+
bool unk54 = state.buffer.ReadBit();
442439

443440
bool movementResistant = state.buffer.ReadBit(); // resistance >= 0.0
444441

code/components/citizen-server-impl/src/state/ServerGameState.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6193,7 +6193,7 @@ void CExplosionEvent::Parse(rl::MessageBufferView& buffer)
61936193
f142 = buffer.ReadBit();
61946194
f273 = buffer.ReadBit();
61956195

6196-
unkHash1436 = Is1436() ? buffer.Read<uint32_t>(32) : 0;
6196+
unkHash1436 = buffer.Read<uint32_t>(32);
61976197

61986198
attachEntityId = buffer.Read<uint16_t>(13);
61996199
f244 = buffer.Read<uint8_t>(5); // 1311+

code/components/extra-natives-rdr3/src/NativeFixes.cpp

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -159,13 +159,10 @@ static HookFunction hookFunction([]()
159159
hook::put<uintptr_t>(&vtable[204], (uintptr_t)CanBlendWhenFixed);
160160
}
161161

162-
if (xbr::IsGameBuildOrGreater<1436>())
163-
{
164-
auto location = hook::get_pattern<char>("0F 28 05 ? ? ? ? 83 25 ? ? ? ? 00 83 25 ? ? ? ? 00");
162+
auto location = hook::get_pattern<char>("0F 28 05 ? ? ? ? 83 25 ? ? ? ? 00 83 25 ? ? ? ? 00");
165163

166-
g_textCentre = hook::get_address<bool*>(location + 0x33) + 2;
167-
g_textDropshadow = hook::get_address<bool*>(location + 0x3B) + 1;
168-
}
164+
g_textCentre = hook::get_address<bool*>(location + 0x33) + 2;
165+
g_textDropshadow = hook::get_address<bool*>(location + 0x3B) + 1;
169166

170167
rage::scrEngine::OnScriptInit.Connect([]()
171168
{
@@ -174,12 +171,8 @@ static HookFunction hookFunction([]()
174171
// R* removed some text related natives since RDR3 1436.25 build.
175172
// Redirecting original natives to their successors to keep cross build compatibility.
176173
// Also re-implementing entirely removed natives.
177-
if (xbr::IsGameBuildOrGreater<1436>())
178-
{
179-
RedirectNoppedTextNatives();
180-
ImplementRemovedTextNatives();
181-
}
182-
174+
RedirectNoppedTextNatives();
175+
ImplementRemovedTextNatives();
183176
FixPedCombatAttributes();
184177
});
185178

code/components/gta-core-rdr3/src/GameCrashLogHandler.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,6 @@ static bool WriteGameLog(const char* path)
3838

3939
static HookFunction hookFunction([]
4040
{
41-
if (!xbr::IsGameBuildOrGreater<1311>())
42-
{
43-
return;
44-
}
45-
4641
g_gameLogWriter = (decltype(g_gameLogWriter))hook::get_pattern("48 8B D9 E8 ? ? ? ? 48 8B CB E8 ? ? ? ? 48 8D 15", -0xD);
4742

4843
if (auto func = (void (*)(bool (*)(const char*)))GetProcAddress(GetModuleHandleW(L"CoreRT.dll"), "SetCrashLogHandler"))

code/components/gta-core-rdr3/src/GameInitRage.cpp

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -269,14 +269,11 @@ static HookFunction hookFunctionNet([]()
269269
hook::jump(hook::get_pattern("84 C0 74 04 32 C0 EB 0E 4C 8B C7 48 8B D6", -0x1D), ReturnTrueAndForcePedMPFlag);
270270
hook::jump(hook::get_pattern("40 8A F2 48 8B F9 E8 ? ? ? ? 84 C0 74", -0x12), ReturnTrueAndForcePedMPFlag);
271271

272-
if (xbr::IsGameBuildOrGreater<1436>())
273-
{
274-
// nop checks used for not syncing some "unwanted" metaped components
275-
hook::nop(hook::get_pattern("8B 40 18 3D CC E2 69 9D"), 0x2F);
272+
// nop checks used for not syncing some "unwanted" metaped components
273+
hook::nop(hook::get_pattern("8B 40 18 3D CC E2 69 9D"), 0x2F);
276274

277-
// skip tunable checks for explosion/fire related natives
278-
hook::jump(hook::get_pattern("B9 BD C5 AF E3 BA B2 A0 A7 92", -0x14), Return1);
279-
}
275+
// skip tunable checks for explosion/fire related natives
276+
hook::jump(hook::get_pattern("B9 BD C5 AF E3 BA B2 A0 A7 92", -0x14), Return1);
280277

281278
//hook::jump(0x1406B50E8, LogStubLog1);
282279

code/components/gta-core-rdr3/src/SimpleAllocator.cpp

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -474,21 +474,10 @@ static HookFunction hookFunction([]()
474474
hook::call(ptr + 0x21, corrupt_this.GetCode());
475475
hook::call(ptr + 0x75, corrupt_next.GetCode());
476476
#elif IS_RDR3
477-
if (xbr::IsGameBuildOrGreater<1436>())
478-
{
479-
char* ptr = hook::get_pattern<char>("F7 46 ? ? ? ? ? 48 8D 5E");
477+
char* ptr = hook::get_pattern<char>("F7 46 ? ? ? ? ? 48 8D 5E");
480478

481-
hook::call(ptr + 0x18, already_free.GetCode());
482-
hook::call(ptr + 0x31, corrupt_this.GetCode());
483-
hook::call(ptr + 0xA1, corrupt_next.GetCode());
484-
}
485-
else
486-
{
487-
char* ptr = hook::get_pattern<char>("8B 43 ? 48 83 C3 ? 0F BA E0");
488-
489-
hook::call(ptr + 0x17, already_free.GetCode());
490-
hook::call(ptr + 0x34, corrupt_this.GetCode());
491-
hook::call(ptr + 0xA4, corrupt_next.GetCode());
492-
}
479+
hook::call(ptr + 0x18, already_free.GetCode());
480+
hook::call(ptr + 0x31, corrupt_this.GetCode());
481+
hook::call(ptr + 0xA1, corrupt_next.GetCode());
493482
#endif
494483
});

code/components/gta-game-rdr3/include/NetworkPlayerMgr.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@
1616
#endif
1717

1818
#define DECLARE_ACCESSOR(x) \
19-
decltype(impl.m1311.x)& x() \
19+
decltype(impl.m1491.x)& x() \
2020
{ \
21-
return (impl.m1311.x); \
21+
return (impl.m1491.x); \
2222
} \
23-
const decltype(impl.m1311.x)& x() const \
23+
const decltype(impl.m1491.x)& x() const \
2424
{ \
25-
return (impl.m1311.x); \
25+
return (impl.m1491.x); \
2626
}
2727

2828
namespace rage
@@ -81,13 +81,13 @@ class CNetGamePlayer : public rage::netPlayer
8181

8282
union
8383
{
84-
Impl m1311;
84+
Impl m1491;
8585
} impl;
8686

8787
public:
8888
void* GetPlayerInfo()
8989
{
90-
if (auto pedPlayerComponent = (void*)(impl.m1311.pedPlayerComponent))
90+
if (auto pedPlayerComponent = (void*)(impl.m1491.pedPlayerComponent))
9191
{
9292
return (void*)((char*)pedPlayerComponent + 0x130);
9393
}

code/components/gta-net-five/src/CloneExperiments.cpp

Lines changed: 18 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1332,7 +1332,8 @@ static void* NetworkObjectMgrCtorStub(void* mgr, void* bw, void* unk)
13321332
auto alloc = rage::GetAllocator();
13331333
alloc->Free(mgr);
13341334

1335-
int initialSize = (xbr::IsGameBuildOrGreater<1355>()) ? 268672 : 163056;
1335+
// TODO: Remove if not needed, was used for new rdr version checks
1336+
int initialSize = 268672;
13361337

13371338
mgr = alloc->Allocate(initialSize + 4096, 16, 0);
13381339

@@ -1643,20 +1644,10 @@ static HookFunction hookFunction([]()
16431644
hook::call_rcx(location, ownerLoop.GetCode());
16441645
hook::put<uint16_t>(location + 0x3F, 0xC084); // test al, al
16451646
#elif IS_RDR3
1646-
if (xbr::IsGameBuildOrGreater<1436>())
1647-
{
1648-
auto location = hook::get_pattern<char>("48 8B CB E8 ? ? ? ? 48 85 C0 75 27 8D 50 01");
1649-
hook::nop(location, 0x6E);
1650-
hook::call_rcx(location, ownerLoop.GetCode());
1651-
hook::put<uint16_t>(location + 0x6E, 0xC084); // test al, al
1652-
}
1653-
else
1654-
{
1655-
auto location = hook::get_pattern<char>("48 8B CB E8 ? ? ? ? 48 85 C0 74 57 48 8B CB");
1656-
hook::nop(location, 0x47);
1657-
hook::call_rcx(location, ownerLoop.GetCode());
1658-
hook::put<uint16_t>(location + 0x47, 0xC084); // test al, al
1659-
}
1647+
auto location = hook::get_pattern<char>("48 8B CB E8 ? ? ? ? 48 85 C0 75 27 8D 50 01");
1648+
hook::nop(location, 0x6E);
1649+
hook::call_rcx(location, ownerLoop.GetCode());
1650+
hook::put<uint16_t>(location + 0x6E, 0xC084); // test al, al
16601651
#endif
16611652
}
16621653

@@ -1718,8 +1709,8 @@ static HookFunction hookFunction([]()
17181709
MH_CreateHook(hook::get_pattern("4C 8B F1 41 BD 05", -0x22), PassObjectControlStub, (void**)&g_origPassObjectControl);
17191710
MH_CreateHook(hook::get_pattern("8A 41 49 4C 8B F2 48 8B", -0x10), SetOwnerStub, (void**)&g_origSetOwner);
17201711
#elif IS_RDR3
1721-
MH_CreateHook(hook::get_pattern("48 8B D9 E8 ? ? ? ? 33 ? 66 C7 83", (xbr::IsGameBuildOrGreater<1355>()) ? -0xA : -0x6), NetworkObjectMgrCtorStub, (void**)&g_origNetworkObjectMgrCtor);
1722-
MH_CreateHook(hook::get_pattern("83 FE 01 41 0F 9F C4 48 85 DB 74", (xbr::IsGameBuildOrGreater<1436>()) ? -0x99 : -0x71), PassObjectControlStub, (void**)&g_origPassObjectControl);
1712+
MH_CreateHook(hook::get_pattern("48 8B D9 E8 ? ? ? ? 33 ? 66 C7 83", -0xA), NetworkObjectMgrCtorStub, (void**)&g_origNetworkObjectMgrCtor);
1713+
MH_CreateHook(hook::get_pattern("83 FE 01 41 0F 9F C4 48 85 DB 74", -0x99), PassObjectControlStub, (void**)&g_origPassObjectControl);
17231714
MH_CreateHook(hook::get_call(hook::get_pattern("E8 ? ? ? ? 80 7B 47 00 75 ? 48 8B 03")), SetOwnerStub, (void**)&g_origSetOwner);
17241715
#endif
17251716

@@ -1774,8 +1765,8 @@ static HookFunction hookFunction([]()
17741765
MH_CreateHook(hook::get_pattern("8A 41 49 3C FF 74 17 3C 20 73 13 0F B6 C8"), netObject__GetPlayerOwner, (void**)&g_origGetOwnerNetPlayer);
17751766
MH_CreateHook(hook::get_pattern("8A 41 4A 3C FF 74 17 3C 20 73 13 0F B6 C8"), netObject__GetPendingPlayerOwner, (void**)&g_origGetPendingPlayerOwner);
17761767
#elif IS_RDR3
1777-
MH_CreateHook(hook::get_pattern((xbr::IsGameBuildOrGreater<1436>()) ? "8A 49 45 80 F9 20 72 03 33 C0 C3" : "80 79 45 20 72 ? 33 C0 C3"), netObject__GetPlayerOwner, (void**)&g_origGetOwnerNetPlayer);
1778-
MH_CreateHook(hook::get_pattern((xbr::IsGameBuildOrGreater<1436>()) ? "8A 49 46 80 F9 FF 75 03" : "8A 41 46 3C FF 74"), netObject__GetPendingPlayerOwner, (void**)&g_origGetPendingPlayerOwner);
1768+
MH_CreateHook(hook::get_pattern("8A 49 45 80 F9 20 72 03 33 C0 C3"), netObject__GetPlayerOwner, (void**)&g_origGetOwnerNetPlayer);
1769+
MH_CreateHook(hook::get_pattern("8A 49 46 80 F9 FF 75 03"), netObject__GetPendingPlayerOwner, (void**)&g_origGetPendingPlayerOwner);
17791770
#endif
17801771

17811772
// function is only 4 bytes, can't be hooked like this
@@ -1816,7 +1807,7 @@ static HookFunction hookFunction([]()
18161807
#ifdef GTA_FIVE
18171808
auto location = hook::get_pattern("48 8B D0 E8 ? ? ? ? E8 ? ? ? ? 83 BB ? ? ? ? 04", 3);
18181809
#elif IS_RDR3
1819-
auto location = (xbr::IsGameBuildOrGreater<1436>()) ? hook::get_pattern("40 0F B6 CF 48 89 44 CB 40 48", -5) : hook::get_pattern("48 85 C9 74 ? 4C 8D 44 24 40 40 88 7C", 18);
1810+
auto location = hook::get_pattern("40 0F B6 CF 48 89 44 CB 40 48", -5);
18201811
#endif
18211812

18221813
hook::set_call(&g_origJoinBubble, location);
@@ -1840,10 +1831,9 @@ static HookFunction hookFunction([]()
18401831
MH_CreateHook(hook::get_call(hook::get_pattern("40 0F 92 C7 40 84 FF 0F 85 ? ? ? ? 40 8A CE E8", 16)), GetPlayerByIndex, nullptr);
18411832
}
18421833
#elif IS_RDR3
1843-
auto pattern = (xbr::IsGameBuildOrGreater<1436>()) ? "80 F9 20 72 2B BA" : "80 F9 20 73 13 48 8B";
1844-
auto match = hook::pattern(pattern).count(2);
1845-
MH_CreateHook(match.get(0).get<void>((xbr::IsGameBuildOrGreater<1436>()) ? -19 : 0), GetPlayerByIndex, (void**)&g_origGetPlayerByIndex);
1846-
MH_CreateHook(match.get(1).get<void>((xbr::IsGameBuildOrGreater<1436>()) ? -19 : 0), GetPlayerByIndex, nullptr);
1834+
auto match = hook::pattern("80 F9 20 72 2B BA").count(2);
1835+
MH_CreateHook(match.get(0).get<void>(-19), GetPlayerByIndex, (void**)&g_origGetPlayerByIndex);
1836+
MH_CreateHook(match.get(1).get<void>(-19), GetPlayerByIndex, nullptr);
18471837
#endif
18481838
}
18491839

@@ -1946,7 +1936,7 @@ static HookFunction hookFunction([]()
19461936

19471937
#ifdef IS_RDR3
19481938
// in RDR3 net player relevance position is cached in array indexed with physical player index, we need to patch it
1949-
MH_CreateHook((xbr::IsGameBuildOrGreater<1436>()) ? hook::get_pattern("0F A3 D0 0F 92 C0 88 06", -0x76) : hook::get_pattern("44 0F A3 C0 0F 92 C0 41 88 02", -0x32), getNetPlayerRelevancePosition, (void**)&g_origGetNetPlayerRelevancePosition);
1939+
MH_CreateHook(hook::get_pattern("0F A3 D0 0F 92 C0 88 06", -0x76), getNetPlayerRelevancePosition, (void**)&g_origGetNetPlayerRelevancePosition);
19501940
#endif
19511941

19521942
// always allow to migrate, even if not cloned on bit test
@@ -1986,14 +1976,7 @@ static HookFunction hookFunction([]()
19861976
#ifdef GTA_FIVE
19871977
hook::call(hook::get_pattern("48 C1 EA 04 E8 ? ? ? ? 48 8B 03", 17), delStub.GetCode());
19881978
#elif IS_RDR3
1989-
if (xbr::IsGameBuildOrGreater<1436>())
1990-
{
1991-
hook::call(hook::get_pattern("48 8B 06 41 8B D4 48 8B CE FF 10 48 8B 5C", 6), delStub.GetCode());
1992-
}
1993-
else
1994-
{
1995-
hook::call(hook::get_pattern("48 8B 06 BA 01 00 00 00 48 8B CE FF 10 48 8B 5C 24 50", 8), delStub.GetCode());
1996-
}
1979+
hook::call(hook::get_pattern("48 8B 06 41 8B D4 48 8B CE FF 10 48 8B 5C", 6), delStub.GetCode());
19971980
#endif
19981981

19991982
#ifdef IS_RDR3
@@ -2026,7 +2009,7 @@ static HookFunction hookFunction([]()
20262009

20272010
// patch SerializePlayerIndex methods of sync data reader/writer
20282011
MH_CreateHook(hook::get_pattern("80 3B 20 73 ? 65 4C 8B 0C", -0x2F), SyncDataReaderSerializePlayerIndex, (void**)&g_origSyncDataReaderSerializePlayerIndex);
2029-
MH_CreateHook(xbr::IsGameBuildOrGreater<1436>() ? hook::get_pattern("41 B2 3F 48 8D 54 24 30 44 88", -30) : hook::get_pattern("80 3A 20 48 8B D9 C6 44", -6), SyncDataWriterSerializePlayerIndex, (void**)&g_origSyncDataWriterSerializePlayerIndex);
2012+
MH_CreateHook(hook::get_pattern("41 B2 3F 48 8D 54 24 30 44 88", -30), SyncDataWriterSerializePlayerIndex, (void**)&g_origSyncDataWriterSerializePlayerIndex);
20302013

20312014
// also patch sync data size calculator allowing more bits
20322015
{
@@ -2468,7 +2451,7 @@ static HookFunction hookFunction2([]()
24682451
#ifdef GTA_FIVE
24692452
MH_CreateHook(hook::get_pattern("48 8B 03 48 8B D6 48 8B CB EB 06", -0x48), ReadDataNodeStub, (void**)&g_origReadDataNode);
24702453
#elif IS_RDR3
2471-
MH_CreateHook(xbr::IsGameBuildOrGreater<1436>() ? hook::get_pattern("42 8A BC 6B", -0x33) : hook::get_pattern("40 8A BC 43", -0x3D), ReadDataNodeStub, (void**)&g_origReadDataNode);
2454+
MH_CreateHook(hook::get_pattern("42 8A BC 6B", -0x33), ReadDataNodeStub, (void**)&g_origReadDataNode);
24722455
#endif
24732456

24742457
#ifdef GTA_FIVE

code/components/gta-net-five/src/CloneExperiments_ArrayHandler.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ static hook::cdecl_stub<rage::netArrayHandlerBase*(rage::netArrayManager*, int,
1818
#ifdef GTA_FIVE
1919
return hook::get_call(hook::get_pattern("48 8B 0D ? ? ? ? BA 06 00 00 00 45 33 C0", 0xF));
2020
#elif IS_RDR3
21-
return hook::get_call((xbr::IsGameBuildOrGreater<1436>()) ? hook::get_pattern("48 8B 0D ? ? ? ? 41 8D 56 06 45 33 C0", 0xE) : hook::get_pattern("48 8B 0D ? ? ? ? BA 06 00 00 00 45 33 C0", 0xF));
21+
return hook::get_call(hook::get_pattern("48 8B 0D ? ? ? ? 41 8D 56 06 45 33 C0", 0xE));
2222
#endif
2323
});
2424

@@ -112,7 +112,7 @@ static HookFunction hookFunctionArray([]()
112112
#ifdef GTA_FIVE
113113
g_arrayManager = hook::get_address<rage::netArrayManager**>(hook::get_pattern("48 8B 0D ? ? ? ? BA 06 00 00 00 45 33 C0", 3));
114114
#elif IS_RDR3
115-
g_arrayManager = hook::get_address<rage::netArrayManager**>((xbr::IsGameBuildOrGreater<1436>()) ? hook::get_pattern("48 8B 0D ? ? ? ? 41 8D 56 06 45 33 C0", 3) : hook::get_pattern("48 8B 0D ? ? ? ? BA 06 00 00 00 45 33 C0", 3));
115+
g_arrayManager = hook::get_address<rage::netArrayManager**>(hook::get_pattern("48 8B 0D ? ? ? ? 41 8D 56 06 45 33 C0", 3));
116116
#endif
117117
});
118118

code/components/gta-net-five/src/CloneObjectManager.cpp

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -202,20 +202,11 @@ static HookFunction hookFunction([]()
202202
MH_CreateHook(hook::get_pattern("44 38 33 75 30 66 44", -0x40), netObjectMgrBase__GetNetworkObject, (void**)&g_orig_netObjectMgrBase__GetNetworkObject); //
203203
MH_CreateHook(hook::get_pattern("41 80 78 ? FF 74 2D 41 0F B6 40"), netObjectMgrBase__GetNetworkObjectForPlayer, (void**)&g_orig_netObjectMgrBase__GetNetworkObjectForPlayer);
204204
#elif IS_RDR3
205-
if (xbr::IsGameBuildOrGreater<1436>())
206-
{
207-
MH_CreateHook(hook::get_pattern("48 8B F2 41 B0 01 0F B7 52", -0x1B), netObjectMgrBase__RegisterNetworkObject, (void**)&g_orig_netObjectMgrBase__RegisterNetworkObject);
208-
MH_CreateHook(hook::get_call(hook::get_pattern("E8 ? ? ? ? 48 8D 76 08 48 83 EB 01 75 E8")), netObjectMgrBase__DestroyNetworkObject, (void**)&g_orig_netObjectMgrBase__DestroyNetworkObject);
209-
MH_CreateHook(hook::get_pattern("0F B6 43 ? 48 03 C0 48 8B 4C C7 08 EB", -0x64), netObjectMgrBase__GetNetworkObjectForPlayer, (void**)&g_orig_netObjectMgrBase__GetNetworkObjectForPlayer);
210-
}
211-
else
212-
{
213-
MH_CreateHook(hook::get_pattern("41 0F B7 55 00 41 B0 01 48 8B E9 E8", xbr::IsGameBuildOrGreater<1355>() ? -0x20 : -0x27), netObjectMgrBase__RegisterNetworkObject, (void**)&g_orig_netObjectMgrBase__RegisterNetworkObject);
214-
MH_CreateHook(hook::get_pattern("45 33 FF C1 E8 03 48 8B F2 48 8B E9 A8 01", -0x24), netObjectMgrBase__DestroyNetworkObject, (void**)&g_orig_netObjectMgrBase__DestroyNetworkObject);
215-
MH_CreateHook(hook::get_pattern("0F B6 43 ? 48 03 C0 48 8B 4C C7 08 EB", -0x3B), netObjectMgrBase__GetNetworkObjectForPlayer, (void**)&g_orig_netObjectMgrBase__GetNetworkObjectForPlayer);
216-
}
205+
MH_CreateHook(hook::get_pattern("48 8B F2 41 B0 01 0F B7 52", -0x1B), netObjectMgrBase__RegisterNetworkObject, (void**)&g_orig_netObjectMgrBase__RegisterNetworkObject);
206+
MH_CreateHook(hook::get_call(hook::get_pattern("E8 ? ? ? ? 48 8D 76 08 48 83 EB 01 75 E8")), netObjectMgrBase__DestroyNetworkObject, (void**)&g_orig_netObjectMgrBase__DestroyNetworkObject);
207+
MH_CreateHook(hook::get_pattern("0F B6 43 ? 48 03 C0 48 8B 4C C7 08 EB", -0x64), netObjectMgrBase__GetNetworkObjectForPlayer, (void**)&g_orig_netObjectMgrBase__GetNetworkObjectForPlayer);
217208

218-
MH_CreateHook(hook::get_pattern("41 83 F9 04 75 ? 8D 4B 20 E8 ? ? ? ? 48", xbr::IsGameBuildOrGreater<1491>() ? -0x39 : -0x31), netObjectMgrBase__ChangeOwner, (void**)&g_orig_netObjectMgrBase__ChangeOwner);
209+
MH_CreateHook(hook::get_pattern("41 83 F9 04 75 ? 8D 4B 20 E8 ? ? ? ? 48", -0x39), netObjectMgrBase__ChangeOwner, (void**)&g_orig_netObjectMgrBase__ChangeOwner);
219210
MH_CreateHook(hook::get_pattern("45 8A F0 0F B7 F2 E8 ? ? ? ? 33 DB 38", -0x24), netObjectMgrBase__GetNetworkObject, (void**)&g_orig_netObjectMgrBase__GetNetworkObject);
220211
#endif
221212

0 commit comments

Comments
 (0)