From c1fb10cbf09cd2629df08147aaa99d8179717711 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Thu, 20 Oct 2005 14:52:49 +0000 Subject: [PATCH] you can now see which plugin returned the iface --HG-- extra : convert_revision : svn%3Ac2935e3e-5518-0410-8daf-afa5dab7d4e3/trunk%40140 --- sourcemm/CSmmAPI.cpp | 7 ++++++- sourcemm/CSmmAPI.h | 2 +- sourcemm/IPluginManager.h | 2 ++ sourcemm/ISmmAPI.h | 11 +++++++++-- sourcemm/ISmmPlugin.h | 5 ----- 5 files changed, 18 insertions(+), 9 deletions(-) diff --git a/sourcemm/CSmmAPI.cpp b/sourcemm/CSmmAPI.cpp index d67f412..35a3bc1 100644 --- a/sourcemm/CSmmAPI.cpp +++ b/sourcemm/CSmmAPI.cpp @@ -136,8 +136,11 @@ void CSmmAPI::AddListener(ISmmPlugin *plugin, IMetamodListener *pListener) pl->m_Events.push_back(pListener); } -void *CSmmAPI::MetaFactory(const char *iface, int *_ret) +void *CSmmAPI::MetaFactory(const char *iface, int *_ret, PluginId *id) { + if (id) + *id = 0; + if (!iface) return NULL; @@ -170,6 +173,8 @@ void *CSmmAPI::MetaFactory(const char *iface, int *_ret) { if (_ret) *_ret = ret; + if (id) + *id = pl->m_Id; return val; } } diff --git a/sourcemm/CSmmAPI.h b/sourcemm/CSmmAPI.h index 0f838c5..a1a63b2 100644 --- a/sourcemm/CSmmAPI.h +++ b/sourcemm/CSmmAPI.h @@ -49,7 +49,7 @@ namespace SourceMM virtual void GetApiVersions(int &major, int &minor, int &plvers, int &plmin); virtual void GetShVersions(int &shvers, int &shimpl); virtual void AddListener(ISmmPlugin *plugin, IMetamodListener *pListener); - virtual void *MetaFactory(const char *iface, int *ret); + virtual void *MetaFactory(const char *iface, int *ret, PluginId *id); public: bool CacheCmds(); private: diff --git a/sourcemm/IPluginManager.h b/sourcemm/IPluginManager.h index a496594..85a57eb 100644 --- a/sourcemm/IPluginManager.h +++ b/sourcemm/IPluginManager.h @@ -16,6 +16,8 @@ * @file IPluginManager.h */ +typedef int PluginId; + #include "ISmmPlugin.h" /** diff --git a/sourcemm/ISmmAPI.h b/sourcemm/ISmmAPI.h index 4c5fb43..d3b6a8e 100644 --- a/sourcemm/ISmmAPI.h +++ b/sourcemm/ISmmAPI.h @@ -68,8 +68,15 @@ public: //Added in 1.10 (1:0) virtual void GetShVersions(int &shvers, int &shimpl) =0; //Binds an event listener to your plugin virtual void AddListener(ISmmPlugin *plugin, IMetamodListener *pListener) =0; - //Queries the metamod factory - virtual void *MetaFactory(const char *iface, int *ret) =0; + /** + * @brief Queries the metamod factory + * + * @param iface String containing interface name + * @param ret Optional pointer to store return status + * @param id Optional pointer to store id of plugin that overrode interface, 0 if none + * @return Returned pointer + */ + virtual void *MetaFactory(const char *iface, int *ret, PluginId *id) =0; }; diff --git a/sourcemm/ISmmPlugin.h b/sourcemm/ISmmPlugin.h index a8ba6ea..9c871c7 100644 --- a/sourcemm/ISmmPlugin.h +++ b/sourcemm/ISmmPlugin.h @@ -24,7 +24,6 @@ #define PLAPI_NAME "ISmmPlugin" class ISmmAPI; -typedef int PluginId; class ISmmPlugin { @@ -224,10 +223,6 @@ public: g_PLAPI = static_cast(this); \ g_PLID = id; -#define FACTORY_RETURN(mres, value) \ - g_SMAPI->SetLastMetaReturn(mres); \ - return value; - #define META_LOG g_SMAPI->LogMsg #define META_REGCMD(name) g_SMAPI->RegisterConCmdBase(g_PLAPI, name##_command) #define META_REGCVAR(var) g_SMAPI->RegisterConCmdBase(g_PLAPI, var)