Example #1
0
        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");
        }