private void LoadPlugin(string directory, IScriptHandler scriptHandler, string pluginDirectory) { string pluginName = directory.Substring(directory.LastIndexOf('/') + 1); if (!VerifyPlugin(pluginName)) { return; } string entryPath = Path.Combine(directory, scriptHandler.GetEntryFileName() + scriptHandler.GetScriptExtension()); if (File.Exists(entryPath)) { var lines = GetDependencies(directory); foreach (var line in lines) { if (!loadedPlugins.Contains(line)) { var dependencies = GetDependencies("Plugins/" + scriptHandler.GetScriptDirectoryName() + "/" + line); if (dependencies.Contains(pluginName)) { Log.Error("Plugin \"" + pluginName + "\" has a dependency to itself!"); return; } if (dependencies.Contains(pluginName)) { Log.Error("Circular dependency detected between \"" + pluginName + "\" and \"" + line + "\"!"); return; } Log.Info(pluginName + " requires " + line + ". Loading " + line + "."); LoadPlugin(pluginDirectory + "/" + line, scriptHandler, pluginDirectory); } } scriptHandler.LoadPlugin(pluginName, entryPath); loadedPlugins.Add(pluginName); } else { Log.Error("Plugin \"" + pluginName + "\" could not be loaded because it does not exist!"); return; } }