mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-02-09 19:15:03 +01:00
71 lines
2.7 KiB
C++
71 lines
2.7 KiB
C++
//=============================================================================//
|
|
//
|
|
// Purpose: plugin sdk that makes plugins run!
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
//=============================================================================//
|
|
|
|
#include "core/stdafx.h"
|
|
|
|
#include "ifactory.h"
|
|
#include "pluginsystem/ipluginsystem.h"
|
|
|
|
#include "pluginsdk.h"
|
|
|
|
//---------------------------------------------------------------------------------
|
|
// Purpose: constructor
|
|
// Input : pszSelfModule -
|
|
//---------------------------------------------------------------------------------
|
|
CPluginSDK::CPluginSDK(const char* pszSelfModule) : m_FactoryInstance(nullptr), m_PluginSystem(nullptr)
|
|
{
|
|
m_SelfModule = CModule(pszSelfModule);
|
|
m_GameModule = CModule("r5apex.exe");
|
|
m_SDKModule = CModule("gamesdk.dll"); // THIS NEEDS TO BE CHANGED FOR DEDI/CLIENT SDK SUPPORT. AT BEST DO THIS VIA PluginInstance_OnLoad.
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------
|
|
// Purpose: destructor
|
|
//---------------------------------------------------------------------------------
|
|
CPluginSDK::~CPluginSDK()
|
|
{
|
|
|
|
}
|
|
|
|
//---------------------------------------------------------------------------------
|
|
// Purpose: properly initialize the plugin sdk
|
|
//---------------------------------------------------------------------------------
|
|
bool CPluginSDK::InitSDK()
|
|
{
|
|
auto getFactorySystemFn = m_SDKModule.GetExportedFunction("GetFactorySystem").RCast<void*(*)()>();
|
|
|
|
Assert(getFactorySystemFn, "Could not find GetFactorySystem export from gamesdk.dll");
|
|
if (!getFactorySystemFn)
|
|
return false;
|
|
|
|
m_FactoryInstance = reinterpret_cast<IFactory*>(getFactorySystemFn());
|
|
Assert(getFactorySystemFn, "m_FactoryInstace was nullptr.");
|
|
if (!m_FactoryInstance)
|
|
return false;
|
|
|
|
// Let's make sure the factory version matches, else we unload.
|
|
bool isFactoryVersionOk = strcmp(m_FactoryInstance->GetFactoryFullName("VFactorySystem"), FACTORY_INTERFACE_VERSION) == 0;
|
|
Assert(isFactoryVersionOk, "Version mismatch between IFactory and CFactory.");
|
|
if (!isFactoryVersionOk)
|
|
return false;
|
|
|
|
// Let's make sure the SDK version matches with the PluginSystem, else we unload
|
|
bool isPluginVersionOk = strcmp(m_FactoryInstance->GetFactoryFullName("VPluginSystem"), PLUGINSDK_CLASS_VERSION) == 0;
|
|
Assert(isPluginVersionOk, "Version mismatch between CPluginSDK and CPluginSystem.");
|
|
if (!isPluginVersionOk)
|
|
return false;
|
|
|
|
m_PluginSystem = m_FactoryInstance->GetFactoryPtr(PLUGINSDK_CLASS_VERSION, false).RCast<IPluginSystem*>();
|
|
Assert(m_PluginSystem, "m_PluginSystem was nullptr.");
|
|
if (!m_PluginSystem)
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
|
|
CPluginSDK* g_pPluginSDK = nullptr; |