Exemple #1
0
        /// <summary>
        /// Loads a given plugin
        /// </summary>
        /// <param name="plugin"></param>
        /// <param name="waitingForAccess"></param>
        protected void LoadPlugin(Plugin plugin, bool waitingForAccess = false)
        {
            if (!File.Exists(plugin.Filename))
            {
                LoadingPlugins.Remove(plugin.Name);
                Interface.Oxide.LogWarning("Script no longer exists: {0}", plugin.Name);
                return;
            }

            try
            {
                plugin.Load();
                Interface.Oxide.UnloadPlugin(plugin.Name);
                LoadingPlugins.Remove(plugin.Name);
                Interface.Oxide.PluginLoaded(plugin);
            }
            catch (IOException)
            {
                if (!waitingForAccess)
                {
                    Interface.Oxide.LogWarning("Waiting for another application to stop using script: {0}", plugin.Name);
                }

                Interface.Oxide.GetLibrary <Timer>().Once(.5f, () => LoadPlugin(plugin, true));
            }
            catch (Exception ex)
            {
                LoadingPlugins.Remove(plugin.Name);
                Interface.Oxide.LogException($"Failed to load plugin {plugin.Name}", ex);
            }
        }
 private void PluginLoadingCompleted(CompilablePlugin plugin)
 {
     LoadingPlugins.Remove(plugin.Name);
     plugin.IsLoading = false;
     foreach (var loadingName in LoadingPlugins.ToArray())
     {
         var loadingPlugin = GetCompilablePlugin(plugin.Directory, loadingName);
         if (loadingPlugin.IsLoading && loadingPlugin.Requires.Contains(plugin.Name))
         {
             Load(loadingPlugin);
         }
     }
 }
Exemple #3
0
        /// <summary>
        /// Attempt to asynchronously compile and load plugin
        /// </summary>
        /// <param name="directory"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public override Plugin Load(string directory, string name)
        {
            //if (name == "CSharpCore") return new CSharpCore();

            if (LoadingPlugins.Contains(name))
            {
                Interface.GetMod().LogInfo("Plugin is already being loaded: {0}", name);
                return(null);
            }

            // Let the Oxide core know that this plugin will be loading asynchronously
            LoadingPlugins.Add(name);

            var compilable_plugin = GetCompilablePlugin(extension, directory, name);

            compilable_plugin.Compile(compiled =>
            {
                // Load the plugin assembly if it was successfully compiled
                if (compiled)
                {
                    compilable_plugin.LoadAssembly(plugin =>
                    {
                        LoadingPlugins.Remove(name);
                        if (plugin != null)
                        {
                            LoadedPlugins.Add(plugin);
                        }
                    });
                }
                else
                {
                    LoadingPlugins.Remove(name);
                }
            });

            return(null);
        }