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); }