Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of RealerSolusWing v1.1.1
RealerSolusWing.dll
Decompiled a day agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; 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 EntityStates.SolusWing; using EntityStates.SolusWing2; using HarmonyLib; using Microsoft.CodeAnalysis; using On.RoR2; using On.RoR2.SolusWing; using R2API; using RoR2; using RoR2.SolusWing; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Networking; [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("RealerSolusWing")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+ea7a57ac5190360172084d86053441cddf8f29a2")] [assembly: AssemblyProduct("RealerSolusWing")] [assembly: AssemblyTitle("RealerSolusWing")] [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.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [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 RealerSolusWing { [BepInPlugin("prodzpod.RealerSolusWing", "RealerSolusWing", "1.1.1")] public class Main : BaseUnityPlugin { public enum GameMode { TotalHPFraction, HealWeakPoints } public class RealerSolusWingController : NetworkBehaviour { public void Start() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) ((Component)this).GetComponent<CharacterBody>().inventory.GiveItemPermanent(ItemCatalog.FindItemIndex("SOLUS_HP_MULTIPLIER"), 1); foreach (CharacterBody weakpointBody in ((Component)this).GetComponent<SolusWingWeakPointsController>().WeakpointBodies) { weakpointBody.inventory.GiveItemPermanent(ItemCatalog.FindItemIndex("WEAKPOINT_HP_MULTIPLIER"), 1); } } public void Update() { CharacterBody component = ((Component)this).GetComponent<CharacterBody>(); SolusWingWeakPointsController component2 = ((Component)this).GetComponent<SolusWingWeakPointsController>(); if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component2)) { if (ShouldBeImmune(component2) && !component.HasBuff(Buffs.Immune)) { component.AddBuff(Buffs.Immune); } if (!ShouldBeImmune(component2) && component.HasBuff(Buffs.Immune)) { component.RemoveBuff(Buffs.Immune); } } } public bool ShouldBeImmune(SolusWingWeakPointsController controller) { if (!CoreImmune.Value || !Object.op_Implicit((Object)(object)controller)) { return false; } if (!controller.anyWeakpointsAlive) { return false; } if (Mode.Value == GameMode.HealWeakPoints && controller.glitchStateMachine.state is GlitchState) { return false; } return true; } } [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_Awake <>9__16_0; public static hook_IsBossHealthBelowThreshhold <>9__16_1; public static hook_onWeakpointDestroyedServer <>9__16_2; public static Predicate<ItemCountPair> <>9__16_5; public static StatHookEventHandler <>9__16_4; internal void <Awake>b__16_0(orig_Awake orig, SolusWingWeakPointsController self) { orig.Invoke(self); ((Component)self).gameObject.AddComponent<RealerSolusWingController>(); } internal bool <Awake>b__16_1(orig_IsBossHealthBelowThreshhold orig, SolutionalHauntReferences self, float perc) { bool result = orig.Invoke(self, perc); if (Mode.Value == GameMode.HealWeakPoints) { return result; } if (!self.bossWasOriginallySpawned || !Object.op_Implicit((Object)(object)self.solusBoss)) { return false; } List<CharacterBody> weakpointBodies = ((Component)self.solusBoss).GetComponent<SolusWingWeakPointsController>().WeakpointBodies; float num = 0f; foreach (CharacterBody item in weakpointBodies) { if (item.healthComponent.alive) { num += item.healthComponent.combinedHealthFraction; } } num /= (float)weakpointBodies.Count; return self.bossWasOriginallySpawned && num < perc; } internal void <Awake>b__16_2(orig_onWeakpointDestroyedServer orig, SolusWingWeakPointsController self, GameObject weakpoint, CharacterBody body) { //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, weakpoint, body); if (Mode.Value != GameMode.HealWeakPoints) { return; } foreach (CharacterBody weakpointBody in self.WeakpointBodies) { weakpointBody.healthComponent.HealFraction(1f, default(ProcChainMask)); } } internal bool <Awake>b__16_5(ItemCountPair x) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) return (Object)(object)x.itemDef == (Object)(object)Items.LunarDagger; } internal void <Awake>b__16_4(CharacterBody body, StatHookEventArgs args) { //IL_0031: 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) //IL_0097: Unknown result type (might be due to invalid IL or missing references) Inventory val = ((body != null) ? body.inventory : null); if (val != null && Object.op_Implicit((Object)(object)val)) { if (body.inventory.GetItemCountEffective(ItemCatalog.FindItemIndex("SOLUS_HP_MULTIPLIER")) > 0) { args.healthTotalMult *= SolusHP.Value; } if (body.inventory.GetItemCountEffective(ItemCatalog.FindItemIndex("WEAKPOINT_HP_MULTIPLIER")) > 0) { args.healthTotalMult *= WeakPointHP.Value; } if (body.inventory.GetItemCountEffective(ItemCatalog.FindItemIndex("MULT_HP_MULTIPLIER")) > 0) { args.healthTotalMult *= MulTHP.Value; } } } } public const string PluginGUID = "prodzpod.RealerSolusWing"; public const string PluginAuthor = "prodzpod"; public const string PluginName = "RealerSolusWing"; public const string PluginVersion = "1.1.1"; public static ManualLogSource Log; public static PluginInfo pluginInfo; public static ConfigFile Config; public static ConfigEntry<bool> CoreImmune; public static ConfigEntry<GameMode> Mode; public static ConfigEntry<float> P1Threshold; public static ConfigEntry<float> P2Threshold; public static ConfigEntry<int> MulTGlasses; public static ConfigEntry<float> SolusHP; public static ConfigEntry<float> WeakPointHP; public static ConfigEntry<float> MulTHP; public void Awake() { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Expected O, but got Unknown //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Expected O, but got Unknown //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Expected O, but got Unknown //IL_01e2: Unknown result type (might be due to invalid IL or missing references) //IL_01e7: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Expected O, but got Unknown //IL_0250: Unknown result type (might be due to invalid IL or missing references) //IL_0257: Expected O, but got Unknown //IL_026d: Unknown result type (might be due to invalid IL or missing references) //IL_028c: Unknown result type (might be due to invalid IL or missing references) //IL_0296: Expected O, but got Unknown //IL_02ab: Unknown result type (might be due to invalid IL or missing references) //IL_02b0: Unknown result type (might be due to invalid IL or missing references) //IL_02b6: Expected O, but got Unknown pluginInfo = ((BaseUnityPlugin)this).Info; Log = ((BaseUnityPlugin)this).Logger; Config = new ConfigFile(Path.Combine(Paths.ConfigPath, "prodzpod.RealerSolusWing.cfg"), true); CoreImmune = Config.Bind<bool>("General", "Make Main Core Immune to Damage", true, "while orbs are active makes it fully immune instead of armor 100 so you can't cheese P1 and lame gameplay"); Mode = Config.Bind<GameMode>("General", "Game Mode", GameMode.TotalHPFraction, "AVAILABLE MODES: phases progress based on the combined health of the four weak points / heal the other weakpoints when one is destroyed"); P1Threshold = Config.Bind<float>("General", "Phase 1 HP Threshold", 90f, "total HP percentage required to pass P1"); P2Threshold = Config.Bind<float>("General", "Phase 2 HP Threshold", 40f, "total HP percentage required to pass P2"); SolusHP = Config.Bind<float>("General", "Solus Wing HP Multiplier", 0.25f, "Health multiplier (if core is immune, this is the health for desperation phase)"); WeakPointHP = Config.Bind<float>("General", "Weak Point HP Multiplier", 1f, "Health multiplier"); MulTGlasses = Config.Bind<int>("Fun", "Umbra of Mul-T Shaped Glass Amount", 1, "less hp for more dmg"); MulTHP = Config.Bind<float>("Fun", "Umbra of Mul-T HP Multiplier", 1f, "Health multiplier"); object obj = <>c.<>9__16_0; if (obj == null) { hook_Awake val = delegate(orig_Awake orig, SolusWingWeakPointsController self) { orig.Invoke(self); ((Component)self).gameObject.AddComponent<RealerSolusWingController>(); }; <>c.<>9__16_0 = val; obj = (object)val; } SolusWingWeakPointsController.Awake += (hook_Awake)obj; object obj2 = <>c.<>9__16_1; if (obj2 == null) { hook_IsBossHealthBelowThreshhold val2 = delegate(orig_IsBossHealthBelowThreshhold orig, SolutionalHauntReferences self, float perc) { bool result = orig.Invoke(self, perc); if (Mode.Value == GameMode.HealWeakPoints) { return result; } if (!self.bossWasOriginallySpawned || !Object.op_Implicit((Object)(object)self.solusBoss)) { return false; } List<CharacterBody> weakpointBodies = ((Component)self.solusBoss).GetComponent<SolusWingWeakPointsController>().WeakpointBodies; float num2 = 0f; foreach (CharacterBody item in weakpointBodies) { if (item.healthComponent.alive) { num2 += item.healthComponent.combinedHealthFraction; } } num2 /= (float)weakpointBodies.Count; return self.bossWasOriginallySpawned && num2 < perc; }; <>c.<>9__16_1 = val2; obj2 = (object)val2; } SolutionalHauntReferences.IsBossHealthBelowThreshhold += (hook_IsBossHealthBelowThreshhold)obj2; object obj3 = <>c.<>9__16_2; if (obj3 == null) { hook_onWeakpointDestroyedServer val3 = delegate(orig_onWeakpointDestroyedServer orig, SolusWingWeakPointsController self, GameObject weakpoint, CharacterBody body) { //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, weakpoint, body); if (Mode.Value == GameMode.HealWeakPoints) { foreach (CharacterBody weakpointBody in self.WeakpointBodies) { weakpointBody.healthComponent.HealFraction(1f, default(ProcChainMask)); } } }; <>c.<>9__16_2 = val3; obj3 = (object)val3; } SolusWingWeakPointsController.onWeakpointDestroyedServer += (hook_onWeakpointDestroyedServer)obj3; SolusWing2BaseMissionState.healthPercentageForPhase2 = P1Threshold.Value / 100f; SolusWing2BaseMissionState.healthPercentageForPhase3 = P2Threshold.Value / 100f; CharacterSpawnCard _csc = Addressables.LoadAssetAsync<CharacterSpawnCard>((object)"RoR2/DLC3/solutionalhaunt/cscVultureMulTInvader.asset").WaitForCompletion(); string[] array = new string[3] { "SOLUS_HP_MULTIPLIER", "WEAKPOINT_HP_MULTIPLIER", "MULT_HP_MULTIPLIER" }; foreach (string text in array) { ItemTag[] array2 = new ItemTag[4]; RuntimeHelpers.InitializeArray(array2, (RuntimeFieldHandle)/*OpCode not supported: LdMemberToken*/); CustomItem val4 = new CustomItem(text, "", "", "", "", (Sprite)null, (GameObject)null, (ItemTag[])(object)array2, (ItemTier)5, true, false, (UnlockableDef)null, Array.Empty<ItemDisplayRule>()); val4.ItemDef.tier = (ItemTier)5; val4.ItemDef.deprecatedTier = (ItemTier)5; ItemAPI.Add(val4); } ScriptedCombatEncounter.Awake += (hook_Awake)delegate(orig_Awake orig, ScriptedCombatEncounter self) { //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (self.spawns.Length != 0 && !((Object)(object)self.spawns[0].spawnCard != (Object)(object)_csc)) { CharacterSpawnCard val7 = (CharacterSpawnCard)self.spawns[0].spawnCard; int num = val7.itemsToGrant.ToList().FindIndex((ItemCountPair x) => (Object)(object)x.itemDef == (Object)(object)Items.LunarDagger); val7.itemsToGrant[num].count = MulTGlasses.Value; CollectionExtensions.AddToArray<ItemCountPair>(val7.itemsToGrant, new ItemCountPair { itemDef = ItemCatalog.GetItemDef(ItemCatalog.FindItemIndex("MULT_HP_MULTIPLIER")), count = 1 }); } }; object obj4 = <>c.<>9__16_4; if (obj4 == null) { StatHookEventHandler val5 = delegate(CharacterBody body, StatHookEventArgs args) { //IL_0031: 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) //IL_0097: Unknown result type (might be due to invalid IL or missing references) Inventory val6 = ((body != null) ? body.inventory : null); if (val6 != null && Object.op_Implicit((Object)(object)val6)) { if (body.inventory.GetItemCountEffective(ItemCatalog.FindItemIndex("SOLUS_HP_MULTIPLIER")) > 0) { args.healthTotalMult *= SolusHP.Value; } if (body.inventory.GetItemCountEffective(ItemCatalog.FindItemIndex("WEAKPOINT_HP_MULTIPLIER")) > 0) { args.healthTotalMult *= WeakPointHP.Value; } if (body.inventory.GetItemCountEffective(ItemCatalog.FindItemIndex("MULT_HP_MULTIPLIER")) > 0) { args.healthTotalMult *= MulTHP.Value; } } }; <>c.<>9__16_4 = val5; obj4 = (object)val5; } RecalculateStatsAPI.GetStatCoefficients += (StatHookEventHandler)obj4; } } }