예제 #1
0
        /// <summary>
        /// Called when the plugin manager is unloading a plugin that was loaded by this plugin loader
        /// </summary>
        /// <param name="plugin_base"></param>
        public override void Unloading(Plugin plugin_base)
        {
            var plugin = plugin_base as CSharpPlugin;

            LoadedPlugins.Remove(plugin.Name);
            // Unload plugins which require this plugin first
            foreach (var compilable_plugin in plugins.Values)
            {
                if (compilable_plugin.Requires.Contains(plugin.Name))
                {
                    Interface.Oxide.UnloadPlugin(compilable_plugin.Name);
                }
            }
        }
예제 #2
0
        private void LoadPlugin(IPlugin plugin)
        {
            var savePlugin = $"{plugin.Name}_{plugin.Author}";

            if (LoadedPlugins.Contains(plugin))
            {
                LoadedPlugins.Remove(plugin);
                Options.Values.LoadedPlugins.Remove(savePlugin);
                Options.Values.Save();
                plugin.Unload();
                return;
            }
            LoadedPlugins.Add(plugin);
            Options.Values.LoadedPlugins.Add(savePlugin);
            Options.Values.Save();
            plugin.Load();
        }
예제 #3
0
        /// <summary>
        /// See interface docs.
        /// </summary>
        public void RegisterImplementations()
        {
            var log = Factory.ResolveSingleton <ILog>();

            foreach (var plugin in LoadedPlugins.ToArray())
            {
                var snapshot = Provider.ClassFactoryTakeSnapshot();
                try {
                    plugin.RegisterImplementations(Factory.Singleton);
                } catch (Exception ex) {
                    Provider.ClassFactoryRestoreSnapshot(snapshot);

                    var dllFileName = _PluginIDToFileNameMap[plugin.Id];
                    _PluginIDToFileNameMap.Remove(plugin.Id);
                    LoadedPlugins.Remove(plugin);
                    IgnoredPlugins.Add(dllFileName, String.Format(Strings.PluginCannotBeLoaded, ex.Message));
                    log.WriteLine("Caught exception loading plugin {0}: {1}", dllFileName, FormatException(ex));
                }
            }
        }
예제 #4
0
        /// <summary>
        /// Called when the plugin manager is unloading a plugin that was loaded by this plugin loader
        /// </summary>
        /// <param name="pluginBase"></param>
        public override void Unloading(Plugin pluginBase)
        {
            CSharpPlugin plugin = pluginBase as CSharpPlugin;

            if (plugin == null)
            {
                return;
            }

            LoadedPlugins.Remove(plugin.Name);

            // Unload plugins which require this plugin first
            foreach (CompilablePlugin compilablePlugin in plugins.Values)
            {
                if (compilablePlugin.Requires.Contains(plugin.Name))
                {
                    Interface.Oxide.UnloadPlugin(compilablePlugin.Name);
                }
            }
        }
예제 #5
0
 public void RemovePlugin(Plugin plugin)
 {
     LoadedPlugins.Remove(plugin.Name());
     OrderedAppliedPluginsList.Remove(plugin);
 }