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 MonarchsStarstormEdits v0.1.0
MonarchStarstormEdits.dll
Decompiled 4 months 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.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using MonarchStarstormEdits.patches; using Mono.Cecil.Cil; using MonoMod.Cil; using RoR2; using RoR2.ExpansionManagement; using RoR2BepInExPack.GameAssetPaths.Version_1_35_0; using SS2; using SS2.Components; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Networking; using UnityHotReloadNS; [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("MonarchStarstormEdits")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+8867b6cb6ab144ec433c853e05f8a92e8f0f0403")] [assembly: AssemblyProduct("MonarchStarstormEdits")] [assembly: AssemblyTitle("MonarchStarstormEdits")] [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 MonarchStarstormEdits { 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("icebro.MonarchStarstormEdits", "MonarchStarstormEdits", "0.0.1")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class MonarchStarstormEdits : BaseUnityPlugin { private const string PluginGUID = "icebro.MonarchStarstormEdits"; private const string PluginAuthor = "icebro"; private const string PluginName = "MonarchStarstormEdits"; private const string PluginVersion = "0.0.1"; private static bool UHRInstalled => Chainloader.PluginInfos.ContainsKey("iDeathHD.UnityHotReload"); public void Awake() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected O, but got Unknown Log.Init(((BaseUnityPlugin)this).Logger); Harmony harmony = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID); IEnumerable<Type> enumerable = from type in Assembly.GetExecutingAssembly().GetTypes() where !type.IsAbstract && type.IsSubclassOf(typeof(PatchBase)) select type; foreach (Type item in enumerable) { PatchBase patchBase = (PatchBase)Activator.CreateInstance(item); try { patchBase.Config(((BaseUnityPlugin)this).Config); patchBase.Init(harmony); } catch (Exception data) { Log.Error(data); } } } private void Update() { if (Input.GetKeyUp((KeyCode)286)) { if (UHRInstalled) { UHRSupport.hotReload(typeof(MonarchStarstormEdits).Assembly, Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "MonarchStarstormEdits.dll")); } else { Log.Debug("couldnt finds unity hot reload !!"); } } } } internal static class UHRSupport { internal static void hotReload(Assembly assembly, string path) { UnityHotReload.LoadNewAssemblyVersion(assembly, path); } } } namespace MonarchStarstormEdits.patches { public class etherealSaplingChanges : PatchBase<etherealSaplingChanges> { [HarmonyPatch] public class Starstorm2EtherealChanges { [HarmonyPatch(typeof(TraderController), "BeginTrade")] [HarmonyPrefix] public static void BeginTradePrefix(TraderController __instance, int intPickupIndex) { Log.Debug(intPickupIndex); } [HarmonyPatch(typeof(EtherealBehavior), "SpawnShrine")] [HarmonyPrefix] public static bool SpawnShrinePostFix(EtherealBehavior __instance) { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Expected O, but got Unknown float num = Run.instance.runRNG.RangeFloat(0f, 1f); if (num <= spawnChance.Value) { Log.Debug("spawning shrine !!"); if (sendChatMessage.Value) { Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage { baseToken = chatMessage.Value }); } return true; } Log.Debug("not spawning ethereal shrine !! "); return false; } [HarmonyPatch(typeof(EtherealBehavior), "Start")] [HarmonyPrefix] public static void StartPostFix(EtherealBehavior __instance) { EtherealBehavior.alwaysReplaceNewts = false; } [HarmonyPatch(typeof(EtherealBehavior), "ReplaceRandomNewtStatue")] [HarmonyPrefix] public static bool ReplaceRandomNewtStatuePostFix(EtherealBehavior __instance) { //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0091: 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) PortalStatueBehavior[] source = (from p in Object.FindObjectsOfType<PortalStatueBehavior>(true) where (int)p.portalType == 0 select p).ToArray(); PortalStatueBehavior[] array = source.Where((PortalStatueBehavior p) => !((Component)p).gameObject.activeInHierarchy).ToArray(); if (array.Length != 0) { Transform transform = ((Component)array[Random.Range(0, array.Length)]).transform; GameObject val = Object.Instantiate<GameObject>(EtherealBehavior.shrinePrefab, transform.position + Vector3.up * -1.2f, transform.rotation); NetworkServer.Spawn(val); } else { Log.Debug("idk something bad happened ,..,,."); } return false; } [HarmonyPatch(typeof(ShrineEtherealBehavior), "ActivateEtherealTerminal")] [HarmonyPrefix] public static bool ActivateEtherealTerminalPrefix(ShrineEtherealBehavior __instance, Interactor interactor) { //IL_0257: Unknown result type (might be due to invalid IL or missing references) //IL_025c: Unknown result type (might be due to invalid IL or missing references) //IL_0264: Unknown result type (might be due to invalid IL or missing references) //IL_0274: Expected O, but got Unknown //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown //IL_02cd: Unknown result type (might be due to invalid IL or missing references) //IL_02d2: Unknown result type (might be due to invalid IL or missing references) //IL_038c: Unknown result type (might be due to invalid IL or missing references) //IL_0391: Unknown result type (might be due to invalid IL or missing references) //IL_03b1: Unknown result type (might be due to invalid IL or missing references) //IL_03bb: Unknown result type (might be due to invalid IL or missing references) //IL_0608: Unknown result type (might be due to invalid IL or missing references) //IL_060d: Unknown result type (might be due to invalid IL or missing references) //IL_0634: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_01c2: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Unknown result type (might be due to invalid IL or missing references) //IL_0418: Unknown result type (might be due to invalid IL or missing references) //IL_041d: Unknown result type (might be due to invalid IL or missing references) //IL_0421: Unknown result type (might be due to invalid IL or missing references) //IL_0426: Unknown result type (might be due to invalid IL or missing references) //IL_0495: Unknown result type (might be due to invalid IL or missing references) //IL_04c6: Unknown result type (might be due to invalid IL or missing references) //IL_04f7: Unknown result type (might be due to invalid IL or missing references) //IL_0509: Unknown result type (might be due to invalid IL or missing references) //IL_053a: Unknown result type (might be due to invalid IL or missing references) //IL_053f: Unknown result type (might be due to invalid IL or missing references) //IL_0543: Unknown result type (might be due to invalid IL or missing references) //IL_0548: Unknown result type (might be due to invalid IL or missing references) //IL_0578: Unknown result type (might be due to invalid IL or missing references) //IL_057d: Unknown result type (might be due to invalid IL or missing references) //IL_058f: Unknown result type (might be due to invalid IL or missing references) //IL_0594: Unknown result type (might be due to invalid IL or missing references) //IL_059a: Unknown result type (might be due to invalid IL or missing references) //IL_05a8: Unknown result type (might be due to invalid IL or missing references) //IL_05ad: Unknown result type (might be due to invalid IL or missing references) //IL_05b1: Unknown result type (might be due to invalid IL or missing references) //IL_05b6: Unknown result type (might be due to invalid IL or missing references) //IL_05ca: Unknown result type (might be due to invalid IL or missing references) if (__instance.purchaseCount >= 1) { CharacterBody component = ((Component)interactor).GetComponent<CharacterBody>(); Chat.SendBroadcastChat((ChatMessageBase)new SubjectFormatChatMessage { baseToken = "<style=cIsHealing>The gods feel as if mocked...</style>" }); ((Component)__instance).gameObject.GetComponent<EtherealShrineActivator>().kill = true; if ((Object)(object)__instance.childLocator != (Object)null) { ((Component)__instance.childLocator.FindChild("Loop")).gameObject.SetActive(false); } __instance.waitingForRefresh = false; __instance.purchaseInteraction.SetAvailable(false); GameObject gameObject = ((Component)((Component)__instance).transform.Find("ChargeBFG(Clone)")).gameObject; ParticleSystem[] array = (ParticleSystem[])(object)new ParticleSystem[5] { ((Component)gameObject.transform.GetChild(1).GetChild(0)).GetComponent<ParticleSystem>(), ((Component)gameObject.transform.GetChild(1).GetChild(1)).GetComponent<ParticleSystem>(), ((Component)gameObject.transform.GetChild(1).GetChild(2)).GetComponent<ParticleSystem>(), ((Component)gameObject.transform.GetChild(1).GetChild(3)).GetComponent<ParticleSystem>(), ((Component)gameObject.transform.GetChild(1).GetChild(4)).GetComponent<ParticleSystem>() }; ParticleSystem[] array2 = array; foreach (ParticleSystem val in array2) { val.Stop(false, (ParticleSystemStopBehavior)1); } ShakeEmitter val2 = ((Component)__instance).gameObject.AddComponent<ShakeEmitter>(); val2.shakeOnStart = true; val2.duration = 0.5f; val2.radius = 200f; val2.startDelay = 0f; val2.wave = new Wave { amplitude = 0.5f, frequency = 3f, cycleOffset = 0f }; val2.amplitudeTimeDecay = true; val2.StartShake(); ((Component)((Component)__instance).transform.GetChild(0).GetChild(0).GetChild(0)).GetComponent<ParticleSystem>().Stop(true, (ParticleSystemStopBehavior)1); return false; } __instance.purchaseInteraction.contextToken = "SS2_ETHEREAL_WARNING2"; __instance.purchaseInteraction.displayNameToken = "SS2_ETHEREAL_NAME2"; __instance.purchaseCount++; __instance.refreshTimer = 2f; Util.PlaySound("Play_UI_shrineActivate", ((Component)__instance).gameObject); CharacterBody component2 = ((Component)interactor).GetComponent<CharacterBody>(); Chat.SendBroadcastChat((ChatMessageBase)new SubjectFormatChatMessage { subjectAsCharacterBody = component2, baseToken = "SS2_SHRINE_ETHEREAL_WARN_MESSAGE" }); if ((Object)(object)__instance.childLocator != (Object)null) { ((Component)__instance.childLocator.FindChild("Loop")).gameObject.SetActive(true); ((Component)__instance.childLocator.FindChild("Symbol")).gameObject.SetActive(false); } __instance.waitingForRefresh = true; GameObject val3 = Object.Instantiate<GameObject>(Addressables.LoadAssetAsync<GameObject>((object)RoR2_Base_BFG.ChargeBFG_prefab).WaitForCompletion(), ((Component)__instance).transform); ParticleSystem[] array3 = (ParticleSystem[])(object)new ParticleSystem[5] { ((Component)val3.transform.GetChild(1).GetChild(0)).GetComponent<ParticleSystem>(), ((Component)val3.transform.GetChild(1).GetChild(1)).GetComponent<ParticleSystem>(), ((Component)val3.transform.GetChild(1).GetChild(2)).GetComponent<ParticleSystem>(), ((Component)val3.transform.GetChild(1).GetChild(3)).GetComponent<ParticleSystem>(), ((Component)val3.transform.GetChild(1).GetChild(4)).GetComponent<ParticleSystem>() }; ((Component)array3[3]).gameObject.SetActive(true); for (int j = 0; j < array3.Length; j++) { MainModule main = array3[j].main; ((MainModule)(ref main)).duration = ((MainModule)(ref main)).duration * 3.3333333f; Transform transform = ((Component)array3[j]).transform; transform.localScale *= 3f; switch (j) { case 0: { ((MainModule)(ref main)).simulationSpeed = 1f; ((MainModule)(ref main)).maxParticles = 400; ((MainModule)(ref main)).startSizeMultiplier = 1.2f; EmissionModule emission = array3[0].emission; MinMaxCurve rateOverTime = ((EmissionModule)(ref emission)).rateOverTime; Log.Debug(((Keyframe)(ref ((MinMaxCurve)(ref rateOverTime)).curve.keys[1])).value); ((Keyframe)(ref ((MinMaxCurve)(ref rateOverTime)).curve.keys[0])).value = 0.6f; Log.Debug(((Keyframe)(ref ((MinMaxCurve)(ref rateOverTime)).curve.keys[0])).value); break; } case 1: ((MainModule)(ref main)).startSize = MinMaxCurve.op_Implicit(2f); ((MainModule)(ref main)).simulationSpeed = 0.3f; ((MainModule)(ref main)).duration = 2f; break; case 2: ((MainModule)(ref main)).startSize = MinMaxCurve.op_Implicit(4f); ((MainModule)(ref main)).simulationSpeed = 0.3f; ((MainModule)(ref main)).duration = 2f; break; case 3: { ((MainModule)(ref main)).startSize = MinMaxCurve.op_Implicit(4f); ((MainModule)(ref main)).startLifetime = MinMaxCurve.op_Implicit(2f); ((MainModule)(ref main)).simulationSpeed = 0.3f; ((MainModule)(ref main)).duration = 2f; ((MainModule)(ref main)).maxParticles = 1; ColorOverLifetimeModule colorOverLifetime = array3[3].colorOverLifetime; MinMaxGradient color = ((ColorOverLifetimeModule)(ref colorOverLifetime)).color; Gradient gradient = ((MinMaxGradient)(ref color)).gradient; GradientColorKey[] colorKeys = gradient.colorKeys; colorKeys[0].color = new Color(0f, 1f, 0f, 1f); gradient.colorKeys = colorKeys; ColorOverLifetimeModule colorOverLifetime2 = array3[3].colorOverLifetime; ((ColorOverLifetimeModule)(ref colorOverLifetime2)).color = MinMaxGradient.op_Implicit(gradient); colorOverLifetime = array3[3].colorOverLifetime; color = ((ColorOverLifetimeModule)(ref colorOverLifetime)).color; Log.Debug(((MinMaxGradient)(ref color)).gradient.colorKeys[0].color); break; } case 4: ((MainModule)(ref main)).startSizeMultiplier = 2f; break; } } Vector3 localPosition = val3.transform.localPosition; localPosition.y += 2.3f; localPosition.z -= 0.3f; val3.transform.localPosition = localPosition; ((Component)__instance).gameObject.AddComponent<EtherealShrineActivator>().interactor = interactor; return false; } } public class EtherealShrineActivator : MonoBehaviour { public float timer; public Interactor interactor; public bool kill; private void FixedUpdate() { //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Expected O, but got Unknown //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) timer += Time.fixedDeltaTime; if (!(timer >= 6.6666665f)) { return; } if (kill) { Object.Destroy((Object)(object)this); return; } ShrineEtherealBehavior component = ((Component)this).GetComponent<ShrineEtherealBehavior>(); component.DisableShrine((TeleporterInteraction)null); component.waitingForRefresh = true; if (Object.op_Implicit((Object)(object)TeleporterUpgradeController.instance)) { TeleporterUpgradeController.instance.UpgradeEthereal(); } CharacterBody component2 = ((Component)interactor).GetComponent<CharacterBody>(); Chat.SendBroadcastChat((ChatMessageBase)new SubjectFormatChatMessage { subjectAsCharacterBody = component2, baseToken = "SS2_SHRINE_ETHEREAL_USE_MESSAGE" }); Util.PlaySound("EtherealBell", ((Component)component).gameObject); component.purchaseCount++; component.refreshTimer = 2f; ShakeEmitter val = ((Component)this).gameObject.AddComponent<ShakeEmitter>(); val.shakeOnStart = true; val.duration = 0.25f; val.radius = 200f; val.startDelay = 0f; val.wave = new Wave { amplitude = 0.5f, frequency = 3f, cycleOffset = 0f }; val.amplitudeTimeDecay = true; val.StartShake(); ((Component)((Component)this).transform.Find("ChargeBFG(Clone)")).gameObject.SetActive(false); Object.Destroy((Object)(object)this); } } private static ConfigEntry<bool> etherealChanges; private static ConfigEntry<float> spawnChance; private static ConfigEntry<bool> sendChatMessage; private static ConfigEntry<string> chatMessage; public override void Init(Harmony harmony) { if (etherealChanges.Value) { harmony.CreateClassProcessor(typeof(Starstorm2EtherealChanges)).Patch(); } } public override void Config(ConfigFile config) { etherealChanges = config.Bind<bool>("ethereal shrine change s,s,.,.", "apply any ethereal sapling changes at al l !!", true, "byeah ,.,"); spawnChance = config.Bind<float>("ethereal shrine change s,s,.,.", "chance in percent to spawn ethereal shrine !! 1 is 100% ,.,,.", 0.5f, "byeah ,.,"); sendChatMessage = config.Bind<bool>("ethereal shrine change s,s,.,.", "should if a shrine spawn send a chat message !!", true, "byeah ,.,"); chatMessage = config.Bind<string>("ethereal shrine change s,s,.,.", "said chat message if chat message enabled ,,.", "<style=\"cIsHealing\">Unknown forces start to coalesce...</style>", "byeah ,.,"); } } public class etherealUpgradeChanges : PatchBase<etherealUpgradeChanges> { [HarmonyPatch] public class Starstorm2EtherealUpgradeChanges { [HarmonyPatch(typeof(EtherealBehavior), "UpdateDifficulty")] [HarmonyPrefix] public static bool BeginTradePrefix(EtherealBehavior __instance) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Invalid comparison between Unknown and I4 //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Expected I4, but got Unknown //IL_00c3: 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) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) DifficultyDef difficultyDef = DifficultyCatalog.GetDifficultyDef(__instance.run.selectedDifficulty); Log.Debug(((object)difficultyDef)?.ToString() + "current dif f,..,.,,. name token = " + difficultyDef.nameToken); if (!difficultyDef.nameToken.Contains("ECLIPSE")) { return true; } if ((int)__instance.run.selectedDifficulty != 10 && etherealEclipseUpgrade.Value) { Log.Debug("upgrading eclipse number !! "); Run run = __instance.run; DifficultyIndex selectedDifficulty = __instance.run.selectedDifficulty; if (1 == 0) { } DifficultyIndex selectedDifficulty2 = (DifficultyIndex)((selectedDifficulty - 3) switch { 0 => 4, 1 => 5, 2 => 6, 3 => 7, 4 => 8, 5 => 9, 6 => 10, _ => __instance.run.selectedDifficulty, }); if (1 == 0) { } run.selectedDifficulty = selectedDifficulty2; } else { Log.Debug("e 8 ,.,., stacking instead !! "); } difficultyDef.scalingValue = EtherealDifficulty.GetDefaultScaling(__instance.run.selectedDifficulty) + etherealEclipseUpgradeStack.Value; return false; } } private static ConfigEntry<bool> etherealEclipseChanges; private static ConfigEntry<bool> etherealEclipseUpgrade; private static ConfigEntry<float> etherealEclipseUpgradeStack; public override void Init(Harmony harmony) { if (etherealEclipseChanges.Value) { harmony.CreateClassProcessor(typeof(Starstorm2EtherealUpgradeChanges)).Patch(); } } public override void Config(ConfigFile config) { etherealEclipseChanges = config.Bind<bool>("ethereal stacking change s,s,.,.", "apply any ethereal eclipse changes at al l!!!", true, "byeah ,.,"); etherealEclipseUpgrade = config.Bind<bool>("ethereal stacking change s,s,.,.", "upgrade eclipse difficulty levels (eg e1 -> e2 !!", true, "byeah ,.,"); etherealEclipseUpgradeStack = config.Bind<float>("ethereal stacking change s,s,.,.", "amount to upgrade scaling difficulty by alongside eclipse upgrade (default is 0.5 like regular ethereal stacking.,,. applied alongside e1 -> e2 if thats also enabled,.,..", 0.5f, "byeah ,.,"); } } public class gamblerFix : PatchBase<gamblerFix> { [HarmonyPatch] public class Starstorm2GamblerFix { [HarmonyPatch(typeof(RewardDropper), "GeneratePickups")] [HarmonyPrefix] public static bool PickupPostFix(RewardDropper __instance) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: 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) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Invalid comparison between Unknown and I4 //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) //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_01ec: Unknown result type (might be due to invalid IL or missing references) //IL_021e: Unknown result type (might be due to invalid IL or missing references) //IL_0231: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_023e: Unknown result type (might be due to invalid IL or missing references) //IL_0243: Unknown result type (might be due to invalid IL or missing references) //IL_027d: Unknown result type (might be due to invalid IL or missing references) //IL_0282: 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_0294: Unknown result type (might be due to invalid IL or missing references) //IL_0296: Unknown result type (might be due to invalid IL or missing references) //IL_029b: Unknown result type (might be due to invalid IL or missing references) //IL_02e9: Unknown result type (might be due to invalid IL or missing references) //IL_030c: Unknown result type (might be due to invalid IL or missing references) //IL_0311: Unknown result type (might be due to invalid IL or missing references) //IL_0316: Unknown result type (might be due to invalid IL or missing references) //IL_0348: Unknown result type (might be due to invalid IL or missing references) //IL_035b: Unknown result type (might be due to invalid IL or missing references) //IL_0360: Unknown result type (might be due to invalid IL or missing references) //IL_0368: Unknown result type (might be due to invalid IL or missing references) //IL_036d: Unknown result type (might be due to invalid IL or missing references) //IL_03a7: Unknown result type (might be due to invalid IL or missing references) //IL_03ac: Unknown result type (might be due to invalid IL or missing references) //IL_03b6: Unknown result type (might be due to invalid IL or missing references) //IL_03be: Unknown result type (might be due to invalid IL or missing references) //IL_03c0: Unknown result type (might be due to invalid IL or missing references) //IL_03c5: Unknown result type (might be due to invalid IL or missing references) //IL_0413: Unknown result type (might be due to invalid IL or missing references) //IL_0436: Unknown result type (might be due to invalid IL or missing references) //IL_043b: Unknown result type (might be due to invalid IL or missing references) //IL_0440: Unknown result type (might be due to invalid IL or missing references) //IL_0472: Unknown result type (might be due to invalid IL or missing references) //IL_0485: Unknown result type (might be due to invalid IL or missing references) //IL_048a: Unknown result type (might be due to invalid IL or missing references) //IL_0492: Unknown result type (might be due to invalid IL or missing references) //IL_0497: Unknown result type (might be due to invalid IL or missing references) if (injectorToCoupler.Value && Run.instance.IsExpansionEnabled(Addressables.LoadAssetAsync<ExpansionDef>((object)"RoR2/DLC3/DLC3.asset").WaitForCompletion())) { PickupIndex[] pickups = __instance.reward.pickups; foreach (PickupIndex val in pickups) { if ((int)PickupCatalog.GetPickupDef(val).equipmentIndex == -1) { Log.Debug("not equipmnet ,..,"); continue; } Log.Debug("adding extra equip item to reward !!"); Array.Resize(ref __instance.reward.pickups, __instance.reward.pickups.Length + 1); __instance.reward.pickups[^1] = PickupCatalog.FindPickupIndex(Items.ExtraEquipment.itemIndex); } } else { Log.Debug("wow ,.., okay ,.,."); } __instance.pickupQueue = new Queue<RewardInfo>(); PickupIndex[] pickups2 = __instance.reward.pickups; for (int j = 0; j < pickups2.Length; j++) { __instance.pickupQueue.Enqueue(new RewardInfo { pickupIndex = pickups2[j] }); } for (int k = 0; k < __instance.reward.white; k++) { PickupIndex pickupIndex = __instance.rng.NextElementUniform<PickupIndex>(Run.instance.availableTier1DropList); __instance.pickupQueue.Enqueue(new RewardInfo { pickupIndex = pickupIndex }); } for (int l = 0; l < __instance.reward.whiteOption; l++) { List<UniquePickup> list = new List<UniquePickup>(); RewardDropper.dtTier1.GenerateDistinctPickups(list, 3, __instance.rng, true); __instance.pickupQueue.Enqueue(new RewardInfo { prefabOverride = RewardDropper.optionPrefab, options = PickupPickerController.GenerateOptionsFromList<List<UniquePickup>>(list), pickupIndex = PickupCatalog.FindPickupIndex((ItemTier)0) }); } for (int m = 0; m < __instance.reward.whiteCommand; m++) { __instance.pickupQueue.Enqueue(new RewardInfo { pickupIndex = Run.instance.availableTier1DropList[0], flag = (PickupArtifactFlag)1 }); } for (int n = 0; n < __instance.reward.green; n++) { PickupIndex pickupIndex2 = __instance.rng.NextElementUniform<PickupIndex>(Run.instance.availableTier2DropList); __instance.pickupQueue.Enqueue(new RewardInfo { pickupIndex = pickupIndex2 }); } for (int num = 0; num < __instance.reward.greenOption; num++) { List<UniquePickup> list2 = new List<UniquePickup>(); RewardDropper.dtTier2.GenerateDistinctPickups(list2, 3, __instance.rng, true); __instance.pickupQueue.Enqueue(new RewardInfo { prefabOverride = RewardDropper.optionPrefab, options = PickupPickerController.GenerateOptionsFromList<List<UniquePickup>>(list2), pickupIndex = PickupCatalog.FindPickupIndex((ItemTier)1) }); } for (int num2 = 0; num2 < __instance.reward.greenCommand; num2++) { __instance.pickupQueue.Enqueue(new RewardInfo { pickupIndex = Run.instance.availableTier2DropList[0], flag = (PickupArtifactFlag)1 }); } for (int num3 = 0; num3 < __instance.reward.red; num3++) { PickupIndex pickupIndex3 = __instance.rng.NextElementUniform<PickupIndex>(Run.instance.availableTier3DropList); __instance.pickupQueue.Enqueue(new RewardInfo { pickupIndex = pickupIndex3 }); } for (int num4 = 0; num4 < __instance.reward.redOption; num4++) { List<UniquePickup> list3 = new List<UniquePickup>(); RewardDropper.dtTier3.GenerateDistinctPickups(list3, 3, __instance.rng, true); __instance.pickupQueue.Enqueue(new RewardInfo { prefabOverride = RewardDropper.optionPrefab, options = PickupPickerController.GenerateOptionsFromList<List<UniquePickup>>(list3), pickupIndex = PickupCatalog.FindPickupIndex((ItemTier)2) }); } for (int num5 = 0; num5 < __instance.reward.redCommand; num5++) { __instance.pickupQueue.Enqueue(new RewardInfo { pickupIndex = Run.instance.availableTier3DropList[0], flag = (PickupArtifactFlag)1 }); } return false; } } private static ConfigEntry<bool> gamblerFixes; private static ConfigEntry<bool> injectorToCoupler; public override void Init(Harmony harmony) { if (gamblerFixes.Value) { harmony.CreateClassProcessor(typeof(Starstorm2GamblerFix)).Patch(); } } public override void Config(ConfigFile config) { gamblerFixes = config.Bind<bool>("lunar gambler fix s,s,.,.", "try to fix lunar gambler errors when it gives void potentials!!! disable if its fixed already .,.,", true, "byeah ,.,"); injectorToCoupler = config.Bind<bool>("lunar gambler fix s,s,.,.", "add a functional coupler (if dlc3 enabled( to rewards with equipments (ones that used to have composite injector .,.,", true, "byeah ,.,"); } } public class gamblerTweaks : PatchBase<gamblerTweaks> { [HarmonyPatch] public class Starstorm2GamblerTweaks { [HarmonyPatch(typeof(CurseManager), "OnBodyStartGlobal")] [HarmonyILManipulator] public static void OnEnterPostFix(ILContext il) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Expected O, but got Unknown //IL_00ad: Unknown result type (might be due to invalid IL or missing references) if (baseCloakDuration.Value == 0f) { return; } Log.Debug("tryings il hook curse cloak unevilify ,,."); ILCursor val = new ILCursor(il); if (val.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, "RoR2.RoR2Content/Buffs", "Cloak"), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, (MethodBase)typeof(CharacterBody).GetMethod("AddBuff", new Type[1] { typeof(BuffDef) })) })) { val.RemoveRange(3); val.Emit(OpCodes.Ldarg_0); val.EmitDelegate<Action<CharacterBody>>((Action<CharacterBody>)delegate(CharacterBody cb) { cb.AddTimedBuff(Buffs.Cloak, baseCloakDuration.Value * CurseManager.GetCurseIntensity() * (float)CurseManager.GetActiveCurseCount((CurseIndex)7)); }); Log.Debug("unevilified cloak !!"); } } } private static ConfigEntry<bool> gamblerTweak; private static ConfigEntry<float> baseCloakDuration; public override void Init(Harmony harmony) { if (gamblerTweak.Value) { harmony.CreateClassProcessor(typeof(Starstorm2GamblerTweaks)).Patch(); } } public override void Config(ConfigFile config) { gamblerTweak = config.Bind<bool>("lunar gambler tweaks !!!", "try to fix lunar gambler errors when it gives void potentials!!! disable if its fixed already .,.,", true, "byeah ,.,"); baseCloakDuration = config.Bind<float>("lunar gambler tweaks !!!", "makes cloak curse have a timer instead of always .,., i hate them so much ,.,..,,. 0 to disable !!", 15f, "byeah ,.,"); } } public abstract class PatchBase<T> : PatchBase where T : PatchBase<T> { public static T instance { get; private set; } public PatchBase() { if (instance != null) { throw new InvalidOperationException("Singleton class \"" + typeof(T).Name + "\" inheriting ItemBase was instantiated twice"); } instance = this as T; } } public abstract class PatchBase { public abstract void Init(Harmony harmony); public abstract void Config(ConfigFile config); public virtual void Hooks() { } } }