mirror of
https://github.com/alliedmodders/metamod-source.git
synced 2025-12-07 02:18:30 +00:00
Committed new API
--HG-- extra : convert_revision : svn%3Ac2935e3e-5518-0410-8daf-afa5dab7d4e3/trunk%40142
This commit is contained in:
parent
1fb61175c1
commit
e24876a8cd
@ -20,6 +20,20 @@
|
||||
|
||||
using namespace SourceMM;
|
||||
|
||||
#define ITER_PLEVENT(evn, plid) \
|
||||
CPluginManager::CPlugin *_Xpl; \
|
||||
SourceHook::List<IMetamodListener *>::iterator event; \
|
||||
IMetamodListener *api; \
|
||||
for (PluginIter iter = g_PluginMngr._begin(); iter != g_PluginMngr._end(); iter++) { \
|
||||
_Xpl = (*iter); \
|
||||
if (_Xpl->m_Id == plid) \
|
||||
continue; \
|
||||
for (event=_Xpl->m_Events.begin(); event!=_Xpl->m_Events.end(); event++) { \
|
||||
api = (*event); \
|
||||
api->evn(plid); \
|
||||
} \
|
||||
}
|
||||
|
||||
CPluginManager g_PluginMngr;
|
||||
|
||||
CPluginManager::CPluginManager()
|
||||
@ -70,6 +84,8 @@ PluginId CPluginManager::Load(const char *file, PluginId source, bool &already,
|
||||
if (!pl)
|
||||
return Pl_BadLoad;
|
||||
|
||||
ITER_PLEVENT(OnPluginLoad, pl->m_Id);
|
||||
|
||||
return pl->m_Id;
|
||||
}
|
||||
|
||||
@ -113,7 +129,14 @@ bool CPluginManager::Pause(PluginId id, char *error, size_t maxlen)
|
||||
return false;
|
||||
}
|
||||
|
||||
return _Pause(pl, error, maxlen);
|
||||
bool ret;
|
||||
|
||||
if ( (ret=_Pause(pl, error, maxlen)) == true )
|
||||
{
|
||||
ITER_PLEVENT(OnPluginPause, pl->m_Id);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool CPluginManager::Unpause(PluginId id, char *error, size_t maxlen)
|
||||
@ -126,7 +149,14 @@ bool CPluginManager::Unpause(PluginId id, char *error, size_t maxlen)
|
||||
return false;
|
||||
}
|
||||
|
||||
return _Unpause(pl, error, maxlen);
|
||||
bool ret;
|
||||
|
||||
if ( (ret=_Unpause(pl, error, maxlen)) == true )
|
||||
{
|
||||
ITER_PLEVENT(OnPluginUnpause, pl->m_Id);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool CPluginManager::Unload(PluginId id, bool force, char *error, size_t maxlen)
|
||||
@ -139,7 +169,14 @@ bool CPluginManager::Unload(PluginId id, bool force, char *error, size_t maxlen)
|
||||
return false;
|
||||
}
|
||||
|
||||
return _Unload(pl, force, error, maxlen);
|
||||
bool ret;
|
||||
PluginId old_id = pl->m_Id;
|
||||
if ( (ret=_Unload(pl, force, error, maxlen)) == true )
|
||||
{
|
||||
ITER_PLEVENT(OnPluginUnload, old_id);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool CPluginManager::Retry(PluginId id, char *error, size_t len)
|
||||
|
||||
@ -160,6 +160,8 @@ public:
|
||||
|
||||
virtual void OnLevelInit(char const *pMapName, char const *pMapEntities, char const *pOldLevel, char const *pLandmarkName, bool loadGame, bool background) { }
|
||||
|
||||
virtual void OnLevelShutdown() { }
|
||||
|
||||
virtual void *OnEngineQuery(const char *iface, int *ret)
|
||||
{
|
||||
if (ret)
|
||||
|
||||
@ -68,6 +68,18 @@ void ClearGamedllList();
|
||||
} \
|
||||
return (orig)(iface, ret);
|
||||
|
||||
#define ITER_EVENT(evn, args) \
|
||||
CPluginManager::CPlugin *pl; \
|
||||
SourceHook::List<IMetamodListener *>::iterator event; \
|
||||
IMetamodListener *api; \
|
||||
for (PluginIter iter = g_PluginMngr._begin(); iter != g_PluginMngr._end(); iter++) { \
|
||||
pl = (*iter); \
|
||||
for (event=pl->m_Events.begin(); event!=pl->m_Events.end(); event++) { \
|
||||
api = (*event); \
|
||||
api->evn##args; \
|
||||
} \
|
||||
}
|
||||
|
||||
///////////////////////////////////
|
||||
// Main code for HL2 Interaction //
|
||||
///////////////////////////////////
|
||||
@ -566,6 +578,10 @@ void LevelShutdown_handler(void)
|
||||
} else {
|
||||
bInFirstLevel = false;
|
||||
}
|
||||
|
||||
ITER_EVENT(OnLevelShutdown, ());
|
||||
|
||||
RETURN_META(MRES_IGNORED);
|
||||
}
|
||||
|
||||
bool LevelInit_handler(char const *pMapName, char const *pMapEntities, char const *pOldLevel, char const *pLandmarkName, bool loadGame, bool background)
|
||||
@ -576,6 +592,8 @@ bool LevelInit_handler(char const *pMapName, char const *pMapEntities, char cons
|
||||
LogMessage("[META] Warning: Console messages will not be redirected to rcon console.");
|
||||
}
|
||||
|
||||
ITER_EVENT(OnLevelInit, (pMapName, pMapEntities, pOldLevel, pLandmarkName, loadGame, background));
|
||||
|
||||
RETURN_META_VALUE(MRES_IGNORED, false);
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user