Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of SpawnDistanceStandardization v1.0.4
SpawnDistanceStandardization/SpawnDistanceStandardization.dll
Decompiled 5 months agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using On.RoR2; using RoR2; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")] [assembly: AssemblyCompany("SpawnDistanceStandardization")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("SpawnDistanceStandardization")] [assembly: AssemblyTitle("SpawnDistanceStandardization")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace SpawnDistanceStandardization; internal static class Log { private static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void Debug(object data) { _logSource.LogDebug(data); } internal static void Error(object data) { _logSource.LogError(data); } internal static void Fatal(object data) { _logSource.LogFatal(data); } internal static void Info(object data) { _logSource.LogInfo(data); } internal static void Message(object data) { _logSource.LogMessage(data); } internal static void Warning(object data) { _logSource.LogWarning(data); } } [BepInPlugin("Samuel17.SpawnDistanceStandardization", "SpawnDistanceStandardization", "1.0.4")] public class Main : BaseUnityPlugin { public static List<GameObject> masterPrefabsFar = new List<GameObject>(); public static List<GameObject> masterPrefabsStandard = new List<GameObject>(); public static List<GameObject> masterPrefabsClose = new List<GameObject>(); public static List<GameObject> minStagesMasterPrefabs = new List<GameObject>(); public static List<int> minStagesCounts = new List<int>(); public static string defaultDistance = null; public static bool noStageCountRestrictions = false; public static bool isFamilyEventActive = false; public static ConfigEntry<string> farSpawns { get; private set; } public static ConfigEntry<string> standardSpawns { get; private set; } public static ConfigEntry<string> closeSpawns { get; private set; } public static ConfigEntry<string> minStages { get; private set; } public void Awake() { Log.Init(((BaseUnityPlugin)this).Logger); farSpawns = ((BaseUnityPlugin)this).Config.Bind<string>("Spawn Distances", "Far", "JellyfishMaster, AcidLarvaMaster, MagmaWormMaster, ElectricWormMaster", "Specify the monsters that should be set to Far (70-120m) by entering their internal master names.\nMake sure to separate them with commas.\nAlso accepts EverythingElse as a value."); standardSpawns = ((BaseUnityPlugin)this).Config.Bind<string>("Spawn Distances", "Standard", "BeetleMaster, ChildMaster, VerminMaster, ScorchlingMaster", "Specify the monsters that should be set to Standard (25-40m) by entering their internal master names.\nMake sure to separate them with commas.\nAlso accepts EverythingElse as a value."); closeSpawns = ((BaseUnityPlugin)this).Config.Bind<string>("Spawn Distances", "Close", "", "Specify the monsters that should be set to Close (8-20m) by entering their internal master names.\nMake sure to separate them with commas.\nAlso accepts EverythingElse as a value."); minStages = ((BaseUnityPlugin)this).Config.Bind<string>("Miscellaneous", "Minimum Stages", "", "Specify a monster's master name, followed by the lowest stage number it's allowed to appear in. Example: 'FlyingVerminMaster - 2' will make Blind Pests spawn on Stage 2 onwards.\nMake sure to separate the different entries with commas.\nAlternatively, enter 'NoRestrictions' to remove stage count restrictions for every monster."); RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, (Action)delegate { //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Expected O, but got Unknown //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Expected O, but got Unknown //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Expected O, but got Unknown //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Expected O, but got Unknown SortDistConfigs(farSpawns.Value, masterPrefabsFar, "Far"); SortDistConfigs(standardSpawns.Value, masterPrefabsStandard, "Standard"); SortDistConfigs(closeSpawns.Value, masterPrefabsClose, "Close"); SortMinStageConfigs(minStages.Value); if (defaultDistance != null || masterPrefabsFar.Count > 0 || masterPrefabsStandard.Count > 0 || masterPrefabsClose.Count > 0) { ClassicStageInfo.RebuildCards += new hook_RebuildCards(AdjustSpawnDistances); } if (minStagesMasterPrefabs.Count > 0 || noStageCountRestrictions) { DirectorCard.IsAvailable += new hook_IsAvailable(AdjustMinimumStage); ClassicStageInfo.BroadcastFamilySelection += new hook_BroadcastFamilySelection(TrackFamilyEvent); ClassicStageInfo.Start += new hook_Start(ResetFamilyEvent); } }); } private void SortDistConfigs(string spawns, List<GameObject> listPrefabs, string distance) { spawns = new string((from c in spawns.ToCharArray() where !char.IsWhiteSpace(c) select c).ToArray()); string[] array = spawns.Split(','); string[] array2 = array; foreach (string text in array2) { GameObject val = MasterCatalog.FindMasterPrefab(text); if (Object.op_Implicit((Object)(object)val)) { listPrefabs.Add(val); Log.Message(((Object)val).name + " has been added to the " + distance + " spawn list."); } else if (text == "EverythingElse") { defaultDistance = distance; Log.Message("Default spawn distance has been set to " + distance + "."); } } } private void SortMinStageConfigs(string spawns) { spawns = new string((from c in spawns.ToCharArray() where !char.IsWhiteSpace(c) select c).ToArray()); string[] array = spawns.Split(','); string[] array2 = array; foreach (string text in array2) { if (text == "NoRestrictions") { noStageCountRestrictions = true; Log.Message("Cleared minimum stage restrictions for every monster."); continue; } string[] array3 = text.Split('-'); if (array3.Length == 2 && int.TryParse(array3[1], out var result)) { GameObject val = MasterCatalog.FindMasterPrefab(array3[0]); if (Object.op_Implicit((Object)(object)val)) { minStagesMasterPrefabs.Add(val); minStagesCounts.Add(result); Log.Message(((Object)val).name + " minimum stage set to " + result + "."); } } } } private void AdjustSpawnDistances(orig_RebuildCards orig, ClassicStageInfo self, DirectorCardCategorySelection forcedMonsterCategory = null, DirectorCardCategorySelection forcedInteractableCategory = null) { //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, forcedMonsterCategory, forcedInteractableCategory); if (!((Object)(object)SceneCatalog.mostRecentSceneDef != (Object)(object)SceneCatalog.FindSceneDef("arena")) || self.monsterSelection == null || self.monsterSelection.choices == null) { return; } List<MasterIndex> list = new List<MasterIndex>(self.monsterSelection.choices.Length); for (int i = 0; i < self.monsterSelection.Count; i++) { DirectorCard value = self.monsterSelection.choices[i].value; SpawnCard spawnCard = value.GetSpawnCard(); if (!Object.op_Implicit((Object)(object)spawnCard)) { continue; } if (defaultDistance != null) { switch (defaultDistance) { case "Far": value.spawnDistance = (MonsterSpawnDistance)2; break; case "Standard": value.spawnDistance = (MonsterSpawnDistance)0; break; case "Close": value.spawnDistance = (MonsterSpawnDistance)1; break; } } if (masterPrefabsFar.Contains(spawnCard.prefab)) { value.spawnDistance = (MonsterSpawnDistance)2; Log.Message(((Object)spawnCard.prefab).name + " spawn distance set to Far."); } else if (masterPrefabsStandard.Contains(spawnCard.prefab)) { value.spawnDistance = (MonsterSpawnDistance)0; Log.Message(((Object)spawnCard.prefab).name + " spawn distance set to Standard."); } else if (masterPrefabsClose.Contains(spawnCard.prefab)) { value.spawnDistance = (MonsterSpawnDistance)1; Log.Message(((Object)spawnCard.prefab).name + " spawn distance set to Close."); } } } private bool AdjustMinimumStage(orig_IsAvailable orig, DirectorCard self) { RunArtifactManager instance = RunArtifactManager.instance; if ((instance == null || !instance.IsArtifactEnabled(Artifacts.mixEnemyArtifactDef)) && !isFamilyEventActive && ((Object)(object)SceneCatalog.mostRecentSceneDef != (Object)(object)SceneCatalog.FindSceneDef("arena") || noStageCountRestrictions)) { SpawnCard spawnCard = self.GetSpawnCard(); if (Object.op_Implicit((Object)(object)spawnCard)) { if (minStagesMasterPrefabs.Contains(spawnCard.prefab)) { int index = minStagesMasterPrefabs.IndexOf(spawnCard.prefab); self.minimumStageCompletions = minStagesCounts[index] - 1; } else if (noStageCountRestrictions) { GameObject val = MasterCatalog.FindMasterPrefab(((Object)spawnCard.prefab).name); if (Object.op_Implicit((Object)(object)val)) { self.minimumStageCompletions = 0; } } } } return orig.Invoke(self); } private IEnumerator TrackFamilyEvent(orig_BroadcastFamilySelection orig, ClassicStageInfo self, string familySelectionChatString) { isFamilyEventActive = true; return orig.Invoke(self, familySelectionChatString); } private void ResetFamilyEvent(orig_Start orig, ClassicStageInfo self) { isFamilyEventActive = false; orig.Invoke(self); } }