Fix crash caused by CAppSystemGroup changes

* Moved 'm_pFileSystem' to 'CSourceAppSystemGroup' (actually belongs there, CAppSystemGroup has to be 0xA8 in size in order for 'm_bDedicated' to line up in 'CModAppSystemGroup').
* Prefixed all static functions with 'Static' to avoid name collisions.
This commit is contained in:
Kawe Mazidjatari 2023-04-01 01:27:04 +02:00
parent 122cd89aa9
commit e3429705eb
4 changed files with 24 additions and 21 deletions

View File

@ -36,7 +36,7 @@
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
bool CSourceAppSystemGroup::PreInit(CSourceAppSystemGroup* pSourceAppSystemGroup)
bool CSourceAppSystemGroup::StaticPreInit(CSourceAppSystemGroup* pSourceAppSystemGroup)
{
if (pSourceAppSystemGroup->GetCurrentStage() == CSourceAppSystemGroup::CREATION)
{
@ -53,7 +53,7 @@ bool CSourceAppSystemGroup::PreInit(CSourceAppSystemGroup* pSourceAppSystemGroup
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
bool CSourceAppSystemGroup::Create(CSourceAppSystemGroup* pSourceAppSystemGroup)
bool CSourceAppSystemGroup::StaticCreate(CSourceAppSystemGroup* pSourceAppSystemGroup)
{
return CSourceAppSystemGroup__Create(pSourceAppSystemGroup);
}
@ -61,7 +61,7 @@ bool CSourceAppSystemGroup::Create(CSourceAppSystemGroup* pSourceAppSystemGroup)
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
int CModAppSystemGroup::Main(CModAppSystemGroup* pModAppSystemGroup)
int CModAppSystemGroup::StaticMain(CModAppSystemGroup* pModAppSystemGroup)
{
std::thread fixed(&CEngineSDK::FixedFrame, g_EngineSDK);
fixed.detach();
@ -90,7 +90,7 @@ int CModAppSystemGroup::Main(CModAppSystemGroup* pModAppSystemGroup)
//-----------------------------------------------------------------------------
// Purpose: Instantiate all main libraries
//-----------------------------------------------------------------------------
bool CModAppSystemGroup::Create(CModAppSystemGroup* pModAppSystemGroup)
bool CModAppSystemGroup::StaticCreate(CModAppSystemGroup* pModAppSystemGroup)
{
#ifdef DEDICATED
pModAppSystemGroup->SetServerOnly();

View File

@ -8,8 +8,11 @@
class CSourceAppSystemGroup : public CAppSystemGroup
{
public:
static bool PreInit(CSourceAppSystemGroup* pSourceAppSystemGroup);
static bool Create(CSourceAppSystemGroup* pSourceAppSystemGroup);
static bool StaticPreInit(CSourceAppSystemGroup* pSourceAppSystemGroup);
static bool StaticCreate(CSourceAppSystemGroup* pSourceAppSystemGroup);
private:
CFileSystem_Stdio* m_pFileSystem;
};
//-------------------------------------------------------------------------
@ -18,8 +21,8 @@ public:
class CModAppSystemGroup : public CAppSystemGroup
{
public:
static int Main(CModAppSystemGroup* pModAppSystemGroup);
static bool Create(CModAppSystemGroup* pModAppSystemGroup);
static int StaticMain(CModAppSystemGroup* pModAppSystemGroup);
static bool StaticCreate(CModAppSystemGroup* pModAppSystemGroup);
static void InitPluginSystem(CModAppSystemGroup* pModAppSystemGroup);
bool IsServerOnly(void) const
@ -88,19 +91,19 @@ class VApplication : public IDetour
virtual void GetCon(void) const { }
virtual void Attach(void) const
{
DetourAttach((LPVOID*)&CSourceAppSystemGroup__PreInit, &CSourceAppSystemGroup::PreInit);
DetourAttach((LPVOID*)&CSourceAppSystemGroup__Create, &CSourceAppSystemGroup::Create);
DetourAttach((LPVOID*)&CSourceAppSystemGroup__PreInit, &CSourceAppSystemGroup::StaticPreInit);
DetourAttach((LPVOID*)&CSourceAppSystemGroup__Create, &CSourceAppSystemGroup::StaticCreate);
DetourAttach((LPVOID*)&CModAppSystemGroup_Main, &CModAppSystemGroup::Main);
DetourAttach((LPVOID*)&CModAppSystemGroup_Create, &CModAppSystemGroup::Create);
DetourAttach((LPVOID*)&CModAppSystemGroup_Main, &CModAppSystemGroup::StaticMain);
DetourAttach((LPVOID*)&CModAppSystemGroup_Create, &CModAppSystemGroup::StaticCreate);
}
virtual void Detach(void) const
{
DetourDetach((LPVOID*)&CSourceAppSystemGroup__PreInit, &CSourceAppSystemGroup::PreInit);
DetourDetach((LPVOID*)&CSourceAppSystemGroup__Create, &CSourceAppSystemGroup::Create);
DetourDetach((LPVOID*)&CSourceAppSystemGroup__PreInit, &CSourceAppSystemGroup::StaticPreInit);
DetourDetach((LPVOID*)&CSourceAppSystemGroup__Create, &CSourceAppSystemGroup::StaticCreate);
DetourDetach((LPVOID*)&CModAppSystemGroup_Main, &CModAppSystemGroup::Main);
DetourDetach((LPVOID*)&CModAppSystemGroup_Create, &CModAppSystemGroup::Create);
DetourDetach((LPVOID*)&CModAppSystemGroup_Main, &CModAppSystemGroup::StaticMain);
DetourDetach((LPVOID*)&CModAppSystemGroup_Create, &CModAppSystemGroup::StaticCreate);
}
};
///////////////////////////////////////////////////////////////////////////////

View File

@ -12,7 +12,7 @@
//-----------------------------------------------------------------------------
// Purpose: Initialize plugin system
//-----------------------------------------------------------------------------
void CAppSystemGroup::S_Destroy(CAppSystemGroup* pModAppSystemGroup)
void CAppSystemGroup::StaticDestroy(CAppSystemGroup* pModAppSystemGroup)
{
CAppSystemGroup_Destroy(pModAppSystemGroup);
}
@ -27,9 +27,9 @@ CAppSystemGroup::AppSystemGroupStage_t CAppSystemGroup::GetCurrentStage() const
void VAppSystemGroup::Attach(void) const
{
DetourAttach(&CAppSystemGroup_Destroy, &CAppSystemGroup::S_Destroy);
DetourAttach(&CAppSystemGroup_Destroy, &CAppSystemGroup::StaticDestroy);
}
void VAppSystemGroup::Detach(void) const
{
DetourDetach(&CAppSystemGroup_Destroy, &CAppSystemGroup::S_Destroy);
DetourDetach(&CAppSystemGroup_Destroy, &CAppSystemGroup::StaticDestroy);
}

View File

@ -71,7 +71,7 @@ public:
};
// Detour statics.
static void S_Destroy(CAppSystemGroup* pAppSystemGroup);
static void StaticDestroy(CAppSystemGroup* pAppSystemGroup);
// Returns the stage at which the app system group ran into an error
AppSystemGroupStage_t GetCurrentStage() const;
@ -90,8 +90,8 @@ protected:
CUtlVector<CreateInterfaceFn> m_NonAppSystemFactories;
char m_Pad[56]; // <-- unknown
AppSystemGroupStage_t m_nCurrentStage;
CFileSystem_Stdio* m_pFileSystem;
};
static_assert(sizeof(CAppSystemGroup) == 0xA8);
inline CMemory p_CAppSystemGroup_Destroy;
inline auto CAppSystemGroup_Destroy = p_CAppSystemGroup_Destroy.RCast<void(*)(CAppSystemGroup* pAppSystemGroup)>();