Committed new register_native system

This commit is contained in:
David Anderson
2005-07-31 20:11:58 +00:00
parent 34acc54cc9
commit abfca025d5
15 changed files with 745 additions and 19 deletions

View File

@ -34,6 +34,9 @@
#include "CForward.h"
#include "CFile.h"
#include "amx.h"
#include "natives.h"
extern const char *no_function;
CPluginMngr::CPlugin* CPluginMngr::loadPlugin(const char* path, const char* name, char* error, int debug) {
CPlugin** a = &head;
@ -49,6 +52,25 @@ void CPluginMngr::unloadPlugin( CPlugin** a ) {
--pCounter;
}
void CPluginMngr::Finalize()
{
if (m_Finalized)
return;
pNatives = BuildNativeTable();
CPlugin *a = head;
while (a)
{
if (a->getStatusCode() == ps_running)
{
amx_Register(a->getAMX(), pNatives, -1);
a->Finalize();
}
a=a->next;
}
m_Finalized = true;
}
int CPluginMngr::loadPluginsFromFile( const char* filename )
{
char file[256];
@ -102,6 +124,12 @@ void CPluginMngr::clear() {
CPlugin**a = &head;
while ( *a )
unloadPlugin(a);
m_Finalized = false;
if (pNatives)
{
delete [] pNatives;
pNatives = NULL;
}
}
CPluginMngr::CPlugin* CPluginMngr::findPluginFast(AMX *amx)
@ -191,6 +219,31 @@ CPluginMngr::CPlugin::~CPlugin( )
unload_amxscript( &amx, &code );
}
void CPluginMngr::CPlugin::Finalize()
{
char buffer[128];
int old_status = status;
if (CheckModules(&amx, buffer))
{
if ( amx_Register(&amx, core_Natives, -1) != AMX_ERR_NONE )
{
status = ps_bad_load;
sprintf(buffer, "Plugin uses an unknown function (name \"%s\") - check your modules.ini.", no_function);
errorMsg.assign(buffer);
amx.error = AMX_ERR_NOTFOUND;
}
} else {
status = ps_bad_load;
errorMsg.assign(buffer);
amx.error = AMX_ERR_NOTFOUND;
}
if (old_status != status)
{
AMXXLOG_Log("[AMXX] Plugin \"%s\" failed to load: %s", name.c_str(), errorMsg.c_str());
}
}
void CPluginMngr::CPlugin::pauseFunction( int id ) {
if (isValid()){
paused_fun |= (1<<id);