Added the ability to mark plugins as "disabled." This blocks the plugin from loading in other files.

Fixed a bug where the PCALM cache was invalidated on file read, rather than plugin finalization.
This commit is contained in:
David Anderson 2006-08-17 18:25:23 +00:00
parent e015df58c8
commit 5524d5dca1
3 changed files with 59 additions and 4 deletions

View File

@ -99,6 +99,8 @@ int CPluginMngr::loadPluginsFromFile(const char* filename)
String line;
List<String *>::iterator block_iter;
while (!feof(fp))
{
pluginName[0] = '\0';
@ -122,13 +124,32 @@ int CPluginMngr::loadPluginsFromFile(const char* filename)
sscanf(line.c_str(), "%s %s", pluginName, debug);
if (!isalnum(*pluginName))
{
continue;
}
if (isalnum(*debug) && strcmp(debug, "debug") == 0)
if (isalnum(*debug) && !strcmp(debug, "debug"))
{
debugFlag = 1;
}
bool skip = false;
for (block_iter = m_BlockList.begin();
block_iter != m_BlockList.end();
block_iter++)
{
if ((*block_iter)->compare(pluginName) == 0)
{
skip = true;
break;
}
}
if (skip || !strcmp(debug, "disabled"))
{
continue;
}
CPlugin* plugin = loadPlugin(pluginsDir, pluginName, error, debugFlag);
if (plugin->getStatusCode() == ps_bad_load)
@ -142,8 +163,6 @@ int CPluginMngr::loadPluginsFromFile(const char* filename)
fclose(fp);
InvalidateCache();
return pCounter;
}
@ -161,6 +180,14 @@ void CPluginMngr::clear()
delete [] pNatives;
pNatives = NULL;
}
List<String *>::iterator iter = m_BlockList.begin();
while (iter != m_BlockList.end())
{
delete (*iter);
iter = m_BlockList.erase(iter);
}
m_BlockList.clear();
}
CPluginMngr::CPlugin* CPluginMngr::findPlugin(AMX *amx)
@ -616,7 +643,9 @@ void CPluginMngr::CALMFromFile(const char *file)
{
fgets(line, sizeof(line)-1, fp);
if (line[0] == ';' || line[0] == '\n' || line[0] == '\0')
{
continue;
}
/** quick hack */
char *ptr = line;
@ -635,8 +664,28 @@ void CPluginMngr::CALMFromFile(const char *file)
pluginName[0] = '\0';
sscanf(rline.c_str(), "%s", pluginName);
/* HACK: see if there's a 'disabled' coming up
* new block for scopying flexibility
*/
if (1)
{
const char *_ptr = rline.c_str() + strlen(pluginName);
while (*_ptr != '\0' && isspace(*_ptr))
{
_ptr++;
}
if ((*_ptr != '\0') && !strcmp(_ptr, "disabled"))
{
String *pString = new String(pluginName);
m_BlockList.push_back(pString);
continue;
}
}
if (!isalnum(*pluginName))
{
continue;
}
build_pathname_r(filename, sizeof(filename)-1, "%s/%s", get_localinfo("amxx_pluginsdir", "addons/amxmodx/plugins"), pluginName);

View File

@ -165,6 +165,7 @@ public:
void CALMFromFile(const char *file);
private:
List<plcache_entry *> m_plcache;
List<String *> m_BlockList;
};
#endif //PLUGIN_H

View File

@ -268,7 +268,9 @@ const char* get_localinfo(const char* name, const char* def)
const char* b = LOCALINFO((char*)name);
if (b == 0 || *b == 0)
{
SET_LOCALINFO((char*)name, (char*)(b = def));
}
return b;
}
@ -280,7 +282,9 @@ const char* get_localinfo(const char* name, const char* def)
int C_Spawn(edict_t *pent)
{
if (g_initialized)
{
RETURN_META_VALUE(MRES_IGNORED, 0);
}
g_activated = false;
g_initialized = true;
@ -365,7 +369,7 @@ int C_Spawn(edict_t *pent)
if (!g_opt_level)
g_opt_level = 7;
// ###### Load AMX scripts
// ###### Load AMX Mod X plugins
g_plugins.loadPluginsFromFile(get_localinfo("amxx_plugins", "addons/amxmodx/configs/plugins.ini"));
BuildPluginFileList(files);
while (!files.empty())
@ -379,6 +383,7 @@ int C_Spawn(edict_t *pent)
files.pop();
}
g_plugins.Finalize();
g_plugins.InvalidateCache();
// Register forwards
FF_PluginInit = registerForward("plugin_init", ET_IGNORE, FP_DONE);