From f0512d7f92ed3216ae39914121fe62f8937a0dcf Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Mon, 30 Jan 2023 21:22:17 +0100 Subject: [PATCH] Add 'CAppSystemGroup::Destroy' callback * Add hook for 'CAppSystemGroup::Destroy'. * Moved 'IAppSystem.h' header file to public. --- r5dev/appframework/engine_launcher_api.h | 2 +- r5dev/launcher/IApplication.cpp | 1 + r5dev/launcher/IApplication.h | 7 ++-- .../appframework/IAppSystem.h} | 0 r5dev/public/appframework/IAppSystemGroup.cpp | 27 +++++++++++++ r5dev/public/appframework/IAppSystemGroup.h | 38 +++++++++++++++++++ r5dev/public/ifilesystem.h | 2 +- r5dev/vproj/clientsdk.vcxproj | 4 +- r5dev/vproj/clientsdk.vcxproj.filters | 15 ++++++-- r5dev/vproj/dedicated.vcxproj | 4 +- r5dev/vproj/dedicated.vcxproj.filters | 15 ++++++-- r5dev/vproj/gamesdk.vcxproj | 4 +- r5dev/vproj/gamesdk.vcxproj.filters | 15 ++++++-- 13 files changed, 117 insertions(+), 17 deletions(-) rename r5dev/{appframework/iappsystem.h => public/appframework/IAppSystem.h} (100%) create mode 100644 r5dev/public/appframework/IAppSystemGroup.cpp create mode 100644 r5dev/public/appframework/IAppSystemGroup.h diff --git a/r5dev/appframework/engine_launcher_api.h b/r5dev/appframework/engine_launcher_api.h index 1294a84c..1d072963 100644 --- a/r5dev/appframework/engine_launcher_api.h +++ b/r5dev/appframework/engine_launcher_api.h @@ -7,7 +7,7 @@ #ifndef ENGINE_LAUNCHER_APIH #define ENGINE_LAUNCHER_APIH -#include "appframework/iappsystem.h" +#include "public/appframework/IAppSystem.h" struct StartupInfo_t { diff --git a/r5dev/launcher/IApplication.cpp b/r5dev/launcher/IApplication.cpp index 7bd86a4d..8ebd2fce 100644 --- a/r5dev/launcher/IApplication.cpp +++ b/r5dev/launcher/IApplication.cpp @@ -116,6 +116,7 @@ bool CModAppSystemGroup::Create(CModAppSystemGroup* pModAppSystemGroup) return CModAppSystemGroup_Create(pModAppSystemGroup); } + //----------------------------------------------------------------------------- // Purpose: Initialize plugin system //----------------------------------------------------------------------------- diff --git a/r5dev/launcher/IApplication.h b/r5dev/launcher/IApplication.h index 09f19aee..4db6e595 100644 --- a/r5dev/launcher/IApplication.h +++ b/r5dev/launcher/IApplication.h @@ -1,10 +1,11 @@ #pragma once -#include "appframework/iappsystem.h" +#include "public/appframework/IAppSystem.h" +#include "public/appframework/IAppSystemGroup.h" //------------------------------------------------------------------------- // //------------------------------------------------------------------------- -class CModAppSystemGroup +class CModAppSystemGroup : public CAppSystemGroup { public: static int Main(CModAppSystemGroup* pModAppSystemGroup); @@ -19,8 +20,8 @@ public: { m_bServerOnly = true; } + private: - char pad[0xA8]; bool m_bServerOnly; }; diff --git a/r5dev/appframework/iappsystem.h b/r5dev/public/appframework/IAppSystem.h similarity index 100% rename from r5dev/appframework/iappsystem.h rename to r5dev/public/appframework/IAppSystem.h diff --git a/r5dev/public/appframework/IAppSystemGroup.cpp b/r5dev/public/appframework/IAppSystemGroup.cpp new file mode 100644 index 00000000..06386263 --- /dev/null +++ b/r5dev/public/appframework/IAppSystemGroup.cpp @@ -0,0 +1,27 @@ +//===== Copyright � 1996-2005, Valve Corporation, All rights reserved. ======// +// +// Purpose: Defines a group of app systems that all have the same lifetime +// that need to be connected/initialized, etc. in a well-defined order +// +// $Revision: $ +// $NoKeywords: $ +//===========================================================================// +#include "core/stdafx.h" +#include "IAppSystemGroup.h" + +//----------------------------------------------------------------------------- +// Purpose: Initialize plugin system +//----------------------------------------------------------------------------- +void CAppSystemGroup::Destroy(CAppSystemGroup* pModAppSystemGroup) +{ + CAppSystemGroup_Destroy(pModAppSystemGroup); +} + +void VAppSystemGroup::Attach(void) const +{ + DetourAttach(&CAppSystemGroup_Destroy, &CAppSystemGroup::Destroy); +} +void VAppSystemGroup::Detach(void) const +{ + DetourDetach(&CAppSystemGroup_Destroy, &CAppSystemGroup::Destroy); +} \ No newline at end of file diff --git a/r5dev/public/appframework/IAppSystemGroup.h b/r5dev/public/appframework/IAppSystemGroup.h new file mode 100644 index 00000000..69997bf7 --- /dev/null +++ b/r5dev/public/appframework/IAppSystemGroup.h @@ -0,0 +1,38 @@ +#ifndef APPSYSTEMGROUP_H +#define APPSYSTEMGROUP_H + +class CAppSystemGroup +{ +public: + static void Destroy(CAppSystemGroup* pAppSystemGroup); + +protected: + char pad[0xA8]; +}; + +inline CMemory p_CAppSystemGroup_Destroy; +inline auto CAppSystemGroup_Destroy = p_CAppSystemGroup_Destroy.RCast(); + +/////////////////////////////////////////////////////////////////////////////// +class VAppSystemGroup : public IDetour +{ + virtual void GetAdr(void) const + { + LogFunAdr("CAppSystemGroup::Destroy", p_CAppSystemGroup_Destroy.GetPtr()); + } + virtual void GetFun(void) const + { +#if defined (GAMEDLL_S0) || defined (GAMEDLL_S1) + p_CAppSystemGroup_Destroy = g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 57 41 54 41 55 41 56 41 57 48 83 EC 20 8B 81 ?? ?? ?? ??"); +#elif defined (GAMEDLL_S2) || defined (GAMEDLL_S3) + p_CAppSystemGroup_Destroy = g_GameDll.FindPatternSIMD("48 89 5C 24 ?? 48 89 74 24 ?? 57 48 83 EC 20 8B 81 ?? ?? ?? ?? 48 8B F9"); +#endif + CAppSystemGroup_Destroy = p_CAppSystemGroup_Destroy.RCast(); + } + virtual void GetVar(void) const { } + virtual void GetCon(void) const { } + virtual void Attach(void) const; + virtual void Detach(void) const; +}; + +#endif // APPSYSTEMGROUP_H diff --git a/r5dev/public/ifilesystem.h b/r5dev/public/ifilesystem.h index 483aaab8..9304cf47 100644 --- a/r5dev/public/ifilesystem.h +++ b/r5dev/public/ifilesystem.h @@ -3,8 +3,8 @@ #include #include -#include #include +#include typedef void* FileHandle_t; typedef void* FileNameHandle_t; // !TODO: Check if this is 4 or 8 bytes (model_t was 4 bytes in mem). diff --git a/r5dev/vproj/clientsdk.vcxproj b/r5dev/vproj/clientsdk.vcxproj index a26a7807..da36015f 100644 --- a/r5dev/vproj/clientsdk.vcxproj +++ b/r5dev/vproj/clientsdk.vcxproj @@ -105,6 +105,7 @@ NotUsing NotUsing + @@ -170,7 +171,6 @@ - @@ -290,6 +290,8 @@ + + diff --git a/r5dev/vproj/clientsdk.vcxproj.filters b/r5dev/vproj/clientsdk.vcxproj.filters index 1f5a818a..29176260 100644 --- a/r5dev/vproj/clientsdk.vcxproj.filters +++ b/r5dev/vproj/clientsdk.vcxproj.filters @@ -241,6 +241,9 @@ {c785a075-5583-4bb4-bdac-5f7419ee64ab} + + {87c9d891-5df4-445a-941a-b479d8ce0436} + @@ -675,6 +678,9 @@ sdk\tier1 + + sdk\public\appframework + @@ -1220,9 +1226,6 @@ sdk\common - - sdk\appframework - sdk\appframework @@ -1985,6 +1988,12 @@ sdk\tier1 + + sdk\public\appframework + + + sdk\public\appframework + diff --git a/r5dev/vproj/dedicated.vcxproj b/r5dev/vproj/dedicated.vcxproj index 2670e69b..9e3a170e 100644 --- a/r5dev/vproj/dedicated.vcxproj +++ b/r5dev/vproj/dedicated.vcxproj @@ -125,7 +125,6 @@ - @@ -237,6 +236,8 @@ + + @@ -609,6 +610,7 @@ NotUsing NotUsing + diff --git a/r5dev/vproj/dedicated.vcxproj.filters b/r5dev/vproj/dedicated.vcxproj.filters index 35bc8ef8..57421e21 100644 --- a/r5dev/vproj/dedicated.vcxproj.filters +++ b/r5dev/vproj/dedicated.vcxproj.filters @@ -196,6 +196,9 @@ {3760be6a-7ccb-4ad7-bba8-608dcc60a6b5} + + {55c87120-310f-4eb5-81b9-3d8912b1dfb4} + @@ -672,9 +675,6 @@ sdk\common - - sdk\appframework - sdk\appframework @@ -1386,6 +1386,12 @@ sdk\tier1 + + sdk\public\appframework + + + sdk\public\appframework + @@ -1769,6 +1775,9 @@ sdk\tier1 + + sdk\public\appframework + diff --git a/r5dev/vproj/gamesdk.vcxproj b/r5dev/vproj/gamesdk.vcxproj index 9521b544..1a0f8965 100644 --- a/r5dev/vproj/gamesdk.vcxproj +++ b/r5dev/vproj/gamesdk.vcxproj @@ -122,6 +122,7 @@ NotUsing NotUsing + @@ -189,7 +190,6 @@ - @@ -336,6 +336,8 @@ + + diff --git a/r5dev/vproj/gamesdk.vcxproj.filters b/r5dev/vproj/gamesdk.vcxproj.filters index 99aa7734..993ca819 100644 --- a/r5dev/vproj/gamesdk.vcxproj.filters +++ b/r5dev/vproj/gamesdk.vcxproj.filters @@ -250,6 +250,9 @@ {027d27a1-089a-4ea1-b764-1b436c6d20a2} + + {0c992b91-3491-4337-a630-c789e2654bc2} + @@ -741,6 +744,9 @@ sdk\engine\server + + sdk\public\appframework + @@ -1292,9 +1298,6 @@ sdk\common - - sdk\appframework - sdk\appframework @@ -2156,6 +2159,12 @@ sdk\engine\server + + sdk\public\appframework + + + sdk\public\appframework +