Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of Wayfaring2 v3.0.0
Wayfaring2.dll
Decompiled a week agousing System; 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 Microsoft.CodeAnalysis; 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 = ".NET Standard 2.1")] [assembly: AssemblyCompany("Wayfaring2")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("Wayfaring2")] [assembly: AssemblyTitle("Wayfaring2")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace Wayfaring2 { [BepInPlugin("GiGaGon.Wayfaring2", "Wayfaring2", "3.0.0")] public class Wayfaring2 : BaseUnityPlugin { internal class ModConfig { public static ConfigEntry<KeyboardShortcut> reloadKeyBind; public static ConfigEntry<int> stagesForLoop; public static ConfigEntry<int> bracketLengthDefault; public static ConfigEntry<string> brackets; public static void InitConfig(ConfigFile config) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) reloadKeyBind = config.Bind<KeyboardShortcut>("General", "Reload Button", new KeyboardShortcut((KeyCode)287, Array.Empty<KeyCode>()), "Button to reload the stage list with new values from config"); stagesForLoop = config.Bind<int>("General", "Stages For Loop", 5, "How many stages before the game considers the run to have \"looped\""); bracketLengthDefault = config.Bind<int>("General", "Default Bracket Length", 1, "Defualt for how many stages to choose per bracket. Set to -1 for all stages in every bracket"); brackets = config.Bind<string>("General", "Brackets", "blackbeach,golemplains,snowyforest-goolake,foggyswamp,ancientloft-frozenwall,wispgraveyard,sulfurpools-dampcavesimple,shipgraveyard,rootjungle-skymeadow", "Default is a normal ror2 game. Explained on mod website."); } } internal class Rng { public static Random rng = new Random(); } internal class Brackets { public static List<Tuple<int, List<string>>> brackets = new List<Tuple<int, List<string>>>(); public static Stack<string> stages = new Stack<string>(); public static void SetBrackets(string value) { brackets.Clear(); string[] array = value.Split('-'); foreach (string text in array) { if (text.Contains(':')) { string[] array2 = text.Split(':'); brackets.Add(new Tuple<int, List<string>>(int.Parse(array2[0]), array2[1].Split(',').ToList())); } else { int value2 = ModConfig.bracketLengthDefault.Value; string[] array3 = text.Split(','); brackets.Add(new Tuple<int, List<string>>((value2 != -1) ? value2 : array3.Length, array3.ToList())); } } } public static void ChooseStages(List<Tuple<int, List<string>>> value) { stages.Clear(); foreach (Tuple<int, List<string>> item in value) { List<string> list = item.Item2.Shuffle().Take(item.Item1).ToList(); foreach (string item2 in list) { stages.Push(item2); } } stages = new Stack<string>(stages); } } [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_SetUpSeerStations <>9__6_3; public static hook_ShouldBeginLoop <>9__6_4; internal void <Awake>b__6_3(orig_SetUpSeerStations orig, BazaarController self) { SeerStationController[] seerStations = self.seerStations; foreach (SeerStationController val in seerStations) { ((Component)val).GetComponent<PurchaseInteraction>().SetAvailable(false); } } internal bool <Awake>b__6_4(orig_ShouldBeginLoop orig, Run self, SceneDef scene) { return scene.stageOrder == ModConfig.stagesForLoop.Value; } } public const string PluginGUID = "GiGaGon.Wayfaring2"; public const string PluginAuthor = "GiGaGon"; public const string PluginName = "Wayfaring2"; public const string PluginVersion = "3.0.0"; public void Awake() { //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Expected O, but got Unknown //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Expected O, but got Unknown //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Expected O, but got Unknown //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Expected O, but got Unknown //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Expected O, but got Unknown ModConfig.InitConfig(((BaseUnityPlugin)this).Config); Brackets.SetBrackets(ModConfig.brackets.Value); string next_stage = ""; bool calling_from_OnServerSceneChanged = false; Run.Start += (hook_Start)delegate(orig_Start orig, Run self) { Rng.rng = new Random((int)Run.instance.seed); Brackets.ChooseStages(Brackets.brackets); next_stage = Brackets.stages.Pop(); if (Brackets.stages.Count == 0) { Brackets.ChooseStages(Brackets.brackets); } if (next_stage == "blackbeach" && Rng.rng.Next(1) == 1) { next_stage = "blackbeach2"; } if (next_stage == "golemplains" && Rng.rng.Next(1) == 1) { next_stage = "golemplains2"; } orig.Invoke(self); }; Run.PickNextStageScene += (hook_PickNextStageScene)delegate(orig_PickNextStageScene orig, Run self, WeightedSelection<SceneDef> choices) { orig.Invoke(self, choices); if (calling_from_OnServerSceneChanged) { next_stage = Brackets.stages.Pop(); if (Brackets.stages.Count == 0) { Brackets.ChooseStages(Brackets.brackets); } if (next_stage == "blackbeach" && Rng.rng.Next(1) == 1) { next_stage = "blackbeach2"; } if (next_stage == "golemplains" && Rng.rng.Next(1) == 1) { next_stage = "golemplains2"; } calling_from_OnServerSceneChanged = false; } Run.instance.nextStageScene = SceneCatalog.FindSceneDef(next_stage); }; Run.OnServerSceneChanged += (hook_OnServerSceneChanged)delegate(orig_OnServerSceneChanged orig, Run self, string sceneName) { orig.Invoke(self, sceneName); if ((Object)(object)TeleporterInteraction.instance == (Object)null) { calling_from_OnServerSceneChanged = true; Run.instance.PickNextStageScene(new WeightedSelection<SceneDef>(8)); } }; object obj = <>c.<>9__6_3; if (obj == null) { hook_SetUpSeerStations val = delegate(orig_SetUpSeerStations orig, BazaarController self) { SeerStationController[] seerStations = self.seerStations; foreach (SeerStationController val3 in seerStations) { ((Component)val3).GetComponent<PurchaseInteraction>().SetAvailable(false); } }; <>c.<>9__6_3 = val; obj = (object)val; } BazaarController.SetUpSeerStations += (hook_SetUpSeerStations)obj; object obj2 = <>c.<>9__6_4; if (obj2 == null) { hook_ShouldBeginLoop val2 = (orig_ShouldBeginLoop orig, Run self, SceneDef scene) => scene.stageOrder == ModConfig.stagesForLoop.Value; <>c.<>9__6_4 = val2; obj2 = (object)val2; } Run.ShouldBeginLoop += (hook_ShouldBeginLoop)obj2; } private void Update() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) KeyboardShortcut value = ModConfig.reloadKeyBind.Value; if (((KeyboardShortcut)(ref value)).IsDown()) { ((BaseUnityPlugin)this).Config.Reload(); Brackets.SetBrackets(ModConfig.brackets.Value); Brackets.ChooseStages(Brackets.brackets); } } } internal static class ShuffleHelper { public static List<T> Shuffle<T>(this List<T> list) { int num = list.Count; while (num > 1) { num--; int num2 = Wayfaring2.Rng.rng.Next(num + 1); int index = num; int index2 = num2; T val = list[num2]; T val2 = list[num]; T val4 = (list[index] = val); val4 = (list[index2] = val2); } return list; } } }