Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of TeleExpansion v1.2.1
TeleExpansion.dll
Decompiled 5 months agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using IL.RoR2; using Mono.Cecil.Cil; using MonoMod.Cil; using On.RoR2; using RoR2; using UnityEngine; using UnityEngine.AddressableAssets; [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("TeleExpansion")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("TeleExpansion")] [assembly: AssemblyTitle("TeleExpansion")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace TeleExpansion { [BepInPlugin("com.Moffein.TeleExpansion", "Tele Expansion", "1.2.1")] public class TeleExpansion : BaseUnityPlugin { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_UpdateMonstersClear <>9__9_0; public static Func<Instruction, bool> <>9__11_1; public static Func<float, HoldoutZoneController, float> <>9__11_0; internal void <Awake>b__9_0(orig_UpdateMonstersClear orig, TeleporterInteraction self) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Invalid comparison between Unknown and I4 //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (self.monstersCleared && Object.op_Implicit((Object)(object)self.holdoutZoneController) && (int)self.activationState == 2 && self.chargeFraction > 0.05f && Util.GetItemCountForTeam(self.holdoutZoneController.chargingTeam, Items.FocusConvergence.itemIndex, true, true) <= 0) { self.holdoutZoneController.currentRadius = 1000000f; } } internal bool <HoldoutZoneController_DoUpdate>b__11_1(Instruction x) { return ILPatternMatchingExt.MatchStloc(x, 3); } internal float <HoldoutZoneController_DoUpdate>b__11_0(float radius, HoldoutZoneController self) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Invalid comparison between Unknown and I4 //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Invalid comparison between Unknown and I4 if ((int)self.chargingTeam == 1) { int num = 0; foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances) { if (instance.isConnected && Object.op_Implicit((Object)(object)instance.master) && (int)instance.master.teamIndex == 1) { num++; } } if (num > 4) { radius *= 1f + (float)Mathf.Min(largePlayercountMaxPlayers, num - 4) * largePlayercountMultPerPlayer; } } return radius; } } public static bool enableExpand = true; public static bool largePlayercountMult = true; public static float largePlayercountMultPerPlayer = 0.1f; public static int largePlayercountMaxPlayers = 8; public static float teleRadiusMult = 1f; public static float teleDurationMult = 1f; public static float smallHoldoutRadiusMult = 1f; public static float smallHoldoutDurationMult = 1f; public void ReadConfig() { enableExpand = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Enable Expansion", true, "Teleporter radius expands to cover the whole map when the boss dies.").Value; teleRadiusMult = ((BaseUnityPlugin)this).Config.Bind<float>("Teleporter", "Radius Multiplier", 1f, "Multiplies the radius by this amount.").Value; teleDurationMult = ((BaseUnityPlugin)this).Config.Bind<float>("Teleporter", "Duration Multiplier", 1f, "Multiplies the duration by this amount.").Value; smallHoldoutRadiusMult = ((BaseUnityPlugin)this).Config.Bind<float>("Small Holdout", "Radius Multiplier", 1f, "Multiplies the radius by this amount.").Value; smallHoldoutDurationMult = ((BaseUnityPlugin)this).Config.Bind<float>("Small Holdout", "Duration Multiplier", 1f, "Multiplies the duration by this amount.").Value; largePlayercountMult = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Large Playercount Multiplier", true, "Holdout radius is increased when above 4 players.").Value; largePlayercountMultPerPlayer = ((BaseUnityPlugin)this).Config.Bind<float>("General", "Large Playercount Multiplier Per Player", 0.1f, "Radius increase per player over 4.").Value; largePlayercountMaxPlayers = ((BaseUnityPlugin)this).Config.Bind<int>("General", "Large Playercount Max Increases", 8, "Maximum amount of radius increases to apply.").Value; } public void Awake() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown ReadConfig(); if (enableExpand) { object obj = <>c.<>9__9_0; if (obj == null) { hook_UpdateMonstersClear val = delegate(orig_UpdateMonstersClear orig, TeleporterInteraction self) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Invalid comparison between Unknown and I4 //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (self.monstersCleared && Object.op_Implicit((Object)(object)self.holdoutZoneController) && (int)self.activationState == 2 && self.chargeFraction > 0.05f && Util.GetItemCountForTeam(self.holdoutZoneController.chargingTeam, Items.FocusConvergence.itemIndex, true, true) <= 0) { self.holdoutZoneController.currentRadius = 1000000f; } }; <>c.<>9__9_0 = val; obj = (object)val; } TeleporterInteraction.UpdateMonstersClear += (hook_UpdateMonstersClear)obj; } ModifyTeleporters(); ModifySmallHoldouts(); ModifyLargePlayercount(); } private void ModifyLargePlayercount() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown if (largePlayercountMult) { HoldoutZoneController.DoUpdate += new Manipulator(HoldoutZoneController_DoUpdate); } } private void HoldoutZoneController_DoUpdate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_003c: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchStloc(x, 3) })) { val.Emit(OpCodes.Ldarg_0); val.EmitDelegate<Func<float, HoldoutZoneController, float>>((Func<float, HoldoutZoneController, float>)delegate(float radius, HoldoutZoneController self) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Invalid comparison between Unknown and I4 //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Invalid comparison between Unknown and I4 if ((int)self.chargingTeam == 1) { int num = 0; foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances) { if (instance.isConnected && Object.op_Implicit((Object)(object)instance.master) && (int)instance.master.teamIndex == 1) { num++; } } if (num > 4) { radius *= 1f + (float)Mathf.Min(largePlayercountMaxPlayers, num - 4) * largePlayercountMultPerPlayer; } } return radius; }); } else { Debug.LogError((object)"TeleExpansion: HoldoutZoneController_DoUpdate IL hook failed."); } } private void HoldoutZoneController_Awake(orig_Awake orig, HoldoutZoneController self) { throw new NotImplementedException(); } private void ModifyTeleporters() { //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) if (teleRadiusMult != 1f || teleDurationMult != 1f) { string[] array = new string[2] { "RoR2/Base/Teleporters/LunarTeleporter Variant.prefab", "RoR2/Base/Teleporters/Teleporter1.prefab" }; string[] array2 = array; foreach (string text in array2) { ModifyHoldout(Addressables.LoadAssetAsync<GameObject>((object)text).WaitForCompletion(), teleDurationMult, teleRadiusMult); } } } private void ModifySmallHoldouts() { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Expected O, but got Unknown //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) if (smallHoldoutRadiusMult != 1f || smallHoldoutDurationMult != 1f) { string[] array = new string[2] { "RoR2/DLC1/DeepVoidPortalBattery/DeepVoidPortalBattery.prefab", "RoR2/Base/NullSafeWard/NullSafeWard.prefab" }; HoldoutZoneController.Start += new hook_Start(ModifyMoonHoldout); string[] array2 = array; foreach (string text in array2) { ModifyHoldout(Addressables.LoadAssetAsync<GameObject>((object)text).WaitForCompletion(), smallHoldoutDurationMult, smallHoldoutRadiusMult); } string value = Mathf.RoundToInt(15f * smallHoldoutRadiusMult).ToString(); SetAddressableEntityStateField("RoR2/Base/NullSafeWard/EntityStates.Missions.Arena.NullWard.NullWardBaseState.asset", "wardRadiusOn", value); } } private void ModifyMoonHoldout(orig_Start orig, HoldoutZoneController self) { if (self.inBoundsObjectiveToken.Contains("OBJECTIVE_MOON_BATTERY")) { self.baseRadius *= smallHoldoutRadiusMult; self.baseChargeDuration *= smallHoldoutDurationMult; } orig.Invoke(self); } public static void ModifyHoldout(GameObject gameObject, float durationMult, float radiusMult) { HoldoutZoneController component = gameObject.GetComponent<HoldoutZoneController>(); component.baseChargeDuration *= durationMult; component.baseRadius *= radiusMult; } private static bool SetAddressableEntityStateField(string fullEntityStatePath, string fieldName, string value) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) EntityStateConfiguration val = Addressables.LoadAssetAsync<EntityStateConfiguration>((object)fullEntityStatePath).WaitForCompletion(); for (int i = 0; i < val.serializedFieldsCollection.serializedFields.Length; i++) { if (val.serializedFieldsCollection.serializedFields[i].fieldName == fieldName) { val.serializedFieldsCollection.serializedFields[i].fieldValue.stringValue = value; return true; } } return false; } } } namespace R2API.Utils { [AttributeUsage(AttributeTargets.Assembly)] public class ManualNetworkRegistrationAttribute : Attribute { } }