From e90d2572b1ab680ea1dec12c4f21adc1951fd930 Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Sun, 18 Sep 2022 19:01:37 +0200 Subject: [PATCH] Implement 'ThreadInServerFrameThread()' Tier0 export in r2, inline in r5. --- r5dev/tier0/threadtools.cpp | 5 +++++ r5dev/tier0/threadtools.h | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/r5dev/tier0/threadtools.cpp b/r5dev/tier0/threadtools.cpp index e3e86baa..ff03656e 100644 --- a/r5dev/tier0/threadtools.cpp +++ b/r5dev/tier0/threadtools.cpp @@ -40,6 +40,11 @@ bool ThreadInRenderThread() return (ThreadGetCurrentId() == g_ThreadRenderThreadID); } +bool ThreadInServerFrameThread() +{ + return (ThreadGetCurrentId() == (*g_ThreadServerFrameThreadID)); +} + ThreadId_t ThreadGetCurrentId() { #ifdef _WIN32 diff --git a/r5dev/tier0/threadtools.h b/r5dev/tier0/threadtools.h index 468e9559..28ba2594 100644 --- a/r5dev/tier0/threadtools.h +++ b/r5dev/tier0/threadtools.h @@ -55,6 +55,7 @@ inline void ThreadPause() bool ThreadInMainThread(); bool ThreadInRenderThread(); +bool ThreadInServerFrameThread(); ThreadId_t ThreadGetCurrentId(); //----------------------------------------------------------------------------- @@ -215,6 +216,7 @@ inline auto v_DeclareCurrentThreadIsMainThread = p_DeclareCurrentThreadIsMainThr inline ThreadId_t* g_ThreadMainThreadID = nullptr; inline ThreadId_t g_ThreadRenderThreadID = NULL; +inline ThreadId_t* g_ThreadServerFrameThreadID = nullptr; /////////////////////////////////////////////////////////////////////////////// class CThreadFastMutex @@ -248,6 +250,7 @@ class VThreadTools : public IDetour spdlog::debug("| FUN: CThreadFastMutex::ReleaseWaiter : {:#18x} |\n", p_MutexInternal_ReleaseWaiter.GetPtr()); spdlog::debug("| FUN: DeclareCurrentThreadIsMainThread : {:#18x} |\n", p_DeclareCurrentThreadIsMainThread.GetPtr()); spdlog::debug("| VAR: g_ThreadMainThreadID : {:#18x} |\n", reinterpret_cast(g_ThreadMainThreadID)); + spdlog::debug("| VAR: g_ThreadServerFrameThreadID : {:#18x} |\n", reinterpret_cast(g_ThreadServerFrameThreadID)); spdlog::debug("+----------------------------------------------------------------+\n"); } virtual void GetFun(void) const @@ -262,7 +265,9 @@ class VThreadTools : public IDetour } virtual void GetVar(void) const { - g_ThreadMainThreadID = p_DeclareCurrentThreadIsMainThread.FindPattern("89 05").ResolveRelativeAddressSelf(0x2, 0x6).RCast(); + g_ThreadMainThreadID = p_DeclareCurrentThreadIsMainThread.FindPattern("89 05").ResolveRelativeAddressSelf(0x2, 0x6).RCast(); + g_ThreadServerFrameThreadID = g_GameDll.FindPatternSIMD(reinterpret_cast("\x83\x79\x00\x00\x75\x28\x8B"), "xx?xxxx") + .FindPatternSelf("8B 05").ResolveRelativeAddressSelf(0x2, 0x6).RCast(); } virtual void GetCon(void) const { } virtual void Attach(void) const { }