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:
parent
e015df58c8
commit
5524d5dca1
|
@ -99,6 +99,8 @@ int CPluginMngr::loadPluginsFromFile(const char* filename)
|
||||||
|
|
||||||
String line;
|
String line;
|
||||||
|
|
||||||
|
List<String *>::iterator block_iter;
|
||||||
|
|
||||||
while (!feof(fp))
|
while (!feof(fp))
|
||||||
{
|
{
|
||||||
pluginName[0] = '\0';
|
pluginName[0] = '\0';
|
||||||
|
@ -122,13 +124,32 @@ int CPluginMngr::loadPluginsFromFile(const char* filename)
|
||||||
sscanf(line.c_str(), "%s %s", pluginName, debug);
|
sscanf(line.c_str(), "%s %s", pluginName, debug);
|
||||||
|
|
||||||
if (!isalnum(*pluginName))
|
if (!isalnum(*pluginName))
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (isalnum(*debug) && strcmp(debug, "debug") == 0)
|
if (isalnum(*debug) && !strcmp(debug, "debug"))
|
||||||
{
|
{
|
||||||
debugFlag = 1;
|
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);
|
CPlugin* plugin = loadPlugin(pluginsDir, pluginName, error, debugFlag);
|
||||||
|
|
||||||
if (plugin->getStatusCode() == ps_bad_load)
|
if (plugin->getStatusCode() == ps_bad_load)
|
||||||
|
@ -142,8 +163,6 @@ int CPluginMngr::loadPluginsFromFile(const char* filename)
|
||||||
|
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
|
||||||
InvalidateCache();
|
|
||||||
|
|
||||||
return pCounter;
|
return pCounter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -161,6 +180,14 @@ void CPluginMngr::clear()
|
||||||
delete [] pNatives;
|
delete [] pNatives;
|
||||||
pNatives = NULL;
|
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)
|
CPluginMngr::CPlugin* CPluginMngr::findPlugin(AMX *amx)
|
||||||
|
@ -616,7 +643,9 @@ void CPluginMngr::CALMFromFile(const char *file)
|
||||||
{
|
{
|
||||||
fgets(line, sizeof(line)-1, fp);
|
fgets(line, sizeof(line)-1, fp);
|
||||||
if (line[0] == ';' || line[0] == '\n' || line[0] == '\0')
|
if (line[0] == ';' || line[0] == '\n' || line[0] == '\0')
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
/** quick hack */
|
/** quick hack */
|
||||||
char *ptr = line;
|
char *ptr = line;
|
||||||
|
@ -635,8 +664,28 @@ void CPluginMngr::CALMFromFile(const char *file)
|
||||||
pluginName[0] = '\0';
|
pluginName[0] = '\0';
|
||||||
sscanf(rline.c_str(), "%s", pluginName);
|
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))
|
if (!isalnum(*pluginName))
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
build_pathname_r(filename, sizeof(filename)-1, "%s/%s", get_localinfo("amxx_pluginsdir", "addons/amxmodx/plugins"), pluginName);
|
build_pathname_r(filename, sizeof(filename)-1, "%s/%s", get_localinfo("amxx_pluginsdir", "addons/amxmodx/plugins"), pluginName);
|
||||||
|
|
||||||
|
|
|
@ -165,6 +165,7 @@ public:
|
||||||
void CALMFromFile(const char *file);
|
void CALMFromFile(const char *file);
|
||||||
private:
|
private:
|
||||||
List<plcache_entry *> m_plcache;
|
List<plcache_entry *> m_plcache;
|
||||||
|
List<String *> m_BlockList;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //PLUGIN_H
|
#endif //PLUGIN_H
|
||||||
|
|
|
@ -268,7 +268,9 @@ const char* get_localinfo(const char* name, const char* def)
|
||||||
const char* b = LOCALINFO((char*)name);
|
const char* b = LOCALINFO((char*)name);
|
||||||
|
|
||||||
if (b == 0 || *b == 0)
|
if (b == 0 || *b == 0)
|
||||||
|
{
|
||||||
SET_LOCALINFO((char*)name, (char*)(b = def));
|
SET_LOCALINFO((char*)name, (char*)(b = def));
|
||||||
|
}
|
||||||
|
|
||||||
return b;
|
return b;
|
||||||
}
|
}
|
||||||
|
@ -280,7 +282,9 @@ const char* get_localinfo(const char* name, const char* def)
|
||||||
int C_Spawn(edict_t *pent)
|
int C_Spawn(edict_t *pent)
|
||||||
{
|
{
|
||||||
if (g_initialized)
|
if (g_initialized)
|
||||||
|
{
|
||||||
RETURN_META_VALUE(MRES_IGNORED, 0);
|
RETURN_META_VALUE(MRES_IGNORED, 0);
|
||||||
|
}
|
||||||
|
|
||||||
g_activated = false;
|
g_activated = false;
|
||||||
g_initialized = true;
|
g_initialized = true;
|
||||||
|
@ -365,7 +369,7 @@ int C_Spawn(edict_t *pent)
|
||||||
if (!g_opt_level)
|
if (!g_opt_level)
|
||||||
g_opt_level = 7;
|
g_opt_level = 7;
|
||||||
|
|
||||||
// ###### Load AMX scripts
|
// ###### Load AMX Mod X plugins
|
||||||
g_plugins.loadPluginsFromFile(get_localinfo("amxx_plugins", "addons/amxmodx/configs/plugins.ini"));
|
g_plugins.loadPluginsFromFile(get_localinfo("amxx_plugins", "addons/amxmodx/configs/plugins.ini"));
|
||||||
BuildPluginFileList(files);
|
BuildPluginFileList(files);
|
||||||
while (!files.empty())
|
while (!files.empty())
|
||||||
|
@ -379,6 +383,7 @@ int C_Spawn(edict_t *pent)
|
||||||
files.pop();
|
files.pop();
|
||||||
}
|
}
|
||||||
g_plugins.Finalize();
|
g_plugins.Finalize();
|
||||||
|
g_plugins.InvalidateCache();
|
||||||
|
|
||||||
// Register forwards
|
// Register forwards
|
||||||
FF_PluginInit = registerForward("plugin_init", ET_IGNORE, FP_DONE);
|
FF_PluginInit = registerForward("plugin_init", ET_IGNORE, FP_DONE);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user