Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of StackCalculator v1.0.4
Stack_Calculator.dll
Decompiled 2 years agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using Microsoft.CodeAnalysis; using On.RoR2.UI; using RoR2; using RoR2.UI; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")] [assembly: AssemblyCompany("Stack Calculator")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("Stack Calculator")] [assembly: AssemblyTitle("Stack Calculator")] [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 StackCalculator { internal static class Log { private static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void Debug(object data) { _logSource.LogDebug(data); } internal static void Error(object data) { _logSource.LogError(data); } internal static void Fatal(object data) { _logSource.LogFatal(data); } internal static void Info(object data) { _logSource.LogInfo(data); } internal static void Message(object data) { _logSource.LogMessage(data); } internal static void Warning(object data) { _logSource.LogWarning(data); } } [BepInPlugin("com.yourname.stackcalculator", "Stack Calculator", "1.0.0")] public class StackCalculator : BaseUnityPlugin { public void Awake() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected O, but got Unknown ((BaseUnityPlugin)this).Logger.LogInfo((object)"Stack Calculator Plugin loaded!"); ItemIcon.SetItemIndex += new hook_SetItemIndex(ItemIcon_SetItemIndex); } private void Update() { if (Input.GetKeyDown((KeyCode)284)) { LogAllItemsInInventory(); } } private void LogAllItemsInInventory() { //IL_0045: 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_004c: Unknown result type (might be due to invalid IL or missing references) CharacterMaster master = LocalUserManager.GetFirstLocalUser().cachedMasterController.master; if (!Object.op_Implicit((Object)(object)master) || !Object.op_Implicit((Object)(object)master.inventory)) { return; } foreach (ItemIndex item in master.inventory.itemAcquisitionOrder) { ItemDef itemDef = ItemCatalog.GetItemDef(item); if ((Object)(object)itemDef != (Object)null) { ((BaseUnityPlugin)this).Logger.LogInfo((object)("Item: " + ((Object)itemDef).name + " - " + Language.GetString(itemDef.descriptionToken))); } } } private string GetBlockChance(int itemCount) { if (itemCount <= 0) { return "0%"; } double num = 0.15 * (double)itemCount / (0.15 * (double)itemCount + 1.0); return $"{num * 100.0:F1}%"; } private string GetStunGrenadeChance(int itemCount) { if (itemCount <= 0) { return "0%"; } double num = 0.05 * (double)itemCount / (0.05 * (double)itemCount + 1.0); return $"{num * 100.0:F1}%"; } private string GetBandolierChance(int itemCount) { if (itemCount <= 0) { return "0%"; } double num = 1.0 - Math.Pow(1.0 / (1.0 + (double)itemCount), 0.33); return $"{num * 100.0:F1}%"; } private string GetFuelCellCooldownReduction(int itemCount) { if (itemCount <= 0) { return "0%"; } double num = 1.0 - Math.Pow(0.85, itemCount); return $"{num * 100.0:F1}%"; } private string GetExecuteThreshold(int itemCount) { if (itemCount <= 0) { return "0%"; } double num = 0.13 * (double)itemCount / (0.13 * (double)itemCount + 1.0); return $"{num * 100.0:F1}%"; } private string GetStealthKitRechargeTime(int itemCount) { if (itemCount <= 0) { return "30s"; } double num = 30.0 * Math.Pow(0.5, itemCount - 1); return $"{num:F1}s"; } private string GetCustomDescription(ItemDef itemDef, int itemCount) { switch (((Object)itemDef).name) { case "ChainLightning": { int num136 = 3 + 2 * (itemCount - 1); float num137 = 20f + 2f * (float)(itemCount - 1); return $"Targets: {num136}, Range: {num137}m"; } case "Syringe": { float num135 = 15f * (float)itemCount; return $"Attack Speed: {num135}%"; } case "BossDamageBonus": { float num134 = 20f * (float)itemCount; return $"Damage: {num134}%"; } case "SecondarySkillMagazine": { int num133 = 1 + itemCount; return $"Charges: {num133}"; } case "FlatHealth": { int num132 = 25 * itemCount; return $"HP Increase: {num132}"; } case "Firework": { int num131 = 8 + 4 * (itemCount - 1); return $"Fireworks: {num131}"; } case "Mushroom": { float num129 = 4.5f + 2.25f * (float)(itemCount - 1); float num130 = 3f + 1.5f * (float)(itemCount - 1); return $"Healing: {num129}% Radius: {num130}m"; } case "HealWhileSafe": { float num128 = 3f * (float)itemCount; return $"Regen: {num128} hp/s"; } case "Crowbar": { float num127 = 75f * (float)itemCount; return $"Damage: {num127}%"; } case "SprintBonus": { float num126 = 25f * (float)itemCount; return $"Sprint Speed: {num126}%"; } case "NearbyDamageBonus": { float num125 = 20f * (float)itemCount; return $"Damage: {num125}%"; } case "IgniteOnKill": { int num123 = 12 + 4 * (itemCount - 1); float num124 = 150f + 75f * (float)(itemCount - 1); return $"Radius: {num123}m, Damage: {num124}%"; } case "CritGlasses": { float num122 = 10f * (float)itemCount; return $"Crit: {num122}%"; } case "Medkit": { float num120 = 20f; float num121 = 5f * (float)itemCount; return $"Heal: {num120} + {num121}% of max HP"; } case "Tooth": { float num119 = 8f + 2f * (float)itemCount; return $"HP per orb: {num119}%"; } case "Hoof": { float num118 = 14f * (float)itemCount; return $"Speed: {num118}%"; } case "PersonalShield": { float num117 = 8f * (float)itemCount; return $"Shield: {num117}% of max health"; } case "ArmorPlate": { int num116 = 5 * itemCount; return $"Damage Reduction: {num116}"; } case "StickyBomb": { float num115 = 5f * (float)itemCount; return $"Chance: {num115}%"; } case "StunChanceOnHit": return "Stun Chance: " + GetStunGrenadeChance(itemCount); case "BarrierOnKill": { int num114 = 15 * itemCount; return $"Barrier HP: {num114}"; } case "Bear": return "Chance: " + GetBlockChance(itemCount); case "BleedOnHit": { float num113 = 10f * (float)itemCount; return $"Chance: {num113}%"; } case "WardOnLevel": { float num112 = 16f + 8f * (float)(itemCount - 1); return $"Radius: {num112}m"; } case "Missile": { int num111 = 300 + 300 * (itemCount - 1); return $"Damage: {num111}%"; } case "Bandolier": return "Chance: " + GetBandolierChance(itemCount); case "WarCryOnMultiKill": { int num110 = 6 + 4 * (itemCount - 1); return $"Duration: {num110}s"; } case "SlowOnHit": { int num109 = 2 + 2 * (itemCount - 1); return $"Duration: {num109}s"; } case "DeathMark": { int num108 = 7 + 7 * (itemCount - 1); return $"Duration: {num108}s"; } case "EquipmentMagazine": { string fuelCellCooldownReduction = GetFuelCellCooldownReduction(itemCount); return $"Additional Charges: {itemCount}, Cooldown Reduction: {fuelCellCooldownReduction}"; } case "BonusGoldPackOnKill": { float num107 = 4 * itemCount; return $"Chance: {num107}%"; } case "HealOnCrit": { int num106 = 8 + 4 * (itemCount - 1); return $"HP per hit: {num106}"; } case "Feather": return $"Jump Count: {itemCount}"; case "Infusion": { int num105 = 100 * itemCount; return $"Health Increase: {num105}"; } case "FireRing": { int num104 = 300 + 300 * (itemCount - 1); return $"Damage: {num104}%"; } case "Seed": return $"HP per hit: {itemCount}"; case "TPHealingNova": return $"Novas: {itemCount}"; case "ExecuteLowHealthElite": { string executeThreshold = GetExecuteThreshold(itemCount); return "HP: " + executeThreshold; } case "Phasing": { string stealthKitRechargeTime = GetStealthKitRechargeTime(itemCount); return "Cooldown: " + stealthKitRechargeTime + "."; } case "AttackSpeedOnCrit": { int num103 = 24 * itemCount; return $"Max Attk Speed: {num103}%"; } case "Thorns": { int num101 = 5 + 2 * (itemCount - 1); int num102 = 25 + 10 * (itemCount - 1); return $"Targets: {num101}, Radius: {num102}m"; } case "SprintOutOfCombat": { float num100 = 30 + 30 * (itemCount - 1); return $"Movement Speed: {num100}%"; } case "SprintArmor": { int num99 = 30 + 30 * (itemCount - 1); return $"Armor: {num99}"; } case "IceRing": { int num97 = 250 + 250 * (itemCount - 1); int num98 = 3 + 3 * (itemCount - 1); return $"Damage: {num97}%, Duration: {num98}s"; } case "Squid": { int num96 = 100 + 100 * (itemCount - 1); return $"Attack Speed: {num96}%"; } case "EnergizedOnEquipmentUse": { int num95 = 8 + 4 * (itemCount - 1); return $"Duration: {num95}s"; } case "JumpBoost": { int num94 = 10 + 10 * (itemCount - 1); return $"Distance: {num94}m"; } case "ExplodeOnDeath": { float num92 = 12f + 2.4f * (float)(itemCount - 1); int num93 = 350 + 280 * (itemCount - 1); return $"Radius: {num92:F1}m, Damage: {num93}%"; } case "Clover": return $"Rolls: {itemCount}"; case "BarrierOnOverHeal": { float num91 = 50 + 50 * (itemCount - 1); return $"Barrier: {num91}%"; } case "AlienHead": { float num90 = 25 * itemCount; return $"Reduction: {num90}%"; } case "KillEliteFrenzy": { int num89 = 4 + 4 * (itemCount - 1); return $"Duration: {num89}s"; } case "Behemoth": { float num88 = 4f + 2.5f * (float)(itemCount - 1); return $"Radius: {num88}m"; } case "Dagger": { int num87 = 150 + 150 * (itemCount - 1); return $"Damage: {num87}%"; } case "CaptainDefenseMatrix": return $"Projectiles: {itemCount}"; case "Icicle": { int num86 = 18 + 12 * (itemCount - 1); return $"Max Radius: {num86}m"; } case "FallBoots": { float num85 = 10f / (float)itemCount; return $"Cooldown: {num85:F1}s"; } case "GhostOnKill": { int num84 = 30 + 30 * (itemCount - 1); return $"Duration: {num84}s"; } case "UtilitySkillMagazine": { int num83 = 2 + 2 * (itemCount - 1); return $"Charges: {num83}"; } case "Plant": { float num82 = 10f + 5f * (float)(itemCount - 1); return $"Radius: {num82}m"; } case "NovaOnHeal": { int num81 = 100 + 100 * (itemCount - 1); return $"Stores {num81}% of healing as Soul Energy"; } case "IncreaseHealing": { int num80 = 100 + 100 * (itemCount - 1); return $"Healing: +{num80}%"; } case "LaserTurbine": { int num77 = 300 + 300 * (itemCount - 1); int num78 = 1000 + 1000 * (itemCount - 1); int num79 = 300 + 300 * (itemCount - 1); return $"Launch Damage: {num77}% base, Explode Damage: {num78}% base, Return Damage: {num79}% base"; } case "BounceNearby": { float num75 = 100f * (1f - 1f / (1f + 0.2f * (float)itemCount)); int num76 = 10 + 5 * (itemCount - 1); return $"Chance: {num75:F1}%, Targets: {num76}"; } case "ArmorReductionOnHit": { int num74 = 8 + 8 * (itemCount - 1); return $"Duration: {num74}s"; } case "Talisman": { int num73 = 4 + 2 * (itemCount - 1); return $"Cooldown: {num73}s"; } case "ShockNearby": { int num72 = 3 + 2 * (itemCount - 1); return $"Targets: {num72}"; } case "HeadHunter": { int num71 = 8 + 5 * (itemCount - 1); return $"Duration: {num71}s"; } case "OutOfCombatArmor": { int num70 = 100 + 100 * (itemCount - 1); return $"Armor: {num70}"; } case "GoldOnHurt": { int num69 = 3 + 3 * (itemCount - 1); return $"Gold: {num69}"; } case "FragileDamageBonus": { float num68 = 20 + 20 * (itemCount - 1); return $"Damage: {num68}%"; } case "AttackSpeedAndMoveSpeed": { float num66 = 7.5f + 7.5f * (float)(itemCount - 1); float num67 = 7 + 7 * (itemCount - 1); return $"Attack Speed: {num66:F1}% Movement speed: {num67}%."; } case "StrengthenBurn": { int num65 = 300 + 300 * (itemCount - 1); return $"Damage: +{num65}%"; } case "PrimarySkillShuriken": { int num63 = 400 + 100 * (itemCount - 1); int num64 = 3 + (itemCount - 1); return $"Damage: {num63}% Max: {num64}."; } case "MoveSpeedOnKill": { float num62 = 1f + 0.5f * (float)(itemCount - 1); return $"Duration {num62:F1}s"; } case "LightningStrikeOnHit": { int num61 = 500 + 500 * (itemCount - 1); return $"Damage: {num61}%"; } case "MinorConstructOnKill": { int num60 = 4 + 4 * (itemCount - 1); return $"Max: {num60}."; } case "RoboBallBuddy": { int num59 = 100 + 100 * (itemCount - 1); return $"Damage: {num59}%"; } case "NovaOnLowHealth": { float num58 = 30f / (float)(itemCount + 1); return $"Cooldown {num58:F1}"; } case "TitanGoldDuringTP": { int num56 = 100 + 50 * (itemCount - 1); int num57 = 100 + 100 * (itemCount - 1); return $"Damage: {num56}% Health: {num57}%"; } case "ShinyPearl": { int num55 = 10 + 10 * (itemCount - 1); return $"Increase: {num55}%."; } case "SprintWisp": { int num54 = 300 + 300 * (itemCount - 1); return $"Damage: {num54}%"; } case "SiphonOnLowHealth": { int num53 = 1 + (itemCount - 1); return $"Max Tethered: {num53}"; } case "FireballsOnHit": { int num52 = 300 + 300 * (itemCount - 1); return $"Damage: {num52}%"; } case "Pearl": { int num51 = 10 + 10 * (itemCount - 1); return $"Increase: {num51}%"; } case "ParentEgg": { int num50 = 15 + 15 * (itemCount - 1); return $"Heal {num50} on hurt."; } case "BeetleGland": { int num49 = 1 + (itemCount - 1); return $"Max: {num49}"; } case "BleedOnHitAndExplode": { int num47 = 400 + 400 * (itemCount - 1); int num48 = 15 + 15 * (itemCount - 1); return $"Explosion damage: {num47}% and {num48}% of their max health."; } case "Knurl": { int num45 = 40 + 40 * (itemCount - 1); float num46 = 1.6f + 1.6f * (float)(itemCount - 1); return $"Health increase: {num45}, Regen increase: {num46} hp/s."; } case "GoldOnHit": { int num44 = 2 + 2 * (itemCount - 1); return $"30% chance on hit to gain {num44} gold."; } case "RepeatHeal": { float num43 = 0.1f / (float)itemCount; return $"Heals 100% more over time, max 10% of your health per second, reduces to {num43 * 100f:F1}% per stack."; } case "RandomDamageZone": { int num41 = 3 - (int)(1.5 * (double)(itemCount - 1)); int num42 = 3 + (itemCount - 1); return $"Every {num41} seconds, gain an orbiting bomb (max {num42}), detonates on impact for 360% damage."; } case "LunarSpecialReplacement": { int num39 = 10 + 10 * (itemCount - 1); int num40 = 8 + 8 * (itemCount - 1); return $"Dealing damage adds a stack of Ruin for {num39}s. Recharges every {num40}s."; } case "RandomlyLunar": { int num38 = 5 + 5 * (itemCount - 1); return $"Items have a {num38}% chance to become Lunar items."; } case "FocusConvergence": { float num36 = 90f / (1f + 0.3f * (float)itemCount); float num37 = 1f / (2f * (float)itemCount); return $"Teleporters charge {num36:F1}% faster, zone size reduced to {num37 * 100f:F1}% of original."; } case "AutoCastEquipment": { float num35 = 0.5f * (float)Math.Pow(0.85, itemCount - 1); return $"Reduces Equipment cooldown by {num35 * 100f:F1}%."; } case "LunarSecondaryReplacement": { int num34 = 5 + 5 * (itemCount - 1); return $"Recharge: {num34}s."; } case "HalfAttackSpeedHalfCooldowns": { float num32 = (float)Math.Pow(0.5, itemCount); float num33 = 1f / (float)(itemCount + 1); return $"Decreases skill cooldowns by {num32 * 100f:F1}%, attack speed reduced to {num33 * 100f:F1}%."; } case "LunarBadLuck": { int num30 = 2 + (itemCount - 1); int num31 = 1 + (itemCount - 1); return $"Reduces skill cooldowns by {num30}s, increases unfavorable outcomes by {num31}."; } case "LunarDagger": { float num28 = (float)Math.Pow(2.0, itemCount); float num29 = (float)Math.Pow(0.5, itemCount); return $"Increases damage by {num28 * 100f:F1}%, reduces health by {num29 * 100f:F1}%."; } case "HalfSpeedDoubleHealth": { int num26 = 100 + 100 * (itemCount - 1); float num27 = (float)Math.Pow(0.5, itemCount); return $"Increases max health by {num26}%, reduces movement speed by {num27 * 100f:F1}%."; } case "LunarUtilityReplacement": { float num24 = 18.2f + 18.2f * (float)(itemCount - 1); int num25 = 3 + 3 * (itemCount - 1); return $"Heal {num24}% of max health over {num25}s."; } case "ShieldOnly": { float num23 = 50 + 25 * (itemCount - 1); return $"Increases maximum health by {num23}%."; } case "LunarPrimaryReplacement": { int num21 = 12 + 12 * (itemCount - 1); float num22 = 2 + 2 * (itemCount - 1); return $"Fire tracking shards, holds up to {num21} charges, reloads every {num22}s."; } case "CloverVoid": { int num20 = 3 + 3 * (itemCount - 1); return $"Upgrades: {num20}"; } case "CritGlassesVoid": { float num19 = 0.5f + 0.5f * (float)(itemCount - 1); return $"Chance: {num19:F1}%"; } case "EquipmentMagazineVoid": return $"Special Charges: {itemCount}"; case "BleedOnHitVoid": { int num18 = 10 + 10 * (itemCount - 1); return $"Chance: {num18:F1}%"; } case "VoidMegaCrabItem": { float num16 = 60f / (1f + 0.5f * (float)(itemCount - 1)); int num17 = 1 + (itemCount - 1); return $"Spawnrate: {num16:F1}s, Max: {num17}"; } case "MissileVoid": { float num14 = 10 + 10 * (itemCount - 1); int num15 = 40 + 40 * (itemCount - 1); return $"Gain a shield for {num14}% of max your health. Damage: {num15}%"; } case "ChainLightningVoid": { int num13 = 3 + 3 * (itemCount - 1); return $"Chains Lightning: {num13} times."; } case "BearVoid": { float num12 = 15f * (float)Math.Pow(0.9, itemCount); return $"Cooldown: {num12:F1} seconds."; } case "ElementalRingVoid": { float num10 = 20f; int num11 = 100 + 100 * (itemCount - 1); return $"Damage: {num11}% Cooldown: {num10}s"; } case "SlowOnHitVoid": { int num8 = 5 + 5 * (itemCount - 1); int num9 = 1 + (itemCount - 1); return $"Duration: {num9}s"; } case "ExplodeOnDeathVoid": { float num6 = 12f + 2.4f * (float)(itemCount - 1); int num7 = 260 + 156 * (itemCount - 1); return $"Radius: {num6}m, Damage: {num7}%"; } case "MushroomVoid": { int num5 = 2 + 2 * (itemCount - 1); return $"Heals for {num5}%"; } case "RandomEquipmentTrigger": return $"Triggers random equipment {itemCount} time(s)."; case "PermanentDebuffOnHit": { int num4 = 2 * itemCount; return $"Reduces enemy armor by {num4}."; } case "MoreMissile": { int num3 = 50 * itemCount; return $"Damage: {num3}%."; } case "ImmuneToDebuff": return $"Prevents {itemCount} debuff(s)."; case "DroneWeapons": { int num2 = 50 * itemCount; return $"Attack Speed: {num2}%"; } case "CritDamage": { int num = 100 * itemCount; return $"Critical strikes deal an additional {num}% damage."; } default: return ""; } } private void ItemIcon_SetItemIndex(orig_SetItemIndex orig, ItemIcon self, ItemIndex newItemIndex, int newItemCount) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, newItemIndex, newItemCount); if (!Object.op_Implicit((Object)(object)self.tooltipProvider)) { return; } ItemDef itemDef = ItemCatalog.GetItemDef(newItemIndex); if (!((Object)(object)itemDef != (Object)null)) { return; } ItemInventoryDisplay componentInParent = ((Component)self).GetComponentInParent<ItemInventoryDisplay>(); if ((Object)(object)componentInParent != (Object)null && (Object)(object)componentInParent.inventory != (Object)null) { int itemCount = componentInParent.inventory.GetItemCount(itemDef.itemIndex); string customDescription = GetCustomDescription(itemDef, itemCount); if (!string.IsNullOrEmpty(customDescription)) { string @string = Language.GetString(itemDef.descriptionToken); string relevantStats = GetRelevantStats(componentInParent.inventory, ((Object)itemDef).name); self.tooltipProvider.overrideBodyText = @string + "\n" + customDescription + relevantStats; } } } private string GetRelevantStats(Inventory inventory, string itemName) { string text = ""; if (itemName == "CritGlasses" || itemName == "HealOnCrit" || itemName == "AttackSpeedOnCrit") { text = text + "\n" + CalculateTotalCritChance(inventory); } switch (itemName) { default: if (!(itemName == "HalfAttackSpeedHalfCooldowns")) { break; } goto case "Syringe"; case "Syringe": case "AttackSpeedOnCrit": case "AttackSpeedAndMoveSpeed": text = text + "\n" + CalculateTotalAttackSpeed(inventory); break; } switch (itemName) { default: if (!(itemName == "LunarUtilityReplacement")) { break; } goto case "Hoof"; case "Hoof": case "SprintBonus": case "SprintOutOfCombat": case "AttackSpeedAndMoveSpeed": case "HalfSpeedDoubleHealth": text = text + "\n" + CalculateTotalMovementSpeed(inventory); break; } return text; } private string CalculateTotalMovementSpeed(Inventory inventory) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) int itemCount = inventory.GetItemCount(ItemCatalog.FindItemIndex("Hoof")); int itemCount2 = inventory.GetItemCount(ItemCatalog.FindItemIndex("SprintBonus")); int itemCount3 = inventory.GetItemCount(ItemCatalog.FindItemIndex("SprintOutOfCombat")); int itemCount4 = inventory.GetItemCount(ItemCatalog.FindItemIndex("AttackSpeedAndMoveSpeed")); int itemCount5 = inventory.GetItemCount(ItemCatalog.FindItemIndex("HalfSpeedDoubleHealth")); int itemCount6 = inventory.GetItemCount(ItemCatalog.FindItemIndex("LunarUtilityReplacement")); double num = 14 * itemCount + 25 * itemCount2 + 30 * itemCount3 + 7 * itemCount4; double num2 = 50 * itemCount5; num -= num2; return $"Total Movement Speed: {num}%"; } private string CalculateTotalCritChance(Inventory inventory) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) int itemCount = inventory.GetItemCount(ItemCatalog.FindItemIndex("CritGlasses")); int itemCount2 = inventory.GetItemCount(ItemCatalog.FindItemIndex("HealOnCrit")); int itemCount3 = inventory.GetItemCount(ItemCatalog.FindItemIndex("AttackSpeedOnCrit")); int itemCount4 = inventory.GetItemCount(ItemCatalog.FindItemIndex("BleedOnHitAndExplode")); double num = 10 * itemCount + 5 * itemCount2 + 5 * itemCount3 + 5 * itemCount4; return $"Total Crit Chance: {num}%"; } private string CalculateTotalAttackSpeed(Inventory inventory) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) int itemCount = inventory.GetItemCount(ItemCatalog.FindItemIndex("Syringe")); int itemCount2 = inventory.GetItemCount(ItemCatalog.FindItemIndex("AttackSpeedOnCrit")); int itemCount3 = inventory.GetItemCount(ItemCatalog.FindItemIndex("AttackSpeedAndMoveSpeed")); int itemCount4 = inventory.GetItemCount(ItemCatalog.FindItemIndex("HalfAttackSpeedHalfCooldowns")); double num = (double)(15 * itemCount + 12 * itemCount2) + 7.5 * (double)itemCount3; double num2 = 50 * itemCount4; num *= Math.Pow(0.5, itemCount4); return $"Total Attack Speed: {num}%"; } } }