using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using Steamworks.Data; using UnityEngine; using UnityEngine.SceneManagement; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("ChooseLockerContents")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("Choose Locker Contents")] [assembly: AssemblyTitle("ChooseLockerContents")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [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 ChooseLockerContents { public class Patches { private static bool initialized; [HarmonyPatch(typeof(CL_Initializer), "Awake")] [HarmonyPostfix] private static void InitializerAwake() { //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) if (!initialized) { GamemodeSetting val = Resources.FindObjectsOfTypeAll().First((GamemodeSetting x) => x.id == "ironknuckle"); GamemodeSetting val2 = Resources.FindObjectsOfTypeAll().First((GamemodeSetting x) => x.id == "competitive"); GamemodeSetting val3 = ScriptableObject.CreateInstance(); val2.gamemodeButtonAsset.selectedHeight = 165; Transform[] array = (Transform[])(object)new Transform[2] { ((Component)val2.gamemodeButtonAsset).transform.Find("Locker Settings/Locker 01"), ((Component)val2.gamemodeButtonAsset).transform.Find("Locker Settings/Locker 02") }; foreach (Transform obj in array) { ((Component)obj.Find("Title")).gameObject.SetActive(false); Vector2 sizeDelta = ((Component)obj).GetComponent().sizeDelta; ((Component)obj).GetComponent().sizeDelta = new Vector2(sizeDelta.x, sizeDelta.y - 15f); } val3.id = "locker"; val3.title = "Preset Lockers"; val3.description = "Choose Locker Contents"; val3.color = val2.color; val3.unlock = Resources.FindObjectsOfTypeAll().First((ProgressionUnlock x) => x.id == "r_hardmode"); val3.exclusiveSettings = new List(2) { val.id, val2.id }; val3.nameAppend = "Preset Lockers"; val3.leaderboardAppendID = "locker"; val3.allowDownstream = false; val3.downstreamId = ""; val3.gamemodeButtonAsset = val2.gamemodeButtonAsset; val.exclusiveSettings.Add(val3.id); val2.exclusiveSettings.Add(val3.id); Resources.FindObjectsOfTypeAll().First((M_Gamemode x) => x.gamemodeName == "Campaign").gamemodeSettings.Add(val3); initialized = true; } } [HarmonyPatch(typeof(UI_Competitive_Settings), "OnSelect")] [HarmonyPostfix] private static void CompSettingsOnSelect(UI_Competitive_Settings __instance) { //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) Scene scene = ((Component)__instance).gameObject.scene; GameObject[] rootGameObjects = ((Scene)(ref scene)).GetRootGameObjects(); for (int i = 0; i < rootGameObjects.Length; i++) { UI_Competitive_Settings[] componentsInChildren = rootGameObjects[i].GetComponentsInChildren(); foreach (UI_Competitive_Settings val in componentsInChildren) { if (!((Object)(object)val == (Object)(object)__instance)) { for (int k = 0; k < val.lockers.Count; k++) { val.PopulateItems(val.lockers[k], k); } } } } } [HarmonyPatch(/*Could not decode attribute arguments.*/)] [HarmonyTranspiler] private static IEnumerable GameManagerLoadIn(IEnumerable instructions) { //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Expected O, but got Unknown //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Expected O, but got Unknown List list = new List(instructions); int num = list.FindIndex((CodeInstruction x) => CodeInstructionExtensions.Calls(x, AccessTools.Method(typeof(M_Gamemode), "IsCompetitive", (Type[])null, (Type[])null))); list.InsertRange(num + 1, new <>z__ReadOnlyArray((CodeInstruction[])(object)new CodeInstruction[4] { new CodeInstruction(OpCodes.Call, (object)AccessTools.Method(typeof(CL_GameManager), "GetBaseGamemode", (Type[])null, (Type[])null)), new CodeInstruction(OpCodes.Ldstr, (object)"locker"), new CodeInstruction(OpCodes.Call, (object)AccessTools.Method(typeof(M_Gamemode), "HasActiveSetting", (Type[])null, (Type[])null)), new CodeInstruction(OpCodes.Or, (object)null) })); return list.AsEnumerable(); } } [HarmonyPatch] internal class LeaderboardUpdateScorePatch { public static MethodBase TargetMethod() { return AccessTools.Method(AccessTools.Method(typeof(Leaderboard_Panel), "UpdateScore", (Type[])null, (Type[])null).GetCustomAttribute().StateMachineType, "MoveNext", (Type[])null, (Type[])null); } private static IEnumerable Transpiler(IEnumerable instructions) { //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Expected O, but got Unknown List list = new List(instructions); int index = list.FindIndex((CodeInstruction x) => CodeInstructionExtensions.Calls(x, AccessTools.PropertyGetter(typeof(Leaderboard?), "HasValue"))); list.RemoveAt(index); list.InsertRange(index, new <>z__ReadOnlyArray((CodeInstruction[])(object)new CodeInstruction[2] { new CodeInstruction(OpCodes.Pop, (object)null), new CodeInstruction(OpCodes.Ldc_I4_1, (object)null) })); return list.AsEnumerable(); } } [BepInPlugin("ChooseLockerContents", "Choose Locker Contents", "1.0.0")] public class Plugin : BaseUnityPlugin { internal static ManualLogSource Logger; public static LightmapData black; private void Awake() { Logger = ((BaseUnityPlugin)this).Logger; Harmony.CreateAndPatchAll(typeof(Patches), (string)null); Harmony.CreateAndPatchAll(typeof(LeaderboardUpdateScorePatch), (string)null); Logger.LogInfo((object)"Patches applied"); } } public static class MyPluginInfo { public const string PLUGIN_GUID = "ChooseLockerContents"; public const string PLUGIN_NAME = "Choose Locker Contents"; public const string PLUGIN_VERSION = "1.0.0"; } } [CompilerGenerated] internal sealed class <>z__ReadOnlyArray : IEnumerable, ICollection, IList, IEnumerable, IReadOnlyCollection, IReadOnlyList, ICollection, IList { int ICollection.Count => _items.Length; bool ICollection.IsSynchronized => false; object ICollection.SyncRoot => this; object IList.this[int index] { get { return _items[index]; } set { throw new NotSupportedException(); } } bool IList.IsFixedSize => true; bool IList.IsReadOnly => true; int IReadOnlyCollection.Count => _items.Length; T IReadOnlyList.this[int index] => _items[index]; int ICollection.Count => _items.Length; bool ICollection.IsReadOnly => true; T IList.this[int index] { get { return _items[index]; } set { throw new NotSupportedException(); } } public <>z__ReadOnlyArray(T[] items) { _items = items; } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable)_items).GetEnumerator(); } void ICollection.CopyTo(Array array, int index) { ((ICollection)_items).CopyTo(array, index); } int IList.Add(object value) { throw new NotSupportedException(); } void IList.Clear() { throw new NotSupportedException(); } bool IList.Contains(object value) { return ((IList)_items).Contains(value); } int IList.IndexOf(object value) { return ((IList)_items).IndexOf(value); } void IList.Insert(int index, object value) { throw new NotSupportedException(); } void IList.Remove(object value) { throw new NotSupportedException(); } void IList.RemoveAt(int index) { throw new NotSupportedException(); } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable)_items).GetEnumerator(); } void ICollection.Add(T item) { throw new NotSupportedException(); } void ICollection.Clear() { throw new NotSupportedException(); } bool ICollection.Contains(T item) { return ((ICollection)_items).Contains(item); } void ICollection.CopyTo(T[] array, int arrayIndex) { ((ICollection)_items).CopyTo(array, arrayIndex); } bool ICollection.Remove(T item) { throw new NotSupportedException(); } int IList.IndexOf(T item) { return ((IList)_items).IndexOf(item); } void IList.Insert(int index, T item) { throw new NotSupportedException(); } void IList.RemoveAt(int index) { throw new NotSupportedException(); } }