Decompiled source of RiskyTweaks v1.4.1
plugins/RiskyTweaks/RiskyTweaks.dll
Decompiled 2 weeks ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; 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 ArtifactOfPotential; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using EntityStates; using EntityStates.Bandit2; using EntityStates.Bandit2.Weapon; using EntityStates.Captain.Weapon; using EntityStates.Engi.EngiWeapon; using EntityStates.InfiniteTowerSafeWard; using EntityStates.LunarTeleporter; using EntityStates.Mage.Weapon; using EntityStates.Merc.Weapon; using EntityStates.Missions.BrotherEncounter; using EntityStates.MoonElevator; using EntityStates.Toolbot; using EntityStates.Treebot.Weapon; using EntityStates.VoidSurvivor; using IL; using IL.EntityStates.Bandit2.Weapon; using IL.EntityStates.Captain.Weapon; using IL.EntityStates.Engi.EngiWeapon; using IL.EntityStates.FalseSonBoss; using IL.EntityStates.GolemMonster; using IL.EntityStates.LunarWisp; using IL.EntityStates.Mage; using IL.EntityStates.Mage.Weapon; using IL.EntityStates.Seeker; using IL.EntityStates.Treebot.Weapon; using IL.EntityStates.VoidSurvivor.Weapon; using IL.RoR2; using IL.RoR2.Artifacts; using IL.RoR2.CharacterAI; using IL.RoR2.Items; using Microsoft.CodeAnalysis; using Mono.Cecil.Cil; using MonoMod.Cil; using MonoMod.RuntimeDetour; using On.EntityStates.Bandit2; using On.EntityStates.Bandit2.Weapon; using On.EntityStates.Captain.Weapon; using On.EntityStates.InfiniteTowerSafeWard; using On.EntityStates.LunarTeleporter; using On.EntityStates.Merc.Weapon; using On.EntityStates.Missions.BrotherEncounter; using On.EntityStates.Toolbot; using On.EntityStates.VoidSurvivor; using On.RoR2; using On.RoR2.Projectile; using On.RoR2.Skills; using On.RoR2.UI; using R2API.Utils; using RiskOfOptions; using RiskOfOptions.Options; using RiskyTweaks.FireSelect; using RiskyTweaks.Tweaks; using RiskyTweaks.Tweaks.Survivors.Bandit2; using RiskyTweaks.Tweaks.Survivors.Mage; using RiskyTweaks.Tweaks.Survivors.Merc; using RoR2; using RoR2.CharacterAI; using RoR2.Items; using RoR2.Orbs; using RoR2.Projectile; using RoR2.Skills; using RoR2.UI; using ShareSuite; using TMPro; 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("RiskyTweaks")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+f746d9cdf98b400542e9196e0e9f5bd37b4b137a")] [assembly: AssemblyProduct("RiskyTweaks")] [assembly: AssemblyTitle("RiskyTweaks")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] 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; } } } namespace RiskyTweaks { internal static class CommonHooks { internal static void DisableRemoveBuffGeneric(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val = new ILCursor(il); if (val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallvirt(x, typeof(CharacterBody), "RemoveBuff") })) { val.EmitDelegate<Func<BuffIndex, BuffIndex>>((Func<BuffIndex, BuffIndex>)((BuffIndex orig) => (BuffIndex)(-1))); } else { Debug.LogError((object)"RiskyTweaks: DisableRemoveBuffGeneric IL Hook failed"); } } internal static void DisableAddBuffGeneric(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val = new ILCursor(il); if (val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallvirt(x, typeof(CharacterBody), "AddBuff") })) { val.EmitDelegate<Func<BuffIndex, BuffIndex>>((Func<BuffIndex, BuffIndex>)((BuffIndex orig) => (BuffIndex)(-1))); } else { Debug.LogError((object)"RiskyTweaks: DisableAddBuffGeneric IL Hook failed"); } } } internal class LoadLanguage { internal static string assemblyDir => Path.GetDirectoryName(RiskyTweaks.pluginInfo.Location); internal static string languageRoot => Path.Combine(assemblyDir, "language"); internal static void fixme(orig_SetFolders orig, Language self, IEnumerable<string> newFolders) { if (Directory.Exists(languageRoot)) { IEnumerable<string> second = Directory.EnumerateDirectories(Path.Combine(languageRoot), self.name); orig.Invoke(self, newFolders.Union(second)); } else { orig.Invoke(self, newFolders); } } } internal static class ModCompat { public static class TeleExpansionCompat { public static bool pluginLoaded; } public static class RiskOfOptionsCompat { public static bool pluginLoaded; internal static void AddOptions() { if (pluginLoaded) { AddOptionsInternal(); } } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] private static void AddOptionsInternal() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Expected O, but got Unknown //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Expected O, but got Unknown //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Expected O, but got Unknown //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Expected O, but got Unknown //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Expected O, but got Unknown //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Expected O, but got Unknown //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Expected O, but got Unknown //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Expected O, but got Unknown //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Expected O, but got Unknown //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Expected O, but got Unknown //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Expected O, but got Unknown //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Expected O, but got Unknown //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Expected O, but got Unknown //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Expected O, but got Unknown ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(TweakBase<M1AttackSpeed>.Instance.Enabled)); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(FireSelectManager.scrollSelection)); ModSettingsManager.AddOption((BaseOption)new KeyBindOption(FireSelectManager.nextButton)); ModSettingsManager.AddOption((BaseOption)new KeyBindOption(FireSelectManager.prevButton)); if (TweakBase<PrimaryAutoFire>.Instance.Enabled.Value) { ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(PrimaryAutoFire.FireMode.Enabled)); ModSettingsManager.AddOption((BaseOption)new KeyBindOption(PrimaryAutoFire.FireMode.defaultButton)); ModSettingsManager.AddOption((BaseOption)new KeyBindOption(PrimaryAutoFire.FireMode.spamButton)); } ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(EngiAutoFire.Enabled)); ModSettingsManager.AddOption((BaseOption)new KeyBindOption(EngiAutoFire.autoButton)); ModSettingsManager.AddOption((BaseOption)new KeyBindOption(EngiAutoFire.holdButton)); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(CaptainAutoFire.Enabled)); ModSettingsManager.AddOption((BaseOption)new KeyBindOption(CaptainAutoFire.defaultButton)); ModSettingsManager.AddOption((BaseOption)new KeyBindOption(CaptainAutoFire.autoButton)); ModSettingsManager.AddOption((BaseOption)new KeyBindOption(CaptainAutoFire.chargedButton)); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(TweakBase<IonSurgeMoveScaling>.Instance.Enabled)); } } public static class ShareSuiteCompat { public static class ItemSettings { public static bool common; public static bool uncommon; public static bool legendary; public static bool boss; public static bool lunar; public static bool voidItem; } public static bool pluginLoaded; internal static void ReadSettings() { if (pluginLoaded) { ReadSettingsInternal(); } } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] private static void ReadSettingsInternal() { ItemSettings.common = ShareSuite.WhiteItemsShared.Value; ItemSettings.uncommon = ShareSuite.GreenItemsShared.Value; ItemSettings.legendary = ShareSuite.RedItemsShared.Value; ItemSettings.boss = ShareSuite.BossItemsShared.Value; ItemSettings.lunar = ShareSuite.LunarItemsShared.Value; ItemSettings.voidItem = ShareSuite.VoidItemsShared.Value; } } public static class ArtifactOfPotentialCompat { public static bool pluginLoaded; public static bool IsArtifactActive() { bool result = false; if (pluginLoaded) { result = IsArtifactActiveInternal(); } return result; } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] private static bool IsArtifactActiveInternal() { return Object.op_Implicit((Object)(object)RunArtifactManager.instance) && RunArtifactManager.instance.IsArtifactEnabled(PotentialArtifact.Potential); } } public static class RiskyArtifactsCompat { internal static class ArtifactDefs { public static ArtifactDef Primacy; } public static bool pluginLoaded; internal static void InitArtifactDefs() { ArtifactDefs.Primacy = ArtifactCatalog.FindArtifactDef("RiskyArtifactOfPrimacy"); } public static bool IsPrimacyActive() { return (Object)(object)ArtifactDefs.Primacy != (Object)null && Object.op_Implicit((Object)(object)RunArtifactManager.instance) && RunArtifactManager.instance.IsArtifactEnabled(ArtifactDefs.Primacy); } } internal static void Init() { RiskOfOptionsCompat.pluginLoaded = Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions"); ShareSuiteCompat.pluginLoaded = Chainloader.PluginInfos.ContainsKey("com.funkfrog_sipondo.sharesuite"); ShareSuiteCompat.ReadSettings(); ArtifactOfPotentialCompat.pluginLoaded = Chainloader.PluginInfos.ContainsKey("zombieseatflesh7.ArtifactOfPotential"); TeleExpansionCompat.pluginLoaded = Chainloader.PluginInfos.ContainsKey("com.Moffein.TeleExpansion"); RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, new Action(RiskOfOptionsCompat.AddOptions)); RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, new Action(RiskyArtifactsCompat.InitArtifactDefs)); } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.Moffein.RiskyTweaks", "RiskyTweaks", "1.4.1")] public class RiskyTweaks : BaseUnityPlugin { public static PluginInfo pluginInfo; private void Awake() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Expected O, but got Unknown pluginInfo = ((BaseUnityPlugin)this).Info; Language.SetFolders += new hook_SetFolders(LoadLanguage.fixme); ModCompat.Init(); ((Component)this).gameObject.AddComponent<FireSelectManager>(); FireSelectManager.Init(((BaseUnityPlugin)this).Config); AddToAssembly(); } private void AddToAssembly() { IEnumerable<Type> enumerable = from type in Assembly.GetExecutingAssembly().GetTypes() where !type.IsAbstract && type.IsSubclassOf(typeof(TweakBase)) select type; foreach (Type item in enumerable) { TweakBase tweakBase = (TweakBase)Activator.CreateInstance(item); tweakBase.Init(((BaseUnityPlugin)this).Config); } } } public static class SneedUtils { private static SceneDef bazaarSceneDef = Addressables.LoadAssetAsync<SceneDef>((object)"RoR2/Base/bazaar/bazaar.asset").WaitForCompletion(); public static bool IsInBazaar() { SceneDef sceneDefForCurrentScene = SceneCatalog.GetSceneDefForCurrentScene(); return Object.op_Implicit((Object)(object)sceneDefForCurrentScene) && (Object)(object)sceneDefForCurrentScene == (Object)(object)bazaarSceneDef; } public 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; } public static bool GetKeyPressed(ConfigEntry<KeyboardShortcut> entry) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //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_0052: Unknown result type (might be due to invalid IL or missing references) KeyboardShortcut value = entry.Value; foreach (KeyCode modifier in ((KeyboardShortcut)(ref value)).Modifiers) { if (!Input.GetKey(modifier)) { return false; } } value = entry.Value; return Input.GetKeyDown(((KeyboardShortcut)(ref value)).MainKey); } } } namespace RiskyTweaks.Tweaks { public abstract class TweakBase<T> : TweakBase where T : TweakBase<T> { public static T Instance { get; private set; } public TweakBase() { if (Instance != null) { throw new InvalidOperationException("Singleton class \"" + typeof(T).Name + "\" inheriting TweakBase was instantiated twice"); } Instance = this as T; } } public abstract class TweakBase { public abstract string ConfigCategoryString { get; } public abstract string ConfigOptionName { get; } public abstract string ConfigDescriptionString { get; } public ConfigEntry<bool> Enabled { get; private set; } public virtual bool StopLoadOnConfigDisable => true; protected virtual void ReadConfig(ConfigFile config) { Enabled = config.Bind<bool>(ConfigCategoryString, ConfigOptionName, true, ConfigDescriptionString); } internal void Init(ConfigFile config) { ReadConfig(config); if (!StopLoadOnConfigDisable || Enabled.Value) { ApplyChanges(); } } protected virtual void ApplyChanges() { } } } namespace RiskyTweaks.Tweaks.Survivors.VoidSurvivor { public class CrushCorruptBuff : TweakBase<CrushCorruptBuff> { public override string ConfigCategoryString => "Survivors - Void Fiend"; public override string ConfigOptionName => "(Client-Side) Corrupted Crush - Buff Skill"; public override string ConfigDescriptionString => "Corrupted Crush triggers faster and can be retriggered as many times as you want."; protected override void ApplyChanges() { //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) SkillDef val = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/DLC1/VoidSurvivor/CrushHealth.asset").WaitForCompletion(); val.baseMaxStock = 1; val.baseRechargeInterval = 0f; val.rechargeStock = 1; SneedUtils.SetAddressableEntityStateField("RoR2/DLC1/VoidSurvivor/EntityStates.VoidSurvivor.Weapon.ChargeCrushHealth.asset", "baseDuration", "0.3"); } } public class FasterCorruptTransition : TweakBase<FasterCorruptTransition> { public override string ConfigCategoryString => "Survivors - Void Fiend"; public override string ConfigOptionName => "(Client-Side) Corruption - Faster Animation"; public override string ConfigDescriptionString => "Corruption transition animation is faster."; protected override void ApplyChanges() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown CorruptionTransitionBase.OnEnter += new hook_OnEnter(CorruptionTransitionBase_OnEnter); } private void CorruptionTransitionBase_OnEnter(orig_OnEnter orig, CorruptionTransitionBase self) { if (self.duration > 0f) { self.duration = 0.5f; } orig.Invoke(self); } } public class PrimarySpread : TweakBase<PrimarySpread> { public override string ConfigCategoryString => "Survivors - Void Fiend"; public override string ConfigOptionName => "(Client-Side) Drown - Remove Spread"; public override string ConfigDescriptionString => "Removes random spread."; protected override void ApplyChanges() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown FireHandBeam.OnEnter += new Manipulator(RemoveBulletSpread); FireCorruptHandBeam.FireBullet += new Manipulator(RemoveBulletSpread); } private void RemoveBulletSpread(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val = new ILCursor(il); if (val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallvirt<BulletAttack>(x, "Fire") })) { val.EmitDelegate<Func<BulletAttack, BulletAttack>>((Func<BulletAttack, BulletAttack>)delegate(BulletAttack bulletAttack) { bulletAttack.minSpread = 0f; bulletAttack.maxSpread = 0f; return bulletAttack; }); } else { Debug.LogError((object)"RiskyTweaks: VoidSurvivor PrimarySpread IL hook failed."); } } } public class UtilityMoveSpeedScaling : TweakBase<UtilityMoveSpeedScaling> { public override string ConfigCategoryString => "Survivors - Void Fiend"; public override string ConfigOptionName => "(Client-Side) Uncorrupted Trespass - Disable Move Speed Scaling"; public override string ConfigDescriptionString => "Disables move speed scaling on Uncorrupted Trespass."; public override bool StopLoadOnConfigDisable => false; protected override void ApplyChanges() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown VoidBlinkBase.GetVelocity += new hook_GetVelocity(VoidBlinkBase_GetVelocity); } private Vector3 VoidBlinkBase_GetVelocity(orig_GetVelocity orig, VoidBlinkBase self) { //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0049: 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) if (base.Enabled.Value && Object.op_Implicit((Object)(object)((EntityState)self).characterBody) && !((EntityState)self).characterBody.HasBuff(Buffs.VoidSurvivorCorruptMode)) { ((BaseState)self).moveSpeedStat = 10.15f; } return orig.Invoke(self); } } } namespace RiskyTweaks.Tweaks.Survivors.Treebot { public class SelfDamageTweaks : TweakBase<SelfDamageTweaks> { public override string ConfigCategoryString => "Survivors - REX"; public override string ConfigOptionName => "(Server-Side) Seed Barrage Self-Damage Consistency"; public override string ConfigDescriptionString => "Seed Barrage self-damage is affected by armor, like the other 2 plant skills."; public override bool StopLoadOnConfigDisable => true; protected override void ApplyChanges() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown FireMortar2.OnEnter += new Manipulator(FireMortar2_OnEnter); } private void FireMortar2_OnEnter(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val = new ILCursor(il); if (val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallvirt<HealthComponent>(x, "TakeDamage") })) { val.EmitDelegate<Func<DamageInfo, DamageInfo>>((Func<DamageInfo, DamageInfo>)delegate(DamageInfo damageInfo) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) damageInfo.damageType &= DamageTypeCombo.op_Implicit((DamageType)(-3)); return damageInfo; }); } else { Debug.LogError((object)"RiskyTweaks: TreeBot SelfDamageTweaks IL Hook failed"); } } } public class UtilityKnockback : TweakBase<UtilityKnockback> { public override string ConfigCategoryString => "Survivors - REX"; public override string ConfigOptionName => "(Server-Side) Utility Knockback Rework"; public override string ConfigDescriptionString => "Reworks Utility knockback to be stronger and more consistent."; public override bool StopLoadOnConfigDisable => true; protected override void ApplyChanges() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown FireSonicBoom.OnEnter += new Manipulator(FireSonicBoom_OnEnter); } private void FireSonicBoom_OnEnter(ILContext il) { //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Expected O, but got Unknown //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) bool flag = true; ILCursor val = new ILCursor(il); if (val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallvirt<BullseyeSearch>(x, "RefreshCandidates") })) { val.EmitDelegate<Func<BullseyeSearch, BullseyeSearch>>((Func<BullseyeSearch, BullseyeSearch>)delegate(BullseyeSearch bullseye) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) bullseye.searchOrigin -= bullseye.searchDirection; bullseye.maxDistanceFilter += 1f; return bullseye; }); if (val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallvirt<HealthComponent>(x, "TakeDamageForce") })) { val.Index -= 6; val.Emit(OpCodes.Ldarg_0); val.Emit(OpCodes.Ldloc, 4); val.EmitDelegate<Func<Vector3, FireSonicBoom, HurtBox, Vector3>>((Func<Vector3, FireSonicBoom, HurtBox, Vector3>)delegate(Vector3 origForce, FireSonicBoom self, HurtBox hurtBox) { //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) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) Ray aimRay = ((BaseState)self).GetAimRay(); Vector3 val2 = 2800f * ((Ray)(ref aimRay)).direction; CharacterBody body2 = hurtBox.healthComponent.body; if (Object.op_Implicit((Object)(object)body2.characterMotor) && body2.characterMotor.isGrounded) { val2.y = Mathf.Max(val2.y, 1200f); } Vector3 val3 = ((Component)hurtBox).transform.position - ((Ray)(ref aimRay)).origin; float magnitude = ((Vector3)(ref val3)).magnitude; float num3 = 1f; if (body2.isChampion && Object.op_Implicit((Object)(object)body2.characterMotor) && body2.characterMotor.isGrounded) { val2.y /= 0.7f; } return val2 * num3; }); val.Index += 3; val.Emit(OpCodes.Ldloc, 4); val.EmitDelegate<Func<float, HurtBox, float>>((Func<float, HurtBox, float>)delegate(float origForceMult, HurtBox hurtBox) { float num = 1f; CharacterBody body = hurtBox.healthComponent.body; if (Object.op_Implicit((Object)(object)body.characterMotor)) { num = body.characterMotor.mass; } else if (Object.op_Implicit((Object)(object)body.rigidbody)) { num = body.rigidbody.mass; } float num2 = Mathf.Max(num / 100f, 1f); if (body.isChampion && Object.op_Implicit((Object)(object)body.characterMotor) && body.characterMotor.isGrounded) { num2 *= 0.7f; } return num2; }); flag = false; } } if (flag) { Debug.LogError((object)"RiskyTweaks: Treebot UtilityKnockback IL Hook failed"); } } } } namespace RiskyTweaks.Tweaks.Survivors.Toolbot { public class RetoolReload : TweakBase<RetoolReload> { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_OnEnter <>9__8_0; internal void <ApplyChanges>b__8_0(orig_OnEnter orig, ToolbotStanceSwap self) { orig.Invoke(self); if (((EntityState)self).isAuthority) { GenericSkill primarySkill = ((ToolbotStanceBase)self).GetPrimarySkill1(); if (Object.op_Implicit((Object)(object)primarySkill)) { primarySkill.stock = primarySkill.maxStock; } GenericSkill primarySkill2 = ((ToolbotStanceBase)self).GetPrimarySkill2(); if (Object.op_Implicit((Object)(object)primarySkill2)) { primarySkill2.stock = primarySkill2.maxStock; } } } } public override string ConfigCategoryString => "Survivors - MUL-T"; public override string ConfigOptionName => "(Client-Side) Retool Reload"; public override string ConfigDescriptionString => "Retool resets primary stocks to full."; public override bool StopLoadOnConfigDisable => true; protected override void ApplyChanges() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown object obj = <>c.<>9__8_0; if (obj == null) { hook_OnEnter val = delegate(orig_OnEnter orig, ToolbotStanceSwap self) { orig.Invoke(self); if (((EntityState)self).isAuthority) { GenericSkill primarySkill = ((ToolbotStanceBase)self).GetPrimarySkill1(); if (Object.op_Implicit((Object)(object)primarySkill)) { primarySkill.stock = primarySkill.maxStock; } GenericSkill primarySkill2 = ((ToolbotStanceBase)self).GetPrimarySkill2(); if (Object.op_Implicit((Object)(object)primarySkill2)) { primarySkill2.stock = primarySkill2.maxStock; } } }; <>c.<>9__8_0 = val; obj = (object)val; } ToolbotStanceSwap.OnEnter += (hook_OnEnter)obj; } } public class ScrapICBM : TweakBase<ScrapICBM> { public override string ConfigCategoryString => "Survivors - MUL-T"; public override string ConfigOptionName => "(Client-Side) Scrap Launcher - ICBM Synergy"; public override string ConfigDescriptionString => "Scrap Launcher synergizes with ICBM."; public override bool StopLoadOnConfigDisable => true; protected override void ApplyChanges() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown FireGrenadeLauncher.ModifyProjectileAimRay += new hook_ModifyProjectileAimRay(FireGrenadeLauncher_ModifyProjectileAimRay); } private Ray FireGrenadeLauncher_ModifyProjectileAimRay(orig_ModifyProjectileAimRay orig, FireGrenadeLauncher self, Ray aimRay) { //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: Unknown result type (might be due to invalid IL or missing references) //IL_01b6: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008d: 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_0096: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: 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_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)((EntityState)self).characterBody) && Object.op_Implicit((Object)(object)((EntityState)self).characterBody.inventory)) { int itemCount = ((EntityState)self).characterBody.inventory.GetItemCount(Items.MoreMissile); int num = itemCount - 1; if (itemCount > 0) { float num2 = 1f; if (num > 0) { num2 += 0.5f * (float)num; } ((GenericProjectileBaseState)self).damageCoefficient = ((GenericProjectileBaseState)self).damageCoefficient * num2; Vector3 val = Vector3.Cross(Vector3.up, ((Ray)(ref aimRay)).direction); Vector3 val2 = Vector3.Cross(((Ray)(ref aimRay)).direction, val); float num3 = 0f; float num4 = 0f; float num5 = 0f; num5 = Random.Range(1f + num3, 1f + num3) * 3f; num4 = num5 / 2f; Vector3 val3 = Quaternion.AngleAxis((0f - num5) * 0.5f, val2) * ((Ray)(ref aimRay)).direction; Quaternion val4 = Quaternion.AngleAxis(num4, val2); Ray val5 = default(Ray); ((Ray)(ref val5))..ctor(((Ray)(ref aimRay)).origin, val3); for (int i = 0; i < 3; i++) { if (i != 1) { ProjectileManager.instance.FireProjectile(((GenericProjectileBaseState)self).projectilePrefab, ((Ray)(ref val5)).origin, Util.QuaternionSafeLookRotation(((Ray)(ref val5)).direction), ((EntityState)self).gameObject, ((BaseState)self).damageStat * ((GenericProjectileBaseState)self).damageCoefficient, ((GenericProjectileBaseState)self).force, ((BaseState)self).RollCrit(), (DamageColorIndex)0, (GameObject)null, -1f, (DamageTypeCombo?)null); } ((Ray)(ref val5)).direction = val4 * ((Ray)(ref val5)).direction; } } } return orig.Invoke(self, aimRay); } } public class ScrapLauncherAttackSpeed : TweakBase<ScrapLauncherAttackSpeed> { public override string ConfigCategoryString => "Survivors - MUL-T"; public override string ConfigOptionName => "(Client-Side) Scrap Launcher - Attack Speed Scaling"; public override string ConfigDescriptionString => "Scrap Launcher cooldown scales with attack speed."; public override bool StopLoadOnConfigDisable => true; protected override void ApplyChanges() { //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) ToolbotWeaponSkillDef val = Addressables.LoadAssetAsync<ToolbotWeaponSkillDef>((object)"RoR2/Base/Toolbot/ToolbotBodyFireGrenadeLauncher.asset").WaitForCompletion(); ((SkillDef)val).attackSpeedBuffsRestockSpeed = true; ((SkillDef)val).attackSpeedBuffsRestockSpeed_Multiplier = 1f; } } public class ScrapLauncherFalloff : TweakBase<ScrapLauncherFalloff> { public override string ConfigCategoryString => "Survivors - MUL-T"; public override string ConfigOptionName => "(Server-Side) Scrap Launcher - Remove Falloff"; public override string ConfigDescriptionString => "Scrap Launcher always deals full damage to enemies in the AoE."; protected override void ApplyChanges() { //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) //IL_001d: Unknown result type (might be due to invalid IL or missing references) GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Toolbot/ToolbotGrenadeLauncherProjectile.prefab").WaitForCompletion(); ProjectileImpactExplosion component = val.GetComponent<ProjectileImpactExplosion>(); ((ProjectileExplosion)component).falloffModel = (FalloffModel)0; } } public class ScrapLauncherNoSpread : TweakBase<ScrapLauncherNoSpread> { public override string ConfigCategoryString => "Survivors - MUL-T"; public override string ConfigOptionName => "(Client-Side) Scrap Launcher - Remove Spread"; public override string ConfigDescriptionString => "Removes random spread."; public override bool StopLoadOnConfigDisable => true; protected override void ApplyChanges() { SneedUtils.SetAddressableEntityStateField("RoR2/Base/Toolbot/EntityStates.Toolbot.FireGrenadeLauncher.asset", "maxSpread", "0"); } } } namespace RiskyTweaks.Tweaks.Survivors.Seeker { public class RemoveM2FoV : TweakBase<RemoveM2FoV> { public override string ConfigCategoryString => "Survivors - Seeker"; public override string ConfigOptionName => "(Client-Side) Remove M2 FoV Modifier"; public override string ConfigDescriptionString => "Prevents FoV from changing when using Seeker's M2."; public override bool StopLoadOnConfigDisable => false; protected override void ApplyChanges() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown UnseenHand.FixedUpdate += new Manipulator(UnseenHand_FixedUpdate); } private void UnseenHand_FixedUpdate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val = new ILCursor(il); if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCall(x, typeof(EntityState), "get_cameraTargetParams") })) { val.EmitDelegate<Func<CameraTargetParams, CameraTargetParams>>((Func<CameraTargetParams, CameraTargetParams>)((CameraTargetParams orig) => null)); } else { Debug.LogError((object)"RiskyTweaks: Seeker RemoveM2FoV IL Hook failed."); } } } } namespace RiskyTweaks.Tweaks.Survivors.Railgunner { public class PolarFieldBuff : TweakBase<PolarFieldBuff> { private const float reductionFactor = 3f; public override string ConfigCategoryString => "Survivors - Railgunner"; public override string ConfigOptionName => "(Server-Side) Polar Field Damage Reduction"; public override string ConfigDescriptionString => "Projectiles slowed by Polar Field deal less damage."; public override bool StopLoadOnConfigDisable => true; protected override void ApplyChanges() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown SlowDownProjectiles.OnTriggerEnter += new hook_OnTriggerEnter(SlowDownProjectiles_OnTriggerEnter); SlowDownProjectiles.OnTriggerExit += new hook_OnTriggerExit(SlowDownProjectiles_OnTriggerExit); } private void SlowDownProjectiles_OnTriggerEnter(orig_OnTriggerEnter orig, SlowDownProjectiles self, Collider other) { if (((Object)((Component)self).gameObject).name == "RailgunnerMineAltDetonated(Clone)") { ProjectileDamage component = ((Component)other).GetComponent<ProjectileDamage>(); if (Object.op_Implicit((Object)(object)component)) { component.damage /= 3f; } } orig.Invoke(self, other); } private void SlowDownProjectiles_OnTriggerExit(orig_OnTriggerExit orig, SlowDownProjectiles self, Collider other) { if (((Object)((Component)self).gameObject).name == "RailgunnerMineAltDetonated(Clone)") { ProjectileDamage component = ((Component)other).GetComponent<ProjectileDamage>(); if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)((Component)other).GetComponent<ProjectileSimple>())) { component.damage *= 3f; } } orig.Invoke(self, other); } } } namespace RiskyTweaks.Tweaks.Survivors.Merc { public class M1AttackSpeed : TweakBase<M1AttackSpeed> { public override string ConfigCategoryString => "Survivors - Mercenary"; public override string ConfigOptionName => "(Client-Side) Primary Attack Speed Tweak"; public override string ConfigDescriptionString => "Third primary hit doesnt scale with attack speed to allow for Expose combos."; public override bool StopLoadOnConfigDisable => false; protected override void ApplyChanges() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown GroundLight2.OnEnter += new hook_OnEnter(GroundLight2_OnEnter); } private void GroundLight2_OnEnter(orig_OnEnter orig, GroundLight2 self) { if (base.Enabled.Value) { if (self.isComboFinisher) { ((BasicMeleeAttack)self).ignoreAttackSpeed = true; } else { ((BasicMeleeAttack)self).ignoreAttackSpeed = false; } } orig.Invoke(self); } } public class Regen : TweakBase<Regen> { public override string ConfigCategoryString => "Survivors - Mercenary"; public override string ConfigOptionName => "(Server-Side) Regen Buff"; public override string ConfigDescriptionString => "Gives Mercenary standard melee character regen."; public override bool StopLoadOnConfigDisable => true; protected override void ApplyChanges() { GameObject val = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/MercBody"); CharacterBody component = val.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component)) { component.baseRegen = 2.5f; component.levelRegen = 0.5f; } } } } namespace RiskyTweaks.Tweaks.Survivors.Mage { public class FasterIceWall : TweakBase<FasterIceWall> { public override string ConfigCategoryString => "Survivors - Artificer"; public override string ConfigOptionName => "(Client-Side) Snapfreeze - Instant Deploy"; public override string ConfigDescriptionString => "Snapfreeze fires as soon as you let go of the button."; protected override void ApplyChanges() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown PrepWall.FixedUpdate += new Manipulator(PrepWall_FixedUpdate); } private void PrepWall_FixedUpdate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val = new ILCursor(il); if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdfld(x, typeof(PrepWall), "duration") })) { val.EmitDelegate<Func<float, float>>((Func<float, float>)((float duration) => 0f)); } else { Debug.LogError((object)"RiskyTweaks: FasterIceWall IL hook failed."); } } } public class FlamethrowerGuaranteedBurn : TweakBase<FlamethrowerGuaranteedBurn> { public override string ConfigCategoryString => "Survivors - Artificer"; public override string ConfigOptionName => "(Client-Side) Flamethrower - Guaranteed Burn"; public override string ConfigDescriptionString => "Increases Flamethrower's burn chance to 100% so that it's as strong as it was before SotV's burn nerfs."; protected override void ApplyChanges() { SneedUtils.SetAddressableEntityStateField("RoR2/Base/Mage/EntityStates.Mage.Weapon.Flamethrower.asset", "ignitePercentChance", "100"); } } public class IonSurgeMoveScaling : TweakBase<IonSurgeMoveScaling> { public override string ConfigCategoryString => "Survivors - Artificer"; public override string ConfigOptionName => "(Client-Side) Ion Surge - Disable Movement Speed Scaling"; public override string ConfigDescriptionString => "Makes Ion Surge always go a consistent distance regardless of movement speed."; public override bool StopLoadOnConfigDisable => false; protected override void ApplyChanges() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown FlyUpState.HandleMovements += new Manipulator(FlyUpState_HandleMovements); } private void FlyUpState_HandleMovements(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val = new ILCursor(il); if (val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdfld<BaseState>(x, "moveSpeedStat") })) { int index = val.Index; val.Index = index + 1; val.EmitDelegate<Func<float, float>>((Func<float, float>)((float orig) => base.Enabled.Value ? 10.15f : orig)); } else { Debug.LogError((object)"RiskyTweaks: IonSurgeMoveScaling IL hook failed."); } } } } namespace RiskyTweaks.Tweaks.Survivors.Loader { public class SprintQoL : TweakBase<SprintQoL> { public override string ConfigCategoryString => "Survivors - Loader"; public override string ConfigOptionName => "(Client-Side) Sprint QoL"; public override string ConfigDescriptionString => "Non-primary skills don't cancel sprinting."; public override bool StopLoadOnConfigDisable => true; protected override void ApplyChanges() { //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) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0042: 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) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) SkillDef val = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Loader/FireHook.asset").WaitForCompletion(); SkillDef val2 = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Loader/FireYankHook.asset").WaitForCompletion(); SkillDef val3 = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Loader/ChargeFist.asset").WaitForCompletion(); SkillDef val4 = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Loader/ChargeZapFist.asset").WaitForCompletion(); val.cancelSprintingOnActivation = false; val2.cancelSprintingOnActivation = false; val3.cancelSprintingOnActivation = false; val4.cancelSprintingOnActivation = false; SkillDef val5 = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Loader/GroundSlam.asset").WaitForCompletion(); val5.cancelSprintingOnActivation = false; SkillDef val6 = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Loader/ThrowPylon.asset").WaitForCompletion(); val6.cancelSprintingOnActivation = false; } } } namespace RiskyTweaks.Tweaks.Survivors.Huntress { public class Tracking : TweakBase<Tracking> { public ConfigEntry<SortMode> trackingMode; public override string ConfigCategoryString => "Survivors - Huntress"; public override string ConfigOptionName => "(Client-Side) Tracking Tweaks"; public override string ConfigDescriptionString => "Makes Huntress target the enemy closest to your crosshair, and increases the targeting angle."; public override bool StopLoadOnConfigDisable => true; protected override void ReadConfig(ConfigFile config) { base.ReadConfig(config); trackingMode = config.Bind<SortMode>(ConfigCategoryString, ConfigOptionName + " - Tracking Mode", (SortMode)2, "Type of tracking to use. Vanilla is by Distance only."); } protected override void ApplyChanges() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown HuntressTracker.Start += new hook_Start(HuntressTracker_Start); HuntressTracker.SearchForTarget += new Manipulator(HuntressTracker_SearchForTarget); } private void HuntressTracker_Start(orig_Start orig, HuntressTracker self) { orig.Invoke(self); self.maxTrackingAngle = 45f; } private void HuntressTracker_SearchForTarget(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val = new ILCursor(il); if (val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchStfld(x, typeof(BullseyeSearch), "sortMode") })) { val.EmitDelegate<Func<SortMode, SortMode>>((Func<SortMode, SortMode>)((SortMode orig) => trackingMode.Value)); } else { Debug.LogError((object)"RiskyTweaks: Huntress Tracking IL Hook failed"); } } } } namespace RiskyTweaks.Tweaks.Survivors.Engi { public class MobileTurretBuff : TweakBase<MobileTurretBuff> { public override string ConfigCategoryString => "Survivors - Engineer"; public override string ConfigOptionName => "(Server-Side) Mobile Turret Buff"; public override string ConfigDescriptionString => "Mobile Turrets always sprint and have a longer range."; protected override void ApplyChanges() { //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) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: 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_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Expected O, but got Unknown GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Engi/EngiWalkerTurretBody.prefab").WaitForCompletion(); CharacterBody component = val.GetComponent<CharacterBody>(); component.bodyFlags = (BodyFlags)(component.bodyFlags | 1); if (component.baseRegen < 1f) { component.baseRegen = 1f; component.levelRegen = 0.2f; } SneedUtils.SetAddressableEntityStateField("RoR2/Base/Engi/EntityStates.EngiTurret.EngiTurretWeapon.FireBeam.asset", "maxDistance", "45"); Component[] components = (Component[])(object)Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Engi/EngiWalkerTurretMaster.prefab").WaitForCompletion().GetComponents<AISkillDriver>(); Component[] array = components; Component[] array2 = array; for (int i = 0; i < array2.Length; i++) { AISkillDriver val2 = (AISkillDriver)array2[i]; if (val2.customName != "Rest") { val2.shouldSprint = true; } if (val2.customName == "ChaseAndFireAtEnemy") { val2.maxDistance = 45f; } } } } } namespace RiskyTweaks.Tweaks.Survivors.Croco { public class BiggerHitbox : TweakBase<BiggerHitbox> { public override string ConfigCategoryString => "Survivors - Acrid"; public override string ConfigOptionName => "(Client-Side) Bigger Melee Hitbox"; public override string ConfigDescriptionString => "Increases melee hitbox size."; public override bool StopLoadOnConfigDisable => true; protected override void ApplyChanges() { //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) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) CharacterBody component = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Croco/CrocoBody.prefab").WaitForCompletion().GetComponent<CharacterBody>(); HitBoxGroup componentInChildren = ((Component)component).GetComponentInChildren<HitBoxGroup>(); if (componentInChildren.groupName == "Slash") { Transform transform = ((Component)componentInChildren.hitBoxes[0]).transform; transform.localScale = new Vector3(40f, 40f, 45f); transform.localPosition = new Vector3(0f, 11f, 15f); } } } public class BlightStack : TweakBase<BlightStack> { public override string ConfigCategoryString => "Survivors - Acrid"; public override string ConfigOptionName => "(Server-Side) Blight Duration Reset"; public override string ConfigDescriptionString => "Blight duration resets when new stacks are added."; public override bool StopLoadOnConfigDisable => true; protected override void ApplyChanges() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown DotController.AddDot += new hook_AddDot(DotController_AddDot); } private void DotController_AddDot(orig_AddDot orig, DotController self, GameObject attackerObject, float duration, DotIndex dotIndex, float damageMultiplier, uint? maxStacksFromAttacker, float? totalDamage, DotIndex? preUpgradeDotIndex) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Invalid comparison between Unknown and I4 //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Invalid comparison between Unknown and I4 orig.Invoke(self, attackerObject, duration, dotIndex, damageMultiplier, maxStacksFromAttacker, totalDamage, preUpgradeDotIndex); if ((int)dotIndex != 5) { return; } for (int i = 0; i < self.dotStackList.Count; i++) { if ((int)self.dotStackList[i].dotIndex == 5) { self.dotStackList[i].timer = Mathf.Max(self.dotStackList[i].timer, duration); } } } } public class PoisonDamageCap : TweakBase<PoisonDamageCap> { public override string ConfigCategoryString => "Survivors - Acrid"; public override string ConfigOptionName => "(Server-Side) Remove Poison Damage Cap"; public override string ConfigDescriptionString => "Removes the hidden damage cap of Poison"; public override bool StopLoadOnConfigDisable => true; protected override void ApplyChanges() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown DotController.AddDot += new Manipulator(DotController_AddDot); } private void DotController_AddDot(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val = new ILCursor(il); if (val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 50f) })) { val.Index += 2; val.EmitDelegate<Func<float, float>>((Func<float, float>)((float orig) => float.MaxValue)); } else { Debug.LogError((object)"RiskyTweaks: Croco PoisonDamageCap IL Hook failed"); } } } public class Regenerative : TweakBase<Regenerative> { public override string ConfigCategoryString => "Survivors - Acrid"; public override string ConfigOptionName => "(Server-Side) Regenerative is Healing"; public override string ConfigDescriptionString => "Regenerative counts as healing and is no longer affected by difficulty regen modifiers."; protected override void ApplyChanges() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown CharacterBody.RecalculateStats += new Manipulator(CharacterBody_RecalculateStats); HealthComponent.ServerFixedUpdate += new hook_ServerFixedUpdate(HealthComponent_ServerFixedUpdate); } private void CharacterBody_RecalculateStats(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val = new ILCursor(il); if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Buffs), "CrocoRegen") })) { val.EmitDelegate<Func<BuffDef, BuffDef>>((Func<BuffDef, BuffDef>)((BuffDef orig) => null)); } else { Debug.LogError((object)"RiskyTweaks: Croco Regenerative IL hook failed."); } } private void HealthComponent_ServerFixedUpdate(orig_ServerFixedUpdate orig, HealthComponent self, float deltaTime) { //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, deltaTime); if (Object.op_Implicit((Object)(object)self.body)) { int buffCount = self.body.GetBuffCount(Buffs.CrocoRegen); if (buffCount > 0) { self.HealFraction(0.1f * deltaTime * (float)buffCount, default(ProcChainMask)); } } } } } namespace RiskyTweaks.Tweaks.Survivors.Captain { public class ChargedShotgunFalloff : TweakBase<ChargedShotgunFalloff> { public override string ConfigCategoryString => "Survivors - Captain"; public override string ConfigOptionName => "(Client-Side) Charged Shotgun Falloff"; public override string ConfigDescriptionString => "Vulcan Shotgun has no falloff when fully charged"; public override bool StopLoadOnConfigDisable => true; protected override void ApplyChanges() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown FireCaptainShotgun.ModifyBullet += new hook_ModifyBullet(FireCaptainShotgun_ModifyBullet); } private void FireCaptainShotgun_ModifyBullet(orig_ModifyBullet orig, FireCaptainShotgun self, BulletAttack bulletAttack) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, bulletAttack); if (((GenericBulletBaseState)self).fireSoundString == "FireCaptainShotgun.tightSoundString") { bulletAttack.falloffModel = (FalloffModel)0; } } } } namespace RiskyTweaks.Tweaks.Survivors.Bandit2 { public class BlastPierce : TweakBase<BlastPierce> { public override string ConfigCategoryString => "Survivors - Bandit"; public override string ConfigOptionName => "(Client-Side) Blast - Pierce Enemies"; public override string ConfigDescriptionString => "Blast can pierce through multiple enemies."; protected override void ApplyChanges() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown Bandit2FireRifle.ModifyBullet += new hook_ModifyBullet(Bandit2FireRifle_ModifyBullet); } private void Bandit2FireRifle_ModifyBullet(orig_ModifyBullet orig, Bandit2FireRifle self, BulletAttack bulletAttack) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, bulletAttack); bulletAttack.stopperMask = ((LayerIndex)(ref LayerIndex.world)).mask; } } public class BlastSpread : TweakBase<BlastSpread> { public override string ConfigCategoryString => "Survivors - Bandit"; public override string ConfigOptionName => "(Client-Side) Blast - Reduce Spread"; public override string ConfigDescriptionString => "Blast spread is reduced."; protected override void ApplyChanges() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown Bandit2FireRifle.ModifyBullet += new hook_ModifyBullet(Bandit2FireRifle_ModifyBullet); } private void Bandit2FireRifle_ModifyBullet(orig_ModifyBullet orig, Bandit2FireRifle self, BulletAttack bulletAttack) { orig.Invoke(self, bulletAttack); bulletAttack.maxSpread *= 0.5f; bulletAttack.minSpread = 0f; } } public class BuffSuperBleed : TweakBase<BuffSuperBleed> { public override string ConfigCategoryString => "Survivors - Bandit"; public override string ConfigOptionName => "(Server-Side) Hemorrhage Ignores Armor"; public override string ConfigDescriptionString => "Hemorrhage ignores positive armor."; protected override void ApplyChanges() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown HealthComponent.TakeDamageProcess += new hook_TakeDamageProcess(HealthComponent_TakeDamageProcess); } private void HealthComponent_TakeDamageProcess(orig_TakeDamageProcess orig, HealthComponent self, DamageInfo damageInfo) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Invalid comparison between Unknown and I4 //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) if ((int)damageInfo.dotIndex == 6 && DamageTypeCombo.op_Implicit(damageInfo.damageType & DamageTypeCombo.op_Implicit((DamageType)67108864)) != 0L && DamageTypeCombo.op_Implicit(damageInfo.damageType & DamageTypeCombo.op_Implicit((DamageType)131072)) == 0) { float num = self.body.armor + self.adaptiveArmorValue; if (num > 0f) { damageInfo.damage *= (100f + num) / 100f; } } orig.Invoke(self, damageInfo); } } public class CloakHoldButton : TweakBase<CloakHoldButton> { private const float minCloakDuration = 0.3f; public override string ConfigCategoryString => "Survivors - Bandit"; public override string ConfigOptionName => "(Client-Side) Smokebomb Auto Trigger on Hold"; public override string ConfigDescriptionString => "Smokebomb automatically triggers as soon as it is available if the button is held."; protected override void ApplyChanges() { //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) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Expected O, but got Unknown Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Bandit2/ThrowSmokebomb.asset").WaitForCompletion().mustKeyPress = false; ThrowSmokebomb.GetMinimumInterruptPriority += new hook_GetMinimumInterruptPriority(ThrowSmokebomb_GetMinimumInterruptPriority); StealthMode.GetMinimumInterruptPriority += new hook_GetMinimumInterruptPriority(StealthMode_GetMinimumInterruptPriority); } private InterruptPriority StealthMode_GetMinimumInterruptPriority(orig_GetMinimumInterruptPriority orig, StealthMode self) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)((((EntityState)self).fixedAge > 0.3f) ? 1 : 5); } private InterruptPriority ThrowSmokebomb_GetMinimumInterruptPriority(orig_GetMinimumInterruptPriority orig, ThrowSmokebomb self) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)((((EntityState)self).fixedAge > 0.3f) ? 2 : 3); } } public class KnifeHitbox : TweakBase<KnifeHitbox> { public override string ConfigCategoryString => "Survivors - Bandit"; public override string ConfigOptionName => "(Client-Side) Knife Hitbox"; public override string ConfigDescriptionString => "Increases knife hitbox size."; protected override void ApplyChanges() { //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) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) CharacterBody component = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Bandit2/Bandit2Body.prefab").WaitForCompletion().GetComponent<CharacterBody>(); HitBoxGroup componentInChildren = ((Component)component).GetComponentInChildren<HitBoxGroup>(); if (componentInChildren.groupName == "SlashBlade") { Transform transform = ((Component)componentInChildren.hitBoxes[0]).transform; transform.localScale = new Vector3(10.35f, 6f, 7.5f); transform.localPosition += new Vector3(0f, 0f, 1f); } } } public class KnifeLunge : TweakBase<KnifeLunge> { private AnimationCurve knifeVelocity; public override string ConfigCategoryString => "Survivors - Bandit"; public override string ConfigOptionName => "(Client-Side) Knife Lunge"; public override string ConfigDescriptionString => "Lunge forwards when using Serrated Dagger."; protected override void ApplyChanges() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Expected O, but got Unknown knifeVelocity = BuildSlashVelocityCurve(); SkillDef val = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Bandit2/SlashBlade.asset").WaitForCompletion(); val.canceledFromSprinting = false; SlashBlade.OnEnter += new hook_OnEnter(SlashBlade_OnEnter); SneedUtils.SetAddressableEntityStateField("RoR2/Base/Bandit2/EntityStates.Bandit2.Weapon.SlashBlade.asset", "ignoreAttackSpeed", "1"); Hook val2 = new Hook((MethodBase)Reflection.GetMethodCached(typeof(SlashBlade), "get_minimumDuration"), Reflection.GetMethodCached(typeof(KnifeLunge), "GetBandit2SlashBladeMinDurationHook")); } private void SlashBlade_OnEnter(orig_OnEnter orig, SlashBlade self) { orig.Invoke(self); if (Object.op_Implicit((Object)(object)((EntityState)self).characterBody) && ((EntityState)self).characterBody.isSprinting) { ((BasicMeleeAttack)self).ignoreAttackSpeed = true; ((BasicMeleeAttack)self).forceForwardVelocity = true; ((BasicMeleeAttack)self).forwardVelocityCurve = knifeVelocity; } } private static float GetBandit2SlashBladeMinDurationHook(SlashBlade self) { return 0.3f; } private AnimationCurve BuildSlashVelocityCurve() { //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007b: 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_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008d: 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_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Expected O, but got Unknown Keyframe val = default(Keyframe); ((Keyframe)(ref val))..ctor(0f, 3f, -8.182907f, -3.3333333f, 0f, 0.058712736f); ((Keyframe)(ref val)).weightedMode = (WeightedMode)0; ((Keyframe)(ref val)).tangentMode = 65; Keyframe val2 = default(Keyframe); ((Keyframe)(ref val2))..ctor(0.3f, 0f, -3.3333333f, -3.3333333f, 1f / 3f, 1f / 3f); ((Keyframe)(ref val2)).weightedMode = (WeightedMode)0; ((Keyframe)(ref val2)).tangentMode = 34; Keyframe[] keys = (Keyframe[])(object)new Keyframe[2] { val, val2 }; return new AnimationCurve { preWrapMode = (WrapMode)8, postWrapMode = (WrapMode)8, keys = keys }; } } public class PrimaryAutoFire : TweakBase<PrimaryAutoFire> { public static class FireMode { public enum Bandit2FireMode { Default, Spam } private static bool initialized = false; public static Bandit2FireMode currentfireMode = Bandit2FireMode.Default; public static ConfigEntry<bool> Enabled; public static ConfigEntry<KeyboardShortcut> defaultButton; public static ConfigEntry<KeyboardShortcut> spamButton; public static List<SkillDef> targetSkills = new List<SkillDef> { (SkillDef)(object)Addressables.LoadAssetAsync<ReloadSkillDef>((object)"RoR2/Base/Bandit2/FireShotgun2.asset").WaitForCompletion(), (SkillDef)(object)Addressables.LoadAssetAsync<ReloadSkillDef>((object)"RoR2/Base/Bandit2/Bandit2Blast.asset").WaitForCompletion() }; private static BodyIndex targetBodyIndex; internal static void Init(ConfigFile config) { //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown if (!initialized) { initialized = true; ReadConfig(config); RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, new Action(OnLoad)); SkillIcon.Update += new hook_Update(SkillIcon_Update); FireSelectManager.FireModeActions = (FireSelectManager.FireMode)Delegate.Combine(FireSelectManager.FireModeActions, new FireSelectManager.FireMode(FireModeAction)); } } private static void ReadConfig(ConfigFile config) { //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) Enabled = config.Bind<bool>("Fire Select - Bandit Primary Autofire", "Use Fire Select", true, "Enable firemode selection. Requires Bandit Primary Autofire to be enabled."); Enabled.SettingChanged += Enabled_SettingChanged; defaultButton = config.Bind<KeyboardShortcut>("Fire Select - Bandit Primary Autofire", "Default Button", KeyboardShortcut.Empty, "Button to select Default firemode."); spamButton = config.Bind<KeyboardShortcut>("Fire Select - Bandit Primary Autofire", "Spam Button", KeyboardShortcut.Empty, "Button to select Spam firemode."); } private static void Enabled_SettingChanged(object sender, EventArgs e) { if (!Enabled.Value) { currentfireMode = Bandit2FireMode.Default; } } private static void OnLoad() { //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) targetBodyIndex = BodyCatalog.FindBodyIndex("Bandit2Body"); } private static void SkillIcon_Update(orig_Update orig, SkillIcon self) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Invalid comparison between Unknown and I4 //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (Enabled.Value && Object.op_Implicit((Object)(object)self.targetSkill) && (int)self.targetSkillSlot == 0 && self.targetSkill.characterBody.bodyIndex == targetBodyIndex && targetSkills.Contains(self.targetSkill.skillDef)) { ((Component)self.stockText).gameObject.SetActive(true); ((TMP_Text)self.stockText).fontSize = 12f; ((TMP_Text)self.stockText).SetText(currentfireMode.ToString() + "(" + self.targetSkill.stock + ")", true); } } private static void CycleFireMode() { if (currentfireMode == Bandit2FireMode.Default) { currentfireMode = Bandit2FireMode.Spam; } else { currentfireMode = Bandit2FireMode.Default; } } private static void FireModeAction() { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) if (Enabled.Value) { float y = Input.mouseScrollDelta.y; KeyboardShortcut value = FireSelectManager.nextButton.Value; bool flag = ((KeyboardShortcut)(ref value)).IsDown(); value = FireSelectManager.prevButton.Value; bool flag2 = ((KeyboardShortcut)(ref value)).IsDown(); if ((FireSelectManager.scrollSelection.Value && y != 0f) || flag || flag2) { CycleFireMode(); } if (SneedUtils.GetKeyPressed(defaultButton)) { currentfireMode = Bandit2FireMode.Default; } else if (SneedUtils.GetKeyPressed(spamButton)) { currentfireMode = Bandit2FireMode.Spam; } } } } public override string ConfigCategoryString => "Survivors - Bandit"; public override string ConfigOptionName => "(Client-Side) Primary Autofire"; public override string ConfigDescriptionString => "Primaries automatically fire when holding down the button."; protected override void ReadConfig(ConfigFile config) { base.ReadConfig(config); FireMode.Init(config); } protected override void ApplyChanges() { //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) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Expected O, but got Unknown ReloadSkillDef val = Addressables.LoadAssetAsync<ReloadSkillDef>((object)"RoR2/Base/Bandit2/FireShotgun2.asset").WaitForCompletion(); ((SkillDef)val).mustKeyPress = false; ((SkillDef)val).interruptPriority = (InterruptPriority)1; ReloadSkillDef val2 = Addressables.LoadAssetAsync<ReloadSkillDef>((object)"RoR2/Base/Bandit2/Bandit2Blast.asset").WaitForCompletion(); ((SkillDef)val2).mustKeyPress = false; ((SkillDef)val2).interruptPriority = (InterruptPriority)1; Bandit2FirePrimaryBase.GetMinimumInterruptPriority += new hook_GetMinimumInterruptPriority(Bandit2FirePrimaryBase_GetMinimumInterruptPriority); Bandit2FirePrimaryBase.OnEnter += new hook_OnEnter(Bandit2FirePrimaryBase_OnEnter); } private void Bandit2FirePrimaryBase_OnEnter(orig_OnEnter orig, Bandit2FirePrimaryBase self) { if (FireMode.currentfireMode == FireMode.Bandit2FireMode.Default) { self.minimumBaseDuration = 0.3f; } else { self.minimumBaseDuration = 0.12f; } orig.Invoke(self); } private InterruptPriority Bandit2FirePrimaryBase_GetMinimumInterruptPriority(orig_GetMinimumInterruptPriority orig, Bandit2FirePrimaryBase self) { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) if (((EntityState)self).fixedAge <= self.minimumDuration && ((EntityState)self).inputBank.skill1.wasDown) { return (InterruptPriority)2; } return (InterruptPriority)0; } } public class SpecialHold : TweakBase<SpecialHold> { public override string ConfigCategoryString => "Survivors - Bandit"; public override string ConfigOptionName => "(Client-Side) Special Hold Button"; public override string ConfigDescriptionString => "Revolver skills only fire after releasing the button."; protected override void ApplyChanges() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown BasePrepSidearmRevolverState.FixedUpdate += new Manipulator(BasePrepSidearmRevolverState_FixedUpdate); } private void BasePrepSidearmRevolverState_FixedUpdate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_003d: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCall(x, typeof(EntityState), "get_fixedAge") })) { val.Emit(OpCodes.Ldarg_0); val.EmitDelegate<Func<float, BasePrepSidearmRevolverState, float>>((Func<float, BasePrepSidearmRevolverState, float>)((float fixedAge, BasePrepSidearmRevolverState self) => (((EntityState)self).isAuthority && Object.op_Implicit((Object)(object)((EntityState)self).inputBank) && ((EntityState)self).inputBank.skill4.down) ? (-1f) : fixedAge)); } } } public class SpecialSprint : TweakBase<SpecialSprint> { public override string ConfigCategoryString => "Survivors - Bandit"; public override string ConfigOptionName => "(Client-Side) Special Disable Sprint Cancel"; public override string ConfigDescriptionString => "Sprinting no longer cancels Revolver skills."; protected override void ApplyChanges() { //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) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Expected O, but got Unknown Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Bandit2/SkullRevolver.asset").WaitForCompletion().canceledFromSprinting = false; Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Bandit2/ResetRevolver.asset").WaitForCompletion().canceledFromSprinting = false; BaseSidearmState.FixedUpdate += new Manipulator(BaseSidearmState_FixedUpdate); } private void BaseSidearmState_FixedUpdate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val = new ILCursor(il); if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallvirt(x, typeof(CharacterBody), "get_isSprinting") })) { val.EmitDelegate<Func<bool, bool>>((Func<bool, bool>)((bool isSprinting) => false)); } else { Debug.LogError((object)"RiskyTweaks: Bandit SpecialSprint IL Hook failed."); } } } } namespace RiskyTweaks.Tweaks.Stages { public class ArtifactWorldDropChance : TweakBase<ArtifactWorldDropChance> { private static int killCount; public override string ConfigCategoryString => "Stages"; public override string ConfigOptionName => "(Server-Side) Bulwarks Ambry - Anti Softlock"; public override string ConfigDescriptionString => "Artifact Keys are guaranteed to drop after a certain amount of kills."; public override bool StopLoadOnConfigDisable => true; protected override void ApplyChanges() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown Stage.onStageStartGlobal += ResetKillCount; CombatState.OnCharacterDeathGlobal += new hook_OnCharacterDeathGlobal(ArtifactKeyDrop); ArtifactTrialMissionController.OnStartServer += new hook_OnStartServer(ArtifactTrialMissionController_OnStartServer); } private void ArtifactTrialMissionController_OnStartServer(orig_OnStartServer orig, ArtifactTrialMissionController self) { orig.Invoke(self); if (self.chanceForKeyDrop < 0.04f) { self.chanceForKeyDrop = 0.04f; } } private void ResetKillCount(Stage obj) { killCount = 0; } private void ArtifactKeyDrop(orig_OnCharacterDeathGlobal orig, EntityState self, DamageReport damageReport) { //IL_008c: 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) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) ArtifactTrialMissionControllerBaseState val = (ArtifactTrialMissionControllerBaseState)(object)((self is ArtifactTrialMissionControllerBaseState) ? self : null); bool flag = Util.CheckRoll(Util.GetExpAdjustedDropChancePercent(val.missionController.chanceForKeyDrop * 100f, ((Component)damageReport.victim).gameObject), 0f, (CharacterMaster)null); int num = Mathf.CeilToInt(1f / val.missionController.chanceForKeyDrop); killCount++; if (killCount > num) { flag = true; } if (flag) { killCount = 0; Debug.LogFormat("Creating artifact key pickup droplet.", Array.Empty<object>()); PickupDropletController.CreatePickupDroplet(val.missionController.GenerateDrop(), damageReport.victimBody.corePosition, Vector3.up * 20f); } } } } namespace RiskyTweaks.Tweaks.Stages.VoidStage { public class FasterHoldout : TweakBase<FasterHoldout> { public override string ConfigCategoryString => "Stages - Void Locus"; public override string ConfigOptionName => "(Server-Side) Faster Holdout"; public override string ConfigDescriptionString => "Reduce time it takes to charge Void Signals."; protected override void ApplyChanges() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) if (ModCompat.TeleExpansionCompat.pluginLoaded) { Debug.LogWarning((object)"RiskyTweaks: Skipped Void Locus FasterHoldout because TeleExpansion is loaded."); return; } GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/DeepVoidPortalBattery/DeepVoidPortalBattery.prefab").WaitForCompletion(); HoldoutZoneController component = val.GetComponent<HoldoutZoneController>(); if (Object.op_Implicit((Object)(object)component)) { component.baseChargeDuration = 40f; } } } public class NerfFog : TweakBase<NerfFog> { public override string ConfigCategoryString => "Stages - Void Locus"; public override string ConfigOptionName => "(Server-Side) Nerf Fog"; public override string ConfigDescriptionString => "Nerfs fog damage settings to be consistent with Void Fields."; protected override void ApplyChanges() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown VoidStageMissionController.RequestFog += new hook_RequestFog(VoidStageMissionController_RequestFog); } private FogRequest VoidStageMissionController_RequestFog(orig_RequestFog orig, VoidStageMissionController self, IZone zone) { if (Object.op_Implicit((Object)(object)self.fogDamageController)) { self.fogDamageController.healthFractionPerSecond = 0.025f; self.fogDamageController.healthFractionRampCoefficientPerSecond = 0f; } return orig.Invoke(self, zone); } } public class PillarsDropItems : TweakBase<PillarsDropItems> { private static Vector3 rewardPositionOffset = new Vector3(0f, 3f, 0f); public static float whiteChance = 45f; public static float greenChance = 40f; public static float redChance = 5f; public static float voidChance = 10f; public override string ConfigCategoryString => "Stages - Void Locus"; public override string ConfigOptionName => "(Server-Side) Signals Drop Items"; public override string ConfigDescriptionString => "Signals drop items for the team on completion."; protected override void ReadConfig(ConfigFile config) { base.ReadConfig(config); whiteChance = config.Bind<float>(ConfigCategoryString, ConfigOptionName + " - Tier1 Chance", 45f, "Chance to drop white items.").Value; greenChance = config.Bind<float>(ConfigCategoryString, ConfigOptionName + " - Tier2 Chance", 40f, "Chance to drop green items.").Value; redChance = config.Bind<float>(ConfigCategoryString, ConfigOptionName + " - Tier3 Chance", 5f, "Chance to drop red items.").Value; voidChance = config.Bind<float>(ConfigCategoryString, ConfigOptionName + " - Void Chance", 10f, "Chance to drop Void items.").Value; } protected override void ApplyChanges() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown HoldoutZoneController.OnDisable += new hook_OnDisable(HoldoutZoneController_OnDisable); } private void HoldoutZoneController_OnDisable(orig_OnDisable orig, HoldoutZoneController self) { //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0083: 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_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Expected I4, but got Unknown //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0160: 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_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0179: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01be: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_01f0: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Expected O, but got Unknown //IL_0233: Unknown result type (might be due to invalid IL or missing references) //IL_027e: 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_0299: Unknown result type (might be due to invalid IL or missing references) //IL_02a9: Unknown result type (might be due to invalid IL or missing references) //IL_02ae: Unknown result type (might be due to invalid IL or missing references) //IL_02b5: Unknown result type (might be due to invalid IL or missing references) //IL_02b7: Unknown result type (might be due to invalid IL or missing references) //IL_02c2: Unknown result type (might be due to invalid IL or missing references) //IL_02cb: Unknown result type (might be due to invalid IL or missing references) //IL_02d0: Unknown result type (might be due to invalid IL or missing references) //IL_02d5: Unknown result type (might be due to invalid IL or missing references) //IL_02da: Unknown result type (might be due to invalid IL or missing references) //IL_02e8: Unknown result type (might be due to invalid IL or missing references) //IL_02ea: Unknown result type (might be due to invalid IL or missing references) //IL_02ec: Unknown result type (might be due to invalid IL or missing references) //IL_02f1: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (!NetworkServer.active) { return; } SceneDef sceneDefForCurrentScene = SceneCatalog.GetSceneDefForCurrentScene(); if (!Object.op_Implicit((Object)(object)sceneDefForCurrentScene) || !sceneDefForCurrentScene.baseSceneName.Equals("voidstage")) { return; } PickupDropTable val = SelectItem(); PickupIndex val2 = val.GenerateDrop(Run.instance.bossRewardRng); ItemTier itemTier = PickupCatalog.GetPickupDef(val2).itemTier; if (!(val2 != PickupIndex.none)) { return; } PickupDef pickupDef = PickupCatalog.GetPickupDef(val2); int participatingPlayerCount = Run.instance.participatingPlayerCount; if (participatingPlayerCount == 0 || !Object.op_Implicit((Object)(object)((Component)self).transform)) { return; } int num = participatingPlayerCount; bool flag = false; ItemTier val3 = itemTier; ItemTier val4 = val3; switch ((int)val4) { case 0: if (ModCompat.ShareSuiteCompat.ItemSettings.common) { num = 1; } break; case 1: if (ModCompat.ShareSuiteCompat.ItemSettings.uncommon) { num = 1; } break; case 2: if (ModCompat.ShareSuiteCompat.ItemSettings.legendary) { num = 1; } break; case 6: case 7: case 8: case 9: if (ModCompat.ShareSuiteCompat.ItemSettings.voidItem) { num = 1; } break; } float num2 = 360f / (float)num; Vector3 val5 = Quaternion.AngleAxis((float)Random.Range(0, 360), Vector3.up) * (Vector3.up * 40f + Vector3.forward * 5f); Quaternion val6 = Quaternion.AngleAxis(num2, Vector3.up); Option[] array = PickupPickerController.GenerateOptionsFromDropTable(3, val, Run.instance.bossRewardRng); if (array.Length != 0 && array[0].pickupIndex != PickupIndex.none) { pickupDef = PickupCatalog.GetPickupDef(array[0].pickupIndex); } if (pickupDef != null && pickupDef.pickupIndex != PickupIndex.none) { SimpleChatMessage val7 = new SimpleChatMessage(); val7.baseToken = "VOID_SIGNAL_COMPLETE_RISKYMOD"; val7.paramTokens = new string[1] { "<color=#" + ColorUtility.ToHtmlStringRGB(pickupDef.baseColor) + ">" + Language.GetStringFormatted(pickupDef.nameToken, Array.Empty<object>()) + "</color>" }; Chat.SendBroadcastChat((ChatMessageBase)(object)val7); } int num3 = 0; while (num3 < num) { CreatePickupInfo val8 = default(CreatePickupInfo); val8.pickerOptions = array; val8.prefabOverride = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/OptionPickup/OptionPickup.prefab").WaitForCompletion(); val8.rotation = Quaternion.identity; ((CreatePickupInfo)(ref val8)).pickupIndex = PickupCatalog.FindPickupIndex(itemTier); PickupDropletController.CreatePickupDroplet(val8, ((Component)self).transform.position + rewardPositionOffset, val5); num3++; val5 = val6 * val5; } } private static PickupDropTable SelectItem() { //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0055: 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_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: 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_00e8: Unknown result type (might be due to invalid IL or missing references) Xoroshiro128Plus bossRewardRng = Run.instance.bossRewardRng; float num = whiteChance + greenChance + redChance + voidChance; if (bossRewardRng.RangeFloat(0f, num) <= whiteChance && whiteChance > 0f) { return Addressables.LoadAssetAsync<PickupDropTable>((object)"RoR2/Base/Common/dtTier1Item.asset").WaitForCompletion(); } num -= whiteChance; if (bossRewardRng.RangeFloat(0f, num) <= greenChance && greenChance > 0f) { return Addressables.LoadAssetAsync<PickupDropTable>((object)"RoR2/Base/Common/dtTier2Item.asset").WaitForCompletion(); } num -= greenChance; if (bossRewardRng.RangeFloat(0f, num) <= redChance && redChance > 0f) { return Addressables.LoadAssetAsync<PickupDropTable>((object)"RoR2/Base/Common/dtTier3Item.asset").WaitForCompletion(); } return Addressables.LoadAssetAsync<PickupDropTable>((object)"RoR2/Base/Common/dtVoidChest.asset").WaitForCompletion(); } } } namespace RiskyTweaks.Tweaks.Stages.VoidRaid { public class NerfFog : TweakBase<NerfFog> { private SceneDef voidRaidScene = Addressables.LoadAssetAsync<SceneDef>((object)"RoR2/DLC1/voidraid/voidraid.asset").WaitForCompletion(); public override string ConfigCategoryString => "Stages - Planetarium"; public override string ConfigOptionName => "(Server-Side) Nerf Fog"; public override string ConfigDescriptionString => "Nerfs fog damage settings to be consistent with Void Fields."; protected override void ApplyChanges() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown FogDamageController.Start += new hook_Start(FogDamageController_Start); } private void FogDamageController_Start(orig_Start orig, FogDamageController self) { orig.Invoke(self); if ((Object)(object)SceneCatalog.GetSceneDefForCurrentScene() == (Object)(object)voidRaidScene) { self.healthFractionPerSecond = 0.025f; self.healthFractionRampCoefficientPerSecond = 0f; } } } } namespace RiskyTweaks.Tweaks.Stages.Moon { public class FasterHoldout : TweakBase<FasterHoldout> { public override string ConfigCategoryString => "Stages - Commencement"; public override string ConfigOptionName => "(Server-Side) Faster Holdout"; public override string ConfigDescriptionString => "Reduce time it takes to charge the Pillar of Mass and Soul."; protected override void ApplyChanges() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) if (ModCompat.TeleExpansionCompat.pluginLoaded) { Debug.LogWarning((object)"RiskyTweaks: Skipped Commencement FasterHoldout because TeleExpansion is loaded."); return; } ModifyHoldout(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/moon2/MoonBatteryMass.prefab").WaitForCompletion(), 40f); ModifyHoldout(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/moon2/MoonBatterySoul.prefab").WaitForCompletion(), 20f); } private void ModifyHoldout(GameObject gameObject, float durationOverride) { if (Object.op_Implicit((Object)(object)gameObject)) { HoldoutZoneController component = gameObject.GetComponent<HoldoutZoneController>(); if (Object.op_Implicit((Object)(object)component)) { component.baseChargeDuration = durationOverride; } } } } public class PillarsDropItems : TweakBase<PillarsDropItems> { private static Vector3 rewardPositionOffset = new Vector3(0f, 3f, 0f); public static float whiteChance = 50f; public static float greenChance = 40f; public static float redChance = 10f; public static float lunarChance = 0f; public static float pearlOverwriteChance = 15f; public override string ConfigCategoryString => "Stages - Commencement"; public override string ConfigOptionName => "(Server-Side) Pillars Drop Items"; public override string ConfigDescriptionString => "Pillars drop items for the team on completion."; protected override void ReadConfig(ConfigFile config) { base.ReadConfig(config); whiteChance = config.Bind<float>(ConfigCategoryString, ConfigOptionName + " - Tier1 Chance", 50f, "Chance to drop white items.").Value; greenChance = config.Bind<float>(ConfigCategoryString, ConfigOptionName + " - Tier2 Chance", 40f, "Chance to drop green items.").Value; redChance = config.Bind<float>(ConfigCategoryString, ConfigOptionName + " - Tier3 Chance", 10f, "Chance to drop red items.").Value; lunarChance = config.Bind<float>(ConfigCategoryString, ConfigOptionName + " - Lunar Chance", 0f, "Chance to drop lunar items.").Value; pearlOverwriteChance = config.Bind<float>(ConfigCategoryString, ConfigOptionName + " - Pearl Overwrite Chance", 15f, "Chance for non-Tier3 items to be rerolled into a Pearl.").Value; } protected override void ApplyChanges() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown MoonBatteryMissionController.OnBatteryCharged += new hook_OnBatteryCharged(MoonBatteryMissionController_OnBatteryCharged); } private void MoonBatteryMissionController_OnBatteryCharged(orig_OnBatteryCharged orig, MoonBatteryMissionController self, HoldoutZoneController holdoutZone) { //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or miss