mirror of
https://github.com/alliedmodders/amxmodx.git
synced 2024-12-25 06:15:37 +03:00
removed old fakemeta #defines
added better mm version handling
This commit is contained in:
parent
82653094fb
commit
82cb94ab56
@ -308,10 +308,9 @@ extern int FF_PluginEnd;
|
||||
extern int FF_InconsistentFile;
|
||||
extern int FF_ClientAuthorized;
|
||||
extern bool g_coloredmenus;
|
||||
extern int g_mm_vers;
|
||||
|
||||
#ifdef FAKEMETA
|
||||
extern CFakeMeta g_FakeMeta;
|
||||
#endif
|
||||
#define MM_CVAR2_VERS 13
|
||||
|
||||
struct func_s
|
||||
{
|
||||
|
2876
amxmodx/fakemeta.cpp
2876
amxmodx/fakemeta.cpp
File diff suppressed because it is too large
Load Diff
@ -31,203 +31,7 @@
|
||||
#ifndef __FAKEMETA_H__
|
||||
#define __FAKEMETA_H__
|
||||
|
||||
#ifndef FAKEMETA
|
||||
int UnloadMetamodPlugin(void *handle);
|
||||
int LoadMetamodPlugin(const char *path, void **handle, PLUG_LOADTIME now);
|
||||
#else
|
||||
// Fake metamod api for modules
|
||||
|
||||
#include "CList.h"
|
||||
|
||||
// from mplugin.h (metamod)
|
||||
// Flags to indicate current "load" state of plugin.
|
||||
// NOTE: order is important, as greater/less comparisons are made.
|
||||
typedef enum
|
||||
{
|
||||
PL_EMPTY = 0, // empty slot
|
||||
PL_VALID, // has valid info in it
|
||||
PL_BADFILE, // nonexistent file (open failed),
|
||||
// or not a valid plugin file (query failed)
|
||||
PL_OPENED, // dlopened and queried
|
||||
PL_FAILED, // opened, but failed to attach or unattach
|
||||
PL_RUNNING, // attached and running
|
||||
PL_PAUSED, // attached but paused
|
||||
} PLUG_STATUS;
|
||||
|
||||
// from h_export.h (metamod)
|
||||
// Our GiveFnptrsToDll, called by engine.
|
||||
typedef void (WINAPI *GIVE_ENGINE_FUNCTIONS_FN) (enginefuncs_t *pengfuncsFromEngine, globalvars_t *pGlobals);
|
||||
|
||||
// *** CFakeMeta
|
||||
|
||||
class CFakeMeta
|
||||
{
|
||||
private:
|
||||
// Core tables
|
||||
/* DLL_FUNCTIONS m_CoreDllFuncTable;
|
||||
enginefuncs_t m_CoreEngineFuncTable;
|
||||
NEW_DLL_FUNCTIONS m_CoreNewDllFuncTable;
|
||||
|
||||
DLL_FUNCTIONS m_CoreDllFuncTable_Post;
|
||||
enginefuncs_t m_CoreEngineFuncTable_Post;
|
||||
NEW_DLL_FUNCTIONS m_CoreNewDllFuncTable_Post; */
|
||||
|
||||
bool AddCorePlugin(); // Adds the core plugin if needed
|
||||
public:
|
||||
class CFakeMetaPlugin
|
||||
{
|
||||
private:
|
||||
// plugin info
|
||||
String m_Path;
|
||||
PLUG_STATUS m_Status;
|
||||
plugin_info_t *m_Info;
|
||||
// Function tables
|
||||
META_FUNCTIONS m_MetaFuncTable;
|
||||
|
||||
DLL_FUNCTIONS m_DllFuncTable;
|
||||
enginefuncs_t m_EngineFuncTable;
|
||||
NEW_DLL_FUNCTIONS m_NewDllFuncTable;
|
||||
|
||||
DLL_FUNCTIONS m_DllFuncTable_Post;
|
||||
enginefuncs_t m_EngineFuncTable_Post;
|
||||
NEW_DLL_FUNCTIONS m_NewDllFuncTable_Post;
|
||||
|
||||
// OS dep handle
|
||||
DLHANDLE m_Handle;
|
||||
public:
|
||||
inline PLUG_STATUS GetStatus() const
|
||||
{ return m_Status; }
|
||||
inline void SetStatus(PLUG_STATUS newStatus)
|
||||
{ m_Status = newStatus; }
|
||||
|
||||
inline plugin_info_t * GetInfo()
|
||||
{ return m_Info; }
|
||||
inline const plugin_info_t * GetInfo() const
|
||||
{ return m_Info; }
|
||||
inline void SetInfo(plugin_info_t *newInfo)
|
||||
{ m_Info = newInfo; }
|
||||
|
||||
inline const char * GetPath()
|
||||
{ return m_Path.c_str(); }
|
||||
|
||||
inline const META_FUNCTIONS &GetMetaFunctions() const
|
||||
{ return m_MetaFuncTable; }
|
||||
|
||||
// Get
|
||||
inline DLL_FUNCTIONS &GetDllFuncTable()
|
||||
{ return m_DllFuncTable; }
|
||||
inline enginefuncs_t &GetEngineFuncTable()
|
||||
{ return m_EngineFuncTable; }
|
||||
inline NEW_DLL_FUNCTIONS &GetNewDllFuncTable()
|
||||
{ return m_NewDllFuncTable; }
|
||||
|
||||
// Get const
|
||||
inline const DLL_FUNCTIONS &GetDllFuncTable() const
|
||||
{ return m_DllFuncTable; }
|
||||
inline const enginefuncs_t &GetEngineFuncTable() const
|
||||
{ return m_EngineFuncTable; }
|
||||
inline const NEW_DLL_FUNCTIONS &GetNewDllFuncTable() const
|
||||
{ return m_NewDllFuncTable; }
|
||||
|
||||
// Get post
|
||||
inline DLL_FUNCTIONS &GetDllFuncTable_Post()
|
||||
{ return m_DllFuncTable_Post; }
|
||||
inline enginefuncs_t &GetEngineFuncTable_Post()
|
||||
{ return m_EngineFuncTable_Post; }
|
||||
inline NEW_DLL_FUNCTIONS &GetNewDllFuncTable_Post()
|
||||
{ return m_NewDllFuncTable_Post; }
|
||||
|
||||
// Get post const
|
||||
inline const DLL_FUNCTIONS &GetDllFuncTable_Post() const
|
||||
{ return m_DllFuncTable_Post; }
|
||||
inline const enginefuncs_t &GetEngineFuncTable_Post() const
|
||||
{ return m_EngineFuncTable_Post; }
|
||||
inline const NEW_DLL_FUNCTIONS &GetNewDllFuncTable_Post() const
|
||||
{ return m_NewDllFuncTable_Post; }
|
||||
|
||||
int Query(mutil_funcs_t *pMetaUtilFuncs); // Also calls GiveFnPtrsToDll
|
||||
int Attach(PLUG_LOADTIME now, meta_globals_t *pMGlobals, gamedll_funcs_t *pGameDllFuncs);
|
||||
int Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason);
|
||||
|
||||
int GetEntityAPI2(int interfaceVersion);
|
||||
int GetEntityAPI2_Post(int interfaceVersion);
|
||||
int GetEngineFunctions(int interfaceVersion);
|
||||
int GetEngineFunctions_Post(int interfaceVersion);
|
||||
int GetNewDLLFunctions(int interfaceVersion);
|
||||
int GetNewDLLFunctions_Post(int interfaceVersion);
|
||||
|
||||
CFakeMetaPlugin(const char *path);
|
||||
~CFakeMetaPlugin();
|
||||
}; // CFakeMetaPlugin
|
||||
|
||||
CFakeMeta();
|
||||
~CFakeMeta();
|
||||
|
||||
bool AddPlugin(const char *path /*path relative to moddir*/);
|
||||
void ReleasePlugins();
|
||||
|
||||
// This is public because i don't want to declare all the functions as friends :)
|
||||
// :NOTE: The core is now a special, first plugin!
|
||||
CList<CFakeMetaPlugin> m_Plugins;
|
||||
|
||||
// ****** Meta functions ******
|
||||
// Query all added plugins
|
||||
void Meta_Query(mutil_funcs_t *pMetaUtilFuncs);
|
||||
// Attach all added plugins
|
||||
void Meta_Attach(PLUG_LOADTIME now, meta_globals_t *pMGlobals, gamedll_funcs_t *pGamedllFuncs);
|
||||
// Detach all added plugins
|
||||
void Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason);
|
||||
// :NOTE: Meta_Init currently not supported
|
||||
int GetEntityAPI2(DLL_FUNCTIONS *pFunctionTable /*from metamod*/, int *interfaceVersion /*from metamod*/,
|
||||
DLL_FUNCTIONS *pAMXXFunctionTable /*Functions amxx needs*/);
|
||||
int GetEntityAPI2_Post(DLL_FUNCTIONS *pFunctionTable /*from metamod*/, int *interfaceVersion /*from metamod*/,
|
||||
DLL_FUNCTIONS *pAMXXFunctionTable /*Functions amxx needs*/);
|
||||
int GetEngineFunctions(enginefuncs_t *pengfuncsFromEngine, int *interfaceVersion,
|
||||
enginefuncs_t *pAMXXFunctionTable /*Fucntions amxx needs*/);
|
||||
int GetEngineFunctions_Post(enginefuncs_t *pengfuncsFromEngine, int *interfaceVersion,
|
||||
enginefuncs_t *pAMXXFunctionTable /*Fucntions amxx needs*/);
|
||||
int GetNewDLLFunctions(NEW_DLL_FUNCTIONS *pNewFunctionTable, int *interfaceVersion,
|
||||
NEW_DLL_FUNCTIONS *pAMXXFunctionTable);
|
||||
int GetNewDLLFunctions_Post(NEW_DLL_FUNCTIONS *pNewFunctionTable, int *interfaceVersion,
|
||||
NEW_DLL_FUNCTIONS *pAMXXFunctionTable);
|
||||
|
||||
// Get
|
||||
/*inline DLL_FUNCTIONS &GetDllFuncTable()
|
||||
{ return m_CoreDllFuncTable; }
|
||||
inline enginefuncs_t &GetEngineFuncTable()
|
||||
{ return m_CoreEngineFuncTable; }
|
||||
inline NEW_DLL_FUNCTIONS &GetNewDllFuncTable()
|
||||
{ return m_CoreNewDllFuncTable; }
|
||||
|
||||
// Get const
|
||||
inline const DLL_FUNCTIONS &GetDllFuncTable() const
|
||||
{ return m_CoreDllFuncTable; }
|
||||
inline const enginefuncs_t &GetEngineFuncTable() const
|
||||
{ return m_CoreEngineFuncTable; }
|
||||
inline const NEW_DLL_FUNCTIONS &GetNewDllFuncTable() const
|
||||
{ return m_CoreNewDllFuncTable; }
|
||||
|
||||
// Get post
|
||||
inline DLL_FUNCTIONS &GetDllFuncTable_Post()
|
||||
{ return m_CoreDllFuncTable_Post; }
|
||||
inline enginefuncs_t &GetEngineFuncTable_Post()
|
||||
{ return m_CoreEngineFuncTable_Post; }
|
||||
inline NEW_DLL_FUNCTIONS &GetNewDllFuncTable_Post()
|
||||
{ return m_CoreNewDllFuncTable_Post; }
|
||||
|
||||
// Get post const
|
||||
inline const DLL_FUNCTIONS &GetDllFuncTable_Post() const
|
||||
{ return m_CoreDllFuncTable_Post; }
|
||||
inline const enginefuncs_t &GetEngineFuncTable_Post() const
|
||||
{ return m_CoreEngineFuncTable_Post; }
|
||||
inline const NEW_DLL_FUNCTIONS &GetNewDllFuncTable_Post() const
|
||||
{ return m_CoreNewDllFuncTable_Post; } */
|
||||
}; // CFakeMeta
|
||||
|
||||
// Fake Metamod
|
||||
// defined in meta_api.cpp
|
||||
extern CFakeMeta g_FakeMeta;
|
||||
|
||||
#endif //FAKEMETA
|
||||
int UnloadMetamodPlugin(void *handle);
|
||||
int LoadMetamodPlugin(const char *path, void **handle, PLUG_LOADTIME now);
|
||||
|
||||
#endif // #ifndef __FAKEMETA_H__
|
||||
|
@ -40,9 +40,11 @@
|
||||
#include "newmenus.h"
|
||||
#include "natives.h"
|
||||
|
||||
#define MIN_COMPAT_MM_VERS "5:11"
|
||||
|
||||
plugin_info_t Plugin_info =
|
||||
{
|
||||
META_INTERFACE_VERSION, // ifvers
|
||||
MIN_COMPAT_MM_VERS, // ifvers
|
||||
"AMX Mod X", // name
|
||||
AMX_VERSION, // version
|
||||
__DATE__, // date
|
||||
@ -107,6 +109,7 @@ bool g_NeedsP = false;
|
||||
bool g_coloredmenus;
|
||||
bool g_activated = false;
|
||||
bool g_NewDLL_Available = false;
|
||||
int g_mm_vers = 0;
|
||||
|
||||
#ifdef MEMORY_TEST
|
||||
float g_next_memreport_time;
|
||||
@ -147,11 +150,6 @@ int FF_InconsistentFile = -1;
|
||||
int FF_ClientAuthorized = -1;
|
||||
int FF_ChangeLevel = -1;
|
||||
|
||||
// fake metamod api
|
||||
#ifdef FAKEMETA
|
||||
CFakeMeta g_FakeMeta;
|
||||
#endif
|
||||
|
||||
// Precache stuff from force consistency calls
|
||||
// or check for pointed files won't be done
|
||||
int C_PrecacheModel(char *s)
|
||||
@ -1151,16 +1149,20 @@ C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_
|
||||
{
|
||||
gpMetaUtilFuncs = pMetaUtilFuncs;
|
||||
*pPlugInfo = &Plugin_info;
|
||||
|
||||
|
||||
int mmajor = 0, mminor = 0, pmajor = 0, pminor = 0;
|
||||
|
||||
LOG_MESSAGE(PLID, "WARNING: meta-interface version mismatch; requested=%s ours=%s", Plugin_info.logtag, ifvers);
|
||||
|
||||
sscanf(ifvers, "%d:%d", &mmajor, &mminor);
|
||||
sscanf(META_INTERFACE_VERSION, "%d:%d", &pmajor, &pminor);
|
||||
|
||||
g_mm_vers = mminor;
|
||||
|
||||
if (strcmp(ifvers, Plugin_info.ifvers))
|
||||
{
|
||||
int mmajor = 0, mminor = 0, pmajor = 0, pminor = 0;
|
||||
|
||||
LOG_MESSAGE(PLID, "WARNING: meta-interface version mismatch; requested=%s ours=%s", Plugin_info.logtag, ifvers);
|
||||
|
||||
sscanf(ifvers, "%d:%d", &mmajor, &mminor);
|
||||
sscanf(META_INTERFACE_VERSION, "%d:%d", &pmajor, &pminor);
|
||||
|
||||
if (pmajor > mmajor)
|
||||
{
|
||||
LOG_ERROR(PLID, "metamod version is too old for this plugin; update metamod");
|
||||
@ -1173,42 +1175,19 @@ C_DLLEXPORT int Meta_Query(char *ifvers, plugin_info_t **pPlugInfo, mutil_funcs_
|
||||
}
|
||||
else if (pmajor == mmajor)
|
||||
{
|
||||
#ifdef FAKEMETA
|
||||
if (mminor == 10)
|
||||
if (mminor < 11)
|
||||
{
|
||||
LOG_MESSAGE(PLID, "WARNING: metamod version is older than expected; consider finding a newer version");
|
||||
g_IsNewMM = false;
|
||||
|
||||
//hack!
|
||||
Plugin_info.ifvers = "5:10";
|
||||
#else
|
||||
if (mminor < 11)
|
||||
{
|
||||
g_NeedsP = true;
|
||||
#endif
|
||||
}
|
||||
else if (mminor >= 11)
|
||||
{
|
||||
g_IsNewMM = true;
|
||||
}
|
||||
else if (pminor > mminor)
|
||||
{
|
||||
LOG_ERROR(PLID, "metamod version is incompatible with this plugin; please find a newer version of this plugin");
|
||||
return FALSE;
|
||||
}
|
||||
else if (pminor < mminor)
|
||||
{
|
||||
LOG_MESSAGE(PLID, "WARNING: metamod version is newer than expected; consider finding a newer version of this plugin");
|
||||
|
||||
if (mminor > 11)
|
||||
g_IsNewMM = true;
|
||||
}
|
||||
g_NeedsP = true;
|
||||
} else if (pminor > mminor) {
|
||||
LOG_ERROR(PLID, "metamod version is incompatible with this plugin; please find a newer version of this plugin");
|
||||
return FALSE;
|
||||
}
|
||||
} else {
|
||||
LOG_ERROR(PLID, "unexpected version comparison; metavers=%s, mmajor=%d, mminor=%d; plugvers=%s, pmajor=%d, pminor=%d", ifvers, mmajor, mminor, META_INTERFACE_VERSION, pmajor, pminor);
|
||||
}
|
||||
} else {
|
||||
g_IsNewMM = true;
|
||||
}
|
||||
if (!g_NeedsP)
|
||||
g_IsNewMM = true;
|
||||
|
||||
// We can set this to null here because Meta_PExtGiveFnptrs is called after this
|
||||
gpMetaPExtFuncs = NULL;
|
||||
@ -1253,10 +1232,6 @@ C_DLLEXPORT int Meta_Attach(PLUG_LOADTIME now, META_FUNCTIONS *pFunctionTable, m
|
||||
gMetaFunctionTable.pfnGetEngineFunctions_Post = GetEngineFunctions_Post;
|
||||
gMetaFunctionTable.pfnGetNewDLLFunctions = GetNewDLLFunctions;
|
||||
|
||||
#ifdef FAKEMETA
|
||||
gMetaFunctionTable.pfnGetNewDLLFunctions_Post = GetNewDLLFunctions_Post;
|
||||
#endif
|
||||
|
||||
memcpy(pFunctionTable, &gMetaFunctionTable, sizeof(META_FUNCTIONS));
|
||||
gpGamedllFuncs=pGamedllFuncs;
|
||||
|
||||
@ -1346,12 +1321,6 @@ C_DLLEXPORT int Meta_Detach(PLUG_LOADTIME now, PL_UNLOAD_REASON reason)
|
||||
|
||||
detachModules();
|
||||
|
||||
// ###### Now detach metamod modules
|
||||
#ifdef FAKEMETA
|
||||
g_FakeMeta.Meta_Detach(now, reason);
|
||||
g_FakeMeta.ReleasePlugins();
|
||||
#endif
|
||||
|
||||
g_log.CloseFile();
|
||||
|
||||
Module_UncacheFunctions();
|
||||
@ -1446,12 +1415,8 @@ C_DLLEXPORT int GetEntityAPI2(DLL_FUNCTIONS *pFunctionTable, int *interfaceVersi
|
||||
gFunctionTable.pfnInconsistentFile = C_InconsistentFile;
|
||||
gFunctionTable.pfnServerActivate = C_ServerActivate;
|
||||
|
||||
#ifdef FAKEMETA
|
||||
return g_FakeMeta.GetEntityAPI2(pFunctionTable, interfaceVersion, &gFunctionTable);
|
||||
#else
|
||||
memcpy(pFunctionTable, &gFunctionTable, sizeof(DLL_FUNCTIONS));
|
||||
return 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
DLL_FUNCTIONS gFunctionTable_Post;
|
||||
@ -1464,12 +1429,8 @@ C_DLLEXPORT int GetEntityAPI2_Post(DLL_FUNCTIONS *pFunctionTable, int *interface
|
||||
gFunctionTable_Post.pfnStartFrame = C_StartFrame_Post;
|
||||
gFunctionTable_Post.pfnServerDeactivate = C_ServerDeactivate_Post;
|
||||
|
||||
#ifdef FAKEMETA
|
||||
return g_FakeMeta.GetEntityAPI2_Post(pFunctionTable, interfaceVersion, &gFunctionTable_Post);
|
||||
#else
|
||||
memcpy(pFunctionTable, &gFunctionTable_Post, sizeof(DLL_FUNCTIONS));
|
||||
return 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
enginefuncs_t meta_engfuncs;
|
||||
@ -1491,12 +1452,8 @@ C_DLLEXPORT int GetEngineFunctions(enginefuncs_t *pengfuncsFromEngine, int *inte
|
||||
meta_engfuncs.pfnPrecacheSound = C_PrecacheSound;
|
||||
meta_engfuncs.pfnChangeLevel = C_ChangeLevel;
|
||||
|
||||
#ifdef FAKEMETA
|
||||
return g_FakeMeta.GetEngineFunctions(pengfuncsFromEngine, interfaceVersion, &meta_engfuncs);
|
||||
#else
|
||||
memcpy(pengfuncsFromEngine, &meta_engfuncs, sizeof(enginefuncs_t));
|
||||
return 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
enginefuncs_t meta_engfuncs_post;
|
||||
@ -1516,12 +1473,8 @@ C_DLLEXPORT int GetEngineFunctions_Post(enginefuncs_t *pengfuncsFromEngine, int
|
||||
meta_engfuncs_post.pfnAlertMessage = C_AlertMessage_Post;
|
||||
meta_engfuncs_post.pfnRegUserMsg = C_RegUserMsg_Post;
|
||||
|
||||
#ifdef FAKEMETA
|
||||
return g_FakeMeta.GetEngineFunctions_Post(pengfuncsFromEngine, interfaceVersion, &meta_engfuncs_post);
|
||||
#else
|
||||
memcpy(pengfuncsFromEngine, &meta_engfuncs_post, sizeof(enginefuncs_t));
|
||||
return 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
NEW_DLL_FUNCTIONS gNewDLLFunctionTable;
|
||||
@ -1535,20 +1488,7 @@ C_DLLEXPORT int GetNewDLLFunctions(NEW_DLL_FUNCTIONS *pNewFunctionTable, int *in
|
||||
if (g_engfuncs.pfnQueryClientCvarValue)
|
||||
gNewDLLFunctionTable.pfnCvarValue = C_CvarValue;
|
||||
|
||||
#ifdef FAKEMETA
|
||||
return g_FakeMeta.GetNewDLLFunctions(pNewFunctionTable, interfaceVersion, &gNewDLLFunctionTable);
|
||||
#else
|
||||
memcpy(pNewFunctionTable, &gNewDLLFunctionTable, sizeof(NEW_DLL_FUNCTIONS));
|
||||
return 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef FAKEMETA
|
||||
NEW_DLL_FUNCTIONS gNewDLLFunctionTable_Post;
|
||||
C_DLLEXPORT int GetNewDLLFunctions_Post(NEW_DLL_FUNCTIONS *pNewFunctionTable, int *interfaceVersion)
|
||||
{
|
||||
return g_FakeMeta.GetNewDLLFunctions_Post(pNewFunctionTable, interfaceVersion, &gNewDLLFunctionTable_Post);
|
||||
memcpy(pNewFunctionTable, &gNewDLLFunctionTable_Post, sizeof(NEW_DLL_FUNCTIONS));
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user