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 NewtDrop v2.0.0
NewtDrop.dll
Decompiled 2 years agousing System; using System.Diagnostics; using System.IO; 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 On.RoR2; using R2API; using R2API.Utils; using RoR2; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("NewtDrop")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("NewtDrop")] [assembly: AssemblyCopyright("Copyright © 2021")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("254c74c4-954d-47e9-83cb-712e1de44379")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace NewtDrop; internal class CeremonialFireworks { internal static AssetBundle Bundle; public static ConfigFile Config; private static ItemDef CeremonialFireworksDef; private static readonly int BaseFireworkNum = 8; private static readonly int ScalingFireworkNum = 4; private static readonly int BasePercentage = 50; public static ConfigEntry<bool> EnableCeremonialFireworksConfig { get; set; } internal static void Init() { Config = NewtDrop.NewtConfig; Bundle = NewtDrop.bundle; CreateConfig(); if (EnableCeremonialFireworksConfig.Value) { CreateItem(); Hooks(); } } private static void CreateConfig() { EnableCeremonialFireworksConfig = Config.Bind<bool>("Items", "Ceremonial Fireworks", true, "Enable this item?"); } private static void CreateItem() { //IL_005d: 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_00b5: Expected O, but got Unknown //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Expected O, but got Unknown CeremonialFireworksDef = ScriptableObject.CreateInstance<ItemDef>(); ((Object)CeremonialFireworksDef).name = "CF"; CeremonialFireworksDef.nameToken = "CF"; CeremonialFireworksDef.descriptionToken = "CF_Desc"; CeremonialFireworksDef.loreToken = "CF_Lore"; CeremonialFireworksDef.pickupToken = "CF_Pickup"; CeremonialFireworksDef.deprecatedTier = (ItemTier)2; CeremonialFireworksDef.pickupIconSprite = Bundle.LoadAsset<Sprite>("Assets/CeremonialFireworks.png"); CeremonialFireworksDef.pickupModelPrefab = Resources.Load<GameObject>("Prefabs/PickupModels/PickupFirework"); CeremonialFireworksDef.canRemove = true; CeremonialFireworksDef.hidden = false; ItemAPI.Add(new CustomItem(CeremonialFireworksDef, new ItemDisplayRuleDict((ItemDisplayRule[])null))); LanguageAPI.Add("CF", "Ceremonial Fireworks"); LanguageAPI.Add("CF_Pickup", "Chance to launch fireworks on kill"); LanguageAPI.Add("CF_Desc", $"<style=cIsUtility>{BasePercentage}%</style> chance to launch {BaseFireworkNum} <style=cStack>(+{ScalingFireworkNum} per stack)</style> fireworks on <style=cIsDamage>enemy kill</style> that deal <style=cIsUtility>300%</style> base damage"); LanguageAPI.Add("CF_Lore", "When daggers aren't explosive enough"); } private static void Hooks() { GlobalEventManager.onCharacterDeathGlobal += delegate(DamageReport report) { SpawnFireworks(report); }; } private static void SpawnFireworks(DamageReport report) { //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) if (!Utils.DamageReportNullCheck(report)) { int itemCount = report.attackerBody.inventory.GetItemCount(CeremonialFireworksDef); if (itemCount > 0 && Util.CheckRoll((float)BasePercentage, report.attackerBody.master)) { int remaining = BaseFireworkNum + (itemCount - 1) * ScalingFireworkNum; FireworkLauncher component = Object.Instantiate<GameObject>(Resources.Load<GameObject>("Prefabs/FireworkLauncher"), report.victimBody.corePosition, Quaternion.identity).GetComponent<FireworkLauncher>(); component.owner = ((Component)report.attackerBody).gameObject; component.crit = Util.CheckRoll(report.attackerBody.crit, report.attackerBody.master); component.remaining = remaining; } } } } internal class Prowler { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static Action<DamageReport> <>9__14_0; public static hook_OnBodyDamaged <>9__14_1; public static hook_RecalculateStats <>9__14_2; internal void <Hooks>b__14_0(DamageReport report) { ProwlerCleanse(report); } internal void <Hooks>b__14_1(orig_OnBodyDamaged orig, CharacterMaster self, DamageReport report) { RemoveNextCrit(report); orig.Invoke(self, report); } internal void <Hooks>b__14_2(orig_RecalculateStats orig, CharacterBody self) { AddNextCrit(self); orig.Invoke(self); } } internal static AssetBundle Bundle; public static ConfigFile Config; private static ItemDef ProwlerDef; private static BuffDef NextCrit; private static readonly int BasePercentage = 40; private static readonly int ScalingPercentage = 25; public static ConfigEntry<bool> ProwlerConfig { get; set; } internal static void Init() { Config = NewtDrop.NewtConfig; Bundle = NewtDrop.bundle; CreateConfig(); if (ProwlerConfig.Value) { CreateItem(); CreateBuffs(); Hooks(); } } private static void CreateConfig() { ProwlerConfig = Config.Bind<bool>("Items", "Prowler", true, "Enable this item?"); } private static void CreateItem() { //IL_005d: 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_00b5: Expected O, but got Unknown //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Expected O, but got Unknown ProwlerDef = ScriptableObject.CreateInstance<ItemDef>(); ((Object)ProwlerDef).name = "Prowler"; ProwlerDef.nameToken = "Prowler_Name"; ProwlerDef.descriptionToken = "Prowler_Desc"; ProwlerDef.loreToken = "Prowler_Lore"; ProwlerDef.pickupToken = "Prowler_Pickup"; ProwlerDef.deprecatedTier = (ItemTier)2; ProwlerDef.pickupIconSprite = Bundle.LoadAsset<Sprite>("Assets/Prowler.png"); ProwlerDef.pickupModelPrefab = Resources.Load<GameObject>("Prefabs/PickupModels/PickupFireballsOnHit"); ProwlerDef.canRemove = true; ProwlerDef.hidden = false; ItemAPI.Add(new CustomItem(ProwlerDef, new ItemDisplayRuleDict((ItemDisplayRule[])null))); LanguageAPI.Add("Prowler_Name", "Prowler"); LanguageAPI.Add("Prowler_Pickup", "On elite kill, crit next target and gain a chance to cleanse all debuffs"); LanguageAPI.Add("Prowler_Desc", $"On elite kill, gain <style=cIsUtility>+100%</style> crit chance for next attack, and get <style=cIsUtility>{BasePercentage}%</style> <style=cStack>(+{ScalingPercentage}% per stack)</style> chance to cleanse all debuffs"); LanguageAPI.Add("Prowler_Lore", "Chain those band procs"); } private static void CreateBuffs() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) NextCrit = ScriptableObject.CreateInstance<BuffDef>(); ((Object)NextCrit).name = "NextCrit"; NextCrit.buffColor = Color.red; NextCrit.canStack = false; NextCrit.isDebuff = false; NextCrit.iconSprite = Resources.Load<Sprite>("Textures/ItemIcons/texGlassesIcon"); ContentAddition.AddBuffDef(NextCrit); } private static void Hooks() { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Expected O, but got Unknown //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_006a: Expected O, but got Unknown GlobalEventManager.onCharacterDeathGlobal += delegate(DamageReport report) { ProwlerCleanse(report); }; object obj = <>c.<>9__14_1; if (obj == null) { hook_OnBodyDamaged val = delegate(orig_OnBodyDamaged orig, CharacterMaster self, DamageReport report) { RemoveNextCrit(report); orig.Invoke(self, report); }; <>c.<>9__14_1 = val; obj = (object)val; } CharacterMaster.OnBodyDamaged += (hook_OnBodyDamaged)obj; object obj2 = <>c.<>9__14_2; if (obj2 == null) { hook_RecalculateStats val2 = delegate(orig_RecalculateStats orig, CharacterBody self) { AddNextCrit(self); orig.Invoke(self); }; <>c.<>9__14_2 = val2; obj2 = (object)val2; } CharacterBody.RecalculateStats += (hook_RecalculateStats)obj2; } private static void ProwlerCleanse(DamageReport report) { if (Utils.DamageReportNullCheck(report)) { return; } int itemCount = report.attackerBody.inventory.GetItemCount(ProwlerDef); if (itemCount > 0 && report.victimBody.isElite) { if (Util.CheckRoll((float)(BasePercentage + (itemCount - 1) * ScalingPercentage), report.attackerBody.master)) { Util.CleanseBody(report.attackerBody, true, false, true, true, true, false); report.attackerBody.AddBuff(Buffs.ElementalRingsReady); } report.attackerBody.AddBuff(NextCrit); } } private static void RemoveNextCrit(DamageReport report) { if (!Utils.DamageReportNullCheck(report) && report.attackerBody.HasBuff(NextCrit)) { report.attackerBody.RemoveBuff(NextCrit); } } private static void AddNextCrit(CharacterBody body) { if (body.HasBuff(NextCrit)) { body.crit += 100f; } } } internal class ShieldBow { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_OnBodyDamaged <>9__20_0; public static hook_RecalculateStats <>9__20_1; internal void <Hooks>b__20_0(orig_OnBodyDamaged orig, CharacterMaster self, DamageReport report) { LifeLine(report); LifeStealBuff(report); orig.Invoke(self, report); } internal void <Hooks>b__20_1(orig_RecalculateStats orig, CharacterBody self) { ArmorBuff(self); orig.Invoke(self); } } internal static AssetBundle Bundle; public static ConfigFile Config; private static ItemDef ShieldBowDef; private static BuffDef ShieldBuff; private static BuffDef LifeVamp; private static readonly int BaseLifeStealDurationSecs = 5; private static readonly int ScalingLifeStealDurationSecs = 5; private static readonly int BaseArmor = 100; private static readonly int CooldownSecs = 20; private static readonly float TriggerFraction = 0.4f; private static readonly float BarrierFraction = 0.4f; private static readonly float LifeStealDamageFraction = 0.2f; public static ConfigEntry<bool> ShieldBowConfig { get; set; } internal static void Init() { Config = NewtDrop.NewtConfig; Bundle = NewtDrop.bundle; CreateConfig(); if (ShieldBowConfig.Value) { CreateItem(); CreateBuffs(); Hooks(); } } private static void CreateConfig() { ShieldBowConfig = Config.Bind<bool>("Items", "ShieldBow", true, "Enable this item?"); } private static void CreateItem() { //IL_005d: 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_00b5: Expected O, but got Unknown //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Expected O, but got Unknown ShieldBowDef = ScriptableObject.CreateInstance<ItemDef>(); ((Object)ShieldBowDef).name = "ShieldBow"; ShieldBowDef.nameToken = "SB"; ShieldBowDef.descriptionToken = "SB_Desc"; ShieldBowDef.loreToken = "SB_Lore"; ShieldBowDef.pickupToken = "SB_Pickup"; ShieldBowDef.deprecatedTier = (ItemTier)2; ShieldBowDef.pickupIconSprite = Bundle.LoadAsset<Sprite>("Assets/ShieldBow.png"); ShieldBowDef.pickupModelPrefab = Resources.Load<GameObject>("Prefabs/PickupModels/PickupBuckler"); ShieldBowDef.canRemove = true; ShieldBowDef.hidden = false; ItemAPI.Add(new CustomItem(ShieldBowDef, new ItemDisplayRuleDict((ItemDisplayRule[])null))); LanguageAPI.Add("SB", "ShieldBow"); LanguageAPI.Add("SB_Pickup", "Gain barrier and lifesteal when health is low"); LanguageAPI.Add("SB_Desc", $"Whenever you drop below <style=cIsUtility>{TriggerFraction * 100f}%</style> health, gain a shield for <style=cIsUtility>{BarrierFraction * 100f}%</style> of your maximum health and gain <style=cIsUtility>{LifeStealDamageFraction * 100f}%</style> lifesteal for <style=cIsUtility>{BaseLifeStealDurationSecs}s</style> <style=cStack>(+{ScalingLifeStealDurationSecs}s per stack)</style>. ({CooldownSecs}s cooldown) While on cooldown, gain <style=cIsUtility>{BaseArmor}</style> armor"); LanguageAPI.Add("SB_Lore", "Yes, this is from League. Note: does not trigger from fall damage"); } private static void CreateBuffs() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) ShieldBuff = ScriptableObject.CreateInstance<BuffDef>(); ((Object)ShieldBuff).name = "ShieldBuff"; ShieldBuff.buffColor = Color.cyan; ShieldBuff.canStack = false; ShieldBuff.isDebuff = true; ShieldBuff.iconSprite = Resources.Load<Sprite>("Textures/ItemIcons/texBucklerIcon"); ContentAddition.AddBuffDef(ShieldBuff); LifeVamp = ScriptableObject.CreateInstance<BuffDef>(); ((Object)LifeVamp).name = "LifeVamp"; LifeVamp.buffColor = Color.red; LifeVamp.canStack = false; LifeVamp.isDebuff = false; LifeVamp.iconSprite = Resources.Load<Sprite>("textures/itemicons/texScytheIcon"); ContentAddition.AddBuffDef(LifeVamp); } private static void Hooks() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Expected O, but got Unknown object obj = <>c.<>9__20_0; if (obj == null) { hook_OnBodyDamaged val = delegate(orig_OnBodyDamaged orig, CharacterMaster self, DamageReport report) { LifeLine(report); LifeStealBuff(report); orig.Invoke(self, report); }; <>c.<>9__20_0 = val; obj = (object)val; } CharacterMaster.OnBodyDamaged += (hook_OnBodyDamaged)obj; object obj2 = <>c.<>9__20_1; if (obj2 == null) { hook_RecalculateStats val2 = delegate(orig_RecalculateStats orig, CharacterBody self) { ArmorBuff(self); orig.Invoke(self); }; <>c.<>9__20_1 = val2; obj2 = (object)val2; } CharacterBody.RecalculateStats += (hook_RecalculateStats)obj2; } private static void LifeLine(DamageReport report) { if (!Utils.DamageReportNullCheck(report)) { int itemCount = report.victimBody.inventory.GetItemCount(ShieldBowDef); if (itemCount > 0 && report.victimBody.healthComponent.health / report.victimBody.maxHealth <= TriggerFraction && !report.victimBody.HasBuff(ShieldBuff)) { report.victimBody.healthComponent.AddBarrier(BarrierFraction * report.victimBody.maxHealth); report.victimBody.AddTimedBuff(LifeVamp, (float)(BaseLifeStealDurationSecs + (itemCount - 1) * ScalingLifeStealDurationSecs)); report.victimBody.AddTimedBuff(ShieldBuff, (float)CooldownSecs); report.victimBody.RecalculateStats(); } } } private static void LifeStealBuff(DamageReport report) { //IL_0040: Unknown result type (might be due to invalid IL or missing references) if (!Utils.DamageReportNullCheck(report) && report.attackerBody.HasBuff(LifeVamp)) { report.attackerBody.healthComponent.Heal(report.damageDealt * LifeStealDamageFraction, report.damageInfo.procChainMask, true); } } private static void ArmorBuff(CharacterBody person) { if (!((Object)(object)person == (Object)null) && person.HasBuff(ShieldBuff)) { person.armor += (float)BaseArmor; } } } internal class PureTonic { internal static AssetBundle Bundle; public static ConfigFile Config; private static ItemDef PureTonicDef; private static readonly int BasePercentage = 60; private static readonly int BaseDurationSec = 3; private static readonly int ScalingPercentage = 40; private static readonly int ScalingDurationSec = 3; public static ConfigEntry<bool> PureTonicConfig { get; set; } internal static void Init() { Config = NewtDrop.NewtConfig; Bundle = NewtDrop.bundle; CreateConfig(); if (PureTonicConfig.Value) { CreateItem(); Hooks(); } } private static void CreateConfig() { PureTonicConfig = Config.Bind<bool>("Items", "Purified Tonic", true, "Enable this item?"); } private static void CreateItem() { //IL_005d: 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_00b5: Expected O, but got Unknown //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Expected O, but got Unknown PureTonicDef = ScriptableObject.CreateInstance<ItemDef>(); ((Object)PureTonicDef).name = "PureTonic"; PureTonicDef.nameToken = "PureTonic"; PureTonicDef.descriptionToken = "PureTonic_Desc"; PureTonicDef.loreToken = "PureTonic_Lore"; PureTonicDef.pickupToken = "PureTonic_Pickup"; PureTonicDef.deprecatedTier = (ItemTier)2; PureTonicDef.pickupIconSprite = Bundle.LoadAsset<Sprite>("Assets/PureTonic.png"); PureTonicDef.pickupModelPrefab = Resources.Load<GameObject>("Prefabs/PickupModels/PickupTonic"); PureTonicDef.canRemove = true; PureTonicDef.hidden = false; ItemAPI.Add(new CustomItem(PureTonicDef, new ItemDisplayRuleDict((ItemDisplayRule[])null))); LanguageAPI.Add("PureTonic", "Purified Tonic"); LanguageAPI.Add("PureTonic_Pickup", "Chance to use tonic on kill without getting debuffed"); LanguageAPI.Add("PureTonic_Desc", $"Whenever you <style=cIsDamage>kill an enemy</style>, you have a <style=cIsUtility>{BasePercentage}%</style> <style=cStack>(+{ScalingPercentage}% per stack)</style> chance to use tonic without chance of debuff for <style=cIsUtility>{BaseDurationSec}s</style> <style=cStack>(+{ScalingDurationSec}s per stack)</style>."); LanguageAPI.Add("PureTonic_Lore", "Harder, better, faster, stronger"); } private static void Hooks() { GlobalEventManager.onCharacterDeathGlobal += delegate(DamageReport report) { GiveTonic(report); }; } private static void GiveTonic(DamageReport report) { if (!Utils.DamageReportNullCheck(report)) { int itemCount = report.attackerBody.inventory.GetItemCount(PureTonicDef); if (itemCount > 0 && Util.CheckRoll((float)(BasePercentage + (itemCount - 1) * ScalingPercentage), report.attackerBody.master)) { report.attackerBody.AddTimedBuff(Buffs.TonicBuff, (float)(BaseDurationSec + (itemCount - 1) * ScalingDurationSec)); } } } } internal class Utils { public static bool DamageReportNullCheck(DamageReport report) { return report == null || (Object)(object)report.attacker == (Object)null || !Object.op_Implicit((Object)(object)report.attacker) || !Object.op_Implicit((Object)(object)report.attackerBody) || !Object.op_Implicit((Object)(object)report.attackerBody.inventory) || (Object)(object)report.victim == (Object)null || !Object.op_Implicit((Object)(object)report.victimBody) || !Object.op_Implicit((Object)(object)report.victimBody.inventory); } } internal class ShopKeeperTweak { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_Start <>9__8_0; public static hook_Start <>9__8_1; public static Action<DamageReport> <>9__8_2; internal void <Hooks>b__8_0(orig_Start orig, Run self) { gotDrop = false; orig.Invoke(self); } internal void <Hooks>b__8_1(orig_Start orig, CharacterBody self) { ChangeNewtHealth(self); orig.Invoke(self); } internal void <Hooks>b__8_2(DamageReport report) { SpawnPearls(report); } } public static ConfigFile Config; private static bool gotDrop; public static ConfigEntry<float> NewtHealthMultiplier { get; set; } internal static void Init() { gotDrop = false; Config = NewtDrop.NewtConfig; CreateConfig(); Hooks(); } private static void CreateConfig() { NewtHealthMultiplier = Config.Bind<float>("Tweak", "Newt Health Multiplier", 1f, "Multiplier for the Shopkeeper's max health. Default: 1"); } private static void Hooks() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Expected O, but got Unknown object obj = <>c.<>9__8_0; if (obj == null) { hook_Start val = delegate(orig_Start orig, Run self) { gotDrop = false; orig.Invoke(self); }; <>c.<>9__8_0 = val; obj = (object)val; } Run.Start += (hook_Start)obj; object obj2 = <>c.<>9__8_1; if (obj2 == null) { hook_Start val2 = delegate(orig_Start orig, CharacterBody self) { ChangeNewtHealth(self); orig.Invoke(self); }; <>c.<>9__8_1 = val2; obj2 = (object)val2; } CharacterBody.Start += (hook_Start)obj2; GlobalEventManager.onCharacterDeathGlobal += delegate(DamageReport report) { SpawnPearls(report); }; } private static void ChangeNewtHealth(CharacterBody person) { //IL_0013: 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 (NewtHealthMultiplier.Value != 1f && person.bodyIndex == BodyCatalog.FindBodyIndex("ShopkeeperBody")) { HealthComponent healthComponent = person.healthComponent; healthComponent.health *= NewtHealthMultiplier.Value; person.baseMaxHealth *= NewtHealthMultiplier.Value; person.levelMaxHealth *= NewtHealthMultiplier.Value; person.maxHealth *= NewtHealthMultiplier.Value; person.RecalculateStats(); } } private static void SpawnPearls(DamageReport report) { //IL_0012: 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_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) CharacterBody victimBody = report.victimBody; if ((Object)(object)victimBody != (Object)null && victimBody.bodyIndex == BodyCatalog.FindBodyIndex("ShopkeeperBody")) { if (gotDrop) { PickupDropletController.CreatePickupDroplet(PickupCatalog.FindPickupIndex(Items.Pearl.itemIndex), victimBody.transform.position, Vector3.up * 20f); return; } PickupDropletController.CreatePickupDroplet(PickupCatalog.FindPickupIndex(Items.ShinyPearl.itemIndex), victimBody.transform.position, Vector3.up * 20f); gotDrop = true; } } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.BoneCap.NewtDrop", "NewtDrop", "2.0.0")] [R2APISubmoduleDependency(new string[] { "ItemAPI", "LanguageAPI" })] public class NewtDrop : BaseUnityPlugin { public static ManualLogSource Log; public GameObject multiShopPrefab; public ItemTier[] itemTiers; internal static AssetBundle bundle; public static ConfigFile NewtConfig { get; set; } public static ConfigEntry<bool> CFConfig { get; set; } public static ConfigEntry<bool> PureTonicConfig { get; set; } public static ConfigEntry<bool> ShieldBowConfig { get; set; } public static ConfigEntry<bool> ProwlerConfig { get; set; } public static ConfigEntry<float> NewtHealthMultiplier { get; set; } public void Awake() { Log = ((BaseUnityPlugin)this).Logger; NewtConfig = ((BaseUnityPlugin)this).Config; using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("NewtDrop.newt_drop_assets")) { bundle = AssetBundle.LoadFromStream(stream); bundle.LoadAllAssets(); } ShopKeeperTweak.Init(); CeremonialFireworks.Init(); PureTonic.Init(); ShieldBow.Init(); Prowler.Init(); } }