public void LoadPlugin() { Logger.Log($"Loading plugin: {Name}. Author: {Author ?? "UNKNOWN"}. Version: {Version}.", ConsoleColor.Cyan); var pluginDir = string.Format(ModuleEnvironment.PluginDir, Name); if (!Directory.Exists(pluginDir)) { Directory.CreateDirectory(pluginDir); } Config = new JsonFileAsset <TConfig>(string.Format(ModuleEnvironment.PluginCfg, Name)); if (DefaultTranslation != null && DefaultTranslation.Any()) { Translation = new JsonFileAsset <Translation>(string.Format(ModuleEnvironment.PluginTranslation, Name)); DefaultTranslation.FillTranslation(Translation); } try { Load(); } catch (Exception e) { Logger.LogError($"An error occurred while loading plugin {Name}. Unloading now..."); Logger.Log(e.Message, ConsoleColor.Red); try { UnloadPlugin(); return; } catch (Exception) { Logger.LogWarning("Failed to unload plugin, it will be destroyed!"); PluginManager.Destroy(name); return; } } CommandManager.RegisterCommands(Assembly, GetType()); PluginState = PluginState.Loaded; }
private static void RegisterPlugins() { foreach (var path in Directory.GetFiles(ModuleEnvironment.PluginsDir, "*.dll")) { var assembly = Assembly.LoadFrom(path); var name = assembly.GetName().Name; if (!PluginUtil.IsPluginValid(assembly, out var pluginType)) { Logger.LogError($"Invalid or outdated plugin assembly: {name}"); continue; } var gameObject = new GameObject(name, pluginType); Object.DontDestroyOnLoad(gameObject); Plugins.Add(new PluginData(assembly, gameObject)); } }
internal static void Init() { AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => { if (Libraries.TryGetValue(args.Name, out var file)) { return(Assembly.LoadFrom(file)); } Logger.LogError($"Could not find dependency: {args.Name}"); return(null); }; RegisterPlugins(); var advertising = PluginAdvertising.Get(); advertising.PluginFrameworkName = "rocket"; advertising.AddPlugins(Plugins.Select(p => p.Name)); SteamGameServer.SetKeyValue("unturned", Provider.APP_VERSION); SteamGameServer.SetKeyValue("rocket", "4.9.3.6"); }