Remove plugin_settings.cfg and supporting code (bug 5605, r=psychonic).
1.1 --- a/configs/plugin_settings.cfg Thu Feb 14 19:28:12 2013 -0500
1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1.3 @@ -1,36 +0,0 @@
1.4 -/**
1.5 - * Each sub-section of "Plugins" should have a title which specifies a plugin filename.
1.6 - * Filenames have a wildcard of *. Appending .smx is not required.
1.7 - * If the filename has no explicit path, it will be patched to any sub-path in the plugins folder.
1.8 - *
1.9 - * Available properties for plugins are:
1.10 - * "pause" - Whether or not the plugin should load paused - "yes" or "no" (default)
1.11 - * "lifetime" - Lifetime of the plugin. Options:
1.12 - * "mapsync" - Plugins should be reloaded on mapchange if changed (default)
1.13 - * "global" - Plugin will never be unloaded or updated
1.14 - * "blockload" - Plugin will always be blocked from loading. Implicit (automatic) loads
1.15 - * produce no error, but explicit (manual) loads will show an error message.
1.16 - * (Options are one of "yes" or "no")
1.17 - *
1.18 - * You can also have an "Options" section declaring options to pass onto the JIT:
1.19 - * "profile" - Bit flags for profiling level. Add flags together to reach a value.
1.20 - * WARNING: Profiler is _ALPHA_ software! Use it at your own risk for
1.21 - * development cycles only (not production setups).
1.22 - * See the wiki article "SourceMod Profiler" for more information.
1.23 - * 1 - Profile natives
1.24 - * 2 - Profile callbacks
1.25 - * 4 - Profile internal plugin function calls
1.26 - */
1.27 -
1.28 -"Plugins"
1.29 -{
1.30 - "*"
1.31 - {
1.32 - "pause" "no"
1.33 - "lifetime" "mapsync"
1.34 -
1.35 - "Options"
1.36 - {
1.37 - }
1.38 - }
1.39 -}
2.1 --- a/core/AMBuilder Thu Feb 14 19:28:12 2013 -0500
2.2 +++ b/core/AMBuilder Sat Feb 16 15:15:22 2013 -0800
2.3 @@ -78,7 +78,6 @@
2.4 'TimerSys.cpp',
2.5 'CoreConfig.cpp',
2.6 'Logger.cpp',
2.7 - 'PluginInfoDatabase.cpp',
2.8 'smn_halflife.cpp',
2.9 'PluginSys.cpp',
2.10 'smn_console.cpp',
3.1 --- a/core/PluginInfoDatabase.cpp Thu Feb 14 19:28:12 2013 -0500
3.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
3.3 @@ -1,349 +0,0 @@
3.4 -/**
3.5 - * vim: set ts=4 :
3.6 - * =============================================================================
3.7 - * SourceMod
3.8 - * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
3.9 - * =============================================================================
3.10 - *
3.11 - * This program is free software; you can redistribute it and/or modify it under
3.12 - * the terms of the GNU General Public License, version 3.0, as published by the
3.13 - * Free Software Foundation.
3.14 - *
3.15 - * This program is distributed in the hope that it will be useful, but WITHOUT
3.16 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
3.17 - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
3.18 - * details.
3.19 - *
3.20 - * You should have received a copy of the GNU General Public License along with
3.21 - * this program. If not, see <http://www.gnu.org/licenses/>.
3.22 - *
3.23 - * As a special exception, AlliedModders LLC gives you permission to link the
3.24 - * code of this program (as well as its derivative works) to "Half-Life 2," the
3.25 - * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
3.26 - * by the Valve Corporation. You must obey the GNU General Public License in
3.27 - * all respects for all other code used. Additionally, AlliedModders LLC grants
3.28 - * this exception to all derivative works. AlliedModders LLC defines further
3.29 - * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
3.30 - * or <http://www.sourcemod.net/license.php>.
3.31 - *
3.32 - * Version: $Id$
3.33 - */
3.34 -
3.35 -#include <stdarg.h>
3.36 -#include <string.h>
3.37 -#include "PluginInfoDatabase.h"
3.38 -#include "PluginSys.h"
3.39 -
3.40 -void PluginSettings::Init()
3.41 -{
3.42 - name = -1;
3.43 - pause_val = false;
3.44 - type_val = PluginType_MapUpdated;
3.45 - optarray = -1;
3.46 - opts_num = 0;
3.47 - opts_size = 0;
3.48 - blockload_val = false;
3.49 -}
3.50 -
3.51 -/**
3.52 - * :TODO: write the logger, make these errors log instead of being static
3.53 - * NOTE: once we do that, we will have to change some code to ignore sections
3.54 - */
3.55 -
3.56 -CPluginInfoDatabase::CPluginInfoDatabase()
3.57 -{
3.58 - m_strtab = NULL;
3.59 - m_infodb_count = 0;
3.60 - m_infodb_size = 0;
3.61 - m_infodb = -1;
3.62 -}
3.63 -
3.64 -CPluginInfoDatabase::~CPluginInfoDatabase()
3.65 -{
3.66 - delete m_strtab;
3.67 -}
3.68 -
3.69 -void CPluginInfoDatabase::ReadSMC_ParseStart()
3.70 -{
3.71 - /* Create or reset our string table */
3.72 - if (m_strtab)
3.73 - {
3.74 - m_strtab->Reset();
3.75 - } else {
3.76 - m_strtab = new BaseStringTable(1024);
3.77 - }
3.78 -
3.79 - /* Set our internal states to the beginning */
3.80 - in_plugins = false;
3.81 - cur_plugin = -1;
3.82 - in_options = false;
3.83 - m_infodb_size = 0;
3.84 - m_infodb_count = 0;
3.85 - m_infodb = -1;
3.86 -}
3.87 -
3.88 -SMCResult CPluginInfoDatabase::MakeError(const char *fmt, ...)
3.89 -{
3.90 - char buffer[512];
3.91 - va_list ap;
3.92 -
3.93 - va_start(ap, fmt);
3.94 - vsnprintf(buffer, sizeof(buffer), fmt, ap);
3.95 - va_end(ap);
3.96 -
3.97 - m_errmsg = m_strtab->AddString(buffer);
3.98 -
3.99 - return SMCResult_HaltFail;
3.100 -}
3.101 -
3.102 -unsigned int CPluginInfoDatabase::GetSettingsNum()
3.103 -{
3.104 - return m_infodb_count;
3.105 -}
3.106 -
3.107 -PluginSettings *CPluginInfoDatabase::GetSettingsIfMatch(unsigned int index, const char *filename)
3.108 -{
3.109 - BaseMemTable *memtab = m_strtab->GetMemTable();
3.110 - int *table = (int *)memtab->GetAddress(m_infodb);
3.111 -
3.112 - if (!table || index >= m_infodb_count)
3.113 - {
3.114 - return NULL;
3.115 - }
3.116 -
3.117 - PluginSettings *plugin = (PluginSettings *)memtab->GetAddress(table[index]);
3.118 -
3.119 - const char *name = m_strtab->GetString(plugin->name);
3.120 -
3.121 - if (!name)
3.122 - {
3.123 - return NULL;
3.124 - }
3.125 -
3.126 - if (!g_PluginSys.TestAliasMatch(name, filename))
3.127 - {
3.128 - return NULL;
3.129 - }
3.130 -
3.131 - return plugin;
3.132 -}
3.133 -
3.134 -void CPluginInfoDatabase::GetOptionsForPlugin(PluginSettings *settings, unsigned int opt_num, const char **key, const char **val)
3.135 -{
3.136 - PluginOpts *table = (PluginOpts *)m_strtab->GetMemTable()->GetAddress(settings->optarray);
3.137 - if (!table)
3.138 - {
3.139 - *key = NULL;
3.140 - *val = NULL;
3.141 - return;
3.142 - }
3.143 -
3.144 - if (opt_num >= settings->opts_num)
3.145 - {
3.146 - *key = NULL;
3.147 - *val = NULL;
3.148 - return;
3.149 - }
3.150 -
3.151 - *key = m_strtab->GetString(table[opt_num].key);
3.152 - *val = m_strtab->GetString(table[opt_num].val);
3.153 -}
3.154 -
3.155 -SMCResult CPluginInfoDatabase::ReadSMC_KeyValue(const SMCStates *states, const char *key, const char *value)
3.156 -{
3.157 - if (cur_plugin != -1)
3.158 - {
3.159 - PluginSettings *plugin = (PluginSettings *)m_strtab->GetMemTable()->GetAddress(cur_plugin);
3.160 - if (!in_options)
3.161 - {
3.162 - if (strcmp(key, "pause") == 0)
3.163 - {
3.164 - if (strcasecmp(value, "yes") == 0)
3.165 - {
3.166 - plugin->pause_val = true;
3.167 - }
3.168 - else
3.169 - {
3.170 - plugin->pause_val = false;
3.171 - }
3.172 - }
3.173 - else if (strcmp(key, "lifetime") == 0)
3.174 - {
3.175 - if (strcasecmp(value, "private") == 0)
3.176 - {
3.177 - plugin->type_val = PluginType_Private;
3.178 - }
3.179 - else if (strcasecmp(value, "mapsync") == 0)
3.180 - {
3.181 - plugin->type_val = PluginType_MapUpdated;
3.182 - }
3.183 - else if (strcasecmp(value, "maponly") == 0)
3.184 - {
3.185 - plugin->type_val = PluginType_MapOnly;
3.186 - }
3.187 - else if (strcasecmp(value, "global") == 0)
3.188 - {
3.189 - plugin->type_val = PluginType_Global;
3.190 - }
3.191 - else
3.192 - {
3.193 - return MakeError("Unknown value for key \"lifetime\": \"%s\"", value);
3.194 - }
3.195 - }
3.196 - else if (strcmp(key, "blockload") == 0)
3.197 - {
3.198 - plugin->blockload_val = true;
3.199 - }
3.200 - else
3.201 - {
3.202 - return MakeError("Unknown property key: \"%s\"", key);
3.203 - }
3.204 - }
3.205 - else
3.206 - {
3.207 - /* Cache every option, valid or not */
3.208 - int keyidx = m_strtab->AddString(key);
3.209 - int validx = m_strtab->AddString(value);
3.210 - PluginOpts *table;
3.211 - BaseMemTable *memtab = m_strtab->GetMemTable();
3.212 - plugin = (PluginSettings *)memtab->GetAddress(cur_plugin);
3.213 - if (plugin->opts_num + 1 > plugin->opts_size)
3.214 - {
3.215 - unsigned int oldsize = plugin->opts_size;
3.216 - if (oldsize == 0)
3.217 - {
3.218 - //right now we don't have many
3.219 - plugin->opts_size = 2;
3.220 - }
3.221 - else
3.222 - {
3.223 - plugin->opts_size *= 2;
3.224 - }
3.225 - int newidx = memtab->CreateMem(plugin->opts_size * sizeof(PluginOpts), (void **)&table);
3.226 - /* in case it resized */
3.227 - plugin = (PluginSettings *)memtab->GetAddress(cur_plugin);
3.228 - if (plugin->optarray != -1)
3.229 - {
3.230 - void *oldtable = memtab->GetAddress(plugin->optarray);
3.231 - memcpy(table, oldtable, oldsize * sizeof(PluginOpts));
3.232 - }
3.233 - plugin->optarray = newidx;
3.234 - }
3.235 - else
3.236 - {
3.237 - table = (PluginOpts *)memtab->GetAddress(plugin->optarray);
3.238 - }
3.239 - PluginOpts *opt = &table[plugin->opts_num++];
3.240 - opt->key = keyidx;
3.241 - opt->val = validx;
3.242 - }
3.243 - }
3.244 - else if (in_plugins)
3.245 - {
3.246 - return MakeError("Unknown property key: \"%s\"", key);
3.247 - }
3.248 - else
3.249 - {
3.250 - /* Ignore anything we don't know about! */
3.251 - }
3.252 -
3.253 - return SMCResult_Continue;
3.254 -}
3.255 -
3.256 -SMCResult CPluginInfoDatabase::ReadSMC_LeavingSection(const SMCStates *states)
3.257 -{
3.258 - if (in_plugins)
3.259 - {
3.260 - if (cur_plugin != -1)
3.261 - {
3.262 - if (in_options)
3.263 - {
3.264 - in_options = false;
3.265 - }
3.266 - else
3.267 - {
3.268 - /* If the plugin is ending, add it to the table */
3.269 - BaseMemTable *memtab = m_strtab->GetMemTable();
3.270 - int *table;
3.271 - if (m_infodb_count + 1 > m_infodb_size)
3.272 - {
3.273 - unsigned int oldsize = m_infodb_size;
3.274 - if (!m_infodb_size)
3.275 - {
3.276 - m_infodb_size = 8;
3.277 - }
3.278 - else
3.279 - {
3.280 - m_infodb_size *= 2;
3.281 - }
3.282 - int newidx = memtab->CreateMem(m_infodb_size * sizeof(int), (void **)&table);
3.283 - if (m_infodb != -1)
3.284 - {
3.285 - void *oldtable = (int *)memtab->GetAddress(m_infodb);
3.286 - memcpy(table, oldtable, oldsize * sizeof(int));
3.287 - }
3.288 - m_infodb = newidx;
3.289 - }
3.290 - else
3.291 - {
3.292 - table = (int *)memtab->GetAddress(m_infodb);
3.293 - }
3.294 - /* Assign to table and scrap the current plugin */
3.295 - table[m_infodb_count++] = cur_plugin;
3.296 - cur_plugin = -1;
3.297 - }
3.298 - }
3.299 - else
3.300 - {
3.301 - in_plugins = false;
3.302 - }
3.303 - }
3.304 -
3.305 - return SMCResult_Continue;
3.306 -}
3.307 -
3.308 -SMCResult CPluginInfoDatabase::ReadSMC_NewSection(const SMCStates *states, const char *name)
3.309 -{
3.310 - if (!in_plugins)
3.311 - {
3.312 - /* If we're not in the main Plugins section, and we don't get it for the name, error out */
3.313 - if (strcmp(name, "Plugins") != 0)
3.314 - {
3.315 - return MakeError("Unknown root section: \"%s\"", name);
3.316 - }
3.317 - else
3.318 - {
3.319 - /* Otherwise set our states */
3.320 - in_plugins = true;
3.321 - cur_plugin = -1;
3.322 - in_options = false;
3.323 - }
3.324 - }
3.325 - else
3.326 - {
3.327 - if (cur_plugin == -1)
3.328 - {
3.329 - /* If we get a plugin node and we don't have a current plugin, create a new one */
3.330 - PluginSettings *plugin;
3.331 - int i_name = m_strtab->AddString(name);
3.332 - cur_plugin = m_strtab->GetMemTable()->CreateMem(sizeof(PluginSettings), (void **)&plugin);
3.333 - plugin->Init();
3.334 - plugin->name = i_name;
3.335 - in_options = false;
3.336 - }
3.337 - else
3.338 - {
3.339 - if (!in_options && strcmp(name, "Options") == 0)
3.340 - {
3.341 - in_options = true;
3.342 - }
3.343 - else
3.344 - {
3.345 - return MakeError("Unknown plugin sub-section: \"%s\"", name);
3.346 - }
3.347 - }
3.348 - }
3.349 -
3.350 - return SMCResult_Continue;
3.351 -}
3.352 -
4.1 --- a/core/PluginInfoDatabase.h Thu Feb 14 19:28:12 2013 -0500
4.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
4.3 @@ -1,106 +0,0 @@
4.4 -/**
4.5 - * vim: set ts=4 :
4.6 - * =============================================================================
4.7 - * SourceMod
4.8 - * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved.
4.9 - * =============================================================================
4.10 - *
4.11 - * This program is free software; you can redistribute it and/or modify it under
4.12 - * the terms of the GNU General Public License, version 3.0, as published by the
4.13 - * Free Software Foundation.
4.14 - *
4.15 - * This program is distributed in the hope that it will be useful, but WITHOUT
4.16 - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
4.17 - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
4.18 - * details.
4.19 - *
4.20 - * You should have received a copy of the GNU General Public License along with
4.21 - * this program. If not, see <http://www.gnu.org/licenses/>.
4.22 - *
4.23 - * As a special exception, AlliedModders LLC gives you permission to link the
4.24 - * code of this program (as well as its derivative works) to "Half-Life 2," the
4.25 - * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
4.26 - * by the Valve Corporation. You must obey the GNU General Public License in
4.27 - * all respects for all other code used. Additionally, AlliedModders LLC grants
4.28 - * this exception to all derivative works. AlliedModders LLC defines further
4.29 - * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
4.30 - * or <http://www.sourcemod.net/license.php>.
4.31 - *
4.32 - * Version: $Id$
4.33 - */
4.34 -
4.35 -#ifndef _INCLUDE_SOURCEMOD_CORE_SYSTEM_PLUGININFODATABASE_H_
4.36 -#define _INCLUDE_SOURCEMOD_CORE_SYSTEM_PLUGININFODATABASE_H_
4.37 -
4.38 -/**
4.39 - * This file parses plugin_settings.cfg and stores the information in cached memory.
4.40 - * It provides simplistic abstraction to retrieving the info.
4.41 - * :TODO: currently untested
4.42 - */
4.43 -
4.44 -#include "sm_memtable.h"
4.45 -#include "ITextParsers.h"
4.46 -#include "IPluginSys.h"
4.47 -#include "sm_globals.h"
4.48 -
4.49 -struct PluginOpts
4.50 -{
4.51 - int key;
4.52 - int val;
4.53 -};
4.54 -
4.55 -struct PluginSettings
4.56 -{
4.57 - void Init();
4.58 - int name;
4.59 - bool pause_val;
4.60 - PluginType type_val;
4.61 - int optarray;
4.62 - size_t opts_num;
4.63 - size_t opts_size;
4.64 - bool blockload_val;
4.65 -};
4.66 -
4.67 -class CPluginInfoDatabase : public ITextListener_SMC
4.68 -{
4.69 -public:
4.70 - CPluginInfoDatabase();
4.71 - ~CPluginInfoDatabase();
4.72 -public: //ITextListener_SMC
4.73 - void ReadSMC_ParseStart();
4.74 - SMCResult ReadSMC_NewSection(const SMCStates *states, const char *name);
4.75 - SMCResult ReadSMC_KeyValue(const SMCStates *states, const char *key, const char *value);
4.76 - SMCResult ReadSMC_LeavingSection(const SMCStates *states);
4.77 -public:
4.78 - /**
4.79 - * Returns the number of plugin settings available.
4.80 - */
4.81 - unsigned int GetSettingsNum();
4.82 -
4.83 - /**
4.84 - * Given an index, returns the plugin settings block if the filename matches.
4.85 - * Otherwise, returns NULL.
4.86 - */
4.87 - PluginSettings *GetSettingsIfMatch(unsigned int index, const char *filename);
4.88 -
4.89 - /**
4.90 - * Given a plugin settings struct and an index,
4.91 - * returns the given JIT key/value option pair at that index.
4.92 - * If the input is invalid, key and val will be set to NULL.
4.93 - */
4.94 - void GetOptionsForPlugin(PluginSettings *settings, unsigned int opt_num, const char **key, const char **val);
4.95 -private:
4.96 - SMCResult MakeError(const char *fmt, ...);
4.97 -private:
4.98 - BaseStringTable *m_strtab;
4.99 - int m_errmsg;
4.100 - bool in_plugins;
4.101 - bool in_options;
4.102 - int m_infodb;
4.103 - size_t m_infodb_count;
4.104 - size_t m_infodb_size;
4.105 - int cur_plugin;
4.106 -};
4.107 -
4.108 -
4.109 -#endif //_INCLUDE_SOURCEMOD_CORE_SYSTEM_PLUGININFODATABASE_H_
5.1 --- a/core/PluginSys.cpp Thu Feb 14 19:28:12 2013 -0500
5.2 +++ b/core/PluginSys.cpp Sat Feb 16 15:15:22 2013 -0800
5.3 @@ -823,19 +823,7 @@
5.4 void CPluginManager::LoadAll_FirstPass(const char *config, const char *basedir)
5.5 {
5.6 /* First read in the database of plugin settings */
5.7 - SMCError err;
5.8 - SMCStates states;
5.9 m_AllPluginsLoaded = false;
5.10 - if ((err=textparsers->ParseFile_SMC(config, &m_PluginInfo, &states)) != SMCError_Okay)
5.11 - {
5.12 - g_Logger.LogError("[SM] Encountered fatal error parsing file \"%s\"", config);
5.13 - const char *err_msg = textparsers->GetSMCErrorString(err);
5.14 - if (err_msg)
5.15 - {
5.16 - g_Logger.LogError("[SM] Parse error encountered: \"%s\"", err_msg);
5.17 - }
5.18 - }
5.19 -
5.20 LoadPluginsFromDir(basedir, NULL);
5.21 }
5.22
5.23 @@ -909,21 +897,6 @@
5.24 }
5.25
5.26 int err;
5.27 - bool no_load = false;
5.28 - PluginSettings *pset;
5.29 - unsigned int setcount = m_PluginInfo.GetSettingsNum();
5.30 - for (unsigned int i=0; i<setcount; i++)
5.31 - {
5.32 - if ((pset = m_PluginInfo.GetSettingsIfMatch(i, path)) == NULL)
5.33 - {
5.34 - continue;
5.35 - }
5.36 - if (pset->blockload_val)
5.37 - {
5.38 - no_load = true;
5.39 - break;
5.40 - }
5.41 - }
5.42
5.43 /**
5.44 * Does this plugin already exist?
5.45 @@ -934,8 +907,7 @@
5.46 /* Check to see if we should try reloading it */
5.47 if (pPlugin->GetStatus() == Plugin_BadLoad
5.48 || pPlugin->GetStatus() == Plugin_Error
5.49 - || pPlugin->GetStatus() == Plugin_Failed
5.50 - || no_load)
5.51 + || pPlugin->GetStatus() == Plugin_Failed)
5.52 {
5.53 UnloadPlugin(pPlugin);
5.54 }
5.55 @@ -949,11 +921,6 @@
5.56 }
5.57 }
5.58
5.59 - if (no_load)
5.60 - {
5.61 - return LoadRes_NeverLoad;
5.62 - }
5.63 -
5.64 pPlugin = CPlugin::CreatePlugin(path, error, maxlength);
5.65
5.66 assert(pPlugin != NULL);
5.67 @@ -967,37 +934,6 @@
5.68 co = g_pSourcePawn2->StartCompilation();
5.69 }
5.70
5.71 - for (unsigned int i=0; i<setcount; i++)
5.72 - {
5.73 - if ((pset=m_PluginInfo.GetSettingsIfMatch(i, path)) == NULL)
5.74 - {
5.75 - continue;
5.76 - }
5.77 - pPlugin->m_type = pset->type_val;
5.78 - if (co)
5.79 - {
5.80 - for (unsigned int j=0; j<pset->opts_num; j++)
5.81 - {
5.82 - const char *key, *val;
5.83 - m_PluginInfo.GetOptionsForPlugin(pset, j, &key, &val);
5.84 - if (!key || !val)
5.85 - {
5.86 - continue;
5.87 - }
5.88 - if ((err = co->SetOption(key, val)) == SP_ERROR_NONE)
5.89 - {
5.90 - if (error)
5.91 - {
5.92 - UTIL_Format(error, maxlength, "Unable to set JIT option (key \"%s\") (value \"%s\")", key, val);
5.93 - }
5.94 - co->Abort();
5.95 - co = NULL;
5.96 - break;
5.97 - }
5.98 - }
5.99 - }
5.100 - }
5.101 -
5.102 /* Do the actual compiling */
5.103 if (co != NULL)
5.104 {
6.1 --- a/core/PluginSys.h Thu Feb 14 19:28:12 2013 -0500
6.2 +++ b/core/PluginSys.h Sat Feb 16 15:15:22 2013 -0800
6.3 @@ -43,7 +43,6 @@
6.4 #include <sh_vector.h>
6.5 #include <sh_string.h>
6.6 #include "sm_globals.h"
6.7 -#include "PluginInfoDatabase.h"
6.8 #include "sm_trie.h"
6.9 #include "sourcemod.h"
6.10 #include <IRootConsoleMenu.h>
6.11 @@ -469,7 +468,6 @@
6.12 List<IPluginsListener *> m_listeners;
6.13 List<CPlugin *> m_plugins;
6.14 CStack<CPluginManager::CPluginIterator *> m_iters;
6.15 - CPluginInfoDatabase m_PluginInfo;
6.16 Trie *m_LoadLookup;
6.17 bool m_AllPluginsLoaded;
6.18 IdentityToken_t *m_MyIdent;