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 SeekingItemReworks v2.0.1
SeekingItemReworks.dll
Decompiled 2 years 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.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using EntityStates; using HG; using HG.Reflection; using IL.RoR2; using IL.RoR2.Items; using Microsoft.CodeAnalysis; using Mono.Cecil.Cil; using MonoMod.Cil; using On.RoR2; using R2API; using RoR2; using RoR2.Items; using RoR2.Orbs; using SeekerItems; using SeekingItemReworks; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Events; using UnityEngine.Networking; [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: OptIn] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: AssemblyInformationalVersion("1.0.0+15723cca56553ed0c05834b72117360dd75232cc")] [assembly: AssemblyProduct("SeekingItemReworks")] [assembly: AssemblyTitle("SeekingItemReworks")] [assembly: AssemblyCompany("SeekingItemReworks")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace SeekingItemReworks { public static class ColorCode { public enum FontColor { cStack, cIsDamage, cIsHealth, cIsUtility, cIsHealing } public static string Style(this string self, FontColor style) { return $"<style={style}>{self}</style>"; } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("noodlegemo.SeekingItemReworks", "SeekingItemReworks", "2.0.1")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Main : BaseUnityPlugin { public const string PluginGUID = "noodlegemo.SeekingItemReworks"; public const string PluginAuthor = "noodlegemo"; public const string PluginName = "SeekingItemReworks"; public const string PluginVersion = "2.0.1"; public void Awake() { MainConfig.SetUp((BaseUnityPlugin)(object)this); if (MainConfig.EnableLogs.Value) { Log.Init(((BaseUnityPlugin)this).Logger); } ItemInfo.SetUp(); SetUpCommon(); SetUpUncommon(); SetUpLegendary(); SetUpEquipment(); } private void SetUpCommon() { WarpedEchoBehavior.Init(); ChronicExpansionBehavior.Init(); KnockbackFinBehavior.Init(); BolsteringLanternBehavior.Init(); AntlerShieldBehavior.Init(); } private void SetUpUncommon() { ChanceDollBehavior.Init(); SaleStarBehavior.Init(); UnstableTransmitterBehavior.Init(); NoxiousThornBehavior.Init(); OldWarStealthkitBehavior.Init(); } private void SetUpLegendary() { GrowthNectarBehavior.Init(); WarBondsBehavior.Init(); BensRaincoatBehavior.Init(); } private void SetUpEquipment() { SeedOfLifeBehavior.Init(); } } } namespace SeekerItems { internal class AntlerShield : ItemTemplate { public static string StaticName = "Antler Shield"; public static ConfigEntry<int> Rework; public static ConfigEntry<float> Armor_Percent_Base; public static ConfigEntry<float> Armor_Percent_Stack; public static ConfigEntry<float> Movement_Base; public static ConfigEntry<float> Movement_Stack; public AntlerShield(int descType) { ItemInternal = "NEGATEATTACK"; if (descType == 1) { ItemInfo = "Gain armor from movement speed, and increase movement speed."; ItemDesc = string.Format("Increase " + "armor ".Style(ColorCode.FontColor.cIsHealing) + "by " + "{0}% ".Style(ColorCode.FontColor.cIsHealing) + "(+{1}% per stack) ".Style(ColorCode.FontColor.cStack) + "of " + "current movement speed".Style(ColorCode.FontColor.cIsUtility) + ". Increase " + "movement speed ".Style(ColorCode.FontColor.cIsUtility) + "by " + "{2}% ".Style(ColorCode.FontColor.cIsUtility) + "(+{3}% per stack)".Style(ColorCode.FontColor.cStack) + ".", ItemTemplate.RoundVal(Armor_Percent_Base.Value), ItemTemplate.RoundVal(Armor_Percent_Stack.Value), ItemTemplate.RoundVal(Movement_Base.Value), ItemTemplate.RoundVal(Movement_Stack.Value)); } } } public static class AntlerShieldBehavior { [CompilerGenerated] private static class <>O { public static Manipulator <0>__RemoveEffect; public static StatHookEventHandler <1>__StatCoefficients; } public static void Init() { //IL_0023: 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_002e: Expected O, but got Unknown //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Expected O, but got Unknown if (AntlerShield.Rework.Value == 1) { object obj = <>O.<0>__RemoveEffect; if (obj == null) { Manipulator val = RemoveEffect; <>O.<0>__RemoveEffect = val; obj = (object)val; } HealthComponent.TakeDamageProcess += (Manipulator)obj; object obj2 = <>O.<1>__StatCoefficients; if (obj2 == null) { StatHookEventHandler val2 = StatCoefficients; <>O.<1>__StatCoefficients = val2; obj2 = (object)val2; } RecalculateStatsAPI.GetStatCoefficients += (StatHookEventHandler)obj2; } } private static void RemoveEffect(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_01a2: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); int num2 = default(int); ILLabel val4 = default(ILLabel); if (val.TryGotoNext(new Func<Instruction, bool>[5] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num2), (Instruction x) => ILPatternMatchingExt.MatchBrtrue(x, ref val4), (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdflda<HealthComponent>(x, "itemCounts"), (Instruction x) => ILPatternMatchingExt.MatchLdfld(x, typeof(ItemCounts), "antlerShield") })) { int index = val.Index; int num = default(int); ILLabel val3 = default(ILLabel); if (val.TryGotoNext(new Func<Instruction, bool>[5] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num), (Instruction x) => ILPatternMatchingExt.MatchBrtrue(x, ref val3), (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdflda<HealthComponent>(x, "itemCounts"), (Instruction x) => ILPatternMatchingExt.MatchLdfld(x, typeof(ItemCounts), "noxiousThorn") })) { ILLabel val2 = val.MarkLabel(); val.Goto(index, (MoveType)0, false); val.MoveAfterLabels(); val.Emit(OpCodes.Br, (object)val2); } else { Log.Warning(AntlerShield.StaticName + " #1 - IL Fail #2"); } } else { Log.Warning(AntlerShield.StaticName + " #1 - IL Fail #1"); } } private static void StatCoefficients(CharacterBody sender, StatHookEventArgs args) { if (Object.op_Implicit((Object)(object)sender) && Object.op_Implicit((Object)(object)sender.master) && Object.op_Implicit((Object)(object)sender.master.inventory)) { int itemCount = sender.inventory.GetItemCount(Items.NegateAttack); if (itemCount > 0) { args.armorAdd += (AntlerShield.Armor_Percent_Base.Value + AntlerShield.Armor_Percent_Stack.Value * (float)(itemCount - 1)) / 100f * sender.moveSpeed; args.moveSpeedMultAdd += (AntlerShield.Movement_Base.Value + AntlerShield.Movement_Stack.Value * (float)(itemCount - 1)) / 100f; } } } } internal class BolsteringLantern : ItemTemplate { public static string StaticName = "Bolstering Lantern"; public static ConfigEntry<int> Rework; public static ConfigEntry<int> LowHealth; public static ConfigEntry<int> HighHealth; public static ConfigEntry<float> Damage_Base; public static ConfigEntry<float> Damage_Stack; public static ConfigEntry<float> Chance_Base; public static ConfigEntry<float> Chance_Stack; public BolsteringLantern(int descType) { ItemInternal = "LOWERHEALTHHIGHERDAMAGE"; switch (descType) { case 1: ItemInfo = $"Ignite enemies at low health until health is restored {HighHealth.Value}%."; ItemDesc = string.Format("Falling below " + "{0}% health".Style(ColorCode.FontColor.cIsHealth) + " grants a buff that " + "ignites ".Style(ColorCode.FontColor.cIsDamage) + "enemies for " + "{1}% ".Style(ColorCode.FontColor.cIsDamage) + "(+{2}% per stack) ".Style(ColorCode.FontColor.cStack) + "base damage on hit, until " + "health ".Style(ColorCode.FontColor.cIsHealing) + "is restored to " + "{3}%".Style(ColorCode.FontColor.cIsHealing) + ".", LowHealth.Value, ItemTemplate.RoundVal(Damage_Base.Value), ItemTemplate.RoundVal(Damage_Stack.Value), HighHealth.Value); break; case 2: ItemInfo = "Chance on hit to ignite. Inherited by allies."; ItemDesc = string.Format("{0}% ".Style(ColorCode.FontColor.cIsDamage) + "(+{1}% per stack) ".Style(ColorCode.FontColor.cStack) + "chance on hit to " + "ignite ".Style(ColorCode.FontColor.cIsDamage) + "enemies for " + "{2}% ".Style(ColorCode.FontColor.cIsDamage) + "(+{3}% per stack) ".Style(ColorCode.FontColor.cStack) + "base damage. This item is " + "inherited by allies ".Style(ColorCode.FontColor.cIsUtility) + "and is boosted with " + "Ignition Tank".Style(ColorCode.FontColor.cIsUtility) + ".", ItemTemplate.RoundVal(Chance_Base.Value), ItemTemplate.RoundVal(Chance_Stack.Value), ItemTemplate.RoundVal(Damage_Base.Value), ItemTemplate.RoundVal(Damage_Stack.Value)); break; } } } public static class BolsteringLanternBehavior { [CompilerGenerated] private static class <>O { public static Manipulator <0>__RemoveEffect; public static Manipulator <1>__RemoveDamage; public static hook_UpdateLowerHealthHigherDamage <2>__HealthTrigger; public static hook_ProcessHitEnemy <3>__InflictFire; public static Manipulator <4>__RemoveBuff; public static hook_FixedUpdate <5>__MinionApply; public static hook_ProcessHitEnemy <6>__FireProc; } public static void Init() { //IL_0023: 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_002e: Expected O, but got Unknown //IL_0078: 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_0083: Expected O, but got Unknown //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Expected O, but got Unknown //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Expected O, but got Unknown //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Expected O, but got Unknown //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Expected O, but got Unknown //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Expected O, but got Unknown if (BolsteringLantern.Rework.Value != 0) { object obj = <>O.<0>__RemoveEffect; if (obj == null) { Manipulator val = RemoveEffect; <>O.<0>__RemoveEffect = val; obj = (object)val; } CharacterBody.RecalculateStats += (Manipulator)obj; object obj2 = <>O.<1>__RemoveDamage; if (obj2 == null) { Manipulator val2 = RemoveDamage; <>O.<1>__RemoveDamage = val2; obj2 = (object)val2; } HealthComponent.TakeDamageProcess += (Manipulator)obj2; } if (BolsteringLantern.Rework.Value == 1) { object obj3 = <>O.<2>__HealthTrigger; if (obj3 == null) { hook_UpdateLowerHealthHigherDamage val3 = HealthTrigger; <>O.<2>__HealthTrigger = val3; obj3 = (object)val3; } CharacterBody.UpdateLowerHealthHigherDamage += (hook_UpdateLowerHealthHigherDamage)obj3; object obj4 = <>O.<3>__InflictFire; if (obj4 == null) { hook_ProcessHitEnemy val4 = InflictFire; <>O.<3>__InflictFire = val4; obj4 = (object)val4; } GlobalEventManager.ProcessHitEnemy += (hook_ProcessHitEnemy)obj4; } else if (BolsteringLantern.Rework.Value == 2) { new LanternCountBuff(); object obj5 = <>O.<4>__RemoveBuff; if (obj5 == null) { Manipulator val5 = RemoveBuff; <>O.<4>__RemoveBuff = val5; obj5 = (object)val5; } CharacterBody.UpdateLowerHealthHigherDamage += (Manipulator)obj5; object obj6 = <>O.<5>__MinionApply; if (obj6 == null) { hook_FixedUpdate val6 = MinionApply; <>O.<5>__MinionApply = val6; obj6 = (object)val6; } CharacterBody.FixedUpdate += (hook_FixedUpdate)obj6; object obj7 = <>O.<6>__FireProc; if (obj7 == null) { hook_ProcessHitEnemy val7 = FireProc; <>O.<6>__FireProc = val7; obj7 = (object)val7; } GlobalEventManager.ProcessHitEnemy += (hook_ProcessHitEnemy)obj7; } } private static void RemoveEffect(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0113: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (val.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Buffs), "LowerHealthHigherDamageBuff"), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "HasBuff") })) { int index = val.Index; if (val.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdfld<CharacterBody>(x, "tamperedHeartActive"), (Instruction x) => ILPatternMatchingExt.MatchPop(x) })) { ILLabel val2 = val.MarkLabel(); val.Goto(index, (MoveType)0, false); val.Emit(OpCodes.Br, (object)val2); } else { Log.Warning(BolsteringLantern.StaticName + " #0 - IL Fail #2"); } } else { Log.Warning(BolsteringLantern.StaticName + " #0 - IL Fail #1"); } } private static void RemoveDamage(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_013c: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (val.TryGotoNext(new Func<Instruction, bool>[4] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 0), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterMaster>(x, "GetBody"), (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Buffs), "LowerHealthHigherDamageBuff"), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "HasBuff") })) { int index = val.Index; float num = default(float); if (val.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 1), (Instruction x) => ILPatternMatchingExt.MatchLdfld<DamageInfo>(x, "procCoefficient"), (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, ref num) })) { ILLabel val2 = val.MarkLabel(); val.Goto(index, (MoveType)0, false); val.MoveAfterLabels(); val.Emit(OpCodes.Br, (object)val2); } else { Log.Warning(BolsteringLantern.StaticName + " #0 - IL Fail #4"); } } else { Log.Warning(BolsteringLantern.StaticName + " #0 - IL Fail #3"); } } private static void RemoveBuff(ILContext il) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown ILCursor val = new ILCursor(il); int itemIndex = -1; if (val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref itemIndex) })) { val.EmitDelegate<Func<int, int>>((Func<int, int>)((int self) => 0)); } } private static void HealthTrigger(orig_UpdateLowerHealthHigherDamage orig, CharacterBody self) { if (!NetworkServer.active) { return; } int num = (Object.op_Implicit((Object)(object)self.inventory) ? self.inventory.GetItemCount(Items.LowerHealthHigherDamage) : 0); if (num > 0) { float normalizedHealth = self.healthComponent.GetNormalizedHealth(); if (normalizedHealth <= (float)BolsteringLantern.LowHealth.Value / 100f && !self.HasBuff(Buffs.LowerHealthHigherDamageBuff)) { self.AddBuff(Buffs.LowerHealthHigherDamageBuff); Util.PlaySound("Play_item_proc_lowerHealthHigherDamage_proc", ((Component)self).gameObject); } else if (normalizedHealth >= (float)BolsteringLantern.HighHealth.Value / 100f && self.HasBuff(Buffs.LowerHealthHigherDamageBuff)) { self.RemoveBuff(Buffs.LowerHealthHigherDamageBuff); } } else if (num <= 0 && self.HasBuff(Buffs.LowerHealthHigherDamageBuff)) { self.RemoveBuff(Buffs.LowerHealthHigherDamageBuff); } } private static void InflictFire(orig_ProcessHitEnemy orig, GlobalEventManager self, DamageInfo damageInfo, GameObject victim) { //IL_006d: 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_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, damageInfo, victim); if (Object.op_Implicit((Object)(object)damageInfo.attacker) && damageInfo.damage > 0f) { CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component) && component.HasBuff(Buffs.LowerHealthHigherDamageBuff)) { int itemCount = component.inventory.GetItemCount(Items.LowerHealthHigherDamage); InflictDotInfo val = default(InflictDotInfo); val.attackerObject = damageInfo.attacker; val.victimObject = victim; val.totalDamage = damageInfo.damage * (BolsteringLantern.Damage_Base.Value + BolsteringLantern.Damage_Stack.Value * (float)(itemCount - 1)) / 100f; val.damageMultiplier = 1f; val.duration = 0.1f; val.dotIndex = (DotIndex)1; InflictDotInfo val2 = val; StrengthenBurnUtils.CheckDotForUpgrade(component.inventory, ref val2); DotController.InflictDot(ref val2); } } } private static void MinionApply(orig_FixedUpdate orig, CharacterBody self) { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); int num = (Object.op_Implicit((Object)(object)self.inventory) ? self.inventory.GetItemCount(Items.LowerHealthHigherDamage) : 0); if (num <= 0) { return; } MinionGroup val = MinionGroup.FindGroup(self.masterObjectId); self.SetBuffCount(LanternCountBuff.LanternCounter.buffIndex, num); if (val == null) { return; } MinionOwnership[] members = val.members; foreach (MinionOwnership val2 in members) { if (!((Object)(object)val2 == (Object)null)) { CharacterMaster component = ((Component)val2).GetComponent<CharacterMaster>(); if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component.inventory) && Object.op_Implicit((Object)(object)component.GetBody())) { component.GetBody().SetBuffCount(LanternCountBuff.LanternCounter.buffIndex, num); } } } } private static void FireProc(orig_ProcessHitEnemy orig, GlobalEventManager self, DamageInfo damageInfo, GameObject victim) { //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, damageInfo, victim); if (Object.op_Implicit((Object)(object)damageInfo.attacker) && damageInfo.procCoefficient > 0f && damageInfo.damage > 0f) { CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>(); int num = (Object.op_Implicit((Object)(object)component) ? component.GetBuffCount(LanternCountBuff.LanternCounter) : 0); if (Object.op_Implicit((Object)(object)component) && num > 0 && Util.CheckRoll(BolsteringLantern.Chance_Base.Value + BolsteringLantern.Chance_Stack.Value * (float)(num - 1), 0f, (CharacterMaster)null)) { Inventory val = ((component.master.minionOwnership.group != null && Object.op_Implicit((Object)(object)component.master.minionOwnership.group.resolvedOwnerMaster)) ? component.master.minionOwnership.group.resolvedOwnerMaster.inventory : component.inventory); InflictDotInfo val2 = default(InflictDotInfo); val2.attackerObject = damageInfo.attacker; val2.victimObject = victim; val2.totalDamage = damageInfo.damage * (BolsteringLantern.Damage_Base.Value + BolsteringLantern.Damage_Stack.Value * (float)(num - 1)) / 100f; val2.damageMultiplier = 1f; val2.duration = 0.1f; val2.dotIndex = (DotIndex)1; InflictDotInfo val3 = val2; StrengthenBurnUtils.CheckDotForUpgrade(val, ref val3); DotController.InflictDot(ref val3); } } } } public class LanternCountBuff { public static BuffDef LanternCounter; private static readonly Sprite spriteIcon = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/DLC2/Items/LowerHealthHigherDamage/texBuffLowerHealthHigherDamageIcon.png").WaitForCompletion(); public LanternCountBuff() { LanternCounter = ScriptableObject.CreateInstance<BuffDef>(); ((Object)LanternCounter).name = "AllyLanternCount"; LanternCounter.canStack = true; LanternCounter.isCooldown = false; LanternCounter.isDebuff = false; LanternCounter.ignoreGrowthNectar = false; LanternCounter.iconSprite = spriteIcon; ContentAddition.AddBuffDef(LanternCounter); } } internal class ChronicExpansion : ItemTemplate { public static string StaticName = "Chronic Expansion"; public static ConfigEntry<int> Rework; public static ConfigEntry<bool> TallyKills; public static ConfigEntry<float> Damage_Base; public static ConfigEntry<float> Damage_Stack; public ChronicExpansion(int descType) { ItemInternal = "INCREASEDAMAGEONMULTIKILL"; if (descType == 1) { ItemInfo = "Gain stacking damage after killing 5 enemies while in combat."; ItemDesc = string.Format("Killing 5 enemies ".Style(ColorCode.FontColor.cIsDamage) + "in combat buffs damage by " + "{0}% ".Style(ColorCode.FontColor.cIsDamage) + "(+{1}% per stack) ".Style(ColorCode.FontColor.cStack) + "temporarily each time, until leaving combat.", ItemTemplate.RoundVal(Damage_Base.Value), ItemTemplate.RoundVal(Damage_Stack.Value)); } } } public static class ChronicExpansionBehavior { [CompilerGenerated] private static class <>O { public static Manipulator <0>__DamageFormula; public static Manipulator <1>__RemoveSync; public static hook_UpdateMultiKill <2>__AddCounterVFX; } public static void Init() { //IL_0023: 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_002e: Expected O, but got Unknown //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Expected O, but got Unknown //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Expected O, but got Unknown if (ChronicExpansion.Rework.Value == 1) { object obj = <>O.<0>__DamageFormula; if (obj == null) { Manipulator val = DamageFormula; <>O.<0>__DamageFormula = val; obj = (object)val; } CharacterBody.RecalculateStats += (Manipulator)obj; } if (ChronicExpansion.TallyKills.Value) { object obj2 = <>O.<1>__RemoveSync; if (obj2 == null) { Manipulator val2 = RemoveSync; <>O.<1>__RemoveSync = val2; obj2 = (object)val2; } CharacterBody.OnClientBuffsChanged += (Manipulator)obj2; object obj3 = <>O.<2>__AddCounterVFX; if (obj3 == null) { hook_UpdateMultiKill val3 = AddCounterVFX; <>O.<2>__AddCounterVFX = val3; obj3 = (object)val3; } CharacterBody.UpdateMultiKill += (hook_UpdateMultiKill)obj3; } } private static void RemoveSync(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_00ee: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); int num = default(int); if (val.TryGotoNext(new Func<Instruction, bool>[4] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdfld<CharacterBody>(x, "increaseDamageOnMultiKillItemDisplayUpdater"), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<IncreaseDamageOnMultiKillItemDisplayUpdater>(x, "UpdateKillCounterText") })) { int index = val.Index; if (val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0) })) { ILLabel val2 = val.MarkLabel(); val.Goto(index, (MoveType)0, false); val.Emit(OpCodes.Br, val2.Target); } } else { Log.Warning(ChronicExpansion.StaticName + " #1 - IL Fail #1"); } } private static void DamageFormula(ILContext il) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_01e6: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); int itemIndex = -1; if (!val.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Items), "IncreaseDamageOnMultiKill"), (Instruction x) => ILPatternMatchingExt.MatchCallvirt<Inventory>(x, "GetItemCount"), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref itemIndex) })) { Log.Warning(ChronicExpansion.StaticName + " #1 - IL Fail #2"); } if (val.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Buffs), "IncreaseDamageBuff"), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "GetBuffCount") })) { val.Emit(OpCodes.Ldarg_0); val.Emit(OpCodes.Ldloc, itemIndex); val.EmitDelegate<Action<CharacterBody, int>>((Action<CharacterBody, int>)delegate(CharacterBody body, int itemCount) { int buffCount = body.GetBuffCount(Buffs.IncreaseDamageBuff); float num2 = (float)buffCount * (ChronicExpansion.Damage_Base.Value + ChronicExpansion.Damage_Stack.Value * (float)(itemCount - 1)) / 100f; body.damage *= 1f + num2; if (body.oldComboMeter < buffCount) { body.oldComboMeter = buffCount; } }); int index = val.Index; int num = default(int); if (val.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num), (Instruction x) => ILPatternMatchingExt.MatchStfld<CharacterBody>(x, "oldComboMeter") })) { ILLabel val2 = val.MarkLabel(); val.Goto(index, (MoveType)0, false); val.Emit(OpCodes.Br, val2.Target); } } else { Log.Warning(ChronicExpansion.StaticName + " #1 - IL Fail #3"); } } private static void AddCounterVFX(orig_UpdateMultiKill orig, CharacterBody self, float deltaTime) { orig.Invoke(self, deltaTime); int num = (Object.op_Implicit((Object)(object)self.inventory) ? self.inventory.GetItemCount(Items.IncreaseDamageOnMultiKill) : 0); if (Object.op_Implicit((Object)(object)self.increaseDamageOnMultiKillItemDisplayUpdater) && num > 0) { self.increaseDamageOnMultiKillItemDisplayUpdater.UpdateKillCounterText(self.increasedDamageKillCount); } } } internal class KnockbackFin : ItemTemplate { public static string StaticName = "Knockback Fin"; public static ConfigEntry<int> Rework; public static ConfigEntry<bool> DamageColor; public static ConfigEntry<bool> IsHyperbolic; public static ConfigEntry<float> Chance_Base; public static ConfigEntry<float> Chance_Stack; public static ConfigEntry<float> Damage_Base; public static ConfigEntry<float> Damage_Stack; public KnockbackFin(int descType) { ItemInternal = "KNOCKBACKHITENEMIES"; switch (descType) { case 1: ItemInfo = "Chance on hit to knock enemies into the air.\nDeal bonus damage to airborne enemies."; ItemDesc = string.Format("{0}% ".Style(ColorCode.FontColor.cIsUtility) + "(+{1}% per stack) ".Style(ColorCode.FontColor.cStack) + "chance on hit to " + "knock enemies into the air".Style(ColorCode.FontColor.cIsUtility) + ". Deal " + "+{2}% ".Style(ColorCode.FontColor.cIsDamage) + "(+{3}% per stack) ".Style(ColorCode.FontColor.cStack) + "damage to " + "airborne ".Style(ColorCode.FontColor.cIsUtility) + "enemies.", ItemTemplate.RoundVal(Chance_Base.Value), ItemTemplate.RoundVal(Chance_Stack.Value), ItemTemplate.RoundVal(Damage_Base.Value), ItemTemplate.RoundVal(Damage_Stack.Value)); break; case -1: ItemInfo = "Chance on hit to knock up enemies.\nDeal bonus damage to airborne enemies."; ItemDesc = string.Format("{0}% ".Style(ColorCode.FontColor.cIsUtility) + "(+{1}% per stack) ".Style(ColorCode.FontColor.cStack) + "chance on hit to " + "knock up enemies".Style(ColorCode.FontColor.cIsUtility) + ". Deal " + "+{2}% ".Style(ColorCode.FontColor.cIsDamage) + "(+{3}% per stack) ".Style(ColorCode.FontColor.cStack) + "damage to " + "airborne ".Style(ColorCode.FontColor.cIsUtility) + "enemies.", ItemTemplate.RoundVal(Chance_Base.Value), ItemTemplate.RoundVal(Chance_Stack.Value), ItemTemplate.RoundVal(Damage_Base.Value), ItemTemplate.RoundVal(Damage_Stack.Value)); break; } } } public static class KnockbackFinBehavior { [CompilerGenerated] private static class <>O { public static Manipulator <0>__DamageAirborne; public static Manipulator <1>__RemoveEffect; public static hook_ProcessHitEnemy <2>__KnockEffect; } private static EffectDef airborneVFX; private static DamageColorIndex airborneDamage; public static void Init() { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Expected O, but got Unknown //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Expected O, but got Unknown if (KnockbackFin.Rework.Value == 1) { ExposeModifyEffect(); object obj = <>O.<0>__DamageAirborne; if (obj == null) { Manipulator val = DamageAirborne; <>O.<0>__DamageAirborne = val; obj = (object)val; } HealthComponent.TakeDamageProcess += (Manipulator)obj; object obj2 = <>O.<1>__RemoveEffect; if (obj2 == null) { Manipulator val2 = RemoveEffect; <>O.<1>__RemoveEffect = val2; obj2 = (object)val2; } GlobalEventManager.ProcessHitEnemy += (Manipulator)obj2; object obj3 = <>O.<2>__KnockEffect; if (obj3 == null) { hook_ProcessHitEnemy val3 = KnockEffect; <>O.<2>__KnockEffect = val3; obj3 = (object)val3; } GlobalEventManager.ProcessHitEnemy += (hook_ProcessHitEnemy)obj3; } } private static void ExposeModifyEffect() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Expected O, but got Unknown //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) GameObject val = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Merc/MercExposeConsumeEffect.prefab").WaitForCompletion(), "KnockbackFinAirborne", true); EffectComponent component = val.GetComponent<EffectComponent>(); component.soundName = ""; airborneVFX = new EffectDef { prefab = val, prefabName = "KnockbackFinAirborne", prefabEffectComponent = component }; if (KnockbackFin.DamageColor.Value) { ContentAddition.AddEffect(airborneVFX.prefab); airborneDamage = ColorsAPI.RegisterDamageColor(new Color(0.3f, 0.65f, 1f)); } } private static void RemoveEffect(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0157: 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>[5] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 2), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, typeof(GameObject), "GetComponent"), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref num2), (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 2), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, typeof(GameObject), "GetComponent") })) { int index = val.Index; int num = default(int); if (val.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchPop(x), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num), (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Items), "StunAndPierce") })) { ILLabel val2 = val.MarkLabel(); val.Goto(index, (MoveType)0, false); val.Emit(OpCodes.Br, val2.Target); } } else { Log.Warning(KnockbackFin.StaticName + " #1 - IL Fail #1"); } } private static void KnockEffect(orig_ProcessHitEnemy orig, GlobalEventManager self, DamageInfo damageInfo, GameObject victim) { //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Invalid comparison between Unknown and I4 //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Expected O, but got Unknown //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01c2: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Invalid comparison between Unknown and I4 orig.Invoke(self, damageInfo, victim); if (!Object.op_Implicit((Object)(object)damageInfo.attacker) || !Object.op_Implicit((Object)(object)victim) || !(damageInfo.procCoefficient > 0f)) { return; } CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>(); CharacterBody component2 = victim.GetComponent<CharacterBody>(); if (!Object.op_Implicit((Object)(object)component) || !Object.op_Implicit((Object)(object)component2)) { return; } int num = (Object.op_Implicit((Object)(object)component.inventory) ? component.inventory.GetItemCount(Items.KnockBackHitEnemies) : 0); if (num > 0) { CharacterMotor component3 = victim.GetComponent<CharacterMotor>(); victim.GetComponent<RigidbodyMotor>(); float num2 = (KnockbackFin.Chance_Base.Value + KnockbackFin.Chance_Stack.Value * (float)(num - 1)) * damageInfo.procCoefficient; if (KnockbackFin.IsHyperbolic.Value) { num2 = Util.ConvertAmplificationPercentageIntoReductionPercentage(num2); } if (Object.op_Implicit((Object)(object)component3) && component3.isGrounded && !component2.isChampion && (component2.bodyFlags & 1) == 0 && Util.CheckRoll(num2, 0f, (CharacterMaster)null)) { float scale = (((int)component2.hullClassification == 0) ? 1f : (((int)component2.hullClassification == 1) ? 5f : (((int)component2.hullClassification == 2) ? 10f : 1f))); Util.PlaySound("Play_item_proc_knockBackHitEnemies", ((Component)component).gameObject); EffectManager.SpawnEffect(CommonAssets.knockbackFinEffect, new EffectData { origin = ((Component)component2).gameObject.transform.position, scale = scale }, true); Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(0f, 1f, 0f); float num3 = component3.mass * 25f; component3.ApplyForce(num3 * val, false, false); } } } private static void DamageAirborne(ILContext il) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_019f: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); int damageIndex = -1; int num4 = default(int); if (!val.TryGotoNext(new Func<Instruction, bool>[5] { (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref damageIndex), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num4), (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdfld<HealthComponent>(x, "body"), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "get_teamComponent") })) { Log.Warning(KnockbackFin.StaticName + " #1 - IL Fail #2"); } int num3 = default(int); if (val.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num3), (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<HealthComponent>(x, "get_fullCombinedHealth") })) { val.Emit(OpCodes.Ldarg_0); val.Emit(OpCodes.Ldarg_1); val.Emit(OpCodes.Ldloc, damageIndex); val.EmitDelegate<Func<HealthComponent, DamageInfo, float, float>>((Func<HealthComponent, DamageInfo, float, float>)delegate(HealthComponent healthComponent, DamageInfo damageInfo, float damage) { //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) float num = damage; CharacterBody val2 = (Object.op_Implicit((Object)(object)damageInfo.attacker) ? damageInfo.attacker.GetComponent<CharacterBody>() : null); int num2 = ((Object.op_Implicit((Object)(object)val2) && Object.op_Implicit((Object)(object)val2.inventory)) ? val2.inventory.GetItemCount(Items.KnockBackHitEnemies) : 0); if (num2 > 0 && (healthComponent.body.isFlying || ((Object)(object)healthComponent.body.characterMotor != (Object)null && !healthComponent.body.characterMotor.isGrounded))) { if (KnockbackFin.DamageColor.Value) { damageInfo.damageColorIndex = airborneDamage; } EffectManager.SimpleImpactEffect(airborneVFX.prefab, damageInfo.position, Vector3.up, true); num *= 1f + (KnockbackFin.Damage_Base.Value + KnockbackFin.Damage_Stack.Value * (float)(num2 - 1)) / 100f; } return num; }); val.Emit(OpCodes.Stloc, damageIndex); } else { Log.Warning(KnockbackFin.StaticName + " #1 - IL Fail #3"); } } } internal class WarpedEcho : ItemTemplate { public static string StaticName = "Warped Echo"; public static ConfigEntry<int> Rework; public static ConfigEntry<float> Delay_Base; public static ConfigEntry<int> Instance_Stack; public WarpedEcho(int descType) { ItemInternal = "DELAYEDDAMAGE"; if (descType == 1) { ItemInfo = "Half of incoming damage is delayed."; ItemDesc = string.Format("Incoming damage ".Style(ColorCode.FontColor.cIsDamage) + "is split " + "50%".Style(ColorCode.FontColor.cIsDamage) + ", with the other " + "50% ".Style(ColorCode.FontColor.cIsDamage) + "delayed for " + "{0}s ".Style(ColorCode.FontColor.cIsDamage) + "(+{1} instances per stack)".Style(ColorCode.FontColor.cStack) + ". Recharges one instance after delayed damage.", ItemTemplate.RoundVal(Delay_Base.Value), Instance_Stack.Value); } } } public static class WarpedEchoBehavior { [CompilerGenerated] private static class <>O { public static Manipulator <0>__RemoveOriginalVFX; public static hook_SpawnDelayedDamageEffect <1>__RemoveBehaviorVFX; public static Manipulator <2>__SetDelayTimer; public static Manipulator <3>__ImmediateRefresh; public static hook_UpdateDelayedDamage <4>__BuffLogic; } private static GameObject delayedVFX; public static void Init() { //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_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Expected O, but got Unknown //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Expected O, but got Unknown //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Expected O, but got Unknown //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Expected O, but got Unknown if (WarpedEcho.Rework.Value != 1) { return; } SpeedModifyEffect(); if ((Object)(object)delayedVFX != (Object)null) { object obj = <>O.<0>__RemoveOriginalVFX; if (obj == null) { Manipulator val = RemoveOriginalVFX; <>O.<0>__RemoveOriginalVFX = val; obj = (object)val; } HealthComponent.TakeDamageProcess += (Manipulator)obj; } if ((Object)(object)delayedVFX != (Object)null) { object obj2 = <>O.<1>__RemoveBehaviorVFX; if (obj2 == null) { hook_SpawnDelayedDamageEffect val2 = RemoveBehaviorVFX; <>O.<1>__RemoveBehaviorVFX = val2; obj2 = (object)val2; } DelayedDamageEffectUpdater.SpawnDelayedDamageEffect += (hook_SpawnDelayedDamageEffect)obj2; } object obj3 = <>O.<2>__SetDelayTimer; if (obj3 == null) { Manipulator val3 = SetDelayTimer; <>O.<2>__SetDelayTimer = val3; obj3 = (object)val3; } CharacterBody.SecondHalfOfDelayedDamage += (Manipulator)obj3; object obj4 = <>O.<3>__ImmediateRefresh; if (obj4 == null) { Manipulator val4 = ImmediateRefresh; <>O.<3>__ImmediateRefresh = val4; obj4 = (object)val4; } CharacterBody.UpdateSecondHalfOfDamage += (Manipulator)obj4; object obj5 = <>O.<4>__BuffLogic; if (obj5 == null) { hook_UpdateDelayedDamage val5 = BuffLogic; <>O.<4>__BuffLogic = val5; obj5 = (object)val5; } CharacterBody.UpdateDelayedDamage += (hook_UpdateDelayedDamage)obj5; } private static void SpeedModifyEffect() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0090: 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_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) delayedVFX = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/Items/DelayedDamage/DelayedDamageIndicator.prefab").WaitForCompletion(), "SlowDelayedDamageIndicator", true); Transform val = delayedVFX.gameObject.transform.Find("VFX"); Transform val2 = (Object.op_Implicit((Object)(object)val) ? ((Component)val).transform.Find("Ring") : null); if (Object.op_Implicit((Object)(object)val2)) { ParticleSystem component = ((Component)val2).GetComponent<ParticleSystem>(); if ((Object)(object)component != (Object)null) { MainModule main = component.main; ((MainModule)(ref main)).startLifetime = MinMaxCurve.op_Implicit(WarpedEcho.Delay_Base.Value); ((MainModule)(ref main)).startSizeMultiplier = 3f; } } for (int i = 0; i < val2.childCount; i++) { Transform child = val2.GetChild(i); ParticleSystem val3 = (Object.op_Implicit((Object)(object)child) ? ((Component)child).GetComponent<ParticleSystem>() : null); if (Object.op_Implicit((Object)(object)val3)) { MainModule main2 = val3.main; ((MainModule)(ref main2)).startDelay = MinMaxCurve.op_Implicit(WarpedEcho.Delay_Base.Value); ((MainModule)(ref main2)).startSizeMultiplier = 3f; } } } private static void SetDelayTimer(ILContext il) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); int damageIndex = -1; if (val.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref damageIndex), (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 1), (Instruction x) => ILPatternMatchingExt.MatchStfld(x, typeof(DelayedDamageInfo), "halfDamage") })) { val.Emit(OpCodes.Ldarg_0); val.Emit(OpCodes.Ldloc, damageIndex); val.EmitDelegate<Action<CharacterBody, DelayedDamageInfo>>((Action<CharacterBody, DelayedDamageInfo>)delegate(CharacterBody body, DelayedDamageInfo damageInfo) { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) damageInfo.timeUntilDamage = WarpedEcho.Delay_Base.Value; if (Object.op_Implicit((Object)(object)delayedVFX) && Object.op_Implicit((Object)(object)body)) { Object.Instantiate<GameObject>(delayedVFX, body.transform.position, Quaternion.identity, ((Component)body.mainHurtBox).transform); Object.Instantiate<GameObject>(delayedVFX, body.transform.position, Quaternion.identity, ((Component)body.mainHurtBox).transform); } }); } else { Log.Warning(WarpedEcho.StaticName + " #1 - IL Fail #1"); } } private static void ImmediateRefresh(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_00cd: 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.MatchCall<CharacterBody>(x, "RemoveBuff") })) { Log.Warning(WarpedEcho.StaticName + " #1 - IL Fail #2"); } int num = default(int); if (val.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdfld<CharacterBody>(x, "incomingDamageList"), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num) })) { val.Emit(OpCodes.Ldarg_0); val.EmitDelegate<Action<CharacterBody>>((Action<CharacterBody>)delegate(CharacterBody body) { body.AddBuff(Buffs.DelayedDamageBuff); }); } else { Log.Warning(WarpedEcho.StaticName + " #1 - IL Fail #3"); } } private static void RemoveOriginalVFX(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0088: 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.MatchLdstr(x, "Prefabs/Effects/DelayedDamageIndicator") })) { int index = val.Index; if (val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchPop(x) })) { ILLabel val2 = val.MarkLabel(); val.Goto(index, (MoveType)0, false); val.Emit(OpCodes.Br, val2.Target); } } else { Log.Warning(WarpedEcho.StaticName + " #1 - IL Fail #4"); } } private static void BuffLogic(orig_UpdateDelayedDamage orig, CharacterBody self, float deltaTime) { if (!NetworkServer.active || !Object.op_Implicit((Object)(object)self.inventory)) { return; } int itemCount = self.inventory.GetItemCount(Items.DelayedDamage); if (itemCount > 0) { itemCount = 1 + WarpedEcho.Instance_Stack.Value * (itemCount - 1); if (self.oldDelayedDamageCount != itemCount) { int num = itemCount - self.oldDelayedDamageCount; if (num > 0) { for (int i = 0; i < Math.Abs(num); i++) { self.AddBuff(Buffs.DelayedDamageBuff); } } else { for (int j = 0; j < Math.Abs(num); j++) { self.RemoveBuff(Buffs.DelayedDamageBuff); } } } self.oldDelayedDamageCount = itemCount; } else { self.oldDelayedDamageCount = 0; self.RemoveBuff(Buffs.DelayedDamageBuff); self.RemoveBuff(Buffs.DelayedDamageDebuff); self.RemoveOldestTimedBuff(Buffs.DelayedDamageDebuff); } } private static void RemoveBehaviorVFX(orig_SpawnDelayedDamageEffect orig, DelayedDamageEffectUpdater self) { } } internal class SeedOfLife : ItemTemplate { public static string StaticName = "Seed of Life"; public static ConfigEntry<int> Rework; public SeedOfLife(int descType) { ItemInternal = "HEALANDREVIVE"; if (descType == 1) { ItemInfo = "Revives user or allies. Consume on use."; ItemDesc = "All allies and yourself " + "return to life".Style(ColorCode.FontColor.cIsHealing) + ". Forces activation " + "upon death".Style(ColorCode.FontColor.cIsUtility) + ". Equipment is " + "consumed ".Style(ColorCode.FontColor.cIsUtility) + "on use."; } } } public static class SeedOfLifeBehavior { [CompilerGenerated] private static class <>O { public static Manipulator <0>__ReviveAll; } public static void Init() { //IL_0023: 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_002e: Expected O, but got Unknown if (SeedOfLife.Rework.Value == 1) { object obj = <>O.<0>__ReviveAll; if (obj == null) { Manipulator val = ReviveAll; <>O.<0>__ReviveAll = val; obj = (object)val; } CharacterMaster.OnBodyDeath += (Manipulator)obj; } } private static void ReviveAll(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0080: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (val.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterMaster>(x, "get_inventory"), (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Equipment), "HealAndReviveConsumed") })) { val.Emit(OpCodes.Ldarg, 1); val.EmitDelegate<Action<CharacterBody>>((Action<CharacterBody>)delegate(CharacterBody self) { self.equipmentSlot.FireHealAndRevive(); }); } else { Log.Warning(SeedOfLife.StaticName + " #1 - IL Fail #1"); } } } internal class SeedOfLifeConsumed : ItemTemplate { public static string StaticName = "Seed of Life Consumed"; public static ConfigEntry<int> Rework; public SeedOfLifeConsumed(int descType) { ItemInternal = "HEALANDREVIVECONSUMED"; if (descType == 1) { ItemInfo = "Spawn healing orbs temporarily."; ItemDesc = "Place down a sprout that drops " + "10 healing orbs ".Style(ColorCode.FontColor.cIsHealing) + "overtime."; } } } internal class BensRaincoat : ItemTemplate { public static string StaticName = "Bens Raincoat"; public static ConfigEntry<int> Rework; } public static class BensRaincoatBehavior { public static void Init() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) if (BensRaincoat.Rework.Value == 1) { BuffDef val = Addressables.LoadAsset<BuffDef>((object)"RoR2/DLC2/bdDisableAllSkills.asset").WaitForCompletion(); val.isDebuff = true; } } } internal class GrowthNectar : ItemTemplate { public static string StaticName = "Growth Nectar"; public static ConfigEntry<int> Rework; public static ConfigEntry<float> Stat_Base; public static ConfigEntry<float> Stat_Stack; public static ConfigEntry<float> Charge_Stat_Increase; public static ConfigEntry<float> Charge_Cap_Base; public static ConfigEntry<float> Charge_Cap_Stack; public GrowthNectar(int descType) { ItemInternal = "BOOSTALLSTATS"; if (descType == 1) { ItemInfo = "Not using an equipment increases ALL of your stats. Scales with equipment charges."; ItemDesc = string.Format("When your Equipment is off " + "cooldown".Style(ColorCode.FontColor.cIsUtility) + ", increase " + "ALL stats ".Style(ColorCode.FontColor.cIsUtility) + "by " + "{0}% ".Style(ColorCode.FontColor.cIsUtility) + "(+{1}% per stack)".Style(ColorCode.FontColor.cStack) + ", and by " + "{2}% ".Style(ColorCode.FontColor.cIsUtility) + "per " + "Equipment charge".Style(ColorCode.FontColor.cIsUtility) + ", up to a maximum of " + "{3}% ".Style(ColorCode.FontColor.cIsUtility) + "(+{4}% per stack)".Style(ColorCode.FontColor.cStack) + ".", ItemTemplate.RoundVal(Stat_Base.Value), ItemTemplate.RoundVal(Stat_Stack.Value), ItemTemplate.RoundVal(Charge_Stat_Increase.Value), ItemTemplate.RoundVal(Charge_Cap_Base.Value), ItemTemplate.RoundVal(Charge_Cap_Stack.Value)); } } } public static class GrowthNectarBehavior { [CompilerGenerated] private static class <>O { public static hook_MyFixedUpdate <0>__NonEquipUse; public static hook_UpdateBoostAllStatsTimer <1>__ReplaceEffect; public static Manipulator <2>__ReplaceTrigger; public static Manipulator <3>__ReplaceStats; } public static void Init() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown //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 //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Expected O, but got Unknown //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Expected O, but got Unknown if (GrowthNectar.Rework.Value == 1) { object obj = <>O.<0>__NonEquipUse; if (obj == null) { hook_MyFixedUpdate val = NonEquipUse; <>O.<0>__NonEquipUse = val; obj = (object)val; } EquipmentSlot.MyFixedUpdate += (hook_MyFixedUpdate)obj; object obj2 = <>O.<1>__ReplaceEffect; if (obj2 == null) { hook_UpdateBoostAllStatsTimer val2 = ReplaceEffect; <>O.<1>__ReplaceEffect = val2; obj2 = (object)val2; } CharacterBody.UpdateBoostAllStatsTimer += (hook_UpdateBoostAllStatsTimer)obj2; object obj3 = <>O.<2>__ReplaceTrigger; if (obj3 == null) { Manipulator val3 = ReplaceTrigger; <>O.<2>__ReplaceTrigger = val3; obj3 = (object)val3; } CharacterBody.RecalculateStats += (Manipulator)obj3; object obj4 = <>O.<3>__ReplaceStats; if (obj4 == null) { Manipulator val4 = ReplaceStats; <>O.<3>__ReplaceStats = val4; obj4 = (object)val4; } CharacterBody.RecalculateStats += (Manipulator)obj4; } } private static void NonEquipUse(orig_MyFixedUpdate orig, EquipmentSlot self, float deltaTime) { orig.Invoke(self, deltaTime); if (NetworkServer.active && Object.op_Implicit((Object)(object)self.characterBody.inventory)) { int itemCount = self.characterBody.inventory.GetItemCount(Items.BoostAllStats); bool flag = self.cooldownTimer == float.PositiveInfinity || self.cooldownTimer == float.NegativeInfinity; bool flag2 = self.characterBody.HasBuff(Buffs.BoostAllStatsBuff); if (itemCount > 0 && !flag2 && (self.cooldownTimer <= 0f || flag)) { self.characterBody.AddBuff(Buffs.BoostAllStatsBuff); } else if ((itemCount <= 0 || !flag) && flag2) { self.characterBody.RemoveBuff(Buffs.BoostAllStatsBuff); } } } private static void ReplaceEffect(orig_UpdateBoostAllStatsTimer orig, CharacterBody self, float timer) { } private static void ReplaceTrigger(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); ILLabel val2 = default(ILLabel); if (val.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchBle(x, ref val2), (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Buffs), "BoostAllStatsBuff") })) { val.EmitDelegate<Func<int, int>>((Func<int, int>)((int stack) => int.MaxValue)); } else { Log.Warning(GrowthNectar.StaticName + " #1 - IL Fail #1"); } } private static void ReplaceStats(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); int num5 = default(int); if (val.TryGotoNext(new Func<Instruction, bool>[4] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num5), (Instruction x) => ILPatternMatchingExt.MatchConvR4(x), (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdfld<CharacterBody>(x, "boostAllStatsMultiplier") })) { val.Emit(OpCodes.Ldarg_0); val.EmitDelegate<Action<CharacterBody>>((Action<CharacterBody>)delegate(CharacterBody self) { EquipmentSlot equipmentSlot = self.equipmentSlot; int num = (Object.op_Implicit((Object)(object)self.inventory) ? self.inventory.GetItemCount(Items.BoostAllStats) : 0); float num2 = GrowthNectar.Stat_Base.Value + GrowthNectar.Stat_Stack.Value * (float)(num - 1); float num3 = Math.Min(GrowthNectar.Charge_Stat_Increase.Value * (float)(equipmentSlot.maxStock - 1), GrowthNectar.Charge_Cap_Base.Value + GrowthNectar.Charge_Cap_Stack.Value * (float)(num - 1)); float num4 = (num2 + num3) / 100f; self.armor += self.armor * num4; self.maxHealth += self.maxHealth * num4; self.regen += self.regen * num4; self.moveSpeed += self.moveSpeed * num4; self.attackSpeed += self.attackSpeed * num4; self.damage += self.damage * num4; self.crit += self.crit * num4; }); int index = val.Index; if (val.TryGotoNext(new Func<Instruction, bool>[4] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "get_maxHealth"), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "set_maxBonusHealth") })) { ILLabel val2 = val.MarkLabel(); val.Goto(index, (MoveType)0, false); val.Emit(OpCodes.Br, val2.Target); } else { Log.Warning(GrowthNectar.StaticName + " #1 - IL Fail #3"); } } else { Log.Warning(GrowthNectar.StaticName + " #1 - IL Fail #2"); } } } internal class WarBonds : ItemTemplate { public static string StaticName = "War Bonds"; public static ConfigEntry<int> Rework; public static ConfigEntry<bool> Free_Purchase_VFX; public static ConfigEntry<int> Purchase_Base; public static ConfigEntry<int> Purchase_Stack; public static ConfigEntry<float> Experience_Percent_Base; public static ConfigEntry<float> Experience_Percent_Stack; public WarBonds(int descType) { ItemInternal = "GOLDONSTAGESTART"; if (descType == 1) { ItemInfo = $"Gain free purchases at the start of each stage.\nGain {ItemTemplate.RoundVal(Experience_Percent_Base.Value)}% experience on cash spent on all purchases."; ItemDesc = string.Format("Gain " + "{0} ".Style(ColorCode.FontColor.cIsUtility) + "(+{1} per stack) ".Style(ColorCode.FontColor.cStack) + "free purchases ".Style(ColorCode.FontColor.cIsUtility) + "at the " + "start of each stage".Style(ColorCode.FontColor.cIsUtility) + ". When making a gold purchase, get " + "{2}% ".Style(ColorCode.FontColor.cIsUtility) + "(+{3}% per stack) ".Style(ColorCode.FontColor.cStack) + "of spent gold as " + "experience".Style(ColorCode.FontColor.cIsUtility) + ".", Purchase_Base.Value, Purchase_Stack.Value, ItemTemplate.RoundVal(Experience_Percent_Base.Value), ItemTemplate.RoundVal(Experience_Percent_Stack.Value)); } } } public static class WarBondsBehavior { [CompilerGenerated] private static class <>O { public static Manipulator <0>__InteractBegin; public static Manipulator <1>__ReplaceEffect; public static hook_Start <2>__FreeUnlocks; } public static void Init() { //IL_0023: 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_002e: Expected O, but got Unknown //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Expected O, but got Unknown //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Expected O, but got Unknown if (WarBonds.Rework.Value == 1) { object obj = <>O.<0>__InteractBegin; if (obj == null) { Manipulator val = InteractBegin; <>O.<0>__InteractBegin = val; obj = (object)val; } PurchaseInteraction.OnInteractionBegin += (Manipulator)obj; object obj2 = <>O.<1>__ReplaceEffect; if (obj2 == null) { Manipulator val2 = ReplaceEffect; <>O.<1>__ReplaceEffect = val2; obj2 = (object)val2; } CharacterBody.Start += (Manipulator)obj2; object obj3 = <>O.<2>__FreeUnlocks; if (obj3 == null) { hook_Start val3 = FreeUnlocks; <>O.<2>__FreeUnlocks = val3; obj3 = (object)val3; } CharacterBody.Start += (hook_Start)obj3; } } private static void InteractBegin(ILContext il) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown //IL_00c5: 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) ILCursor val = new ILCursor(il); int costIndex = -1; if (!val.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdfld<PurchaseInteraction>(x, "cost"), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref costIndex) })) { Log.Warning(WarBonds.StaticName + " #1 - IL Fail #1"); } if (val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0) })) { val.Emit(OpCodes.Ldarg_0); val.Emit(OpCodes.Ldarg_1); val.EmitDelegate<Action<PurchaseInteraction, Interactor>>((Action<PurchaseInteraction, Interactor>)delegate(PurchaseInteraction interact, Interactor activator) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Invalid comparison between Unknown and I4 //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: 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_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Expected O, but got Unknown if (Object.op_Implicit((Object)(object)activator) && Object.op_Implicit((Object)(object)interact) && (int)interact.costType == 1) { CharacterBody component = ((Component)activator).GetComponent<CharacterBody>(); int num = (Object.op_Implicit((Object)(object)component.inventory) ? component.inventory.GetItemCount(Items.GoldOnStageStart) : 0); if (num > 0) { ExperienceManager.instance.AwardExperience(((Component)interact).transform.position, component, (ulong)((float)interact.cost * (WarBonds.Experience_Percent_Base.Value + WarBonds.Experience_Percent_Stack.Value * (float)(num - 1)) / 100f)); } if (component.HasBuff(Buffs.FreeUnlocks) && WarBonds.Free_Purchase_VFX.Value) { Util.PlaySound("Play_item_proc_goldOnStageStart", ((Component)component).gameObject); EffectManager.SpawnEffect(AssetReferences.gainCoinsImpactEffectPrefab, new EffectData { origin = component.transform.position, scale = 2f }, false); } } }); } else { Log.Warning(WarBonds.StaticName + " #1 - IL Fail #2"); } } private static void ReplaceEffect(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); ILLabel val2 = default(ILLabel); if (val.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchBle(x, ref val2), (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Items), "GoldOnStageStart") })) { val.EmitDelegate<Func<int, int>>((Func<int, int>)((int stack) => int.MaxValue)); } else { Log.Warning(WarBonds.StaticName + " #1 - IL Fail #3"); } } private static void FreeUnlocks(orig_Start orig, CharacterBody self) { //IL_0059: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (NetworkServer.active && Object.op_Implicit((Object)(object)self.master) && Object.op_Implicit((Object)(object)self.master.inventory)) { int itemCount = self.master.inventory.GetItemCount(Items.GoldOnStageStart); if (itemCount > 0) { self.SetBuffCount(Buffs.FreeUnlocks.buffIndex, WarBonds.Purchase_Base.Value + WarBonds.Purchase_Stack.Value * (itemCount - 1)); } } } } internal class ChanceDoll : ItemTemplate { public static string StaticName = "Chance Doll"; public static ConfigEntry<int> Rework; public static ConfigEntry<int> Max_Upgrade; public static ConfigEntry<float> Hidden_Chance; public static ConfigEntry<float> Chance_Base; public static ConfigEntry<float> Chance_Stack; public static ConfigEntry<int> Karma_Required; public static ConfigEntry<int> Karma_Base_Cap; public static ConfigEntry<int> Karma_Stack_Cap; public static ConfigEntry<int> Luck_Per; public ChanceDoll(int descType) { ItemInternal = "EXTRASHRINEITEM"; if (descType == 1) { string arg = "Common"; if (Max_Upgrade.Value == 1) { arg = "Uncommon".Style(ColorCode.FontColor.cIsHealing); } if (Max_Upgrade.Value == 2) { arg = "Legendary".Style(ColorCode.FontColor.cIsHealth); } if (Max_Upgrade.Value == 3) { arg = "Boss".Style(ColorCode.FontColor.cIsDamage); } ItemInfo = "Chance to upgrade the item reward on failing a Shrine."; ItemDesc = string.Format("Failing a Shrine increases the chance for the item reward to " + "upgrade ".Style(ColorCode.FontColor.cIsUtility) + "by " + "{0}% ".Style(ColorCode.FontColor.cIsUtility) + "(+{1}% per stack)".Style(ColorCode.FontColor.cStack) + ", up to a {2} item.", ItemTemplate.RoundVal(Chance_Base.Value), ItemTemplate.RoundVal(Chance_Stack.Value), arg); } if (descType == 2) { ItemInfo = $"Activating {ItemTemplate.RoundVal(Karma_Required.Value)} Shrines permanently increases your luck."; ItemDesc = string.Format("When using " + "{0} ".Style(ColorCode.FontColor.cIsUtility) + "Shrines, all random effects are rerolled " + "+{1} ".Style(ColorCode.FontColor.cIsUtility) + "times for a " + "favorable outcome permanently".Style(ColorCode.FontColor.cIsUtility) + ", up to a " + "maximum ".Style(ColorCode.FontColor.cIsUtility) + "of " + "{2} ".Style(ColorCode.FontColor.cIsUtility) + "(+{3} per stack) ".Style(ColorCode.FontColor.cStack) + "times.", ItemTemplate.RoundVal(Karma_Required.Value), ItemTemplate.RoundVal(Luck_Per.Value), ItemTemplate.RoundVal(Karma_Base_Cap.Value), ItemTemplate.RoundVal(Karma_Stack_Cap.Value)); } } } public static class ChanceDollBehavior { [CompilerGenerated] private static class <>O { public static hook_Awake <0>__AddCounter; public static hook_AddShrineStack <1>__ReplaceBehavior; public static Manipulator <2>__RemoveBehavior; public static hook_OnInteractionBegin <3>__IncreaseKarma; public static hook_OnInventoryChanged <4>__LuckCount; } public static void Init() { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Expected O, but got Unknown //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Expected O, but got Unknown //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Expected O, but got Unknown //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Expected O, but got Unknown //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Expected O, but got Unknown if (ChanceDoll.Rework.Value == 1) { LanguageAPI.Add("SHRINE_CHANCE_DOLL_2P", "<style=cShrine>Your Chance Doll upgrades the shrine, granting a reward!</color>"); LanguageAPI.Add("SHRINE_CHANCE_DOLL", "<style=cShrine>{0}'s Chance Doll upgrades the shrine, granting a reward!</color>"); object obj = <>O.<0>__AddCounter; if (obj == null) { hook_Awake val = AddCounter; <>O.<0>__AddCounter = val; obj = (object)val; } ShrineChanceBehavior.Awake += (hook_Awake)obj; object obj2 = <>O.<1>__ReplaceBehavior; if (obj2 == null) { hook_AddShrineStack val2 = ReplaceBehavior; <>O.<1>__ReplaceBehavior = val2; obj2 = (object)val2; } ShrineChanceBehavior.AddShrineStack += (hook_AddShrineStack)obj2; } else if (ChanceDoll.Rework.Value == 2) { object obj3 = <>O.<2>__RemoveBehavior; if (obj3 == null) { Manipulator val3 = RemoveBehavior; <>O.<2>__RemoveBehavior = val3; obj3 = (object)val3; } ShrineChanceBehavior.AddShrineStack += (Manipulator)obj3; object obj4 = <>O.<3>__IncreaseKarma; if (obj4 == null) { hook_OnInteractionBegin val4 = IncreaseKarma; <>O.<3>__IncreaseKarma = val4; obj4 = (object)val4; } GlobalEventManager.OnInteractionBegin += (hook_OnInteractionBegin)obj4; object obj5 = <>O.<4>__LuckCount; if (obj5 == null) { hook_OnInventoryChanged val5 = LuckCount; <>O.<4>__LuckCount = val5; obj5 = (object)val5; } CharacterMaster.OnInventoryChanged += (hook_OnInventoryChanged)obj5; } } private static void AddCounter(orig_Awake orig, ShrineChanceBehavior self) { orig.Invoke(self); ShrineFailCount shrineFailCount = ((Component)self).gameObject.AddComponent<ShrineFailCount>(); shrineFailCount.FailCount = 0; } private static void ReplaceBehavior(orig_AddShrineStack orig, ShrineChanceBehavior self, Interactor activator) { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_02ce: Unknown result type (might be due to invalid IL or missing references) //IL_02cf: 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_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_0338: Unknown result type (might be due to invalid IL or missing references) //IL_033d: Unknown result type (might be due to invalid IL or missing references) //IL_0345: Unknown result type (might be due to invalid IL or missing references) //IL_0351: Expected O, but got Unknown //IL_0281: Unknown result type (might be due to invalid IL or missing references) //IL_0286: Unknown result type (might be due to invalid IL or missing references) //IL_0292: Unknown result type (might be due to invalid IL or missing references) //IL_029d: Unknown result type (might be due to invalid IL or missing references) //IL_029e: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02a8: Unknown result type (might be due to invalid IL or missing references) //IL_02b3: Unknown result type (might be due to invalid IL or missing references) //IL_02b5: Unknown result type (might be due to invalid IL or missing references) //IL_02ba: Unknown result type (might be due to invalid IL or missing references) //IL_02bf: Unknown result type (might be due to invalid IL or missing references) //IL_02ca: Expected O, but got Unknown //IL_0310: Unknown result type (might be due to invalid IL or missing references) //IL_0317: Unknown result type (might be due to invalid IL or missing references) //IL_0322: Unknown result type (might be due to invalid IL or missing references) //IL_032c: Unknown result type (might be due to invalid IL or missing references) //IL_03cf: Unknown result type (might be due to invalid IL or missing references) //IL_03d4: Unknown result type (might be due to invalid IL or missing references) //IL_03e0: Unknown result type (might be due to invalid IL or missing references) //IL_03eb: Unknown result type (might be due to invalid IL or missing references) //IL_03ec: Unknown result type (might be due to invalid IL or missing references) //IL_03f1: Unknown result type (might be due to invalid IL or missing references) //IL_03f6: Unknown result type (might be due to invalid IL or missing references) //IL_0401: Unknown result type (might be due to invalid IL or missing references) //IL_0403: Unknown result type (might be due to invalid IL or missing references) //IL_0408: Unknown result type (might be due to invalid IL or missing references) //IL_040d: Unknown result type (might be due to invalid IL or missing references) //IL_0418: Expected O, but got Unknown //IL_037b: Unknown result type (might be due to invalid IL or missing references) //IL_0380: Unknown result type (might be due to invalid IL or missing references) //IL_038c: Unknown result type (might be due to invalid IL or missing references) //IL_0397: Unknown result type (might be due to invalid IL or missing references) //IL_0398: Unknown result type (might be due to invalid IL or missing references) //IL_039d: Unknown result type (might be due to invalid IL or missing references) //IL_03a2: Unknown result type (might be due to invalid IL or missing references) //IL_03ad: Unknown result type (might be due to invalid IL or missing references) //IL_03af: Unknown result type (might be due to invalid IL or missing references) //IL_03b4: Unknown result type (might be due to invalid IL or missing references) //IL_03b9: Unknown result type (might be due to invalid IL or missing references) //IL_03c4: Expected O, but got Unknown //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_020c: Unknown result type (might be due to invalid IL or missing references) //IL_020f: Invalid comparison between Unknown and I4 //IL_021d: Unknown result type (might be due to invalid IL or missing references) //IL_0220: Invalid comparison between Unknown and I4 //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_022e: Unknown result type (might be due to invalid IL or missing references) //IL_0231: Invalid comparison between Unknown and I4 //IL_024e: Unknown result type (might be due to invalid IL or missing references) //IL_0253: Unknown result type (might be due to invalid IL or missing references) //IL_01c6: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) if (!NetworkServer.active || !Object.op_Implicit((Object)(object)((Component)activator).GetComponent<HealthComponent>())) { return; } CharacterBody component = ((Component)activator).GetComponent<CharacterBody>(); PickupIndex val = PickupIndex.none; if (!Object.op_Implicit((Object)(object)component.inventory)) { return; } self.chanceDollWin = false; if (Object.op_Implicit((Object)(object)self.dropTable)) { ShrineFailCount component2 = ((Component)self).gameObject.GetComponent<ShrineFailCount>(); int itemCount = component.inventory.GetItemCount(Items.ExtraShrineItem); if (self.rng.nextNormalizedFloat > self.failureChance) { val = self.dropTable.GenerateDrop(self.rng); float num = (ChanceDoll.Chance_Base.Value + ChanceDoll.Chance_Stack.Value * (float)(itemCount - 1)) * (float)component2.FailCount; if (Util.CheckRoll((itemCount > 0) ? Math.Max(num, ChanceDoll.Hidden_Chance.Value) : 0f, component.master)) { int num2 = (Util.CheckRoll(num % 100f, 0f, (CharacterMaster)null) ? 1 : 0); double num3 = Math.Round(num / 100f); ItemTier val2 = ((ChanceDoll.Max_Upgrade.Value == 3 && num3 + (double)num2 > 2.0) ? ((ItemTier)4) : ((ChanceDoll.Max_Upgrade.Value >= 2 && num3 + (double)num2 > 1.0) ? ((ItemTier)2) : ((ChanceDoll.Max_Upgrade.Value < 1 || !(num3 + (double)num2 <= 1.0)) ? ((ItemTier)0) : ((ItemTier)1)))); List<PickupIndex> list = new List<PickupIndex>(Run.instance.availableTier1DropList); List<PickupIndex> list2 = new List<PickupIndex>(Run.instance.availableTier2DropList); List<PickupIndex> list3 = new List<PickupIndex>(Run.instance.availableTier3DropList); List<PickupIndex> list4 = new List<PickupIndex>(Run.instance.availableBossDropList); List<PickupIndex> list5 = (((int)val2 == 0) ? list : (((int)val2 == 1) ? list2 : (((int)val2 != 2) ? list4 : list3))); Util.ShuffleList<PickupIndex>(list5); val = list5[0]; self.chanceDollWin = true; } } else { component2.FailCount++; if (itemCount > 0) { EffectManager.SpawnEffect(self.effectPrefabShrineRewardNormal, new EffectData { origin = ((Component)self).gameObject.transform.position, rotation = Quaternion.identity, scale = 3f, color = Color32.op_Implicit(self.colorShrineRewardJackpot) }, true); } } } string baseToken; if (val == PickupIndex.none) { baseToken = "SHRINE_CHANCE_FAIL_MESSAGE"; } else { baseToken = ((!self.chanceDollWin) ? "SHRINE_CHANCE_SUCCESS_MESSAGE" : "SHRINE_CHANCE_DOLL"); self.successfulPurchaseCount++; PickupDropletController.CreatePickupDroplet(val, self.dropletOrigin.position, self.dropletOrigin.forward * 20f); } Chat.SendBroadcastChat((ChatMessageBase)new SubjectFormatChatMessage { subjectAsCharacterBody = component, baseToken = baseToken }); self.waitingForRefresh = true; self.refreshTimer = 2f; if (self.chanceDollWin) { EffectManager.SpawnEffect(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/ExtraStatsOnLevelUpEffect"), new EffectData { origin = ((Component)self).gameObject.transform.position, rotation = Quaternion.identity, scale = 3f, color = Color32.op_Implicit(self.colorShrineRewardJackpot) }, true); } else { EffectManager.SpawnEffect(self.effectPrefabShrineRewardNormal, new EffectData { origin = ((Component)self).gameObject.transform.position, rotation = Quaternion.identity, scale = 1.5f, color = Color32.op_Implicit(self.colorShrineRewardNormal) }, true); } if (self.successfulPurchaseCount >= self.maxPurchaseCount) { ((Component)self.symbolTransform).gameObject.SetActive(false); ((ShrineBehavior)self).CallRpcSetPingable(false); } } private static void RemoveBehavior(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); ILLabel val2 = default(ILLabel); int num = default(int); if (val.TryGotoNext(new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchBle(x, ref val2), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num), (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Items), "ExtraShrineItem") })) { val.EmitDelegate<Func<int, int>>((Func<int, int>)((int self) => int.MaxValue)); } else { Log.Warning(ChanceDoll.StaticName + " #2 - IL Fail #1"); } } private static void IncreaseKarma(orig_OnInteractionBegin orig, GlobalEventManager self, Interactor interactor, IInteractable interactable, GameObject interactObject) { orig.Invoke(self, interactor, interactable, interactObject); PurchaseInteraction val = (Object.op_Implicit((Object)(object)interactObject) ? interactObject.GetComponent<PurchaseInteraction>() : null); if (interactable == null || !Object.op_Implicit((Object)(object)val)) { return; } CharacterBody component = ((Component)interactor).GetComponent<CharacterBody>(); int num = (Object.op_Implicit((Object)(object)component.inventory) ? component.inventory.GetItemCount(Items.ExtraShrineItem) : 0); if (Object.op_Implicit((Object)(object)component) && num > 0 && val.isShrine) { PlayerCharacterMasterController playerCharacterMasterController = component.master.playerCharacterMasterController; KarmaDollBehavior karmaDollBehavior = ((Component)playerCharacterMasterController).GetComponent<KarmaDollBehavior>(); if (!Object.op_Implicit((Object)(object)karmaDollBehavior)) { karmaDollBehavior = ((Component)playerCharacterMasterController).gameObject.AddComponent<KarmaDollBehavior>(); } karmaDollBehavior.KarmaOrb(component, interactObject); } else if (Object.op_Implicit((Object)(object)component) && num <= 0) { PlayerCharacterMasterController playerCharacterMasterController2 = component.master.playerCharacterMasterController; KarmaDollBehavior component2 = ((Component)playerCharacterMasterController2).GetComponent<KarmaDollBehavior>(); if (Object.op_Implicit((Object)(object)component2)) { component2.UpdateLuck(); } } } private static void LuckCount(orig_OnInventoryChanged orig, CharacterMaster self) { orig.Invoke(self); if (Object.op_Implicit((Object)(object)self.playerCharacterMasterController)) { KarmaDollBehavior component = ((Component)self.playerCharacterMasterController).GetComponent<KarmaDollBehavior>(); if (Object.op_Implicit((Object)(object)component)) { component.UpdateLuck(); self.luck += (float)component.luckStat; } } } } public class ShrineFailCount : NetworkBehaviour { public int FailCount; private void UNetVersion() { } public override bool OnSerialize(NetworkWriter writer, bool forceAll) { bool result = default(bool); return result; } public override void OnDeserialize(NetworkReader reader, bool initialState) { } } public class KarmaDollBehavior : MonoBehaviour { private CharacterBody owner; public int luckStat; private int karmaCount; private int ItemCount => (Object.op_Implicit((Object)(object)owner) && Object.op_Implicit((Object)(object)owner.inventory)) ? owner.inventory.GetItemCount(Items.ExtraShrineItem) : 0; private void OnEnable() { ReattachOwner(); } public void KarmaOrb(CharacterBody body, GameObject interactableObject) { //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) ReattachOwner(); if ((Object.op_Implicit((Object)(object)body) || Object.op_Implicit((Object)(object)interactableObject)) && luckStat < ItemCount) { KarmaDollOrb karmaDollOrb = new KarmaDollOrb { origin = interactableObject.transform.position, target = body.mainHurtBox, arrivalTime = 5f }; OrbManager.instance.AddOrb((Orb)(object)karmaDollOrb); } } public void IncreaseKarma() { //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: 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_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) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Expected O, but got Unknown karmaCount++; if (karmaCount >= ChanceDoll.Karma_Required.Value) { karmaCount = 0; UpdateLuck(ChanceDoll.Luck_Per.Value); owner.master.OnInventoryChanged(); EffectManager.SpawnEffect(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/ExtraStatsOnLevelUpEffect"), new EffectData { origin = ((Component)owner).gameObject.transform.position, rotation = Quaternion.identity, scale = 1f, color = Color32.op_Implicit(new Color(0.245f, 0.215f, 0.1275f)) }, true); } } public void UpdateLuck(int increase = 0) { luckStat = Math.Min(luckStat + increase, ChanceDoll.Karma_Base_Cap.Value * ((ItemCount > 0) ? 1 : 0) + ChanceDoll.Karma_Stack_Cap.Value * (ItemCount - 1)); } private void ReattachOwner() { if (!Object.op_Implicit((Object)(object)owner)) { owner = ((Component)this).GetComponent<CharacterMaster>().GetBody(); } } } public class KarmaDollOrb : Orb { private KarmaDollBehavior karmaBehavior; private static GameObject orbEffect; [InitDuringStartup] private static void Init() { //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Expected O, but got Unknown //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Expected O, but got Unknown //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_0205: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Expected O, but got Unknown orbEffect = PrefabAPI.InstantiateClone(Resources.Load<GameObject>("Prefabs/Effects/OrbEffects/InfusionOrbEffect"), "KarmaDollOrbEffect", true); if (!Object.op_Implicit((Object)(object)orbEffect.GetComponent<NetworkIdentity>())) { orbEffect.AddComponent<NetworkIdentity>(); } Color val = default(Color); ((Color)(ref val))..ctor(23f / 75f, 0.26f, 0.14f); Color val2 = default(Color); ((Color)(ref val2))..ctor(0.98f, 0.86f, 0.51f); ParticleSystemRenderer component = ((Component)orbEffect.transform.Find("VFX").Find("Core")).GetComponent<ParticleSystemRenderer>(); if (Object.op_Implicit((Object)(object)component)) { Material val3 = new Material(((Renderer)component).sharedMaterial); val3.DisableKeyword("VERTEXCOLOR"); val3.SetColor("_TintColor", val2); val3.SetColor("_Color", val2); ((Renderer)component).sharedMaterial = val3; } ParticleSystem component2 = ((Component)orbEffect.transform.Find("VFX").Find("PulseGlow")).GetComponent<ParticleSystem>(); if (Object.op_Implicit((Object)(object)component2)) { MainModule main = component2.main; ((MainModule)(ref main)).startColor = MinMaxGradient.op_Implicit(val); ((MainModule)(ref main)).startSizeMultiplier = 0.01f; } TrailRenderer component3 = ((Component)orbEffect.transform.Find("TrailParent").Find("Trail")).GetComponent<TrailRenderer>(); if (Object.op_Implicit((Object)(object)component3)) { Material val4 = new Material(((Renderer)component3).sharedMaterial); val4.DisableKeyword("VERTEXCOLOR"); val4.SetColor("_TintColor", val); val4.SetColor("_Color", val); val4.SetTexture("_RemapTex", ((Renderer)component).sharedMaterial.GetTexture("_RemapTex")); ((Renderer)component3).sharedMaterial = val4; component3.widthMultiplier = 1f; } OrbEffect component4 = orbEffect.GetComponent<OrbEffect>(); if (Object.op_Implicit((Object)(object)component4)) { component4.onArrival = new UnityEvent(); } new EffectDef { prefab = orbEffect, prefabName = "KarmaDollOrbEffect", prefabEffectComponent = orbEffect.GetComponent<EffectComponent>() }; ContentAddition.AddEffect(orbEffect); } public override void Begin() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001c: 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_0034: Expected O, but got Unknown ((Orb)this).duration = ((Orb)this).distanceToTarget / base.arrivalTime; EffectData val = new EffectData { origin = base.origin, genericFloat = ((Orb)this).duration }; val.SetHurtBoxReference(base.target); EffectManager.SpawnEffect(orbEffect, val, true); HurtBox component = ((Component)base.target).GetComponent<HurtBox>(); CharacterBody val2 = ((component != null) ? ((Component)component.healthComponent).GetComponent<CharacterBody>() : null); if (Object.op_Implicit((Object)(object)val2)) { karmaBehavior = ((Component)val2.master.playerCharacterMasterController).GetComponent<KarmaDollBehavior>(); } } public override void OnArrival() { ((Orb)this).OnArrival(); if (Object.op_Implicit((Object)(object)karmaBehavior)) { karmaBehavior.IncreaseKarma(); } } } internal class NoxiousThorn : ItemTemplate { public static string StaticName = "Noxious Thorn"; public static ConfigEntry<int> Rework; public static ConfigEntry<int> Inflict_Type; public static ConfigEntry<float> Refresh; public static ConfigEntry<float> Damage_Frequency; public static ConfigEntry<float> Damage_Base; public static ConfigEntry<float> Damage_Stack; public static ConfigEntry<float> Initial_Range; public static ConfigEntry<float> Range_Increment; public static ConfigEntry<float> Base_Cap; public static ConfigEntry<float> Stack_Cap; public NoxiousThorn(int descType) { ItemInternal = "TRIGGERENEMYDEBUFFS"; string text = "bleed ".Style(ColorCode.FontColor.cIsDamage) + "enemies "; if (Inflict_Type.Value == 1) { text = "apply " + "poison ".Style(ColorCode.FontColor.cIsDamage); } if (Inflict_Type.Value == 2) { text = "apply " + "blight ".Style(ColorCode.FontColor.cIsDamage); } if (descType == 1) { ItemInfo = "Taking damage surrounds yourself in a ring of thorns."; ItemDesc = string.Format("Getting hit surrounds you in a " + "ring of thorns ".Style(ColorCode.FontColor.cIsDamage) + "that {0}for " + "{1}% ".Style(ColorCode.FontColor.cIsDamage) + "(+{2}% per stack) ".Style(ColorCode.FontColor.cStack) + "damage. The ring " + "grows when taking damage".Style(ColorCode.FontColor.cIsDamage) + ", increasing its radius by " + "{3}m".Style(ColorCode.FontColor.cIsDamage) + ". Stacks up to " + "{4}m ".Style(ColorCode.FontColor.cIsDamage) + "(+{5}m per stack)".Style(ColorCode.FontColor.cStack) + ".", text, ItemTemplate.RoundVal(Damage_Base.Value), ItemTemplate.RoundVal(Damage_Stack.Value), ItemTemplate.RoundVal(Range_Increment.Value), ItemTemplate.RoundVal(Base_Cap.Value), ItemTemplate.RoundVal(Stack_Cap.Value)); } } } public static class NoxiousThornBehavior { [CompilerGenerated] private static class <>O { public static Manipulator <0>__ReplaceEffect; } public static void Init() { //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 if (NoxiousThorn.Rework.Value == 1) { object obj = <>O.<0>__ReplaceEffect; if (obj == null) { Manipulator val = ReplaceEffect; <>O.<0>__ReplaceEffect = val; obj = (object)val; } HealthComponent.TakeDamageProcess += (Manipulator)obj; } } private static void ReplaceEffect(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); ILLabel val3 = default(ILLabel); float num2 = default(float); float num = default(float); ILLabel val2 = default(ILLabel); if (val.TryGotoNext(new Func<Instruction, bool>[6] { (Instruction x) => ILPatternMatchingExt.MatchBle(x, ref val3), (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, ref num2), (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, ref num), (Instruction x) => ILPatternMatchingExt.MatchLdnull(x), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, typeof(Util), "CheckRoll"), (Instruction x) => ILPatternMatchingExt.MatchBrfalse(x, ref val2) })) { val.EmitDelegate<Func<int, int>>((Func<int, int>)((int stack) => int.MaxValue)); } else { Log.Warning(NoxiousThorn.StaticName + " #1 - IL Fail #1"); } } } public class NoxiousAuraItemBehavior : BaseItemBodyBehavior { private static GameObject auraEffect; private ThornAuraController clonedAura; [ItemDefAssociation(useOnServer = true, useOnClient = false)] public static ItemDef GetItemDef() { return (NoxiousThorn.Rework.Value == 1) ? Items.TriggerEnemyDebuffs : null; } [InitDuringStartup] private static void Init() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to in