VirusPluginManager()
 {
     VanillaVirusMaxType = Enum.GetValues(typeof(EVirusType)).Length - 1;
     Logger.Info($"MaxTypeint = {VanillaVirusMaxType - 1}");
     foreach (PulsarPlugin plugin in PluginManager.Instance.GetAllPlugins())
     {
         Assembly asm         = plugin.GetType().Assembly;
         Type     VirusPlugin = typeof(VirusPlugin);
         foreach (Type t in asm.GetTypes())
         {
             if (VirusPlugin.IsAssignableFrom(t) && !t.IsInterface && !t.IsAbstract)
             {
                 Logger.Info("Loading Virus from assembly");
                 VirusPlugin VirusPluginHandler = (VirusPlugin)Activator.CreateInstance(t);
                 if (GetVirusIDFromName(VirusPluginHandler.Name) == -1)
                 {
                     VirusTypes.Add(VirusPluginHandler);
                     Logger.Info($"Added Virus: '{VirusPluginHandler.Name}' with ID '{GetVirusIDFromName(VirusPluginHandler.Name)}'");
                 }
                 else
                 {
                     Logger.Info($"Could not add Virus from {plugin.Name} with the duplicate name of '{VirusPluginHandler.Name}'");
                 }
             }
         }
     }
 }
        public static PLVirus CreateVirus(int Subtype, int level)
        {
            PLVirus InVirus;

            if (Subtype >= Instance.VanillaVirusMaxType)
            {
                InVirus = new PLVirus(EVirusType.NONE, level);
                int subtypeformodded = Subtype - Instance.VanillaVirusMaxType;
                if (Global.DebugLogging)
                {
                    Logger.Info($"Subtype for modded is {subtypeformodded}");
                }
                if (subtypeformodded <= Instance.VirusTypes.Count && subtypeformodded > -1)
                {
                    if (Global.DebugLogging)
                    {
                        Logger.Info("Creating Virus from list info");
                    }
                    VirusPlugin VirusType = Instance.VirusTypes[Subtype - Instance.VanillaVirusMaxType];
                    InVirus.SubType = Subtype;
                    InVirus.Name    = VirusType.Name;
                    InVirus.Desc    = VirusType.Description;
                    InVirus.GetType().GetField("m_IconTexture", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(InVirus, VirusType.IconTexture);
                    InVirus.GetType().GetField("m_MarketPrice", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(InVirus, (ObscuredInt)VirusType.MarketPrice);
                    InVirus.CargoVisualPrefabID     = VirusType.CargoVisualID;
                    InVirus.CanBeDroppedOnShipDeath = VirusType.CanBeDroppedOnShipDeath;
                    InVirus.Experimental            = VirusType.Experimental;
                    InVirus.Unstable   = VirusType.Unstable;
                    InVirus.Contraband = VirusType.Contraband;
                    InVirus.GetType().GetField("Price_LevelMultiplierExponent", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(InVirus, (ObscuredFloat)VirusType.Price_LevelMultiplierExponent);
                }
            }
            else
            {
                InVirus = new PLVirus((EVirusType)Subtype, level);
            }
            return(InVirus);
        }