Пример #1
0
        public void LoadPluginAssembly(string path)
        {
            Logger.Debug("PLUGIN_LOADER", path);
            Assembly a = Assembly.LoadFrom(path);

            try
            {
                foreach (Type t in a.GetTypes())
                {
                    if (t.IsSubclassOf(typeof(Plugin)) && t != typeof(Plugin))
                    {
                        try
                        {
                            Plugin        plugin  = (Plugin)Activator.CreateInstance(t);
                            PluginDetails details = (PluginDetails)Attribute.GetCustomAttribute(t, typeof(PluginDetails));
                            if (details.id != null)
                            {
                                if (details.SmodMajor != SMOD_MAJOR && details.SmodMinor != SMOD_MINOR)
                                {
                                    Logger.Warn("PLUGIN_LOADER", "Trying to load an outdated plugin " + details.name + " " + details.version);
                                }
                                else
                                {
                                    plugin.Details = details;
                                    plugin.Pipes   = new PluginPipes(plugin);

                                    ConfigManager.Manager.RegisterPlugin(plugin);
                                    LangManager.Manager.RegisterPlugin(plugin);
                                    PipeManager.Manager.RegisterPlugin(plugin);

                                    plugin.Register();

                                    disabledPlugins.Add(details.id, plugin);
                                    Logger.Info("PLUGIN_LOADER", "Plugin loaded: " + plugin.ToString());
                                }
                            }
                            else
                            {
                                Logger.Warn("PLUGIN_LOADER", "Plugin loaded but missing an id: " + t + "[" + path + "]");
                            }
                        }
                        catch (Exception e)
                        {
                            Logger.Error("PLUGIN_LOADER", "Failed to create instance of plugin " + t + "[" + path + "]");
                            Logger.Error("PLUGIN_LOADER", e.GetType().Name + ": " + e.Message);
                            Logger.Error("PLUGIN_LOADER", e.StackTrace);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Logger.Error("PLUGIN_LOADER", "Failed to load DLL [" + path + "], is it up to date?");
                Logger.Debug("PLUGIN_LOADER", e.Message);
                Logger.Debug("PLUGIN_LOADER", e.StackTrace);
            }
        }
Пример #2
0
 public void RegisterTranslation(Plugin plugin, LangSetting setting)
 {
     if (!settings.ContainsKey(setting.Key))
     {
         settings.Add(setting.Key, plugin);
         if (!keyvalue.ContainsKey(setting.Key))
         {
             keyvalue.Add(setting.Key, setting.Default);
             File.AppendAllText(Directory.GetCurrentDirectory() + "/./sm_translations/" + setting.Filename + ".txt", setting.Key + " = " + setting.Default + System.Environment.NewLine);
         }
         else
         {
             PluginManager.Manager.Logger.Debug("LANG_MANAGER", setting.Key + " exists in translation files.");
         }
     }
     else
     {
         PluginManager.Manager.Logger.Warn("LANG_MANAGER", plugin.ToString() + " is trying to register a duplicate setting: " + setting.Key);
     }
 }