From fa8fd28f2ce3f4ce9207783a586ff707f563619d Mon Sep 17 00:00:00 2001 From: pv Date: Thu, 29 Feb 2024 20:48:37 +0300 Subject: [PATCH 1/2] Prevent excessive address resolving --- include/RED4ext/CNamePool-inl.hpp | 8 +-- include/RED4ext/CString-inl.hpp | 14 ++--- include/RED4ext/DynArray.hpp | 2 +- include/RED4ext/GameEngine-inl.hpp | 2 +- include/RED4ext/Handle.hpp | 2 +- include/RED4ext/ISerializable-inl.hpp | 10 ++-- include/RED4ext/JobQueue-inl.hpp | 20 +++---- include/RED4ext/Memory/Allocators.hpp | 14 ++--- include/RED4ext/Memory/SharedPtr.hpp | 2 +- include/RED4ext/Memory/Vault-inl.hpp | 2 +- include/RED4ext/RTTISystem-inl.hpp | 4 +- include/RED4ext/RTTITypes-inl.hpp | 56 +++++++++---------- include/RED4ext/RTTITypes.hpp | 6 +- include/RED4ext/ResourceDepot-inl.hpp | 2 +- include/RED4ext/ResourceLoader-inl.hpp | 2 +- include/RED4ext/ResourceLoader.hpp | 12 ++-- include/RED4ext/Scripting/Functions-inl.hpp | 8 +-- include/RED4ext/Scripting/Functions.hpp | 4 +- include/RED4ext/Scripting/IScriptable-inl.hpp | 4 +- .../RED4ext/Scripting/OpcodeHandlers-inl.hpp | 2 +- include/RED4ext/Scripting/Stack-inl.hpp | 2 +- include/RED4ext/SortedArray.hpp | 2 +- include/RED4ext/SystemUpdate-inl.hpp | 4 +- include/RED4ext/TweakDB-inl.hpp | 6 +- 24 files changed, 95 insertions(+), 95 deletions(-) diff --git a/include/RED4ext/CNamePool-inl.hpp b/include/RED4ext/CNamePool-inl.hpp index bf3d11a9f..b44d8814c 100644 --- a/include/RED4ext/CNamePool-inl.hpp +++ b/include/RED4ext/CNamePool-inl.hpp @@ -12,7 +12,7 @@ RED4EXT_INLINE RED4ext::CName RED4ext::CNamePool::Add(const char* aText) { CName result; - UniversalRelocFunc func(Detail::AddressHashes::CNamePool_AddCstr); + static UniversalRelocFunc func(Detail::AddressHashes::CNamePool_AddCstr); func(result, aText); return result; } @@ -21,14 +21,14 @@ RED4EXT_INLINE RED4ext::CName RED4ext::CNamePool::Add(const CString& aText) { CName result; - UniversalRelocFunc func(Detail::AddressHashes::CNamePool_AddCString); + static UniversalRelocFunc func(Detail::AddressHashes::CNamePool_AddCString); func(result, aText); return result; } RED4EXT_INLINE void RED4ext::CNamePool::Add(const CName& aName, const char* aText) { - UniversalRelocFunc func(Detail::AddressHashes::CNamePool_AddPair); + static UniversalRelocFunc func(Detail::AddressHashes::CNamePool_AddPair); func(aName, aText); } @@ -39,7 +39,7 @@ RED4EXT_INLINE void RED4ext::CNamePool::Add(const CName& aName, const CString& a RED4EXT_INLINE const char* RED4ext::CNamePool::Get(const CName& aName) { - UniversalRelocFunc func(Detail::AddressHashes::CNamePool_Get); + static UniversalRelocFunc func(Detail::AddressHashes::CNamePool_Get); auto result = func(aName); if (result) { diff --git a/include/RED4ext/CString-inl.hpp b/include/RED4ext/CString-inl.hpp index e41dd48f3..dacf28c62 100644 --- a/include/RED4ext/CString-inl.hpp +++ b/include/RED4ext/CString-inl.hpp @@ -19,41 +19,41 @@ RED4EXT_INLINE RED4ext::CString::CString(Memory::IAllocator* aAllocator) RED4EXT_INLINE RED4ext::CString::CString(const char* aText, Memory::IAllocator* aAllocator) : CString(aAllocator) { - UniversalRelocFunc func(Detail::AddressHashes::CString_ctor_str); + static UniversalRelocFunc func(Detail::AddressHashes::CString_ctor_str); func(this, aText); } RED4EXT_INLINE RED4ext::CString::CString(const char* aText, uint32_t aLength, Memory::IAllocator* aAllocator) : CString(aAllocator) { - UniversalRelocFunc func(Detail::AddressHashes::CString_ctor_span); + static UniversalRelocFunc func(Detail::AddressHashes::CString_ctor_span); func(this, aText, aLength); } RED4EXT_INLINE RED4ext::CString::CString(const std::string& aText, Memory::IAllocator* aAllocator) : CString(aAllocator) { - UniversalRelocFunc func(Detail::AddressHashes::CString_ctor_str); + static UniversalRelocFunc func(Detail::AddressHashes::CString_ctor_str); func(this, aText.data()); } RED4EXT_INLINE RED4ext::CString::CString(const std::string_view& aText, Memory::IAllocator* aAllocator) : CString(aAllocator) { - UniversalRelocFunc func(Detail::AddressHashes::CString_ctor_span); + static UniversalRelocFunc func(Detail::AddressHashes::CString_ctor_span); func(this, aText.data(), static_cast(aText.size())); } RED4EXT_INLINE RED4ext::CString::CString(const CString& aOther) : CString() { - UniversalRelocFunc func(Detail::AddressHashes::CString_copy); + static UniversalRelocFunc func(Detail::AddressHashes::CString_copy); func(this, aOther); } RED4EXT_INLINE RED4ext::CString::~CString() { - UniversalRelocFunc func(Detail::AddressHashes::CString_dtor); + static UniversalRelocFunc func(Detail::AddressHashes::CString_dtor); func(this); } @@ -70,7 +70,7 @@ RED4EXT_INLINE RED4ext::CString::CString(CString&& aOther) noexcept RED4EXT_INLINE RED4ext::CString& RED4ext::CString::operator=(const CString& aRhs) { - UniversalRelocFunc func(Detail::AddressHashes::CString_copy); + static UniversalRelocFunc func(Detail::AddressHashes::CString_copy); func(this, aRhs); return *this; } diff --git a/include/RED4ext/DynArray.hpp b/include/RED4ext/DynArray.hpp index 1c912118c..d278ace77 100644 --- a/include/RED4ext/DynArray.hpp +++ b/include/RED4ext/DynArray.hpp @@ -188,7 +188,7 @@ struct DynArray using func_t = void (*)(DynArray * aThis, uint32_t aCapacity, uint32_t aElementSize, uint32_t aAlignment, void (*a5)(int64_t, int64_t, int64_t, int64_t)); - UniversalRelocFunc func(Detail::AddressHashes::DynArray_Realloc); + static UniversalRelocFunc func(Detail::AddressHashes::DynArray_Realloc); func(this, newCapacity, sizeof(T), alignment, nullptr); } diff --git a/include/RED4ext/GameEngine-inl.hpp b/include/RED4ext/GameEngine-inl.hpp index 6d6f677f4..6092f477d 100644 --- a/include/RED4ext/GameEngine-inl.hpp +++ b/include/RED4ext/GameEngine-inl.hpp @@ -9,6 +9,6 @@ RED4EXT_INLINE RED4ext::CGameEngine* RED4ext::CGameEngine::Get() { - UniversalRelocPtr ptr(Detail::AddressHashes::CGameEngine); + static UniversalRelocPtr ptr(Detail::AddressHashes::CGameEngine); return ptr; } diff --git a/include/RED4ext/Handle.hpp b/include/RED4ext/Handle.hpp index c24c9757a..197c191fb 100644 --- a/include/RED4ext/Handle.hpp +++ b/include/RED4ext/Handle.hpp @@ -26,7 +26,7 @@ class Handle : public SharedPtrWithAccess explicit Handle(T* aPtr) { - UniversalRelocFunc ctor(Detail::AddressHashes::Handle_ctor); + static UniversalRelocFunc ctor(Detail::AddressHashes::Handle_ctor); ctor(this, aPtr); } diff --git a/include/RED4ext/ISerializable-inl.hpp b/include/RED4ext/ISerializable-inl.hpp index 0a5bfcf34..e0cacb8f3 100644 --- a/include/RED4ext/ISerializable-inl.hpp +++ b/include/RED4ext/ISerializable-inl.hpp @@ -29,7 +29,7 @@ RED4EXT_INLINE void RED4ext::ISerializable::sub_28() RED4EXT_INLINE bool RED4ext::ISerializable::sub_30() { using func_t = bool (*)(ISerializable*); - UniversalRelocFunc func(Detail::AddressHashes::ISerializable_sub_30); + static UniversalRelocFunc func(Detail::AddressHashes::ISerializable_sub_30); return func(this); } @@ -40,7 +40,7 @@ RED4EXT_INLINE void RED4ext::ISerializable::sub_38() RED4EXT_INLINE bool RED4ext::ISerializable::sub_40(BaseStream* aStream) { using func_t = bool (*)(ISerializable*, BaseStream*); - UniversalRelocFunc func(Detail::AddressHashes::ISerializable_sub_40); + static UniversalRelocFunc func(Detail::AddressHashes::ISerializable_sub_40); return func(this, aStream); } @@ -79,7 +79,7 @@ RED4EXT_INLINE bool RED4ext::ISerializable::sub_70() RED4EXT_INLINE int64_t RED4ext::ISerializable::sub_78(int64_t a1, int64_t a2, uint8_t a3, int64_t a4, int64_t a5) { using func_t = int64_t (*)(ISerializable*, int64_t, int64_t, uint8_t, int64_t, int64_t); - UniversalRelocFunc func(Detail::AddressHashes::ISerializable_sub_78); + static UniversalRelocFunc func(Detail::AddressHashes::ISerializable_sub_78); return func(this, a1, a2, a3, a4, a5); } @@ -106,7 +106,7 @@ RED4EXT_INLINE void* RED4ext::ISerializable::sub_A0() { // This is an allocation, but for what? using func_t = void* (*)(ISerializable*); - UniversalRelocFunc func(Detail::AddressHashes::ISerializable_sub_A0); + static UniversalRelocFunc func(Detail::AddressHashes::ISerializable_sub_A0); return func(this); } @@ -131,7 +131,7 @@ RED4EXT_INLINE RED4ext::CString RED4ext::ISerializable::sub_B8() RED4EXT_INLINE void* RED4ext::ISerializable::sub_C0(void* a1) { using func_t = void* (*)(ISerializable*, void*); - UniversalRelocFunc func(Detail::AddressHashes::ISerializable_sub_C0); + static UniversalRelocFunc func(Detail::AddressHashes::ISerializable_sub_C0); return func(this, a1); } diff --git a/include/RED4ext/JobQueue-inl.hpp b/include/RED4ext/JobQueue-inl.hpp index 9ce38fdab..885bd6aea 100644 --- a/include/RED4ext/JobQueue-inl.hpp +++ b/include/RED4ext/JobQueue-inl.hpp @@ -42,7 +42,7 @@ RED4EXT_INLINE RED4ext::JobParamSet::JobParamSet() noexcept RED4EXT_INLINE RED4ext::JobHandle::JobHandle(uintptr_t aUnk) { using func_t = void* (*)(void*, uintptr_t); - UniversalRelocFunc func(Detail::AddressHashes::JobHandle_ctor); + static UniversalRelocFunc func(Detail::AddressHashes::JobHandle_ctor); unk00 = func(nullptr, aUnk); } @@ -50,7 +50,7 @@ RED4EXT_INLINE RED4ext::JobHandle::JobHandle(uintptr_t aUnk) RED4EXT_INLINE RED4ext::JobHandle::~JobHandle() { using func_t = void (*)(JobHandle*); - UniversalRelocFunc func(Detail::AddressHashes::JobHandle_dtor); + static UniversalRelocFunc func(Detail::AddressHashes::JobHandle_dtor); func(this); } @@ -58,7 +58,7 @@ RED4EXT_INLINE RED4ext::JobHandle::~JobHandle() RED4EXT_INLINE void RED4ext::JobHandle::Join(const JobHandle& aOther) { using func_t = void (*)(JobHandle*, const JobHandle&); - UniversalRelocFunc func(Detail::AddressHashes::JobHandle_Join); + static UniversalRelocFunc func(Detail::AddressHashes::JobHandle_Join); func(this, aOther); } @@ -66,7 +66,7 @@ RED4EXT_INLINE void RED4ext::JobHandle::Join(const JobHandle& aOther) RED4EXT_INLINE RED4ext::JobQueue::JobQueue(const JobGroup& aGroup) { using func_t = JobQueue* (*)(JobQueue*, const JobGroup&); - UniversalRelocFunc func(Detail::AddressHashes::JobQueue_ctor_FromGroup); + static UniversalRelocFunc func(Detail::AddressHashes::JobQueue_ctor_FromGroup); func(this, aGroup); } @@ -74,7 +74,7 @@ RED4EXT_INLINE RED4ext::JobQueue::JobQueue(const JobGroup& aGroup) RED4EXT_INLINE RED4ext::JobQueue::JobQueue(JobParamSet aParams, uintptr_t aUnk) { using func_t = JobQueue* (*)(JobQueue*, uint8_t, uint8_t, uint64_t); - UniversalRelocFunc func(Detail::AddressHashes::JobQueue_ctor_FromParams); + static UniversalRelocFunc func(Detail::AddressHashes::JobQueue_ctor_FromParams); func(this, aParams.unk00, aParams.unk01, aUnk); } @@ -82,7 +82,7 @@ RED4EXT_INLINE RED4ext::JobQueue::JobQueue(JobParamSet aParams, uintptr_t aUnk) RED4EXT_INLINE RED4ext::JobQueue::~JobQueue() { using func_t = void (*)(JobQueue*); - UniversalRelocFunc func(Detail::AddressHashes::JobQueue_dtor); + static UniversalRelocFunc func(Detail::AddressHashes::JobQueue_dtor); func(this); } @@ -95,7 +95,7 @@ RED4EXT_INLINE void RED4ext::JobQueue::Wait(JobHandle& aJob) RED4EXT_INLINE [[nodiscard]] RED4ext::JobHandle RED4ext::JobQueue::Capture() { using func_t = JobHandle* (*)(JobQueue*, JobHandle*); - UniversalRelocFunc func(Detail::AddressHashes::JobQueue_Capture); + static UniversalRelocFunc func(Detail::AddressHashes::JobQueue_Capture); JobHandle handle{}; func(this, &handle); @@ -106,8 +106,8 @@ RED4EXT_INLINE [[nodiscard]] RED4ext::JobHandle RED4ext::JobQueue::Capture() RED4EXT_INLINE void RED4ext::JobQueue::DispatchJob(const JobInstance& aJob) { using func_t = uint32_t (*)(void*, const JobInstance&, uint8_t, JobHandle, JobHandle); - UniversalRelocFunc func(Detail::AddressHashes::JobDispatcher_DispatchJob); - UniversalRelocPtr dispatcher(Detail::AddressHashes::JobDispatcher); + static UniversalRelocFunc func(Detail::AddressHashes::JobDispatcher_DispatchJob); + static UniversalRelocPtr dispatcher(Detail::AddressHashes::JobDispatcher); func(dispatcher, aJob, params.unk00, unk10, unk18); } @@ -115,7 +115,7 @@ RED4EXT_INLINE void RED4ext::JobQueue::DispatchJob(const JobInstance& aJob) RED4EXT_INLINE void RED4ext::JobQueue::SyncWait() { using func_t = void (*)(JobQueue*); - UniversalRelocFunc func(Detail::AddressHashes::JobQueue_SyncWait); + static UniversalRelocFunc func(Detail::AddressHashes::JobQueue_SyncWait); func(this); } diff --git a/include/RED4ext/Memory/Allocators.hpp b/include/RED4ext/Memory/Allocators.hpp index 86f61ea76..645a819e6 100644 --- a/include/RED4ext/Memory/Allocators.hpp +++ b/include/RED4ext/Memory/Allocators.hpp @@ -78,7 +78,7 @@ struct Allocator : IAllocator virtual AllocationResult Alloc(uint32_t aSize) override { using alloc_t = void(__fastcall*)(Vault*, AllocationResult*, uint32_t); - UniversalRelocFunc alloc(Detail::AddressHashes::Memory_Vault_Alloc); + static UniversalRelocFunc alloc(Detail::AddressHashes::Memory_Vault_Alloc); auto pool = T::Get(); auto storage = pool->storage->GetAllocatorStorage(); @@ -96,7 +96,7 @@ struct Allocator : IAllocator virtual AllocationResult AllocAligned(uint32_t aSize, uint32_t aAlignment) override { using alloc_t = void (*)(Vault*, AllocationResult*, uint32_t, uint32_t); - UniversalRelocFunc alloc(Detail::AddressHashes::Memory_Vault_AllocAligned); + static UniversalRelocFunc alloc(Detail::AddressHashes::Memory_Vault_AllocAligned); auto pool = T::Get(); auto storage = pool->storage->GetAllocatorStorage(); @@ -114,7 +114,7 @@ struct Allocator : IAllocator virtual AllocationResult Realloc(AllocationResult& aAllocation, uint32_t aSize) override { using realloc_t = void (*)(Vault*, AllocationResult*, AllocationResult&, uint32_t); - UniversalRelocFunc realloc(Detail::AddressHashes::Memory_Vault_Realloc); + static UniversalRelocFunc realloc(Detail::AddressHashes::Memory_Vault_Realloc); auto pool = T::Get(); auto storage = pool->storage->GetAllocatorStorage(); @@ -132,7 +132,7 @@ struct Allocator : IAllocator virtual AllocationResult ReallocAligned(AllocationResult& aAllocation, uint32_t aSize, uint32_t aAlignment) override { using realloc_t = void (*)(Vault*, AllocationResult*, AllocationResult&, uint32_t, uint32_t); - UniversalRelocFunc realloc(Detail::AddressHashes::Memory_Vault_ReallocAligned); + static UniversalRelocFunc realloc(Detail::AddressHashes::Memory_Vault_ReallocAligned); auto pool = T::Get(); auto storage = pool->storage->GetAllocatorStorage(); @@ -150,7 +150,7 @@ struct Allocator : IAllocator virtual void Free(AllocationResult& aAllocation) override { using func_t = void (*)(Vault*, AllocationResult&); - UniversalRelocFunc func(Detail::AddressHashes::Memory_Vault_Free); + static UniversalRelocFunc func(Detail::AddressHashes::Memory_Vault_Free); auto pool = T::Get(); auto storage = pool->storage->GetAllocatorStorage(); @@ -160,7 +160,7 @@ struct Allocator : IAllocator virtual void sub_28(void* a2) override { using func_t = void (*)(Vault*, void*); - UniversalRelocFunc func(Detail::AddressHashes::Memory_Vault_Unk1); + static UniversalRelocFunc func(Detail::AddressHashes::Memory_Vault_Unk1); auto pool = T::Get(); auto storage = pool->storage->GetAllocatorStorage(); @@ -184,7 +184,7 @@ struct Allocator : IAllocator inline void OOM(uint32_t aSize, uint32_t aAlignment) { using oom_t = AllocationResult (*)(PoolStorage*, uint32_t, uint32_t); - UniversalRelocFunc oom(Detail::AddressHashes::Memory_PoolStorage_OOM); + static UniversalRelocFunc oom(Detail::AddressHashes::Memory_PoolStorage_OOM); auto pool = T::Get(); oom(pool->storage, aSize, aAlignment); diff --git a/include/RED4ext/Memory/SharedPtr.hpp b/include/RED4ext/Memory/SharedPtr.hpp index fba4902b9..5acbd93ef 100644 --- a/include/RED4ext/Memory/SharedPtr.hpp +++ b/include/RED4ext/Memory/SharedPtr.hpp @@ -178,7 +178,7 @@ class SharedPtrBase if (refCount) { // This function also deallocates RefCnt when weakRefs reaches 0. - UniversalRelocFunc decWeakRefFn(Detail::AddressHashes::Handle_DecWeakRef); + static UniversalRelocFunc decWeakRefFn(Detail::AddressHashes::Handle_DecWeakRef); decWeakRefFn(this); } } diff --git a/include/RED4ext/Memory/Vault-inl.hpp b/include/RED4ext/Memory/Vault-inl.hpp index 3c333e9c6..94799f638 100644 --- a/include/RED4ext/Memory/Vault-inl.hpp +++ b/include/RED4ext/Memory/Vault-inl.hpp @@ -9,6 +9,6 @@ RED4EXT_INLINE RED4ext::Memory::Vault* RED4ext::Memory::Vault::Get() { - UniversalRelocPtr ptr(Detail::AddressHashes::Memory_Vault); + static UniversalRelocPtr ptr(Detail::AddressHashes::Memory_Vault); return reinterpret_cast(ptr.GetAddr()); } diff --git a/include/RED4ext/RTTISystem-inl.hpp b/include/RED4ext/RTTISystem-inl.hpp index ab127e043..59e009b96 100644 --- a/include/RED4ext/RTTISystem-inl.hpp +++ b/include/RED4ext/RTTISystem-inl.hpp @@ -9,7 +9,7 @@ RED4EXT_INLINE RED4ext::CRTTISystem* RED4ext::CRTTISystem::Get() { - UniversalRelocFunc func(Detail::AddressHashes::CRTTISystem_Get); + static UniversalRelocFunc func(Detail::AddressHashes::CRTTISystem_Get); return func(); } @@ -35,6 +35,6 @@ RED4EXT_INLINE void RED4ext::RTTIRegistrator::Add(CallbackFunc aRegFunc, Callbac RED4EXT_INLINE const uint32_t RED4ext::RTTIRegistrator::GetNextId() { - UniversalRelocPtr ptr(Detail::AddressHashes::CRTTIRegistrator_RTTIAsyncId); + static UniversalRelocPtr ptr(Detail::AddressHashes::CRTTIRegistrator_RTTIAsyncId); return InterlockedIncrement(ptr.GetAddr()); } diff --git a/include/RED4ext/RTTITypes-inl.hpp b/include/RED4ext/RTTITypes-inl.hpp index 5cb781d17..3d6584a00 100644 --- a/include/RED4ext/RTTITypes-inl.hpp +++ b/include/RED4ext/RTTITypes-inl.hpp @@ -132,21 +132,21 @@ RED4EXT_INLINE bool RED4ext::CBaseRTTIType::sub_78() RED4EXT_INLINE bool RED4ext::CBaseRTTIType::sub_80(int64_t a1, ScriptInstance aInstance) { using func_t = bool (*)(CBaseRTTIType*, int64_t, ScriptInstance); - UniversalRelocFunc func(Detail::AddressHashes::CBaseRTTIType_sub_80); + static UniversalRelocFunc func(Detail::AddressHashes::CBaseRTTIType_sub_80); return func(this, a1, aInstance); } RED4EXT_INLINE bool RED4ext::CBaseRTTIType::sub_88(int64_t a1, ScriptInstance aInstance) { using func_t = bool (*)(CBaseRTTIType*, int64_t, ScriptInstance); - UniversalRelocFunc func(Detail::AddressHashes::CBaseRTTIType_sub_88); + static UniversalRelocFunc func(Detail::AddressHashes::CBaseRTTIType_sub_88); return func(this, a1, aInstance); } RED4EXT_INLINE bool RED4ext::CBaseRTTIType::sub_90(int64_t a1, ScriptInstance aInstance, CString& a3, int64_t a4) { using func_t = bool (*)(CBaseRTTIType*, int64_t, ScriptInstance, CString&, int64_t); - UniversalRelocFunc func(Detail::AddressHashes::CBaseRTTIType_sub_90); + static UniversalRelocFunc func(Detail::AddressHashes::CBaseRTTIType_sub_90); return func(this, a1, aInstance, a3, a4); } @@ -154,14 +154,14 @@ RED4EXT_INLINE bool RED4ext::CBaseRTTIType::sub_98(int64_t a1, ScriptInstance aI bool a5) { using func_t = bool (*)(CBaseRTTIType*, int64_t, ScriptInstance, CString&, int64_t, bool); - UniversalRelocFunc func(Detail::AddressHashes::CBaseRTTIType_sub_98); + static UniversalRelocFunc func(Detail::AddressHashes::CBaseRTTIType_sub_98); return func(this, a1, aInstance, a3, a4, a5); } RED4EXT_INLINE bool RED4ext::CBaseRTTIType::sub_A0(int64_t a1, CString& a2, bool a3) { using func_t = bool (*)(CBaseRTTIType*, int64_t, CString&, bool); - UniversalRelocFunc func(Detail::AddressHashes::CBaseRTTIType_sub_A0); + static UniversalRelocFunc func(Detail::AddressHashes::CBaseRTTIType_sub_A0); return func(this, a1, a2, a3); } @@ -250,35 +250,35 @@ RED4EXT_INLINE void RED4ext::CClass::Destruct(ScriptInstance aMemory) const RED4EXT_INLINE bool RED4ext::CClass::Unserialize(BaseStream* aStream, ScriptInstance aInstance, int64_t a3) const { using func_t = bool (*)(const CClass*, BaseStream*, ScriptInstance, int64_t); - UniversalRelocFunc func(Detail::AddressHashes::CClass_Unserialize); + static UniversalRelocFunc func(Detail::AddressHashes::CClass_Unserialize); return func(this, aStream, aInstance, a3); } RED4EXT_INLINE bool RED4ext::CClass::ToString(const ScriptInstance aInstance, CString& aOut) const { using func_t = bool (*)(const CClass*, ScriptInstance, CString&); - UniversalRelocFunc func(Detail::AddressHashes::CClass_ToString); + static UniversalRelocFunc func(Detail::AddressHashes::CClass_ToString); return func(this, aInstance, aOut); } RED4EXT_INLINE bool RED4ext::CClass::sub_80(int64_t a1, ScriptInstance aInstance) { using func_t = bool (*)(const CClass*, int64_t, ScriptInstance); - UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_80); + static UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_80); return func(this, a1, aInstance); } RED4EXT_INLINE bool RED4ext::CClass::sub_88(int64_t a1, ScriptInstance aInstance) { using func_t = bool (*)(const CClass*, int64_t, ScriptInstance); - UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_88); + static UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_88); return func(this, a1, aInstance); } RED4EXT_INLINE bool RED4ext::CClass::sub_90(int64_t a1, ScriptInstance aInstance, CString& a3, int64_t a4) { using func_t = bool (*)(const CClass*, int64_t, ScriptInstance, CString&, int64_t); - UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_90); + static UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_90); return func(this, a1, aInstance, a3, a4); } @@ -287,49 +287,49 @@ RED4EXT_INLINE bool RED4ext::CClass::sub_98(int64_t a1, ScriptInstance aInstance RED4EXT_UNUSED_PARAMETER(a5); using func_t = bool (*)(const CClass*, int64_t, ScriptInstance, CString&, int64_t); - UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_90); + static UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_90); return func(this, a1, aInstance, a3, a4); } RED4EXT_INLINE bool RED4ext::CClass::sub_A0(int64_t a1, CString& a2, bool a3) { using func_t = bool (*)(const CClass*, int64_t, CString&, bool); - UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_A0); + static UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_A0); return func(this, a1, a2, a3); } RED4EXT_INLINE void RED4ext::CClass::sub_B0(int64_t a1, int64_t a2) { using func_t = bool (*)(const CClass*, int64_t, int64_t); - UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_B0); + static UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_B0); func(this, a1, a2); } RED4EXT_INLINE void RED4ext::CClass::sub_C0() { using func_t = void (*)(CClass*); - UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_C0); + static UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_C0); func(this); } RED4EXT_INLINE uint32_t RED4ext::CClass::GetMaxAlignment() const { using func_t = uint32_t (*)(const CClass*); - UniversalRelocFunc func(Detail::AddressHashes::CClass_GetMaxAlignment); + static UniversalRelocFunc func(Detail::AddressHashes::CClass_GetMaxAlignment); return func(this); } RED4EXT_INLINE bool RED4ext::CClass::sub_D0() const { using func_t = bool (*)(const CClass*); - UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_D0); + static UniversalRelocFunc func(Detail::AddressHashes::CClass_sub_D0); return func(this); } RED4EXT_INLINE RED4ext::ScriptInstance RED4ext::CClass::CreateInstance(bool aZeroMemory) const { using func_t = ScriptInstance (*)(const CClass*, uint32_t, bool); - UniversalRelocFunc func(Detail::AddressHashes::CClass_CreateInstance); + static UniversalRelocFunc func(Detail::AddressHashes::CClass_CreateInstance); return func(this, GetSize(), aZeroMemory); } @@ -354,16 +354,16 @@ RED4EXT_INLINE RED4ext::CProperty* RED4ext::CClass::GetProperty(CName aName) // they do. using func_t = CProperty* (*)(CClass*, CName); - UniversalRelocFunc func(Detail::AddressHashes::CClass_GetProperty); + static UniversalRelocFunc func(Detail::AddressHashes::CClass_GetProperty); return func(this, aName); } RED4EXT_INLINE void RED4ext::CClass::InitializeProperties(ScriptInstance aInstance) { - UniversalRelocFunc initializeProperties(Detail::AddressHashes::CClass_InitializeProperties); + static UniversalRelocFunc initializeProperties(Detail::AddressHashes::CClass_InitializeProperties); initializeProperties(this, aInstance); - UniversalRelocFunc assignDefaultValuesToProperties( + static UniversalRelocFunc assignDefaultValuesToProperties( Detail::AddressHashes::CClass_AssignDefaultValuesToProperties); assignDefaultValuesToProperties(this, aInstance); } @@ -371,7 +371,7 @@ RED4EXT_INLINE void RED4ext::CClass::InitializeProperties(ScriptInstance aInstan RED4EXT_INLINE void RED4ext::CClass::GetProperties(DynArray& aProps) { using func_t = CProperty* (*)(CClass*, DynArray&); - UniversalRelocFunc func(Detail::AddressHashes::CClass_GetProperties); + static UniversalRelocFunc func(Detail::AddressHashes::CClass_GetProperties); func(this, aProps); } @@ -416,7 +416,7 @@ RED4EXT_INLINE void RED4ext::CClass::RegisterFunction(CClassFunction* aFunc) RED4EXT_INLINE void RED4ext::CClass::ClearScriptedData() { using func_t = void (*)(CClass*); - UniversalRelocFunc func(Detail::AddressHashes::CClass_ClearScriptedData); + static UniversalRelocFunc func(Detail::AddressHashes::CClass_ClearScriptedData); func(this); } @@ -524,21 +524,21 @@ RED4EXT_INLINE void RED4ext::CEnum::Assign(ScriptInstance aLhs, const ScriptInst RED4EXT_INLINE bool RED4ext::CEnum::Unserialize(BaseStream* aStream, ScriptInstance aInstance, int64_t a3) const { using func_t = bool (*)(const CEnum*, BaseStream*, ScriptInstance, int64_t); - UniversalRelocFunc func(Detail::AddressHashes::CEnum_Unserialize); + static UniversalRelocFunc func(Detail::AddressHashes::CEnum_Unserialize); return func(this, aStream, aInstance, a3); } RED4EXT_INLINE bool RED4ext::CEnum::ToString(const ScriptInstance aInstance, CString& aOut) const { using func_t = bool (*)(const CEnum*, const ScriptInstance, CString&); - UniversalRelocFunc func(Detail::AddressHashes::CEnum_ToString); + static UniversalRelocFunc func(Detail::AddressHashes::CEnum_ToString); return func(this, aInstance, aOut); } RED4EXT_INLINE bool RED4ext::CEnum::FromString(ScriptInstance aInstance, const CString& aString) const { using func_t = bool (*)(const CEnum*, ScriptInstance, const CString&); - UniversalRelocFunc func(Detail::AddressHashes::CEnum_FromString); + static UniversalRelocFunc func(Detail::AddressHashes::CEnum_FromString); return func(this, aInstance, aString); } @@ -644,20 +644,20 @@ RED4EXT_INLINE void RED4ext::CBitfield::Assign(ScriptInstance aLhs, const Script RED4EXT_INLINE bool RED4ext::CBitfield::Unserialize(BaseStream* aStream, ScriptInstance aInstance, int64_t a3) const { using func_t = bool (*)(const CBitfield*, BaseStream*, ScriptInstance, int64_t); - UniversalRelocFunc func(Detail::AddressHashes::CBitfield_Unserialize); + static UniversalRelocFunc func(Detail::AddressHashes::CBitfield_Unserialize); return func(this, aStream, aInstance, a3); } RED4EXT_INLINE bool RED4ext::CBitfield::ToString(const ScriptInstance aInstance, CString& aOut) const { using func_t = bool (*)(const CBitfield*, ScriptInstance, CString&); - UniversalRelocFunc func(Detail::AddressHashes::CBitfield_ToString); + static UniversalRelocFunc func(Detail::AddressHashes::CBitfield_ToString); return func(this, aInstance, aOut); } RED4EXT_INLINE bool RED4ext::CBitfield::FromString(ScriptInstance aInstance, const CString& aString) const { using func_t = bool (*)(const CBitfield*, ScriptInstance, const CString&); - UniversalRelocFunc func(Detail::AddressHashes::CBitfield_FromString); + static UniversalRelocFunc func(Detail::AddressHashes::CBitfield_FromString); return func(this, aInstance, aString); } diff --git a/include/RED4ext/RTTITypes.hpp b/include/RED4ext/RTTITypes.hpp index d81ad0e3b..5da7c79d5 100644 --- a/include/RED4ext/RTTITypes.hpp +++ b/include/RED4ext/RTTITypes.hpp @@ -254,7 +254,7 @@ struct TTypedClass : CClass { // This is doing something extra beside comparing properties, using the native func until we figure it out. using func_t = bool (*)(TTypedClass*, const ScriptInstance, const ScriptInstance, uint32_t); - UniversalRelocFunc func(Detail::AddressHashes::TTypedClass_IsEqual); + static UniversalRelocFunc func(Detail::AddressHashes::TTypedClass_IsEqual); return func(this, aLhs, aRhs, a3); } @@ -483,7 +483,7 @@ struct CRTTIScriptReferenceType : CBaseRTTIType static CRTTIScriptReferenceType* New(void* aMemory, void* aUnknownArg = nullptr) { using func_t = void (*)(void*, void*); - UniversalRelocFunc func(Detail::AddressHashes::CRTTIScriptReferenceType_ctor); + static UniversalRelocFunc func(Detail::AddressHashes::CRTTIScriptReferenceType_ctor); func(aMemory, aUnknownArg); return (CRTTIScriptReferenceType*)aMemory; @@ -493,7 +493,7 @@ struct CRTTIScriptReferenceType : CBaseRTTIType void Set(CBaseRTTIType* aBaseType, const T* aValue) { using func_t = void (*)(CRTTIScriptReferenceType*, CBaseRTTIType*, const T*); - UniversalRelocFunc func(Detail::AddressHashes::CRTTIScriptReferenceType_Set); + static UniversalRelocFunc func(Detail::AddressHashes::CRTTIScriptReferenceType_Set); func(this, aBaseType, aValue); } diff --git a/include/RED4ext/ResourceDepot-inl.hpp b/include/RED4ext/ResourceDepot-inl.hpp index 7ba858782..13e45f92c 100644 --- a/include/RED4ext/ResourceDepot-inl.hpp +++ b/include/RED4ext/ResourceDepot-inl.hpp @@ -9,6 +9,6 @@ RED4EXT_INLINE RED4ext::ResourceDepot* RED4ext::ResourceDepot::Get() { - UniversalRelocPtr ptr(Detail::AddressHashes::ResourceDepot); + static UniversalRelocPtr ptr(Detail::AddressHashes::ResourceDepot); return ptr; } diff --git a/include/RED4ext/ResourceLoader-inl.hpp b/include/RED4ext/ResourceLoader-inl.hpp index 103aed497..7b8a69a46 100644 --- a/include/RED4ext/ResourceLoader-inl.hpp +++ b/include/RED4ext/ResourceLoader-inl.hpp @@ -9,6 +9,6 @@ RED4EXT_INLINE RED4ext::ResourceLoader* RED4ext::ResourceLoader::Get() { - UniversalRelocPtr ptr(Detail::AddressHashes::ResourceLoader); + static UniversalRelocPtr ptr(Detail::AddressHashes::ResourceLoader); return ptr; } diff --git a/include/RED4ext/ResourceLoader.hpp b/include/RED4ext/ResourceLoader.hpp index 61836dd41..23d1f7224 100644 --- a/include/RED4ext/ResourceLoader.hpp +++ b/include/RED4ext/ResourceLoader.hpp @@ -31,12 +31,12 @@ struct ResourceToken if (!IsFinished()) { using CancelUnk38_t = void (*)(void*); - UniversalRelocFunc CancelUnk38(Detail::AddressHashes::ResourceToken_CancelUnk38); + static UniversalRelocFunc CancelUnk38(Detail::AddressHashes::ResourceToken_CancelUnk38); CancelUnk38(unk38); } using DestructUnk38_t = void (*)(void**); - UniversalRelocFunc DestructUnk38(Detail::AddressHashes::ResourceToken_DestructUnk38); + static UniversalRelocFunc DestructUnk38(Detail::AddressHashes::ResourceToken_DestructUnk38); DestructUnk38(&unk38); } @@ -48,7 +48,7 @@ struct ResourceToken void OnLoaded(LoadedCallback&& aCallback) { using OnLoaded_t = JobHandle* (*)(ResourceToken*, JobHandle*, LoadedCallback*); - RED4ext::UniversalRelocFunc func(Detail::AddressHashes::ResourceToken_OnLoaded); + static UniversalRelocFunc func(Detail::AddressHashes::ResourceToken_OnLoaded); JobHandle handle{}; func(this, &handle, &aCallback); @@ -62,7 +62,7 @@ struct ResourceToken Handle& Fetch() { using Fetch_t = Handle& (*)(ResourceToken*); - UniversalRelocFunc func(Detail::AddressHashes::ResourceToken_Fetch); + static UniversalRelocFunc func(Detail::AddressHashes::ResourceToken_Fetch); return func(this); } @@ -125,7 +125,7 @@ struct ResourceLoader SharedPtr> LoadAsync(ResourcePath aPath) { using LoadAsync_t = uintptr_t (*)(ResourceLoader*, SharedPtr>*, ResourcePath); - UniversalRelocFunc func(Detail::AddressHashes::ResourceLoader_LoadAsync); + static UniversalRelocFunc func(Detail::AddressHashes::ResourceLoader_LoadAsync); SharedPtr> token; func(this, &token, aPath); @@ -137,7 +137,7 @@ struct ResourceLoader SharedPtr> FindToken(ResourcePath aPath) { using FindToken_t = uintptr_t (*)(ResourceLoader*, SharedPtr>*, ResourcePath); - UniversalRelocFunc func(Detail::AddressHashes::ResourceLoader_FindTokenFast); + static UniversalRelocFunc func(Detail::AddressHashes::ResourceLoader_FindTokenFast); std::shared_lock _(tokenLock); diff --git a/include/RED4ext/Scripting/Functions-inl.hpp b/include/RED4ext/Scripting/Functions-inl.hpp index ded58bce9..469a43d31 100644 --- a/include/RED4ext/Scripting/Functions-inl.hpp +++ b/include/RED4ext/Scripting/Functions-inl.hpp @@ -56,12 +56,12 @@ RED4EXT_INLINE bool RED4ext::CBaseFunction::Execute(CStack* aStack) if (!flags.isNative) { using executeScriptedFn_t = bool (*)(CBaseFunction*, CStack*, void*); - UniversalRelocFunc executeScriptedFn(Detail::AddressHashes::CBaseFunction_ExecuteScripted); + static UniversalRelocFunc executeScriptedFn(Detail::AddressHashes::CBaseFunction_ExecuteScripted); return executeScriptedFn(this, aStack, nullptr); } using executeNativeFn_t = bool (*)(CBaseFunction*, CStack*); - UniversalRelocFunc executeNativeFn(Detail::AddressHashes::CBaseFunction_ExecuteNative); + static UniversalRelocFunc executeNativeFn(Detail::AddressHashes::CBaseFunction_ExecuteNative); return executeNativeFn(this, aStack); } @@ -70,7 +70,7 @@ RED4EXT_INLINE bool RED4ext::CBaseFunction::Execute_(CStack* aStack) if (!flags.isNative) { using func_t = bool (*)(CBaseFunction*, CStack*); - UniversalRelocFunc func(Detail::AddressHashes::CBaseFunction_ExecuteScripted); + static UniversalRelocFunc func(Detail::AddressHashes::CBaseFunction_ExecuteScripted); return func(this, aStack); } @@ -83,7 +83,7 @@ RED4EXT_INLINE bool RED4ext::CBaseFunction::Execute_(CStack* aStack) RED4EXT_INLINE RED4ext::CBaseFunction::Handler_t RED4ext::CBaseFunction::GetHandler(uint32_t aIndex) { - UniversalRelocPtr handlers(Detail::AddressHashes::CBaseFunction_Handlers); + static UniversalRelocPtr handlers(Detail::AddressHashes::CBaseFunction_Handlers); return handlers[aIndex]; } diff --git a/include/RED4ext/Scripting/Functions.hpp b/include/RED4ext/Scripting/Functions.hpp index 6953baab0..9159c39ca 100644 --- a/include/RED4ext/Scripting/Functions.hpp +++ b/include/RED4ext/Scripting/Functions.hpp @@ -112,7 +112,7 @@ struct CGlobalFunction : CBaseFunction auto shortName = CNamePool::Add(aShortName); using func_t = CGlobalFunction* (*)(CGlobalFunction*, CName, CName, ScriptingFunction_t); - UniversalRelocFunc func(Detail::AddressHashes::CGlobalFunction_ctor); + static UniversalRelocFunc func(Detail::AddressHashes::CGlobalFunction_ctor); func(memory, fullName, shortName, aFunc); } @@ -138,7 +138,7 @@ struct CClassFunction : CBaseFunction auto shortName = CNamePool::Add(aShortName); using func_t = CClassFunction* (*)(CClassFunction*, CClass*, CName, CName, ScriptingFunction_t, Flags); - UniversalRelocFunc func(Detail::AddressHashes::CClassFunction_ctor); + static UniversalRelocFunc func(Detail::AddressHashes::CClassFunction_ctor); func(memory, aParent, fullName, shortName, aFunc, aFlags); } diff --git a/include/RED4ext/Scripting/IScriptable-inl.hpp b/include/RED4ext/Scripting/IScriptable-inl.hpp index 0cdfd1983..3b6da039c 100644 --- a/include/RED4ext/Scripting/IScriptable-inl.hpp +++ b/include/RED4ext/Scripting/IScriptable-inl.hpp @@ -32,7 +32,7 @@ RED4EXT_INLINE RED4ext::CClass* RED4ext::IScriptable::GetType() RED4EXT_INLINE void RED4ext::IScriptable::sub_D8(int64_t a1, int64_t a2) { using func_t = void (*)(ISerializable*, int64_t, int64_t); - UniversalRelocFunc func(Detail::AddressHashes::IScriptable_sub_D8); + static UniversalRelocFunc func(Detail::AddressHashes::IScriptable_sub_D8); func(this, a1, a2); } @@ -76,7 +76,7 @@ RED4EXT_INLINE void* RED4ext::IScriptable::GetValueHolder() RED4EXT_INLINE void RED4ext::IScriptable::DestructValueHolder() { using func_t = void* (*)(IScriptable*); - UniversalRelocFunc func(Detail::AddressHashes::IScriptable_DestructValueHolder); + static UniversalRelocFunc func(Detail::AddressHashes::IScriptable_DestructValueHolder); func(this); } diff --git a/include/RED4ext/Scripting/OpcodeHandlers-inl.hpp b/include/RED4ext/Scripting/OpcodeHandlers-inl.hpp index 14c2e771b..7f8543d16 100644 --- a/include/RED4ext/Scripting/OpcodeHandlers-inl.hpp +++ b/include/RED4ext/Scripting/OpcodeHandlers-inl.hpp @@ -9,7 +9,7 @@ RED4EXT_INLINE RED4ext::OpcodeHandlers::Handler_t RED4ext::OpcodeHandlers::Get(uint8_t aOpcode) { - UniversalRelocPtr opcodes(Detail::AddressHashes::OpcodeHandlers); + static UniversalRelocPtr opcodes(Detail::AddressHashes::OpcodeHandlers); return opcodes.GetAddr()[aOpcode]; } diff --git a/include/RED4ext/Scripting/Stack-inl.hpp b/include/RED4ext/Scripting/Stack-inl.hpp index 28a23fb3a..d5f3c6ab7 100644 --- a/include/RED4ext/Scripting/Stack-inl.hpp +++ b/include/RED4ext/Scripting/Stack-inl.hpp @@ -45,7 +45,7 @@ RED4EXT_INLINE RED4ext::CStack::CStack(ScriptInstance aContext, CStackType* aArg , argsCount(aArgsCount) , result(aResult) { - UniversalRelocVtbl vtbl(Detail::AddressHashes::CStack_vtbl); + static UniversalRelocVtbl vtbl(Detail::AddressHashes::CStack_vtbl); *reinterpret_cast(this) = vtbl; } diff --git a/include/RED4ext/SortedArray.hpp b/include/RED4ext/SortedArray.hpp index d1ccf33af..cac050cb8 100644 --- a/include/RED4ext/SortedArray.hpp +++ b/include/RED4ext/SortedArray.hpp @@ -176,7 +176,7 @@ struct SortedArray using func_t = void (*)(SortedArray * aThis, uint32_t aCapacity, uint32_t aElementSize, uint32_t aAlignment, void (*a5)(int64_t, int64_t, int64_t, int64_t)); - UniversalRelocFunc func(Detail::AddressHashes::DynArray_Realloc); + static UniversalRelocFunc func(Detail::AddressHashes::DynArray_Realloc); func(this, newCapacity, sizeof(T), alignment, nullptr); } diff --git a/include/RED4ext/SystemUpdate-inl.hpp b/include/RED4ext/SystemUpdate-inl.hpp index 67b80e89f..b93c8b05d 100644 --- a/include/RED4ext/SystemUpdate-inl.hpp +++ b/include/RED4ext/SystemUpdate-inl.hpp @@ -13,7 +13,7 @@ RED4EXT_INLINE void RED4ext::UpdateRegistrar::RegisterUpdate(UpdateTickGroup aGr const char* aName, GroupUpdateCallback&& aCallback) { using func_t = void (*)(UpdateRegistrar*, UpdateTickGroup, CClass*, const char*, GroupUpdateCallback&&, uint32_t); - UniversalRelocFunc func(Detail::AddressHashes::UpdateRegistrar_RegisterGroupUpdate); + static UniversalRelocFunc func(Detail::AddressHashes::UpdateRegistrar_RegisterGroupUpdate); func(this, aGroup, aSystem->GetNativeType(), aName, std::forward(aCallback), 0); } @@ -24,7 +24,7 @@ RED4EXT_INLINE void RED4ext::UpdateRegistrar::RegisterUpdate(UpdateBucketMask aB { using func_t = void (*)(UpdateRegistrar*, UpdateBucketMask, UpdateBucketStage, CClass*, const char*, BucketUpdateCallback&&, uint32_t); - UniversalRelocFunc func(Detail::AddressHashes::UpdateRegistrar_RegisterBucketUpdate); + static UniversalRelocFunc func(Detail::AddressHashes::UpdateRegistrar_RegisterBucketUpdate); func(this, aBuckets, aStage, aSystem->GetNativeType(), aName, std::forward(aCallback), 0); } diff --git a/include/RED4ext/TweakDB-inl.hpp b/include/RED4ext/TweakDB-inl.hpp index 41d9011c8..0ba04af5a 100644 --- a/include/RED4ext/TweakDB-inl.hpp +++ b/include/RED4ext/TweakDB-inl.hpp @@ -163,7 +163,7 @@ RED4EXT_INLINE bool RED4ext::TweakDB::UpdateRecord(gamedataTweakDBRecord* aRecor // Meaning we have to pass our own TweakDB class. sorry -Sombra using CreateTDBRecord_t = void (*)(TweakDB*, uint32_t aBaseMurmur3, TweakDBID aDBID); - UniversalRelocFunc CreateTDBRecord(Detail::AddressHashes::TweakDB_CreateRecord); + static UniversalRelocFunc CreateTDBRecord(Detail::AddressHashes::TweakDB_CreateRecord); TweakDB fakeTweakDB; struct FakeAllocator : Memory::IAllocator @@ -253,7 +253,7 @@ RED4EXT_INLINE bool RED4ext::TweakDB::CreateRecord(TweakDBID aDBID, CBaseRTTITyp RED4EXT_INLINE bool RED4ext::TweakDB::CreateRecord(TweakDBID aDBID, uint32_t aTweakBaseHash) { using CreateTDBRecord_t = void (*)(TweakDB*, uint32_t aBaseMurmur3, TweakDBID aDBID); - UniversalRelocFunc CreateTDBRecord(Detail::AddressHashes::TweakDB_CreateRecord); + static UniversalRelocFunc CreateTDBRecord(Detail::AddressHashes::TweakDB_CreateRecord); if (!aDBID.IsValid()) return false; @@ -452,7 +452,7 @@ RED4EXT_INLINE const RED4ext::TweakDB::FlatValue* RED4ext::TweakDB::GetDefaultFl RED4EXT_INLINE RED4ext::TweakDB* RED4ext::TweakDB::Get() { using Get_t = TweakDB* (*)(); - UniversalRelocFunc func(Detail::AddressHashes::TweakDB_Get); + static UniversalRelocFunc func(Detail::AddressHashes::TweakDB_Get); return func(); } From 8d43db9704a3b62dda9262b240ac4b8b04cedbbe Mon Sep 17 00:00:00 2001 From: pv Date: Thu, 29 Feb 2024 23:06:33 +0300 Subject: [PATCH 2/2] Fix addresses --- include/RED4ext/Detail/AddressHashes.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/RED4ext/Detail/AddressHashes.hpp b/include/RED4ext/Detail/AddressHashes.hpp index 74164b227..718c647ea 100644 --- a/include/RED4ext/Detail/AddressHashes.hpp +++ b/include/RED4ext/Detail/AddressHashes.hpp @@ -37,12 +37,12 @@ constexpr std::uint32_t CClass_sub_90 = 0xA26D374E; constexpr std::uint32_t CClass_sub_98 = 0x48C020CA; constexpr std::uint32_t CClass_sub_A0 = 0x15F21D6F; constexpr std::uint32_t CClass_sub_B0 = 0xA0911974; -constexpr std::uint32_t CClass_sub_C0 = 0x7DD010C3; +constexpr std::uint32_t CClass_sub_C0 = 3523744305UL; constexpr std::uint32_t CClass_GetMaxAlignment = 0xD14E1230; constexpr std::uint32_t CClass_sub_D0 = 0x37750EBF; constexpr std::uint32_t CClass_CreateInstance = 0x5A800F1D; constexpr std::uint32_t CClass_GetProperty = 0x8F031512; -constexpr std::uint32_t CClass_GetProperties = 0xB412121B; +constexpr std::uint32_t CClass_GetProperties = 1652956141UL; constexpr std::uint32_t CClass_ClearScriptedData = 0x31F20E93; constexpr std::uint32_t CClass_InitializeProperties = 0xF4AC12B0; constexpr std::uint32_t CClass_AssignDefaultValuesToProperties = 0x97DF1590; @@ -124,7 +124,7 @@ constexpr std::uint32_t ISerializable_sub_C0 = 0x80201C35; #pragma endregion #pragma region JobDispatcher -constexpr std::uint32_t JobDispatcher = 0xBAD50B3D; +constexpr std::uint32_t JobDispatcher = 1508445968UL; constexpr std::uint32_t JobDispatcher_DispatchJob = 0x9C441E82; #pragma endregion