Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of VanillaItemTweaks v1.1.0
VanillaItemTweaks.dll
Decompiled 2 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using EntityStates; using EntityStates.Commando.CommandoWeapon; using EntityStates.Missions.BrotherEncounter; using EntityStates.TeleporterHealNovaController; using IL.EntityStates; using IL.EntityStates.TeleporterHealNovaController; using IL.RoR2; using IL.RoR2.Items; using IL.RoR2.Orbs; using Microsoft.CodeAnalysis; using Mono.Cecil; using Mono.Cecil.Cil; using MonoMod.Cil; using On.EntityStates.Commando.CommandoWeapon; using On.EntityStates.Missions.BrotherEncounter; using On.EntityStates.TeleporterHealNovaController; using On.RoR2; using R2API; using RoR2; using RoR2.Orbs; using RoR2.Projectile; using UnityEngine; using UnityEngine.Networking; using VanillaItemTweaks.Boss; using VanillaItemTweaks.Common; using VanillaItemTweaks.Legendary; using VanillaItemTweaks.Lunar; using VanillaItemTweaks.Uncommon; using VanillaItemTweaks.Void; [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("VanillaItemTweaks")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+b066aa36a83a9c1671d2b0a0f48657d07e7682c3")] [assembly: AssemblyProduct("VanillaItemTweaks")] [assembly: AssemblyTitle("VanillaItemTweaks")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace VanillaItemTweaks { internal static class Log { internal static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void LogDebug(object data) { _logSource.LogDebug(data); } internal static void LogError(object data) { _logSource.LogError(data); } internal static void LogFatal(object data) { _logSource.LogFatal(data); } internal static void LogInfo(object data) { _logSource.LogInfo(data); } internal static void LogMessage(object data) { _logSource.LogMessage(data); } internal static void LogWarning(object data) { _logSource.LogWarning(data); } internal static void LogInstrNotFound(ILContext il) { LogError("GoToNext instructions not found at method: " + (object)il.Method); } } [BepInPlugin("OakPrime.VanillaItemTweaks", "VanillaItemTweaks", "1.1.0")] public class VanillaItemTweaks : BaseUnityPlugin { public const string PluginGUID = "OakPrime.VanillaItemTweaks"; public const string PluginAuthor = "OakPrime"; public const string PluginName = "VanillaItemTweaks"; public const string PluginVersion = "1.1.0"; public static ManualLogSource logger; public void Awake() { logger = ((BaseUnityPlugin)this).Logger; Log.Init(logger); try { Init(); } catch (Exception ex) { ((BaseUnityPlugin)this).Logger.LogError((object)(ex.Message + " - " + ex.StackTrace)); } } private void Init() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown ConfigFile configFile = new ConfigFile(Paths.ConfigPath + "\\OakPrime.VanillaItemTweaks.cfg", true); WarbannerBuff.TryInit(configFile); MochaRework.TryInit(configFile); StickyBombBuff.TryInit(configFile); BoxOfDynamiteBuff.TryInit(configFile); DeathMarkChoice.TryInit(configFile); HuntersHarpoonChoice.TryInit(configFile); LeechingSeedBuff.TryInit(configFile); LeptonDaisyBuff.TryInit(configFile); RedWhipBuff.TryInit(configFile); OldGuillotineBuff.TryInit(configFile); RegeneratingScrapBuff.TryInit(configFile); SquidPolypBuff.TryInit(configFile); HappiestMaskRework.TryInit(configFile); LaserScopeBuff.TryInit(configFile); KnurlBuff.TryInit(configFile); PolyluteNerf.TryInit(configFile); GestureNerf.TryInit(configFile); TranscendenceNerf.TryInit(configFile); } } } namespace VanillaItemTweaks.Void { public static class PolyluteNerf { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static Func<Instruction, bool> <>9__1_1; public static Func<Instruction, bool> <>9__1_2; public static Func<Instruction, bool> <>9__1_3; public static Func<Instruction, bool> <>9__1_4; public static Func<Instruction, bool> <>9__1_5; public static Func<int, int> <>9__1_6; public static Manipulator <>9__1_0; internal void <Init>b__1_0(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); int num3 = default(int); int num2 = default(int); int num = default(int); val.TryGotoNext(new Func<Instruction, bool>[5] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num3), (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, ref num2), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num), (Instruction x) => ILPatternMatchingExt.MatchMul(x), (Instruction x) => ILPatternMatchingExt.MatchStfld<VoidLightningOrb>(x, "totalStrikes") }); val.Index += 4; val.EmitDelegate<Func<int, int>>((Func<int, int>)((int totalStrikes) => totalStrikes * 2 / 3)); } internal bool <Init>b__1_1(Instruction x) { int num = default(int); return ILPatternMatchingExt.MatchLdloc(x, ref num); } internal bool <Init>b__1_2(Instruction x) { int num = default(int); return ILPatternMatchingExt.MatchLdcI4(x, ref num); } internal bool <Init>b__1_3(Instruction x) { int num = default(int); return ILPatternMatchingExt.MatchLdloc(x, ref num); } internal bool <Init>b__1_4(Instruction x) { return ILPatternMatchingExt.MatchMul(x); } internal bool <Init>b__1_5(Instruction x) { return ILPatternMatchingExt.MatchStfld<VoidLightningOrb>(x, "totalStrikes"); } internal int <Init>b__1_6(int totalStrikes) { return totalStrikes * 2 / 3; } } public static void TryInit(ConfigFile configFile) { if (configFile.Bind<bool>("Polylute Nerf", "Enable Polylute Nerf", true, "Reduces Polylute strikes from 3 to 2.").Value) { Init(); } } public static void Init() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown try { object obj = <>c.<>9__1_0; if (obj == null) { Manipulator val = delegate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val2 = new ILCursor(il); int num3 = default(int); int num2 = default(int); int num = default(int); val2.TryGotoNext(new Func<Instruction, bool>[5] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num3), (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, ref num2), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num), (Instruction x) => ILPatternMatchingExt.MatchMul(x), (Instruction x) => ILPatternMatchingExt.MatchStfld<VoidLightningOrb>(x, "totalStrikes") }); val2.Index += 4; val2.EmitDelegate<Func<int, int>>((Func<int, int>)((int totalStrikes) => totalStrikes * 2 / 3)); }; <>c.<>9__1_0 = val; obj = (object)val; } GlobalEventManager.ProcessHitEnemy += (Manipulator)obj; ReplaceText(); Log.LogInfo("Added Polylute Nerf"); } catch (Exception ex) { VanillaItemTweaks.logger.LogError((object)(ex.Message + " - " + ex.StackTrace)); } } private static void ReplaceText() { LanguageAPI.Add("ITEM_CHAINLIGHTNINGVOID_DESC", "<style=cIsDamage>25%</style> chance to fire <style=cIsDamage>lightning</style> for <style=cIsDamage>60%</style> TOTAL damage up to <style=cIsDamage>2</style> <style=cStack>(+2 per stack)</style> times. <style=cIsVoid>Corrupts all Ukeleles</style>."); } } } namespace VanillaItemTweaks.Uncommon { internal class BoxOfDynamiteBuff { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static Func<Instruction, bool> <>9__2_1; public static Func<Instruction, bool> <>9__2_2; public static Manipulator <>9__2_0; internal void <Init>b__2_0(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); float num2 = default(float); float num = default(float); if (!val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, ref num2), (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, ref num) })) { Log.LogInstrNotFound(il); return; } val.Next.Operand = _damageCoeff; int index = val.Index; val.Index = index + 1; val.Next.Operand = _damageCoeff; } internal bool <Init>b__2_1(Instruction x) { float num = default(float); return ILPatternMatchingExt.MatchLdcR4(x, ref num); } internal bool <Init>b__2_2(Instruction x) { float num = default(float); return ILPatternMatchingExt.MatchLdcR4(x, ref num); } } private static float _damageCoeff; public static void TryInit(ConfigFile configFile) { bool value = configFile.Bind<bool>("Box of Dynamite Buff", "Enable Box of Dynamite Buff", true, "Changes guillotine execution threshold.").Value; _damageCoeff = configFile.Bind<float>("Box of Dynamite Buff", "Box of Dynamite Damage", 240f, "Box of Dynamite Damage does X% damage (+X% per stack). Default: 240. Vanilla: 240 (+85 per stack).").Value / 100f; if (value) { Init(); } } public static void Init() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown try { object obj = <>c.<>9__2_0; if (obj == null) { Manipulator val = delegate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val2 = new ILCursor(il); float num2 = default(float); float num = default(float); if (!val2.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, ref num2), (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, ref num) })) { Log.LogInstrNotFound(il); } else { val2.Next.Operand = _damageCoeff; int index = val2.Index; val2.Index = index + 1; val2.Next.Operand = _damageCoeff; } }; <>c.<>9__2_0 = val; obj = (object)val; } DroneDynamiteBehaviour.FixedUpdate += (Manipulator)obj; UpdateText(); Log.LogInfo("Added Box of Dynamite Buff"); } catch (Exception ex) { Log.LogError(ex.Message + " - " + ex.StackTrace); } } private static void UpdateText() { LanguageAPI.Add("ITEM_DRONESDROPDYNAMITE_DESC", "Gain <style=cIsDamage>Lt. Droneboy</style>. While in combat, your drones drop sticks of dynamite that detonate for <style=cIsDamage>" + _damageCoeff * 100f + "%</style> <style=cStack>(+" + _damageCoeff * 100f + "% per stack)</style>, stunning enemies. Recharges after <style=cIsUtility>10</style> seconds."); } } internal class DeathMarkBehavior : MonoBehaviour { private float _timer = 0f; private float _slowBuildUpSeconds = 4f; private CharacterBody _victimBody; private int _deathMarkCount = 1; public void SetBuildUpSeconds(float buildupSeconds) { _slowBuildUpSeconds = buildupSeconds; } private void OnEnable() { Log.LogDebug("Death Mark Beh OnEnable entered"); _victimBody = ((Component)this).GetComponent<CharacterBody>(); } public void ApplyMark() { Log.LogDebug("AppliedMark"); _victimBody.AddTimedBuff(Buffs.DeathMark, DeathMarkRework._duration * (float)_deathMarkCount); _timer = 0f; } public void TryUpdateCount(int count) { if (count > _deathMarkCount) { _deathMarkCount = count; } } private bool IsSlowed() { //IL_0017: 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_0039: 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_005b: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) Log.LogDebug("Check slow"); HashSet<BuffIndex> hashSet = new HashSet<BuffIndex> { Buffs.Slow80.buffIndex, Buffs.Slow50.buffIndex, Buffs.Slow60.buffIndex, Buffs.Cripple.buffIndex, Buffs.BeetleJuice.buffIndex, Buffs.ClayGoo.buffIndex, Buffs.Weak.buffIndex }; foreach (TimedBuff timedBuff in _victimBody.timedBuffs) { if (hashSet.Contains(timedBuff.buffIndex)) { return true; } } return false; } private void FixedUpdate() { if (_victimBody.HasBuff(Buffs.Entangle)) { ApplyMark(); } else if (!_victimBody.HasBuff(Buffs.DeathMark) && IsSlowed()) { _timer += Time.deltaTime; if (_timer >= _slowBuildUpSeconds) { ApplyMark(); } } } } internal class DeathMarkChoice { public static void TryInit(ConfigFile configFile) { bool value = configFile.Bind<bool>("Death Mark Rework", "Enable Death Mark Rework", true, "Death Mark applies on all hard CC.").Value; float value2 = configFile.Bind<float>("Death Mark Rework", "Death Mark Duration", 4f, "Death Mark lasts X (+X per stack) seconds.").Value; float value3 = configFile.Bind<float>("Death Mark Rework", "Death Mark Buildup Duration", 4f, "Death Mark can also be applied by slowing target for X seconds.").Value; float damageMultiplier = configFile.Bind<float>("Death Mark Rework", "Death Mark Damage Boost", 35f, "Death Mark increases damage to target by X%.").Value / 100f + 1f; bool value4 = configFile.Bind<bool>("Death Mark Buff", "Enable Death Mark Buff", false, "Reduces Death Mark debuffs required to 3 and reduces its damage multiplier to 1.35x.").Value; float damageMultiplier2 = configFile.Bind<float>("Death Mark Buff", "Death Mark Damage Boost", 35f, "Death Mark increases damage to target by X%.").Value / 100f + 1f; int value5 = configFile.Bind<int>("Death Mark Buff", "Death Mark Debuff Count", 3, "Death Mark requires X debuffs to activate.").Value; if (value) { DeathMarkRework.Init(value2, value3, damageMultiplier); } else if (value4) { DeathMarkFix.Init(damageMultiplier2, value5); } } } public static class DeathMarkFix { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static Func<Instruction, bool> <>9__2_3; public static Func<int, int> <>9__2_2; public static Manipulator <>9__2_0; public static Func<Instruction, bool> <>9__2_4; public static Func<Instruction, bool> <>9__2_5; public static Func<Instruction, bool> <>9__2_6; public static Func<Instruction, bool> <>9__2_7; public static Func<Instruction, bool> <>9__2_8; public static Func<Instruction, bool> <>9__2_9; public static Func<Instruction, bool> <>9__2_10; public static Func<Instruction, bool> <>9__2_11; public static Manipulator <>9__2_1; internal void <Init>b__2_0(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.MatchLdcI4(x, 4) })) { Log.LogInstrNotFound(il); return; } int index = val.Index; val.Index = index + 1; val.EmitDelegate<Func<int, int>>((Func<int, int>)((int num) => _debuffCount)); } internal bool <Init>b__2_3(Instruction x) { return ILPatternMatchingExt.MatchLdcI4(x, 4); } internal int <Init>b__2_2(int num) { return _debuffCount; } internal void <Init>b__2_1(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); int num4 = default(int); int num3 = default(int); if (!val.TryGotoNext(new Func<Instruction, bool>[4] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num4), (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 1.5f), (Instruction x) => ILPatternMatchingExt.MatchMul(x), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref num3) })) { Log.LogInstrNotFound(il); return; } int num2 = default(int); int num = default(int); if (!val.TryGotoNext(new Func<Instruction, bool>[4] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num2), (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 1.5f), (Instruction x) => ILPatternMatchingExt.MatchMul(x), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref num) })) { Log.LogInstrNotFound(il); return; } int index = val.Index; val.Index = index + 1; val.Next.Operand = _damageMultiplier; } internal bool <Init>b__2_4(Instruction x) { int num = default(int); return ILPatternMatchingExt.MatchLdloc(x, ref num); } internal bool <Init>b__2_5(Instruction x) { return ILPatternMatchingExt.MatchLdcR4(x, 1.5f); } internal bool <Init>b__2_6(Instruction x) { return ILPatternMatchingExt.MatchMul(x); } internal bool <Init>b__2_7(Instruction x) { int num = default(int); return ILPatternMatchingExt.MatchStloc(x, ref num); } internal bool <Init>b__2_8(Instruction x) { int num = default(int); return ILPatternMatchingExt.MatchLdloc(x, ref num); } internal bool <Init>b__2_9(Instruction x) { return ILPatternMatchingExt.MatchLdcR4(x, 1.5f); } internal bool <Init>b__2_10(Instruction x) { return ILPatternMatchingExt.MatchMul(x); } internal bool <Init>b__2_11(Instruction x) { int num = default(int); return ILPatternMatchingExt.MatchStloc(x, ref num); } } public static float _damageMultiplier; public static int _debuffCount; public static void Init(float damageMultiplier, int debuffCount) { //IL_0022: 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_002d: Expected O, but got Unknown //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Expected O, but got Unknown _damageMultiplier = damageMultiplier; _debuffCount = debuffCount; try { object obj = <>c.<>9__2_0; if (obj == null) { Manipulator val = delegate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val4 = new ILCursor(il); if (!val4.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 4) })) { Log.LogInstrNotFound(il); } else { int index2 = val4.Index; val4.Index = index2 + 1; val4.EmitDelegate<Func<int, int>>((Func<int, int>)((int num) => _debuffCount)); } }; <>c.<>9__2_0 = val; obj = (object)val; } GlobalEventManager.ProcDeathMark += (Manipulator)obj; object obj2 = <>c.<>9__2_1; if (obj2 == null) { Manipulator val2 = delegate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val3 = new ILCursor(il); int num5 = default(int); int num4 = default(int); int num3 = default(int); int num2 = default(int); if (!val3.TryGotoNext(new Func<Instruction, bool>[4] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num5), (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 1.5f), (Instruction x) => ILPatternMatchingExt.MatchMul(x), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref num4) })) { Log.LogInstrNotFound(il); } else if (!val3.TryGotoNext(new Func<Instruction, bool>[4] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num3), (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 1.5f), (Instruction x) => ILPatternMatchingExt.MatchMul(x), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref num2) })) { Log.LogInstrNotFound(il); } else { int index = val3.Index; val3.Index = index + 1; val3.Next.Operand = _damageMultiplier; } }; <>c.<>9__2_1 = val2; obj2 = (object)val2; } HealthComponent.TakeDamageProcess += (Manipulator)obj2; ReplaceText(); Log.LogInfo("Added Death Mark Buff"); } catch (Exception ex) { VanillaItemTweaks.logger.LogError((object)(ex.Message + " - " + ex.StackTrace)); } } private static void ReplaceText() { LanguageAPI.Add("ITEM_DEATHMARK_PICKUP", "Enemies with " + _debuffCount + " or more debuffs are marked for death, taking bonus damage."); LanguageAPI.Add("ITEM_DEATHMARK_DESC", "Enemies with <style=cIsDamage>" + _debuffCount + "</style> or more debuffs are <style=cIsDamage>marked for death</style>, increasing damage taken by <style=cIsDamage>" + (_damageMultiplier - 1f) * 100f + "%</style> from all sources for <style=cIsUtility>7</style> <style=cStack>(+7 per stack)</style> seconds."); } } public static class DeathMarkRework { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static Func<Instruction, bool> <>9__3_5; public static Action<DamageReport> <>9__3_4; public static Manipulator <>9__3_0; public static Func<Instruction, bool> <>9__3_8; public static Func<Instruction, bool> <>9__3_9; public static Func<CharacterMaster, DamageInfo, GameObject, CharacterMaster> <>9__3_6; public static Func<Instruction, bool> <>9__3_10; public static Func<Instruction, bool> <>9__3_11; public static Func<Instruction, bool> <>9__3_12; public static Func<Instruction, bool> <>9__3_13; public static Action<DamageInfo, GameObject> <>9__3_7; public static Manipulator <>9__3_1; public static Manipulator <>9__3_2; public static Func<Instruction, bool> <>9__3_14; public static Func<Instruction, bool> <>9__3_15; public static Func<Instruction, bool> <>9__3_16; public static Func<Instruction, bool> <>9__3_17; public static Func<Instruction, bool> <>9__3_18; public static Func<Instruction, bool> <>9__3_19; public static Func<Instruction, bool> <>9__3_20; public static Func<Instruction, bool> <>9__3_21; public static Manipulator <>9__3_3; internal void <Init>b__3_0(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0048: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); string text = default(string); if (!val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdstr(x, ref text) })) { Log.LogInstrNotFound(il); return; } val.Emit(OpCodes.Ldarg_1); val.EmitDelegate<Action<DamageReport>>((Action<DamageReport>)delegate(DamageReport dmgRep) { if (dmgRep.attackerMaster.inventory.GetItemCountEffective(Items.DeathMark) > 0) { dmgRep.victimBody.AddTimedBuff(Buffs.DeathMark, _duration); } }); } internal bool <Init>b__3_5(Instruction x) { string text = default(string); return ILPatternMatchingExt.MatchLdstr(x, ref text); } internal void <Init>b__3_4(DamageReport dmgRep) { if (dmgRep.attackerMaster.inventory.GetItemCountEffective(Items.DeathMark) > 0) { dmgRep.victimBody.AddTimedBuff(Buffs.DeathMark, _duration); } } internal void <Init>b__3_1(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: 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) ILCursor val = new ILCursor(il); int num2 = default(int); if (!val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterMaster>(x, "get_inventory"), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref num2) })) { Log.LogInstrNotFound(il); return; } val.Emit(OpCodes.Ldarg_1); val.Emit(OpCodes.Ldarg_2); val.EmitDelegate<Func<CharacterMaster, DamageInfo, GameObject, CharacterMaster>>((Func<CharacterMaster, DamageInfo, GameObject, CharacterMaster>)delegate(CharacterMaster master, DamageInfo dmgInfo, GameObject obj) { //IL_00a0: 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) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) Log.LogDebug("Entered stungrenade delegate"); Inventory inventory = master.inventory; int itemCountEffective2 = inventory.GetItemCountEffective(Items.StunChanceOnHit); Log.LogDebug("inventory: " + ((object)inventory)?.ToString() + "; stunGrenades: " + itemCountEffective2); if (inventory.GetItemCountEffective(Items.DeathMark) > 0 && itemCountEffective2 > 0 && (Object)(object)obj.GetComponent<SetStateOnHurt>() == (Object)null && Util.CheckRoll(Util.ConvertAmplificationPercentageIntoReductionPercentage(SetStateOnHurt.stunChanceOnHitBaseChancePercent * (float)itemCountEffective2 * dmgInfo.procCoefficient), master)) { Log.LogDebug("Doing fake stun grenade"); EffectManager.SimpleImpactEffect(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/ImpactEffects/ImpactStunGrenade"), dmgInfo.position, -dmgInfo.force, true); obj.GetComponent<CharacterBody>().AddTimedBuff(Buffs.DeathMark, _duration); } return master; }); int num = default(int); ILLabel val2 = default(ILLabel); if (!val.TryGotoNext(new Func<Instruction, bool>[4] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num), (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, "RoR2.DLC2Content/Buffs", "EliteBeadCorruption"), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, "RoR2.CharacterBody", "HasBuff"), (Instruction x) => ILPatternMatchingExt.MatchBrfalse(x, ref val2) })) { Log.LogInstrNotFound(il); return; } int index = val.Index; val.Index = index + 1; Log.LogDebug("index: " + val.Index); Log.LogDebug("next instr: " + (object)val.Next); val.Emit(OpCodes.Ldarg_1); val.Emit(OpCodes.Ldarg_2); val.EmitDelegate<Action<DamageInfo, GameObject>>((Action<DamageInfo, GameObject>)delegate(DamageInfo dmgInfo, GameObject obj) { Log.LogDebug("Entered deathmark delegate"); CharacterBody component = obj.GetComponent<CharacterBody>(); int itemCountEffective = dmgInfo.attacker.GetComponent<CharacterBody>().inventory.GetItemCountEffective(Items.DeathMark); Log.LogDebug("count: " + itemCountEffective); if (itemCountEffective <= 0) { Log.LogDebug("no deathmarks"); } else { DeathMarkBehavior deathMarkBehavior = obj.GetComponent<DeathMarkBehavior>(); if ((Object)(object)deathMarkBehavior == (Object)null) { deathMarkBehavior = obj.AddComponent<DeathMarkBehavior>(); deathMarkBehavior.SetBuildUpSeconds(_slowBuildUpDuration); Log.LogDebug("Added deathMarkBehavior"); Log.LogDebug("Deathmark behavior parent disabled: " + obj.activeInHierarchy); } deathMarkBehavior.TryUpdateCount(itemCountEffective); if (IsHardCCDamageType(dmgInfo)) { deathMarkBehavior.ApplyMark(); } } }); } internal bool <Init>b__3_8(Instruction x) { return ILPatternMatchingExt.MatchCallOrCallvirt<CharacterMaster>(x, "get_inventory"); } internal bool <Init>b__3_9(Instruction x) { int num = default(int); return ILPatternMatchingExt.MatchStloc(x, ref num); } internal CharacterMaster <Init>b__3_6(CharacterMaster master, DamageInfo dmgInfo, GameObject obj) { //IL_00a0: 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) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) Log.LogDebug("Entered stungrenade delegate"); Inventory inventory = master.inventory; int itemCountEffective = inventory.GetItemCountEffective(Items.StunChanceOnHit); Log.LogDebug("inventory: " + ((object)inventory)?.ToString() + "; stunGrenades: " + itemCountEffective); if (inventory.GetItemCountEffective(Items.DeathMark) > 0 && itemCountEffective > 0 && (Object)(object)obj.GetComponent<SetStateOnHurt>() == (Object)null && Util.CheckRoll(Util.ConvertAmplificationPercentageIntoReductionPercentage(SetStateOnHurt.stunChanceOnHitBaseChancePercent * (float)itemCountEffective * dmgInfo.procCoefficient), master)) { Log.LogDebug("Doing fake stun grenade"); EffectManager.SimpleImpactEffect(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/ImpactEffects/ImpactStunGrenade"), dmgInfo.position, -dmgInfo.force, true); obj.GetComponent<CharacterBody>().AddTimedBuff(Buffs.DeathMark, _duration); } return master; } internal bool <Init>b__3_10(Instruction x) { int num = default(int); return ILPatternMatchingExt.MatchLdloc(x, ref num); } internal bool <Init>b__3_11(Instruction x) { return ILPatternMatchingExt.MatchLdsfld(x, "RoR2.DLC2Content/Buffs", "EliteBeadCorruption"); } internal bool <Init>b__3_12(Instruction x) { return ILPatternMatchingExt.MatchCallOrCallvirt(x, "RoR2.CharacterBody", "HasBuff"); } internal bool <Init>b__3_13(Instruction x) { ILLabel val = default(ILLabel); return ILPatternMatchingExt.MatchBrfalse(x, ref val); } internal void <Init>b__3_7(DamageInfo dmgInfo, GameObject obj) { Log.LogDebug("Entered deathmark delegate"); CharacterBody component = obj.GetComponent<CharacterBody>(); int itemCountEffective = dmgInfo.attacker.GetComponent<CharacterBody>().inventory.GetItemCountEffective(Items.DeathMark); Log.LogDebug("count: " + itemCountEffective); if (itemCountEffective <= 0) { Log.LogDebug("no deathmarks"); return; } DeathMarkBehavior deathMarkBehavior = obj.GetComponent<DeathMarkBehavior>(); if ((Object)(object)deathMarkBehavior == (Object)null) { deathMarkBehavior = obj.AddComponent<DeathMarkBehavior>(); deathMarkBehavior.SetBuildUpSeconds(_slowBuildUpDuration); Log.LogDebug("Added deathMarkBehavior"); Log.LogDebug("Deathmark behavior parent disabled: " + obj.activeInHierarchy); } deathMarkBehavior.TryUpdateCount(itemCountEffective); if (IsHardCCDamageType(dmgInfo)) { deathMarkBehavior.ApplyMark(); } } internal void <Init>b__3_2(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0009: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); val.Emit(OpCodes.Ret); } internal void <Init>b__3_3(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); int num4 = default(int); int num3 = default(int); if (!val.TryGotoNext(new Func<Instruction, bool>[4] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num4), (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 1.5f), (Instruction x) => ILPatternMatchingExt.MatchMul(x), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref num3) })) { Log.LogInstrNotFound(il); return; } int num2 = default(int); int num = default(int); if (!val.TryGotoNext(new Func<Instruction, bool>[4] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num2), (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 1.5f), (Instruction x) => ILPatternMatchingExt.MatchMul(x), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref num) })) { Log.LogInstrNotFound(il); return; } int index = val.Index; val.Index = index + 1; Log.LogDebug("Dmark coeff: " + val.Next.Operand); val.Next.Operand = _damageMultiplier; Log.LogDebug("Dmark coeff updated: " + val.Next.Operand); } internal bool <Init>b__3_14(Instruction x) { int num = default(int); return ILPatternMatchingExt.MatchLdloc(x, ref num); } internal bool <Init>b__3_15(Instruction x) { return ILPatternMatchingExt.MatchLdcR4(x, 1.5f); } internal bool <Init>b__3_16(Instruction x) { return ILPatternMatchingExt.MatchMul(x); } internal bool <Init>b__3_17(Instruction x) { int num = default(int); return ILPatternMatchingExt.MatchStloc(x, ref num); } internal bool <Init>b__3_18(Instruction x) { int num = default(int); return ILPatternMatchingExt.MatchLdloc(x, ref num); } internal bool <Init>b__3_19(Instruction x) { return ILPatternMatchingExt.MatchLdcR4(x, 1.5f); } internal bool <Init>b__3_20(Instruction x) { return ILPatternMatchingExt.MatchMul(x); } internal bool <Init>b__3_21(Instruction x) { int num = default(int); return ILPatternMatchingExt.MatchStloc(x, ref num); } } public static float _duration; public static float _slowBuildUpDuration; public static float _damageMultiplier; public static void Init(float duration, float slowBulidUpDuration, float damageMultiplier) { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown //IL_004d: 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) //IL_0058: Expected O, but got Unknown //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_007d: Expected O, but got Unknown //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_00a2: Expected O, but got Unknown _duration = duration; _slowBuildUpDuration = slowBulidUpDuration; _damageMultiplier = damageMultiplier; try { object obj2 = <>c.<>9__3_0; if (obj2 == null) { Manipulator val = delegate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0048: Unknown result type (might be due to invalid IL or missing references) ILCursor val9 = new ILCursor(il); string text = default(string); if (!val9.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdstr(x, ref text) })) { Log.LogInstrNotFound(il); } else { val9.Emit(OpCodes.Ldarg_1); val9.EmitDelegate<Action<DamageReport>>((Action<DamageReport>)delegate(DamageReport dmgRep) { if (dmgRep.attackerMaster.inventory.GetItemCountEffective(Items.DeathMark) > 0) { dmgRep.victimBody.AddTimedBuff(Buffs.DeathMark, _duration); } }); } }; <>c.<>9__3_0 = val; obj2 = (object)val; } SetStateOnHurt.OnTakeDamageServer += (Manipulator)obj2; object obj3 = <>c.<>9__3_1; if (obj3 == null) { Manipulator val2 = delegate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: 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) ILCursor val7 = new ILCursor(il); int num6 = default(int); if (!val7.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterMaster>(x, "get_inventory"), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref num6) })) { Log.LogInstrNotFound(il); } else { val7.Emit(OpCodes.Ldarg_1); val7.Emit(OpCodes.Ldarg_2); val7.EmitDelegate<Func<CharacterMaster, DamageInfo, GameObject, CharacterMaster>>((Func<CharacterMaster, DamageInfo, GameObject, CharacterMaster>)delegate(CharacterMaster master, DamageInfo dmgInfo, GameObject obj) { //IL_00a0: 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) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) Log.LogDebug("Entered stungrenade delegate"); Inventory inventory = master.inventory; int itemCountEffective2 = inventory.GetItemCountEffective(Items.StunChanceOnHit); Log.LogDebug("inventory: " + ((object)inventory)?.ToString() + "; stunGrenades: " + itemCountEffective2); if (inventory.GetItemCountEffective(Items.DeathMark) > 0 && itemCountEffective2 > 0 && (Object)(object)obj.GetComponent<SetStateOnHurt>() == (Object)null && Util.CheckRoll(Util.ConvertAmplificationPercentageIntoReductionPercentage(SetStateOnHurt.stunChanceOnHitBaseChancePercent * (float)itemCountEffective2 * dmgInfo.procCoefficient), master)) { Log.LogDebug("Doing fake stun grenade"); EffectManager.SimpleImpactEffect(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/ImpactEffects/ImpactStunGrenade"), dmgInfo.position, -dmgInfo.force, true); obj.GetComponent<CharacterBody>().AddTimedBuff(Buffs.DeathMark, _duration); } return master; }); int num5 = default(int); ILLabel val8 = default(ILLabel); if (!val7.TryGotoNext(new Func<Instruction, bool>[4] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num5), (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, "RoR2.DLC2Content/Buffs", "EliteBeadCorruption"), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, "RoR2.CharacterBody", "HasBuff"), (Instruction x) => ILPatternMatchingExt.MatchBrfalse(x, ref val8) })) { Log.LogInstrNotFound(il); } else { int index2 = val7.Index; val7.Index = index2 + 1; Log.LogDebug("index: " + val7.Index); Log.LogDebug("next instr: " + (object)val7.Next); val7.Emit(OpCodes.Ldarg_1); val7.Emit(OpCodes.Ldarg_2); val7.EmitDelegate<Action<DamageInfo, GameObject>>((Action<DamageInfo, GameObject>)delegate(DamageInfo dmgInfo, GameObject obj) { Log.LogDebug("Entered deathmark delegate"); CharacterBody component = obj.GetComponent<CharacterBody>(); int itemCountEffective = dmgInfo.attacker.GetComponent<CharacterBody>().inventory.GetItemCountEffective(Items.DeathMark); Log.LogDebug("count: " + itemCountEffective); if (itemCountEffective <= 0) { Log.LogDebug("no deathmarks"); } else { DeathMarkBehavior deathMarkBehavior = obj.GetComponent<DeathMarkBehavior>(); if ((Object)(object)deathMarkBehavior == (Object)null) { deathMarkBehavior = obj.AddComponent<DeathMarkBehavior>(); deathMarkBehavior.SetBuildUpSeconds(_slowBuildUpDuration); Log.LogDebug("Added deathMarkBehavior"); Log.LogDebug("Deathmark behavior parent disabled: " + obj.activeInHierarchy); } deathMarkBehavior.TryUpdateCount(itemCountEffective); if (IsHardCCDamageType(dmgInfo)) { deathMarkBehavior.ApplyMark(); } } }); } } }; <>c.<>9__3_1 = val2; obj3 = (object)val2; } GlobalEventManager.ProcessHitEnemy += (Manipulator)obj3; object obj4 = <>c.<>9__3_2; if (obj4 == null) { Manipulator val3 = delegate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0009: Unknown result type (might be due to invalid IL or missing references) ILCursor val6 = new ILCursor(il); val6.Emit(OpCodes.Ret); }; <>c.<>9__3_2 = val3; obj4 = (object)val3; } GlobalEventManager.ProcDeathMark += (Manipulator)obj4; object obj5 = <>c.<>9__3_3; if (obj5 == null) { Manipulator val4 = delegate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val5 = new ILCursor(il); int num4 = default(int); int num3 = default(int); int num2 = default(int); int num = default(int); if (!val5.TryGotoNext(new Func<Instruction, bool>[4] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num4), (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 1.5f), (Instruction x) => ILPatternMatchingExt.MatchMul(x), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref num3) })) { Log.LogInstrNotFound(il); } else if (!val5.TryGotoNext(new Func<Instruction, bool>[4] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num2), (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 1.5f), (Instruction x) => ILPatternMatchingExt.MatchMul(x), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref num) })) { Log.LogInstrNotFound(il); } else { int index = val5.Index; val5.Index = index + 1; Log.LogDebug("Dmark coeff: " + val5.Next.Operand); val5.Next.Operand = _damageMultiplier; Log.LogDebug("Dmark coeff updated: " + val5.Next.Operand); } }; <>c.<>9__3_3 = val4; obj5 = (object)val4; } HealthComponent.TakeDamageProcess += (Manipulator)obj5; ReplaceText(); Log.LogInfo("Added Death Mark Rework"); } catch (Exception ex) { VanillaItemTweaks.logger.LogError((object)(ex.Message + " - " + ex.StackTrace)); } } private static bool IsHardCCDamageType(DamageInfo dmgInfo) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) return DamageTypeCombo.op_Implicit(dmgInfo.damageType & DamageTypeCombo.op_Implicit((DamageType)50364704)) > DamageTypeCombo.op_Implicit(DamageTypeCombo.Generic); } private static void ReplaceText() { LanguageAPI.Add("ITEM_DEATHMARK_PICKUP", "Movement-impaired enemies are <style=cIsDamage>marked for death</style>."); LanguageAPI.Add("ITEM_DEATHMARK_DESC", "Slowing enemies for " + _slowBuildUpDuration + " seconds <style=cIsDamage>applies Death Mark</style>, increasing damage taken by <style=cIsDamage>" + (_damageMultiplier - 1f) * 100f + "%</style> from all sources for <style=cIsUtility>" + _duration + "</style> <style=cStack>(+" + _duration + " per stack)</style> seconds. Stuns apply Death Mark instantly."); } } internal class HuntersHarpoonBehavior : ItemBehavior { private const int HUNTERS_HARPOON_COOLDOWN = 3; private const float HUNTERS_HARPOON_DURATION = 3f; private float _timer = 0f; private void OnDisable() { base.body.ClearTimedBuffs(Buffs.KillMoveSpeed); } public void TryApplyMovespeed() { //IL_0083: 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_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Expected O, but got Unknown //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_017c: 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_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01bd: Unknown result type (might be due to invalid IL or missing references) //IL_0190: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) int num = Math.Clamp((int)Math.Truncate(_timer), 1, 3); Log.LogDebug("BuffCount: " + num); _timer = 0f; if (num <= 0) { return; } int buffCount = base.body.GetBuffCount(Buffs.KillMoveSpeed); if (num == buffCount) { for (int i = 0; i < base.body.timedBuffs.Count; i++) { TimedBuff val = base.body.timedBuffs[i]; if (val.buffIndex == Buffs.KillMoveSpeed.buffIndex) { val.timer = val.totalDuration; } } } else { if (num < buffCount) { return; } base.body.ClearTimedBuffs(Buffs.KillMoveSpeed); for (int j = 0; j < num; j++) { CharacterBody body = base.body; if (body != null) { body.AddTimedBuff(Buffs.KillMoveSpeed, 2f * (float)base.stack * (float)Math.Pow(0.75, j)); } } EffectData val2 = new EffectData(); val2.origin = base.body.corePosition; CharacterMotor characterMotor = base.body.characterMotor; bool flag = false; if (Object.op_Implicit((Object)(object)characterMotor)) { Vector3 moveDirection = characterMotor.moveDirection; if (moveDirection != Vector3.zero) { val2.rotation = Util.QuaternionSafeLookRotation(moveDirection); flag = true; } } if (!flag) { val2.rotation = base.body.transform.rotation; } EffectManager.SpawnEffect(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/MoveSpeedOnKillActivate"), val2, true); } } private void FixedUpdate() { if (_timer < 3f) { _timer += Time.deltaTime; } } } public static class HuntersHarpoonBuff { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static Func<Instruction, bool> <>9__2_3; public static Func<int, int> <>9__2_1; public static Func<Instruction, bool> <>9__2_4; public static Func<Instruction, bool> <>9__2_5; public static Action<DamageReport> <>9__2_2; public static Manipulator <>9__2_0; internal void <Init>b__2_0(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_00f0: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (!val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, "RoR2.DLC1Content/Items", "MoveSpeedOnKill") })) { Log.LogInstrNotFound(il); return; } val.Index += 4; val.EmitDelegate<Func<int, int>>((Func<int, int>)((int itemCount) => 0)); MethodReference val3 = default(MethodReference); if (!val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 1), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, ref val3) })) { Log.LogInstrNotFound(il); return; } val.Index += 3; val.Emit(OpCodes.Ldarg_1); val.EmitDelegate<Action<DamageReport>>((Action<DamageReport>)delegate(DamageReport damageReport) { //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Expected O, but got Unknown //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) CharacterBody attackerBody = damageReport.attackerBody; int itemCountEffective = attackerBody.inventory.GetItemCountEffective(Items.MoveSpeedOnKill); if (itemCountEffective > 0) { int num = itemCountEffective - 1; int num2 = 5; float num3 = (float)(1.0 + (double)num * 0.5); attackerBody.ClearTimedBuffs(Buffs.KillMoveSpeed); for (int i = 0; i < _harpoonStacks; i++) { if (attackerBody != null) { attackerBody.AddTimedBuff(Buffs.KillMoveSpeed, _buffDuration * (float)itemCountEffective * (float)Math.Pow(0.75, i)); } } EffectData val2 = new EffectData(); val2.origin = attackerBody.corePosition; CharacterMotor characterMotor = attackerBody.characterMotor; bool flag = false; if (Object.op_Implicit((Object)(object)characterMotor)) { Vector3 moveDirection = characterMotor.moveDirection; if (moveDirection != Vector3.zero) { val2.rotation = Util.QuaternionSafeLookRotation(moveDirection); flag = true; } } if (!flag) { val2.rotation = attackerBody.transform.rotation; } EffectManager.SpawnEffect(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/MoveSpeedOnKillActivate"), val2, true); } }); } internal bool <Init>b__2_3(Instruction x) { return ILPatternMatchingExt.MatchLdsfld(x, "RoR2.DLC1Content/Items", "MoveSpeedOnKill"); } internal int <Init>b__2_1(int itemCount) { return 0; } internal bool <Init>b__2_4(Instruction x) { return ILPatternMatchingExt.MatchLdcI4(x, 1); } internal bool <Init>b__2_5(Instruction x) { MethodReference val = default(MethodReference); return ILPatternMatchingExt.MatchCallOrCallvirt(x, ref val); } internal void <Init>b__2_2(DamageReport damageReport) { //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Expected O, but got Unknown //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) CharacterBody attackerBody = damageReport.attackerBody; int itemCountEffective = attackerBody.inventory.GetItemCountEffective(Items.MoveSpeedOnKill); if (itemCountEffective <= 0) { return; } int num = itemCountEffective - 1; int num2 = 5; float num3 = (float)(1.0 + (double)num * 0.5); attackerBody.ClearTimedBuffs(Buffs.KillMoveSpeed); for (int i = 0; i < _harpoonStacks; i++) { if (attackerBody != null) { attackerBody.AddTimedBuff(Buffs.KillMoveSpeed, _buffDuration * (float)itemCountEffective * (float)Math.Pow(0.75, i)); } } EffectData val = new EffectData(); val.origin = attackerBody.corePosition; CharacterMotor characterMotor = attackerBody.characterMotor; bool flag = false; if (Object.op_Implicit((Object)(object)characterMotor)) { Vector3 moveDirection = characterMotor.moveDirection; if (moveDirection != Vector3.zero) { val.rotation = Util.QuaternionSafeLookRotation(moveDirection); flag = true; } } if (!flag) { val.rotation = attackerBody.transform.rotation; } EffectManager.SpawnEffect(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/MoveSpeedOnKillActivate"), val, true); } } public static int _harpoonStacks; public static float _buffDuration; public static void Init(int harpoonStacks, float buffDuration) { //IL_0022: 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_002d: Expected O, but got Unknown _harpoonStacks = harpoonStacks; _buffDuration = buffDuration; try { object obj = <>c.<>9__2_0; if (obj == null) { Manipulator val = delegate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_00f0: Unknown result type (might be due to invalid IL or missing references) ILCursor val2 = new ILCursor(il); if (!val2.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, "RoR2.DLC1Content/Items", "MoveSpeedOnKill") })) { Log.LogInstrNotFound(il); } else { val2.Index += 4; val2.EmitDelegate<Func<int, int>>((Func<int, int>)((int itemCount) => 0)); MethodReference val4 = default(MethodReference); if (!val2.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 1), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, ref val4) })) { Log.LogInstrNotFound(il); } else { val2.Index += 3; val2.Emit(OpCodes.Ldarg_1); val2.EmitDelegate<Action<DamageReport>>((Action<DamageReport>)delegate(DamageReport damageReport) { //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Expected O, but got Unknown //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) CharacterBody attackerBody = damageReport.attackerBody; int itemCountEffective = attackerBody.inventory.GetItemCountEffective(Items.MoveSpeedOnKill); if (itemCountEffective > 0) { int num = itemCountEffective - 1; int num2 = 5; float num3 = (float)(1.0 + (double)num * 0.5); attackerBody.ClearTimedBuffs(Buffs.KillMoveSpeed); for (int i = 0; i < _harpoonStacks; i++) { if (attackerBody != null) { attackerBody.AddTimedBuff(Buffs.KillMoveSpeed, _buffDuration * (float)itemCountEffective * (float)Math.Pow(0.75, i)); } } EffectData val3 = new EffectData(); val3.origin = attackerBody.corePosition; CharacterMotor characterMotor = attackerBody.characterMotor; bool flag = false; if (Object.op_Implicit((Object)(object)characterMotor)) { Vector3 moveDirection = characterMotor.moveDirection; if (moveDirection != Vector3.zero) { val3.rotation = Util.QuaternionSafeLookRotation(moveDirection); flag = true; } } if (!flag) { val3.rotation = attackerBody.transform.rotation; } EffectManager.SpawnEffect(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/MoveSpeedOnKillActivate"), val3, true); } }); } } }; <>c.<>9__2_0 = val; obj = (object)val; } GlobalEventManager.OnCharacterDeath += (Manipulator)obj; UpdateText(); Log.LogInfo("Added Hunters Harpoon Buff"); } catch (Exception ex) { VanillaItemTweaks.logger.LogError((object)(ex.Message + " - " + ex.StackTrace)); } } private static void UpdateText() { LanguageAPI.Add("ITEM_MOVESPEEDONKILL_DESC", "Killing an enemy increases <style=cIsUtility>movement speed</style> by <style=cIsUtility>" + _harpoonStacks * 25 + "%</style> fading over <style=cIsUtility>" + _buffDuration + "</style> <style=cStack>(+" + _buffDuration + " per stack)</style> seconds."); } } internal class HuntersHarpoonChoice { private bool _enableHuntersHarpoonRework; private bool _enableHuntersHarpoonBuff; public static void TryInit(ConfigFile configFile) { bool value = configFile.Bind<bool>("Hunters Harpoon Buff", "Enable Hunters Harpoon Buff", false, "Harpoon speed is less intense, but lasts longer.").Value; float value2 = configFile.Bind<float>("Hunters Harpoon Buff", "Hunters Harpoon Duration", 2f, "Hunters Harpoon buff lasts X seconds.").Value; int value3 = configFile.Bind<int>("Hunters Harpoon Buff", "Hunters Harpoon Stacks Per Kill", 4, "Hunteres Harpoon refreshes to X stacks of the buff upon kill.").Value; if (value) { HuntersHarpoonBuff.Init(value3, value2); } } } public static class HuntersHarpoonRework { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static Func<Instruction, bool> <>9__0_3; public static Func<Instruction, bool> <>9__0_4; public static Func<Instruction, bool> <>9__0_5; public static Action<CharacterBody> <>9__0_6; public static Manipulator <>9__0_0; public static Func<Instruction, bool> <>9__0_7; public static Manipulator <>9__0_1; public static Func<Instruction, bool> <>9__0_8; public static Func<Instruction, bool> <>9__0_9; public static Func<CharacterMaster, DamageInfo, CharacterMaster> <>9__0_10; public static Manipulator <>9__0_2; internal void <Init>b__0_0(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_007c: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); int num2 = default(int); int num = default(int); val.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, ref num2), (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, ref num), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "inventory") }); val.Emit(OpCodes.Ldarg_0); val.EmitDelegate<Action<CharacterBody>>((Action<CharacterBody>)delegate(CharacterBody body) { Log.LogDebug("Attempting to add behavior for hunter: " + (object)body); body.AddItemBehavior<HuntersHarpoonBehavior>(body.inventory.GetItemCountEffective(Items.MoveSpeedOnKill)); Log.LogDebug("Behavior: " + (object)((Component)body).gameObject.GetComponent<HuntersHarpoonBehavior>()); Log.LogDebug("Behaviormasterbodypath: " + (object)((Component)body.master.GetBody()).GetComponent<HuntersHarpoonBehavior>()); }); } internal bool <Init>b__0_3(Instruction x) { int num = default(int); return ILPatternMatchingExt.MatchLdarg(x, ref num); } internal bool <Init>b__0_4(Instruction x) { int num = default(int); return ILPatternMatchingExt.MatchLdarg(x, ref num); } internal bool <Init>b__0_5(Instruction x) { return ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "inventory"); } internal void <Init>b__0_6(CharacterBody body) { Log.LogDebug("Attempting to add behavior for hunter: " + (object)body); body.AddItemBehavior<HuntersHarpoonBehavior>(body.inventory.GetItemCountEffective(Items.MoveSpeedOnKill)); Log.LogDebug("Behavior: " + (object)((Component)body).gameObject.GetComponent<HuntersHarpoonBehavior>()); Log.LogDebug("Behaviormasterbodypath: " + (object)((Component)body.master.GetBody()).GetComponent<HuntersHarpoonBehavior>()); } internal void <Init>b__0_1(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0057: 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) ILCursor val = new ILCursor(il); if (!val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, "RoR2.DLC1Content/Items", "MoveSpeedOnKill") })) { Log.LogInstrNotFound(il); return; } val.Index += 2; val.Emit(OpCodes.Ldc_I4_0); val.Emit(OpCodes.Mul); } internal bool <Init>b__0_7(Instruction x) { return ILPatternMatchingExt.MatchLdsfld(x, "RoR2.DLC1Content/Items", "MoveSpeedOnKill"); } internal void <Init>b__0_2(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_005a: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); int num = default(int); val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterMaster>(x, "get_inventory"), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref num) }); val.Emit(OpCodes.Ldarg_1); val.EmitDelegate<Func<CharacterMaster, DamageInfo, CharacterMaster>>((Func<CharacterMaster, DamageInfo, CharacterMaster>)delegate(CharacterMaster master, DamageInfo dmgInfo) { Log.LogDebug("Entering Hunter Harp delegate"); HuntersHarpoonBehavior component = ((Component)master.GetBody()).GetComponent<HuntersHarpoonBehavior>(); Log.LogDebug("Hunter harp behavior: " + (object)component); if ((Object)(object)component != (Object)null && ((DamageTypeCombo)(ref dmgInfo.damageType)).IsDamageSourceSkillBased) { component.TryApplyMovespeed(); } return master; }); } internal bool <Init>b__0_8(Instruction x) { return ILPatternMatchingExt.MatchCallOrCallvirt<CharacterMaster>(x, "get_inventory"); } internal bool <Init>b__0_9(Instruction x) { int num = default(int); return ILPatternMatchingExt.MatchStloc(x, ref num); } internal CharacterMaster <Init>b__0_10(CharacterMaster master, DamageInfo dmgInfo) { Log.LogDebug("Entering Hunter Harp delegate"); HuntersHarpoonBehavior component = ((Component)master.GetBody()).GetComponent<HuntersHarpoonBehavior>(); Log.LogDebug("Hunter harp behavior: " + (object)component); if ((Object)(object)component != (Object)null && ((DamageTypeCombo)(ref dmgInfo.damageType)).IsDamageSourceSkillBased) { component.TryApplyMovespeed(); } return master; } } public static void Init() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown //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) //IL_0046: Expected O, but got Unknown //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Expected O, but got Unknown try { object obj = <>c.<>9__0_0; if (obj == null) { Manipulator val = delegate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_007c: Unknown result type (might be due to invalid IL or missing references) ILCursor val6 = new ILCursor(il); int num3 = default(int); int num2 = default(int); val6.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, ref num3), (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, ref num2), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "inventory") }); val6.Emit(OpCodes.Ldarg_0); val6.EmitDelegate<Action<CharacterBody>>((Action<CharacterBody>)delegate(CharacterBody body) { Log.LogDebug("Attempting to add behavior for hunter: " + (object)body); body.AddItemBehavior<HuntersHarpoonBehavior>(body.inventory.GetItemCountEffective(Items.MoveSpeedOnKill)); Log.LogDebug("Behavior: " + (object)((Component)body).gameObject.GetComponent<HuntersHarpoonBehavior>()); Log.LogDebug("Behaviormasterbodypath: " + (object)((Component)body.master.GetBody()).GetComponent<HuntersHarpoonBehavior>()); }); }; <>c.<>9__0_0 = val; obj = (object)val; } CharacterBody.OnInventoryChanged += (Manipulator)obj; object obj2 = <>c.<>9__0_1; if (obj2 == null) { Manipulator val2 = delegate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0057: 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) ILCursor val5 = new ILCursor(il); if (!val5.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, "RoR2.DLC1Content/Items", "MoveSpeedOnKill") })) { Log.LogInstrNotFound(il); } else { val5.Index += 2; val5.Emit(OpCodes.Ldc_I4_0); val5.Emit(OpCodes.Mul); } }; <>c.<>9__0_1 = val2; obj2 = (object)val2; } GlobalEventManager.OnCharacterDeath += (Manipulator)obj2; object obj3 = <>c.<>9__0_2; if (obj3 == null) { Manipulator val3 = delegate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_005a: Unknown result type (might be due to invalid IL or missing references) ILCursor val4 = new ILCursor(il); int num = default(int); val4.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterMaster>(x, "get_inventory"), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref num) }); val4.Emit(OpCodes.Ldarg_1); val4.EmitDelegate<Func<CharacterMaster, DamageInfo, CharacterMaster>>((Func<CharacterMaster, DamageInfo, CharacterMaster>)delegate(CharacterMaster master, DamageInfo dmgInfo) { Log.LogDebug("Entering Hunter Harp delegate"); HuntersHarpoonBehavior component = ((Component)master.GetBody()).GetComponent<HuntersHarpoonBehavior>(); Log.LogDebug("Hunter harp behavior: " + (object)component); if ((Object)(object)component != (Object)null && ((DamageTypeCombo)(ref dmgInfo.damageType)).IsDamageSourceSkillBased) { component.TryApplyMovespeed(); } return master; }); }; <>c.<>9__0_2 = val3; obj3 = (object)val3; } GlobalEventManager.ProcessHitEnemy += (Manipulator)obj3; UpdateText(); Log.LogInfo("Added Hunters Harpoon Rework"); } catch (Exception ex) { VanillaItemTweaks.logger.LogError((object)(ex.Message + " - " + ex.StackTrace)); } } private static void UpdateText() { LanguageAPI.Add("ITEM_MOVESPEEDONKILL_DESC", "Killing an enemy increases <style=cIsUtility>movement speed</style> by <style=cIsUtility>100%</style> fading over <style=cIsUtility>2</style> <style=cStack>(+2 per stack)</style> seconds."); } } internal class IgnitionTankRework { private delegate int ItemCountIfBurningDel(int itemCount, ref InflictDotInfo dotInfo); [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static Func<Instruction, bool> <>9__0_2; public static Func<Instruction, bool> <>9__0_3; public static Manipulator <>9__0_0; public static Func<Instruction, bool> <>9__0_4; public static Func<Instruction, bool> <>9__0_5; public static Action<GenericCharacterMain> <>9__0_6; public static Manipulator <>9__0_1; internal void <Init>b__0_0(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_006b: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); int num = default(int); val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num), (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 0) }); int index = val.Index; val.Index = index + 1; val.Emit(OpCodes.Ldarg_1); val.EmitDelegate<ItemCountIfBurningDel>((ItemCountIfBurningDel)ItemCountIfBurning); } internal bool <Init>b__0_2(Instruction x) { int num = default(int); return ILPatternMatchingExt.MatchLdloc(x, ref num); } internal bool <Init>b__0_3(Instruction x) { return ILPatternMatchingExt.MatchLdcI4(x, 0); } internal void <Init>b__0_1(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0069: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); ILLabel val2 = default(ILLabel); val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchAnd(x), (Instruction x) => ILPatternMatchingExt.MatchBrfalse(x, ref val2) }); val.Index += 2; val.Emit(OpCodes.Ldarg_0); val.EmitDelegate<Action<GenericCharacterMain>>((Action<GenericCharacterMain>)delegate(GenericCharacterMain gcm) { int itemCountEffective = ((EntityState)gcm).characterBody.inventory.GetItemCountEffective(Items.StrengthenBurn); if (itemCountEffective > 0) { ProcIgniteOnJump(((EntityState)gcm).characterBody, itemCountEffective); } }); } internal bool <Init>b__0_4(Instruction x) { return ILPatternMatchingExt.MatchAnd(x); } internal bool <Init>b__0_5(Instruction x) { ILLabel val = default(ILLabel); return ILPatternMatchingExt.MatchBrfalse(x, ref val); } internal void <Init>b__0_6(GenericCharacterMain gcm) { int itemCountEffective = ((EntityState)gcm).characterBody.inventory.GetItemCountEffective(Items.StrengthenBurn); if (itemCountEffective > 0) { ProcIgniteOnJump(((EntityState)gcm).characterBody, itemCountEffective); } } } public static void Init() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown //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) //IL_0046: Expected O, but got Unknown try { object obj = <>c.<>9__0_0; if (obj == null) { Manipulator val = delegate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_006b: Unknown result type (might be due to invalid IL or missing references) ILCursor val5 = new ILCursor(il); int num = default(int); val5.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num), (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 0) }); int index = val5.Index; val5.Index = index + 1; val5.Emit(OpCodes.Ldarg_1); val5.EmitDelegate<ItemCountIfBurningDel>((ItemCountIfBurningDel)ItemCountIfBurning); }; <>c.<>9__0_0 = val; obj = (object)val; } StrengthenBurnUtils.CheckDotForUpgrade += (Manipulator)obj; object obj2 = <>c.<>9__0_1; if (obj2 == null) { Manipulator val2 = delegate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0069: Unknown result type (might be due to invalid IL or missing references) ILCursor val3 = new ILCursor(il); ILLabel val4 = default(ILLabel); val3.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchAnd(x), (Instruction x) => ILPatternMatchingExt.MatchBrfalse(x, ref val4) }); val3.Index += 2; val3.Emit(OpCodes.Ldarg_0); val3.EmitDelegate<Action<GenericCharacterMain>>((Action<GenericCharacterMain>)delegate(GenericCharacterMain gcm) { int itemCountEffective = ((EntityState)gcm).characterBody.inventory.GetItemCountEffective(Items.StrengthenBurn); if (itemCountEffective > 0) { ProcIgniteOnJump(((EntityState)gcm).characterBody, itemCountEffective); } }); }; <>c.<>9__0_1 = val2; obj2 = (object)val2; } GenericCharacterMain.ProcessJump_bool += (Manipulator)obj2; UpdateText(); Log.LogInfo("Added Ignition Tank Rework"); } catch (Exception ex) { VanillaItemTweaks.logger.LogError((object)(ex.Message + " - " + ex.StackTrace)); } } private static int ItemCountIfBurning(int itemCount, ref InflictDotInfo dotInfo) { return dotInfo.victimObject.GetComponent<CharacterBody>().HasBuff(Buffs.StrongerBurn) ? itemCount : 0; } private static void ProcIgniteOnJump(CharacterBody attackerBody, int ignitionTankCount) { //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_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_002a: 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) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: 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_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Expected O, but got Unknown //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_0168: 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) float num = 12f + attackerBody.radius; Vector3 corePosition = attackerBody.corePosition; GlobalEventManager.igniteOnKillSphereSearch.origin = corePosition; GlobalEventManager.igniteOnKillSphereSearch.mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask; GlobalEventManager.igniteOnKillSphereSearch.radius = num; GlobalEventManager.igniteOnKillSphereSearch.RefreshCandidates(); GlobalEventManager.igniteOnKillSphereSearch.FilterCandidatesByHurtBoxTeam(TeamMask.GetUnprotectedTeams(attackerBody.teamComponent.teamIndex)); GlobalEventManager.igniteOnKillSphereSearch.FilterCandidatesByDistinctHurtBoxEntities(); GlobalEventManager.igniteOnKillSphereSearch.OrderCandidatesByDistance(); GlobalEventManager.igniteOnKillSphereSearch.GetHurtBoxes(GlobalEventManager.igniteOnKillHurtBoxBuffer); GlobalEventManager.igniteOnKillSphereSearch.ClearCandidates(); float num2 = 0.75f * attackerBody.damage; EffectManager.SpawnEffect(CommonAssets.igniteOnKillExplosionEffectPrefab, new EffectData { origin = corePosition, scale = num, rotation = new Quaternion(0f, 0f, 0f, 1f) }, true); for (int i = 0; i < GlobalEventManager.igniteOnKillHurtBoxBuffer.Count; i++) { HurtBox val = GlobalEventManager.igniteOnKillHurtBoxBuffer[i]; if (Object.op_Implicit((Object)(object)val.healthComponent)) { GameObject gameObject = ((Component)val.healthComponent).gameObject; UpgradeExistingBurns(gameObject, attackerBody); float num3 = 1 + ignitionTankCount * 3; InflictDotInfo val2 = default(InflictDotInfo); val2.victimObject = gameObject; val2.attackerObject = ((Component)attackerBody).gameObject; val2.totalDamage = num2 * num3; val2.dotIndex = (DotIndex)7; val2.damageMultiplier = num3; InflictDotInfo val3 = val2; DotController.InflictDot(ref val3); } } GlobalEventManager.igniteOnKillHurtBoxBuffer.Clear(); } private static void UpgradeExistingBurns(GameObject victim, CharacterBody attacker) { //IL_0069: 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_00df: 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_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) DotController val = DotController.FindDotController(victim); int itemCountEffective = attacker.inventory.GetItemCountEffective(Items.StrengthenBurn); if (!Object.op_Implicit((Object)(object)val)) { return; } DotIndex[] source = (DotIndex[])(object)new DotIndex[2] { (DotIndex)1, (DotIndex)2 }; Log.LogInfo("Pre inflict info: "); for (int num = val.dotStackList.Count - 1; num >= 0; num--) { if (source.Contains(val.dotStackList[num].dotIndex)) { DotStack val2 = val.dotStackList[num]; float num2 = 1 + 3 * itemCountEffective; InflictDotInfo val3 = default(InflictDotInfo); val3.victimObject = victim; val3.attackerObject = ((Component)attacker).gameObject; val3.totalDamage = val2.damage / val2.dotDef.interval * val2.timer * num2; val3.dotIndex = (DotIndex)7; val3.damageMultiplier = num2; InflictDotInfo val4 = val3; string text = val2.damage.ToString(); float? totalDamage = val4.totalDamage; Log.LogInfo("Stack damage: " + text + ", totalDamage: " + totalDamage); Log.LogInfo("Burn upgraded at i = " + num + "with timer: " + val2.timer + " and duration: " + val2.totalDuration + " and new duration: " + val4.duration); DotController.InflictDot(ref val4); val.RemoveDotStackAtServer(num); } } Log.LogInfo("Total DOT recap: "); for (int num3 = val.dotStackList.Count - 1; num3 >= 0; num3--) { DotStack val5 = val.dotStackList[num3]; Log.LogInfo(((object)(DotIndex)(ref val5.dotIndex)).ToString() + " exists at i = " + num3 + "with timer: " + val5.timer + " and duration: " + val5.totalDuration); Log.LogInfo("Damage: " + val5.damage + "Total damage?: " + val5.damage / val5.dotDef.interval * val5.timer); } } private static void UpdateText() { LanguageAPI.Add("ITEM_STRENGTHENBURN_DESC", "Jumping near an enemy burns them for <style=cIsDamage>150%</style> damage. Victims take an additional <style=cIsDamage>300%</style> <style=cStack>(+300% per stack)</style> damage from burn effects. "); LanguageAPI.Add("ITEM_STRENGTHENBURN_PICKUP", "Jumping near an enemy burns them and causes them to take quadruple burn damage."); } } public class LeechingSeedBuff { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static Func<Instruction, bool> <>9__2_1; public static Func<Instruction, bool> <>9__2_2; public static Func<Instruction, bool> <>9__2_3; public static Action<DamageInfo> <>9__2_4; public static Manipulator <>9__2_0; internal void <Init>b__2_0(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_007c: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); int num3 = default(int); int num2 = default(int); val.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, ref num3), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<HealthComponent>(x, "combinedHealth"), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref num2) }); val.Emit(OpCodes.Ldarg_1); val.EmitDelegate<Action<DamageInfo>>((Action<DamageInfo>)delegate(DamageInfo damageInfo) { //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) if (damageInfo != null && !((Object)(object)damageInfo.attacker == (Object)null)) { CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>(); CharacterMaster val2 = ((component != null) ? component.master : null); Inventory val3 = ((val2 != null) ? val2.inventory : null); if ((Object)(object)val3 != (Object)null && !((ProcChainMask)(ref damageInfo.procChainMask)).HasProc((ProcType)6)) { int itemCountEffective = val3.GetItemCountEffective(Items.Seed); if (itemCountEffective > 0) { HealthComponent val4 = ((component != null) ? ((Component)component).GetComponent<HealthComponent>() : null); if ((Object)(object)val4 != (Object)null && Object.op_Implicit((Object)(object)val4)) { ProcChainMask procChainMask = damageInfo.procChainMask; ((ProcChainMask)(ref procChainMask)).AddProc((ProcType)6); double num = val4.Heal((float)itemCountEffective * _extraHeal, procChainMask, true); } } } } }); } internal bool <Init>b__2_1(Instruction x) { int num = default(int); return ILPatternMatchingExt.MatchLdarg(x, ref num); } internal bool <Init>b__2_2(Instruction x) { return ILPatternMatchingExt.MatchCallOrCallvirt<HealthComponent>(x, "combinedHealth"); } internal bool <Init>b__2_3(Instruction x) { int num = default(int); return ILPatternMatchingExt.MatchStloc(x, ref num); } internal void <Init>b__2_4(DamageInfo damageInfo) { //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) if (damageInfo == null || (Object)(object)damageInfo.attacker == (Object)null) { return; } CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>(); CharacterMaster val = ((component != null) ? component.master : null); Inventory val2 = ((val != null) ? val.inventory : null); if (!((Object)(object)val2 != (Object)null) || ((ProcChainMask)(ref damageInfo.procChainMask)).HasProc((ProcType)6)) { return; } int itemCountEffective = val2.GetItemCountEffective(Items.Seed); if (itemCountEffective > 0) { HealthComponent val3 = ((component != null) ? ((Component)component).GetComponent<HealthComponent>() : null); if ((Object)(object)val3 != (Object)null && Object.op_Implicit((Object)(object)val3)) { ProcChainMask procChainMask = damageInfo.procChainMask; ((ProcChainMask)(ref procChainMask)).AddProc((ProcType)6); double num = val3.Heal((float)itemCountEffective * _extraHeal, procChainMask, true); } } } } public static float _extraHeal; public static void TryInit(ConfigFile configFile) { bool value = configFile.Bind<bool>("Leeching Seed Buff", "Enable Leeching Seed Buff", true, "Leeching seed also heals for additional health regardless of proc coefficient.").Value; _extraHeal = configFile.Bind<float>("Leeching Seed Buff", "Leeching Seed Extra Heal", 0.2f, "Leeching seed heals X extra health regardless of proc coefficient.\nDefault:0.2\nVanilla:0.0").Value; if (value) { Init(); } } public static void Init() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Expected O, but got Unknown try { object obj = <>c.<>9__2_0; if (obj == null) { Manipulator val = delegate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_007c: Unknown result type (might be due to invalid IL or missing references) ILCursor val2 = new ILCursor(il); int num3 = default(int); int num2 = default(int); val2.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, ref num3), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<HealthComponent>(x, "combinedHealth"), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref num2) }); val2.Emit(OpCodes.Ldarg_1); val2.EmitDelegate<Action<DamageInfo>>((Action<DamageInfo>)delegate(DamageInfo damageInfo) { //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) if (damageInfo != null && !((Object)(object)damageInfo.attacker == (Object)null)) { CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>(); CharacterMaster val3 = ((component != null) ? component.master : null); Inventory val4 = ((val3 != null) ? val3.inventory : null); if ((Object)(object)val4 != (Object)null && !((ProcChainMask)(ref damageInfo.procChainMask)).HasProc((ProcType)6)) { int itemCountEffective = val4.GetItemCountEffective(Items.Seed); if (itemCountEffective > 0) { HealthComponent val5 = ((component != null) ? ((Component)component).GetComponent<HealthComponent>() : null); if ((Object)(object)val5 != (Object)null && Object.op_Implicit((Object)(object)val5)) { ProcChainMask procChainMask = damageInfo.procChainMask; ((ProcChainMask)(ref procChainMask)).AddProc((ProcType)6); double num = val5.Heal((float)itemCountEffective * _extraHeal, procChainMask, true); } } } } }); }; <>c.<>9__2_0 = val; obj = (object)val; } HealthComponent.TakeDamageProcess += (Manipulator)obj; UpdateText(); Log.LogInfo("Added Leeching Seed Buff"); } catch (Exception ex) { VanillaItemTweaks.logger.LogError((object)(ex.Message + " - " + ex.StackTrace)); } } private static void UpdateText() { LanguageAPI.Add("ITEM_SEED_DESC", "Proc damage <style=cIsHealing>heals</style> you for <style=cIsHealing>1</style> <style=cStack>(+1 per stack)</style>, <style=cIsHealing>health</style>. Also heals for <style=cIsHealing>" + _extraHeal + "</style> <style=cStack>(+" + _extraHeal + " per stack)</style>on all damage instances."); } } internal class LeptonDaisyBehavior : MonoBehaviour { private float _timer = 0f; private GameObject _obj; private static Vector3 MITHRIX_ARENA_POSITION = new Vector3(-89f, 492f, 0f); private static Vector3 FALSESON_ARENA_POSITION = new Vector3(108.5f, 145f, -120f); private static Vector3 SOLUSWING_ARENA_POSITION = new Vector3(211f, -493f, -289f); private void OnDisable() { Log.LogDebug("Daisy Behavior disabled!"); Object.Destroy((Object)(object)_obj); } private void OnEnable() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown _obj = new GameObject(); NetworkServer.Spawn(_obj); _timer = 0f; Log.LogDebug("Daisy Behavior enabled!, " + _timer); } private void Pulse() { //IL_0019: 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_0083: Unknown result type (might be due to invalid IL or missing references) if (!NetworkServer.active) { return; } int itemCountForTeam = Util.GetItemCountForTeam((TeamIndex)1, Items.TPHealingNova.itemIndex, false, false); Log.LogDebug("Daisies: " + itemCountForTeam); if (itemCountForTeam >= 1) { if ((Object)(object)_obj.transform == (Object)null) { Log.LogDebug("parentTransform is NULL"); } GameObject val = Object.Instantiate<GameObject>(TeleporterHealNovaGeneratorMain.pulsePrefab, MITHRIX_ARENA_POSITION, _obj.transform.rotation, _obj.transform); TeleporterHealNovaPulse component = val.GetComponent<TeleporterHealNovaPulse>(); val.GetComponent<TeamFilter>().teamIndex = (TeamIndex)1; NetworkServer.Spawn(val); } } private void FixedUpdate() { _timer += Time.deltaTime; if (_timer > LeptonDaisyRework.LEPTON_DAISY_COOLDOWN) { _timer = 0f; Pulse(); } } } public static class LeptonDaisyBuff { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static Func<Instruction, bool> <>9__6_4; public static Func<Instruction, bool> <>9__6_5; public static Action<HealthComponent> <>9__6_6; public static Manipulator <>9__6_0; public static Func<Instruction, bool> <>9__6_7; public static Manipulator <>9__6_1; public static Func<Instruction, bool> <>9__6_9; public static Func<float, float, float> <>9__6_8; public static Manipulator <>9__6_2; public static Func<Instruction, bool> <>9__6_11; public static Func<Instruction, bool> <>9__6_12; public static Func<int, int> <>9__6_10; public static Manipulator <>9__6_3; internal void <Init>b__6_0(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0069: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); int num2 = default(int); int num = default(int); val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, ref num2), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num) }); val.Index += 3; val.Emit(OpCodes.Ldloc_2); val.EmitDelegate<Action<HealthComponent>>((Action<HealthComponent>)delegate(HealthComponent healthComponent) { CleanseSystem.CleanseBodyServer(healthComponent.body, _cleanseDebuff, false, _cleanseCooldown, _cleanseDebuff, _cleanseDebuff, _cleanseProjecties); }); } internal bool <Init>b__6_4(Instruction x) { int num = default(int); return ILPatternMatchingExt.MatchLdarg(x, ref num); } internal bool <Init>b__6_5(Instruction x) { int num = default(int); return ILPatternMatchingExt.MatchLdloc(x, ref num); } internal void <Init>b__6_6(HealthComponent healthComponent) { CleanseSystem.CleanseBodyServer(healthComponent.body, _cleanseDebuff, false, _cleanseCooldown, _cleanseDebuff, _cleanseDebuff, _cleanseProjecties); } internal void <Init>b__6_1(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); float num = default(float); val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, ref num) }); val.Next.Operand = _healVal; } internal bool <Init>b__6_7(Instruction x) { float num = default(float); return ILPatternMatchingExt.MatchLdcR4(x, ref num); } internal void <Init>b__6_2(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0059: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (!val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchMul(x) })) { Log.LogInstrNotFound(il); return; } int index = val.Index; val.Index = index + 1; val.Emit(OpCodes.Ldarg_1); val.EmitDelegate<Func<float, float, float>>((Func<float, float, float>)((float nextPulseFraction, float prevPulseFraction) => (prevPulseFraction < 0.01f) ? 0.01f : nextPulseFraction)); } internal bool <Init>b__6_9(Instruction x) { return ILPatternMatchingExt.MatchMul(x); } internal float <Init>b__6_8(float nextPulseFraction, float prevPulseFraction) { if (prevPulseFraction < 0.01f) { return 0.01f; } return nextPulseFraction; } internal void <Init>b__6_3(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); int num = default(int); if (!val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchAdd(x), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref num) })) { Log.LogInstrNotFound(il); return; } val.EmitDelegate<Func<int, int>>((Func<int, int>)((int defaultPulseCount) => defaultPulseCount * _pulseCount)); } internal bool <Init>b__6_11(Instruction x) { return ILPatternMatchingExt.MatchAdd(x); } internal bool <Init>b__6_12(Instruction x) { int num = default(int); return ILPatternMatchingExt.MatchStloc(x, ref num); } internal int <Init>b__6_10(int defaultPulseCount) { return defaultPulseCount * _pulseCount; } } public static int _pulseCount; public static float _healVal; public static bool _cleanseDebuff; public static bool _cleanseProjecties; public static bool _cleanseCooldown; public static void TryInit(ConfigFile configFile) { bool value = configFile.Bind<bool>("Lepton Daisy Buff", "Enable Lepton Daisy Buff", true, "Lepton Daisy now pulses more often at a lower value, cleansing debuffs. Also heals once on holdout start.").Value; _pulseCount = configFile.Bind<int>("Lepton Daisy Buff", "Lepton Daisy Pulse Count", 3, "Lepton Daisy now pulses X times (+ X-1 times per stack).").Value - 1; _healVal = configFile.Bind<float>("Lepton Daisy Buff", "Lepton Daisy Heal", 35f, "Lepton Daisy heals X% health per pulse.").Value / 100f; _cleanseDebuff = configFile.Bind<bool>("Lepton Daisy Buff", "Lepton Daisy Cleanses Debuffs", true, "").Value; _cleanseProjecties = configFile.Bind<bool>("Lepton Daisy Buff", "Lepton Daisy Cleanses Projectiles Near Allies", true, "").Value; _cleanseCooldown = configFile.Bind<bool>("Lepton Daisy Buff", "Lepton Dai