Please disclose if your mod was created primarily 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 MagicPlugin v2.1.9
MagicPlugin.dll
Decompiled a month ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.IO; using System.IO.Compression; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using AzuExtendedPlayerInventory; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using HarmonyLib; using ItemManager; using JetBrains.Annotations; using Jewelcrafting; using LocalizationManager; using MagicPlugin.Functions; using MagicPlugin.JCAdditions; using MagicPlugin.SE; using Microsoft.CodeAnalysis; using ServerSync; using TMPro; using UnityEngine; using UnityEngine.SceneManagement; using YamlDotNet.Core; using YamlDotNet.Core.Events; using YamlDotNet.Core.Tokens; using YamlDotNet.Helpers; using YamlDotNet.Serialization; using YamlDotNet.Serialization.Converters; using YamlDotNet.Serialization.EventEmitters; using YamlDotNet.Serialization.NamingConventions; using YamlDotNet.Serialization.NodeDeserializers; using YamlDotNet.Serialization.NodeTypeResolvers; using YamlDotNet.Serialization.ObjectFactories; using YamlDotNet.Serialization.ObjectGraphTraversalStrategies; using YamlDotNet.Serialization.ObjectGraphVisitors; using YamlDotNet.Serialization.Schemas; using YamlDotNet.Serialization.TypeInspectors; using YamlDotNet.Serialization.TypeResolvers; using YamlDotNet.Serialization.Utilities; using YamlDotNet.Serialization.ValueDeserializers; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("blacks7ar")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("2.1.9")] [assembly: AssemblyInformationalVersion("1.0.0+8c4d2a2d8c144148061764f86b2b3d8ed1b054ee")] [assembly: AssemblyProduct("MagicPlugin")] [assembly: AssemblyTitle("MagicPlugin")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("2.1.9.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace MagicPlugin { [BepInPlugin("blacks7ar.MagicPlugin", "MagicPlugin", "2.1.9")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { private const string modGUID = "blacks7ar.MagicPlugin"; public const string modName = "MagicPlugin"; public const string modAuthor = "blacks7ar"; public const string modVersion = "2.1.9"; public const string modLink = "https://valheim.thunderstore.io/package/blacks7ar/MagicPlugin/"; private static readonly Harmony _harmony = new Harmony("blacks7ar.MagicPlugin"); private static readonly ConfigSync _configSync = new ConfigSync("blacks7ar.MagicPlugin") { DisplayName = "MagicPlugin", CurrentVersion = "2.1.9", MinimumRequiredVersion = "2.1.9", ModRequired = true }; private static ConfigEntry<MagicPlugin.Functions.Toggle> _serverConfigLocked; public static ConfigEntry<float> _magicVelocity; public static ConfigEntry<float> _magciAccuracy; public static ConfigEntry<MagicPlugin.Functions.Toggle> _enableExpMultiplier; public static ConfigEntry<MagicPlugin.Functions.Toggle> _displayExpGained; public static ConfigEntry<float> _bmExpMultiplier; public static ConfigEntry<float> _emExpMultiplier; public static ConfigEntry<MagicPlugin.Functions.Toggle> _enableTomeSlot; public static ConfigEntry<MagicPlugin.Functions.Toggle> _enableEarringSlot; public static ConfigEntry<MagicPlugin.Functions.Toggle> _enableSlowFall; public static ConfigEntry<KeyboardShortcut> _unSummonKey; public static Plugin _Instance; public static bool _autoRun; public ConfigEntry<T> config<T>(string group, string name, T value, ConfigDescription description, bool _synchronizedConfig = true) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown ConfigDescription val = new ConfigDescription(description.Description + (_synchronizedConfig ? " [Synced with Server]" : " [Not Synced with Server]"), description.AcceptableValues, description.Tags); ConfigEntry<T> val2 = ((BaseUnityPlugin)this).Config.Bind<T>(group, name, value, val); _configSync.AddConfigEntry<T>(val2).SynchronizedConfig = _synchronizedConfig; return val2; } public void Awake() { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Expected O, but got Unknown //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Expected O, but got Unknown //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Expected O, but got Unknown //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Expected O, but got Unknown //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Expected O, but got Unknown //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Expected O, but got Unknown //IL_01cb: Unknown result type (might be due to invalid IL or missing references) //IL_01db: Unknown result type (might be due to invalid IL or missing references) //IL_01e6: Expected O, but got Unknown //IL_0202: Unknown result type (might be due to invalid IL or missing references) //IL_020d: Expected O, but got Unknown //IL_0229: Unknown result type (might be due to invalid IL or missing references) //IL_0234: Expected O, but got Unknown //IL_0262: Unknown result type (might be due to invalid IL or missing references) //IL_026d: Expected O, but got Unknown //IL_029b: Unknown result type (might be due to invalid IL or missing references) //IL_02a6: Expected O, but got Unknown _Instance = this; ((BaseUnityPlugin)this).Config.SaveOnConfigSet = false; Localizer.Load(); _serverConfigLocked = config("1- ServerSync", "Lock Configuration", MagicPlugin.Functions.Toggle.On, new ConfigDescription("If On, the configuration is locked and can be changed by server admins only.", (AcceptableValueBase)null, Array.Empty<object>())); _configSync.AddLockingConfigEntry<MagicPlugin.Functions.Toggle>(_serverConfigLocked); _magicVelocity = config("2- General", "Velocity Multiplier", 2f, new ConfigDescription("Magic projectiles velocity multiplier.\nRecommended: 2", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 5f), Array.Empty<object>())); _magciAccuracy = config("2- General", "Accuracy Multiplier", 0f, new ConfigDescription("Magic projectiles accuracy multiplier.\nRecommended: 0", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 1f), new object[1] { new MagicPlugin.Functions.ConfigurationManagerAttributes { ShowRangeAsPercent = false } })); _enableTomeSlot = config("2- General", "Enable Tome Slot", MagicPlugin.Functions.Toggle.On, new ConfigDescription("If On, tomes or books has a dedicated slot when using Azu ExtendPlayerInventory mod.", (AcceptableValueBase)null, Array.Empty<object>())); _enableTomeSlot.SettingChanged += delegate { MagicSlot.AddCustomSlot(_enableTomeSlot); }; MagicSlot.AddCustomSlot(_enableTomeSlot); _enableEarringSlot = config("2- General", "Enable Earring Slot", MagicPlugin.Functions.Toggle.On, new ConfigDescription("If On, earrings has a dedicated slot when using Azu ExtendedPlayerInventory mod.", (AcceptableValueBase)null, Array.Empty<object>())); _enableEarringSlot.SettingChanged += delegate { MagicSlot.AddCustomSlot(_enableEarringSlot); }; MagicSlot.AddCustomSlot(_enableEarringSlot); _enableSlowFall = config("2- General", "Enable Slow Fall", MagicPlugin.Functions.Toggle.On, new ConfigDescription("If Off, disables slow fall effect on capes.", (AcceptableValueBase)null, Array.Empty<object>())); _unSummonKey = config<KeyboardShortcut>("2- General", "Unsummon Key", new KeyboardShortcut((KeyCode)102, (KeyCode[])(object)new KeyCode[1] { (KeyCode)304 }), new ConfigDescription("Hotkey combination to unsummon summons.", (AcceptableValueBase)null, Array.Empty<object>()), _synchronizedConfig: false); _enableExpMultiplier = config("4- Skill Exp", "Enable Exp Multiplier", MagicPlugin.Functions.Toggle.On, new ConfigDescription("Enable/Disables exp multiplier.", (AcceptableValueBase)null, Array.Empty<object>())); _displayExpGained = config("4- Skill Exp", "Display Exp Gained", MagicPlugin.Functions.Toggle.On, new ConfigDescription("Enable/Disables exp gain notifications", (AcceptableValueBase)null, Array.Empty<object>())); _bmExpMultiplier = config("4- Skill Exp", "BloodMagic Exp Multiplier", 1f, new ConfigDescription("Exp multiplier for BloodMagic skill.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 5f), Array.Empty<object>())); _emExpMultiplier = config("4- Skill Exp", "ElementalMagic Exp Multiplier", 1f, new ConfigDescription("Exp multiplier for ElementalMagic skill.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 5f), Array.Empty<object>())); SummonHelper.CloneContainerInit(); ConfigSetup.Init(); PrefabsSetup.Init(); RingsAndNecklaces.Init(); Assembly executingAssembly = Assembly.GetExecutingAssembly(); _harmony.PatchAll(executingAssembly); ((BaseUnityPlugin)this).Config.SaveOnConfigSet = true; ((BaseUnityPlugin)this).Config.Save(); } private void OnDestroy() { ((BaseUnityPlugin)this).Config.Save(); } private void Update() { //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Expected O, but got Unknown Player player = Player.m_localPlayer; if (!Object.op_Implicit((Object)(object)player)) { return; } foreach (Tameable item in Enumerable.Select(Enumerable.Where(Enumerable.Where(Character.GetAllCharacters(), (Character summon) => ((Object)((Component)summon).gameObject).name.StartsWith("BMP_") && summon.m_nview.IsValid() && summon.m_nview.IsOwner()), (Func<Character, bool>)delegate { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) KeyboardShortcut value = _unSummonKey.Value; return ((KeyboardShortcut)(ref value)).IsDown() && ((Character)player).TakeInput(); }), (Character summon) => ((Component)summon).GetComponent<Tameable>())) { if (Object.op_Implicit((Object)(object)item)) { item.UnSummon(); } } IDoodadController doodadController = player.GetDoodadController(); Sadle val = (Sadle)(object)((doodadController is Sadle) ? doodadController : null); if (val == null || !Object.op_Implicit((Object)(object)val)) { return; } Humanoid val2 = (Humanoid)val.GetCharacter(); if (((Character)val2).m_name.Contains("asksvin_summon")) { ((MonoBehaviour)((Character)val2).m_baseAI).StopAllCoroutines(); float num = Mathf.Lerp(1f, 0.5f, val.GetRiderSkill()); if ((ZInput.GetButton("Attack") || ZInput.GetButton("JoyAttack")) && !((Character)val2).InAttack() && ((Character)player).TakeInput() && val.GetStamina() > 8f) { val2.m_rightItem = val2.m_defaultItems[0].GetComponent<ItemDrop>().m_itemData; ((Character)val2).StartAttack((Character)null, false); val.UseStamina(8f * num); _autoRun = false; } if ((ZInput.GetButton("SecondaryAttack") || ZInput.GetButton("JoySecondaryAttack")) && !((Character)val2).InAttack() && ((Character)player).TakeInput() && val.GetStamina() > 16f) { val2.m_rightItem = val2.m_defaultItems[1].GetComponent<ItemDrop>().m_itemData; ((Character)val2).StartAttack((Character)null, false); val.UseStamina(16f * num); _autoRun = false; } if ((ZInput.GetButton("Block") || ZInput.GetButton("JoyBlock")) && !((Character)val2).InAttack() && ((Character)player).TakeInput() && val.GetStamina() > 20f) { val2.m_rightItem = val2.m_defaultItems[2].GetComponent<ItemDrop>().m_itemData; ((Character)val2).StartAttack((Character)null, false); val.UseStamina(20f * num); _autoRun = false; } if (ZInput.GetButton("Forward") || ZInput.GetButton("Backward")) { _autoRun = false; } } } } } namespace MagicPlugin.SE { public class AddEitr : StatusEffect { public float m_eitr; public void Awake() { base.m_tooltip = $"Boost wearer's <color=orange>Eitr</color> by <color=orange>+{m_eitr}</color>."; } public void SetEitr(float eitr) { m_eitr = eitr; base.m_tooltip = $"Boost wearer's <color=orange>Eitr</color> by <color=orange>+{m_eitr}</color>."; } } public class ArcticBuff : StatusEffect { private float m_eitrRegen; public void Awake() { base.m_name = "Arctic Buff"; ((Object)this).name = base.m_name; base.m_tooltip = $"The Polarwolf armor set gives enough protection against cold and freezing. It is imbued with magic so its wearer will replenish eitr faster.\n\nEitr regen increased by <color=orange>+{Mathf.FloorToInt(m_eitrRegen)}%\nResistant</color> VS <color=orange>Cold</color> and <color=orange>Freezing</color>"; } public void SetEitrRegen(float bonus) { m_eitrRegen = bonus; base.m_tooltip = $"The Polarwolf armor set gives enough protection against cold and freezing. It is imbued with magic so its wearer will replenish eitr faster.\n\nEitr regen increased by <color=orange>+{Mathf.FloorToInt(m_eitrRegen)}%\nResistant</color> VS <color=orange>Cold</color> and <color=orange>Freezing</color>"; } public override void ModifyEitrRegen(ref float eitrRegen) { eitrRegen += m_eitrRegen / 100f; } } public class Elementalist : StatusEffect { public float m_elementalMagic; public void Awake() { ((Object)this).name = "bmp_elementalist"; base.m_name = "Elementalist Belt"; base.m_tooltip = "Boost Elemental Magics skill level." + $"\n<color=orange>ElementalMagic: +{m_elementalMagic}</color>"; } public void SetElementalMagic(float value) { m_elementalMagic = value; base.m_tooltip = "Boost Elemental Magics skill level." + $"\n<color=orange>ElementalMagic: +{m_elementalMagic}</color>"; } } public class ForestMagic : StatusEffect { private float m_eitrRegen; public void Awake() { base.m_name = "Forest Magic"; ((Object)this).name = base.m_name; base.m_tooltip = $"This pair of armor doesn't give enough armor defense to its wearer but will be beneficial to a newborn Mage.\n\nEitr regen increased by <color=orange>+{Mathf.FloorToInt(m_eitrRegen)}%</color>"; } public void SetEitrRegen(float bonus) { m_eitrRegen = bonus; base.m_tooltip = $"This pair of armor doesn't give enough armor defense to its wearer but will be beneficial to a newborn Mage.\n\nEitr regen increased by <color=orange>+{Mathf.FloorToInt(m_eitrRegen)}%</color>"; } public override void ModifyEitrRegen(ref float eitrRegen) { eitrRegen += m_eitrRegen / 100f; } } public class HealGroup : StatusEffect { public float m_healthOverTime; public float m_healthOverTimeInterval; public float m_healthOverTimeDuration; public float m_healthOverTimeTimer; public float m_healthOverTimeTicks; public float m_healthOverTimeTickHP; public SkillType m_levelUpSkill; public float m_levelUpSkillFactor = 0.2f; public void Awake() { base.m_name = "Staff Of Healing"; ((Object)this).name = "healstaff_cooldown"; base.m_tooltip = "Heals everyone over time." + $"\n<color=orange>HealOverTime: {Mathf.FloorToInt(m_healthOverTime / (m_healthOverTimeDuration / m_healthOverTimeInterval))}</color>" + $"\n<color=orange>Duration: {m_healthOverTimeDuration}secs</color>"; base.m_icon = PrefabsSetup._magicBundle.LoadAsset<Sprite>("bmr_heart_icon"); } public void SetHealthOverTimeInterval(float value) { m_healthOverTimeInterval = value; base.m_tooltip = "Heals everyone over time." + $"\n<color=orange>HealOverTime: {Mathf.FloorToInt(m_healthOverTime / (m_healthOverTimeDuration / m_healthOverTimeInterval))}</color>" + $"\n<color=orange>Duration: {m_healthOverTimeDuration}secs</color>"; } public void SetHealthOverTime(float value) { m_healthOverTime = value; base.m_tooltip = "Heals everyone over time." + $"\n<color=orange>HealOverTime: {Mathf.FloorToInt(m_healthOverTime / (m_healthOverTimeDuration / m_healthOverTimeInterval))}</color>" + $"\n<color=orange>Duration: {m_healthOverTimeDuration}secs</color>"; } public void SetHealthOverTimeDuration(float value) { m_healthOverTimeDuration = value; base.m_tooltip = "Heals everyone over time." + $"\n<color=orange>HealOverTime: {Mathf.FloorToInt(m_healthOverTime / (m_healthOverTimeDuration / m_healthOverTimeInterval))}</color>" + $"\n<color=orange>Duration: {m_healthOverTimeDuration}secs</color>"; } public override void Setup(Character character) { //IL_0064: Unknown result type (might be due to invalid IL or missing references) ((StatusEffect)this).Setup(character); if (m_healthOverTime > 0f && m_healthOverTimeInterval > 0f) { if (m_healthOverTimeDuration <= 0f) { m_healthOverTimeDuration = base.m_ttl; } m_healthOverTimeTicks = m_healthOverTimeDuration / m_healthOverTimeInterval; m_healthOverTimeTickHP = m_healthOverTime / m_healthOverTimeTicks; m_levelUpSkill = (SkillType)10; } } public override void UpdateStatusEffect(float dt) { ((StatusEffect)this).UpdateStatusEffect(dt); if (m_healthOverTimeTicks > 0f) { m_healthOverTimeTimer += dt; if (m_healthOverTimeTimer > m_healthOverTimeInterval) { m_healthOverTimeTimer = 0f; m_healthOverTimeTicks -= 1f; base.m_character.Heal(m_healthOverTimeTickHP, true); } } } } public class Hogwarts : StatusEffect { public float m_damageMultiplier; public void Awake() { ((Object)this).name = "bmp_hogwarts"; base.m_name = "Hogwarts Belt"; base.m_tooltip = "Boost wearer's elemental damages." + $"\n<color=orange>Damage Multiplier: {m_damageMultiplier}x</color>"; } public void SetDamageMultiplier(float value) { m_damageMultiplier = value; base.m_tooltip = "Boost wearer's elemental damages." + $"\n<color=orange>Damage Multiplier: {m_damageMultiplier}x</color>"; } } public class Necromancer : StatusEffect { public float m_bloodMagic; public void Awake() { ((Object)this).name = "bmp_necromancer"; base.m_name = "Necromancers Belt"; base.m_tooltip = "Boost Blood Magics skill level." + $"\n<color=orange>BloodMagic: +{m_bloodMagic}</color>"; } public void SetBloodMagic(float value) { m_bloodMagic = value; base.m_tooltip = "Boost Blood Magics skill level." + $"\n<color=orange>BloodMagic: +{m_bloodMagic}</color>"; } } public class SlowFallAndEitr : StatusEffect { public float m_eitr; public float m_maxFallSpeed = 5f; public float m_fallDamageModifier = -1f; public void Awake() { base.m_name = "Slow Fall"; if (Plugin._enableSlowFall.Value == MagicPlugin.Functions.Toggle.On) { base.m_tooltip = "$bmr_featherfall_tooltip" + $"\nLimit fall speed: <color=orange>{m_maxFallSpeed}m/s</color>" + $"\nFall damage: <color=orange>{m_fallDamageModifier}%</color>" + $"\nEitr: <color=orange>+{m_eitr}</color>"; } else { base.m_tooltip = "$bmr_featherfall_tooltip" + $"\nEitr: <color=orange>+{m_eitr}</color>"; } base.m_icon = Enumerable.FirstOrDefault((IEnumerable<Sprite>)Resources.FindObjectsOfTypeAll<Sprite>(), (Func<Sprite, bool>)((Sprite x) => ((Object)x).name == "SlowFall")); } public void SetEitr(float eitr) { m_eitr = eitr; if (Plugin._enableSlowFall.Value == MagicPlugin.Functions.Toggle.On) { base.m_tooltip = "$bmr_featherfall_tooltip" + $"\nLimit fall speed: <color=orange>{m_maxFallSpeed}m/s</color>" + $"\nFall damage: <color=orange>{m_fallDamageModifier}%</color>" + $"\nEitr: <color=orange>+{m_eitr}</color>"; } else { base.m_tooltip = "$bmr_featherfall_tooltip" + $"\nEitr: <color=orange>+{m_eitr}</color>"; } } public override void ModifyWalkVelocity(ref Vector3 vel) { if (Plugin._enableSlowFall.Value != 0 && m_maxFallSpeed > 0f && vel.y < 0f - m_maxFallSpeed) { vel.y = 0f - m_maxFallSpeed; } } public override void ModifyFallDamage(float baseDamage, ref float damage) { if (Plugin._enableSlowFall.Value != 0) { damage += baseDamage * m_fallDamageModifier; if (damage < 0f) { damage = 0f; } } } } } namespace MagicPlugin.Patches { [HarmonyPatch] public class AttackPatch { [HarmonyPostfix] [HarmonyPatch(typeof(Attack), "Start")] public static void AttackStart_Postfix(Attack __instance) { if (__instance == null) { return; } Humanoid character = __instance.m_character; Player val = (Player)(object)((character is Player) ? character : null); if (val == null) { return; } string name = __instance.m_weapon.m_shared.m_name; if (name == null) { return; } switch (name.Length) { case 18: switch (name[5]) { case 's': if (name == "$bmp_surtlingstaff") { float damageMultiplier11 = 1f + 1f * ((Character)val).GetSkillFactor((SkillType)9); __instance.m_weapon.m_shared.m_attack.m_damageMultiplier = damageMultiplier11; } break; case 'e': if (name == "$bmp_eikthyrsstaff") { float damageMultiplier9 = 1f + 1f * ((Character)val).GetSkillFactor((SkillType)9); __instance.m_weapon.m_shared.m_attack.m_damageMultiplier = damageMultiplier9; } break; case 'l': if (name == "$bmp_lightningwand") { float damageMultiplier10 = 1f + 1f * ((Character)val).GetSkillFactor((SkillType)9); __instance.m_weapon.m_shared.m_attack.m_damageMultiplier = damageMultiplier10; } break; case 'b': if (name == "$bmp_beginnerstaff") { float damageMultiplier8 = 1f + 1f * ((Character)val).GetSkillFactor((SkillType)9); __instance.m_weapon.m_shared.m_attack.m_damageMultiplier = damageMultiplier8; } break; } break; case 16: switch (name[5]) { case 'a': if (name == "$bmp_arcticstaff") { float damageMultiplier6 = 1f + 1f * ((Character)val).GetSkillFactor((SkillType)9); __instance.m_weapon.m_shared.m_attack.m_damageMultiplier = damageMultiplier6; } break; case 'p': if (name == "$bmp_poisonstaff") { float damageMultiplier5 = 1f + 1f * ((Character)val).GetSkillFactor((SkillType)9); __instance.m_weapon.m_shared.m_attack.m_damageMultiplier = damageMultiplier5; } break; } break; case 15: switch (name[5]) { case 'f': if (name == "$bmp_flamestaff") { float damageMultiplier3 = 1f + 1f * ((Character)val).GetSkillFactor((SkillType)9); __instance.m_weapon.m_shared.m_attack.m_damageMultiplier = damageMultiplier3; } break; case 'p': if (name == "$bmp_poisonwand") { float damageMultiplier2 = 1f + 1f * ((Character)val).GetSkillFactor((SkillType)9); __instance.m_weapon.m_shared.m_attack.m_damageMultiplier = damageMultiplier2; } break; } break; case 14: switch (name[5]) { case 's': if (name == "$bmp_staffheal" && ((Character)val).GetHealth() < ((Character)val).GetMaxHealth() && val.GetEitr() > __instance.m_weapon.m_shared.m_attack.m_attackEitr && !((Character)val).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("healstaff_cooldown"))) { ((Character)val).RaiseSkill((SkillType)10, 1f); } break; case 'f': if (name == "$bmp_flamewand") { float damageMultiplier12 = 1f + 1f * ((Character)val).GetSkillFactor((SkillType)9); __instance.m_weapon.m_shared.m_attack.m_damageMultiplier = damageMultiplier12; } break; } break; case 19: if (name == "$bmp_lightningstaff") { float damageMultiplier7 = 1f + 1f * ((Character)val).GetSkillFactor((SkillType)9); __instance.m_weapon.m_shared.m_attack.m_damageMultiplier = damageMultiplier7; } break; case 17: if (name == "$bmp_thunderstaff") { float damageMultiplier4 = 1f + 1f * ((Character)val).GetSkillFactor((SkillType)9); __instance.m_weapon.m_shared.m_attack.m_damageMultiplier = damageMultiplier4; } break; case 12: if (name == "$bmp_icewand") { float damageMultiplier = 1f + 1f * ((Character)val).GetSkillFactor((SkillType)9); __instance.m_weapon.m_shared.m_attack.m_damageMultiplier = damageMultiplier; } break; case 13: break; } } [HarmonyPrefix] [HarmonyPatch(typeof(Attack), "FireProjectileBurst")] public static bool FireProjectileBurst_Prefix(Attack __instance) { //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_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Invalid comparison between Unknown and I4 if (__instance != null) { Humanoid character = __instance.m_character; Player player = (Player)(object)((character is Player) ? character : null); if (player != null) { SkillType skillType = __instance.m_weapon.m_shared.m_skillType; if (__instance.m_weapon == null || (int)skillType != 9) { return true; } string name = __instance.m_weapon.m_shared.m_name; if (__instance.m_weapon.m_shared.m_name.EndsWith("scepter") || __instance.m_weapon.m_shared.m_name.Contains("flamestaff") || __instance.m_weapon.m_shared.m_name.Contains("thunderstaff") || __instance.m_weapon.m_shared.m_ammoType.Contains("ammo_spells")) { return true; } if ((Object)(object)__instance.m_weapon.m_shared.m_secondaryAttack.m_attackProjectile != (Object)null && ((Object)__instance.m_weapon.m_shared.m_secondaryAttack.m_attackProjectile).name == "BDS_DvergerStaffFire_clusterbomb_projectile") { return true; } if ((name == "$bmp_arcticstaff" || name == "$item_stafficeshards") ? true : false) { Attack obj = __instance; obj.m_projectileVel *= 1.2f; Attack obj2 = __instance; obj2.m_projectileVelMin *= 1.2f; Attack obj3 = __instance; obj3.m_projectileAccuracy *= 0f; Attack obj4 = __instance; obj4.m_projectileAccuracyMin *= 0f; } else { Plugin._magicVelocity.SettingChanged += delegate { Attack obj11 = __instance; obj11.m_projectileVel *= Plugin._magicVelocity.Value; Attack obj12 = __instance; obj12.m_projectileVelMin *= Plugin._magicVelocity.Value; }; Attack obj5 = __instance; obj5.m_projectileVel *= Plugin._magicVelocity.Value; Attack obj6 = __instance; obj6.m_projectileVelMin *= Plugin._magicVelocity.Value; Plugin._magciAccuracy.SettingChanged += delegate { Attack obj9 = __instance; obj9.m_projectileAccuracy *= Plugin._magciAccuracy.Value; Attack obj10 = __instance; obj10.m_projectileAccuracyMin *= Plugin._magciAccuracy.Value; }; Attack obj7 = __instance; obj7.m_projectileAccuracy *= Plugin._magciAccuracy.Value; Attack obj8 = __instance; obj8.m_projectileAccuracyMin *= Plugin._magciAccuracy.Value; } if (((Object)__instance.m_attackProjectile).name.ToLower().Contains("surtlingstaff")) { ConfigSetup._surtlingStaffAOE.SettingChanged += delegate { __instance.m_attackProjectile.gameObject.GetComponent<Projectile>().m_aoe = ConfigSetup._surtlingStaffAOE.Value + 2f * ((Character)player).GetSkillFactor((SkillType)9); }; __instance.m_attackProjectile.gameObject.GetComponent<Projectile>().m_aoe = ConfigSetup._surtlingStaffAOE.Value + 2f * ((Character)player).GetSkillFactor((SkillType)9); } if (((Object)__instance.m_attackProjectile).name.ToLower().Contains("eikthyrsstaff")) { ConfigSetup._eikthyrStaffAOE.SettingChanged += delegate { __instance.m_attackProjectile.gameObject.GetComponent<Projectile>().m_aoe = ConfigSetup._eikthyrStaffAOE.Value + 2f * ((Character)player).GetSkillFactor((SkillType)9); }; __instance.m_attackProjectile.gameObject.GetComponent<Projectile>().m_aoe = ConfigSetup._eikthyrStaffAOE.Value + 2f * ((Character)player).GetSkillFactor((SkillType)9); } if (((Object)__instance.m_attackProjectile).name.ToLower().Contains("lightningstaff")) { ConfigSetup._lightningStaffAOE.SettingChanged += delegate { __instance.m_attackProjectile.gameObject.GetComponent<Projectile>().m_aoe = ConfigSetup._lightningStaffAOE.Value + 2f * ((Character)player).GetSkillFactor((SkillType)9); }; __instance.m_attackProjectile.gameObject.GetComponent<Projectile>().m_aoe = ConfigSetup._lightningStaffAOE.Value + 2f * ((Character)player).GetSkillFactor((SkillType)9); } if (((Object)__instance.m_attackProjectile).name.ToLower().Contains("poisonstaff")) { ConfigSetup._poisonStaffAOE.SettingChanged += delegate { __instance.m_attackProjectile.gameObject.GetComponent<Projectile>().m_aoe = ConfigSetup._poisonStaffAOE.Value + 2f * ((Character)player).GetSkillFactor((SkillType)9); }; __instance.m_attackProjectile.gameObject.GetComponent<Projectile>().m_aoe = ConfigSetup._poisonStaffAOE.Value + 2f * ((Character)player).GetSkillFactor((SkillType)9); } if (((Object)__instance.m_attackProjectile).name.ToLower().Contains("arcticstaff")) { ConfigSetup._arcticStaffAOE.SettingChanged += delegate { __instance.m_attackProjectile.gameObject.GetComponent<Projectile>().m_aoe = ConfigSetup._arcticStaffAOE.Value + 2f * ((Character)player).GetSkillFactor((SkillType)9); }; __instance.m_attackProjectile.gameObject.GetComponent<Projectile>().m_aoe = ConfigSetup._arcticStaffAOE.Value + 2f * ((Character)player).GetSkillFactor((SkillType)9); } if (((Object)__instance.m_attackProjectile).name == "bmp_modersheritage_projectile") { SpawnAbility component = __instance.m_attackProjectile.gameObject.GetComponent<Projectile>().m_spawnOnHit.gameObject.GetComponent<SpawnAbility>(); Projectile iceblast = component.m_spawnPrefab[0].gameObject.GetComponent<Projectile>(); ConfigSetup._modersAoeRange.SettingChanged += delegate { iceblast.m_aoe = ConfigSetup._modersAoeRange.Value + 2f * ((Character)player).GetSkillFactor((SkillType)9); }; iceblast.m_aoe = ConfigSetup._modersAoeRange.Value + 2f * ((Character)player).GetSkillFactor((SkillType)9); ConfigSetup._modersChopDamage.SettingChanged += delegate { iceblast.m_damage.m_chop = ConfigSetup._modersChopDamage.Value; }; iceblast.m_damage.m_chop = ConfigSetup._modersChopDamage.Value; ConfigSetup._modersFrostDamage.SettingChanged += delegate { iceblast.m_damage.m_frost = ConfigSetup._modersFrostDamage.Value + ConfigSetup._modersFrostDamage.Value * ((Character)player).GetSkillFactor((SkillType)9); }; iceblast.m_damage.m_frost = ConfigSetup._modersFrostDamage.Value + ConfigSetup._modersFrostDamage.Value * ((Character)player).GetSkillFactor((SkillType)9); ConfigSetup._modersPickaxeDamage.SettingChanged += delegate { iceblast.m_damage.m_pickaxe = ConfigSetup._modersPickaxeDamage.Value; }; iceblast.m_damage.m_pickaxe = ConfigSetup._modersPickaxeDamage.Value; ConfigSetup._modersPierceDamage.SettingChanged += delegate { iceblast.m_damage.m_pierce = ConfigSetup._modersPierceDamage.Value; }; iceblast.m_damage.m_pierce = ConfigSetup._modersPierceDamage.Value; } if (((Object)__instance.m_attackProjectile).name == "bmp_yagluthsheritage_projectile") { SpawnAbility component2 = __instance.m_attackProjectile.gameObject.GetComponent<Projectile>().m_spawnOnHit.gameObject.GetComponent<SpawnAbility>(); Projectile meteors = component2.m_spawnPrefab[0].gameObject.GetComponent<Projectile>(); ConfigSetup._yagluthAoeRange.SettingChanged += delegate { meteors.m_aoe = ConfigSetup._yagluthAoeRange.Value + 2f * ((Character)player).GetSkillFactor((SkillType)9); }; meteors.m_aoe = ConfigSetup._yagluthAoeRange.Value + 2f * ((Character)player).GetSkillFactor((SkillType)9); ConfigSetup._yagluthBluntDamage.SettingChanged += delegate { meteors.m_damage.m_blunt = ConfigSetup._yagluthBluntDamage.Value; }; meteors.m_damage.m_blunt = ConfigSetup._yagluthBluntDamage.Value; ConfigSetup._yagluthChopDamage.SettingChanged += delegate { meteors.m_damage.m_chop = ConfigSetup._yagluthChopDamage.Value; }; meteors.m_damage.m_chop = ConfigSetup._yagluthChopDamage.Value; ConfigSetup._yagluthFireDamage.SettingChanged += delegate { meteors.m_damage.m_fire = ConfigSetup._yagluthFireDamage.Value + ConfigSetup._yagluthFireDamage.Value * ((Character)player).GetSkillFactor((SkillType)9); }; meteors.m_damage.m_fire = ConfigSetup._yagluthFireDamage.Value + ConfigSetup._yagluthFireDamage.Value * ((Character)player).GetSkillFactor((SkillType)9); ConfigSetup._yagluthPickaxeDamage.SettingChanged += delegate { meteors.m_damage.m_pickaxe = ConfigSetup._yagluthPickaxeDamage.Value; }; meteors.m_damage.m_pickaxe = ConfigSetup._yagluthPickaxeDamage.Value; } return true; } } return true; } } [HarmonyPatch] public class DestructiblePatch { [HarmonyPatch(typeof(Destructible), "RPC_Damage")] public static class RpcDamagePatch { private static bool Prefix(Destructible __instance, HitData hit) { //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Invalid comparison between Unknown and I4 //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Invalid comparison between Unknown and I4 //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Invalid comparison between Unknown and I4 Character attacker = hit.GetAttacker(); Player val = (Player)(object)((attacker is Player) ? attacker : null); if (val == null || ((Humanoid)val).GetCurrentWeapon() == null || ((Humanoid)val).GetCurrentWeapon() == ((Humanoid)val).m_unarmedWeapon.m_itemData) { return true; } if (((Object)((Humanoid)val).GetCurrentWeapon().m_dropPrefab).name == "BMP_SurtlingStaff" && (int)__instance.m_destructibleType == 2 && hit.m_damage.m_chop > 0f && __instance.m_nview.IsValid() && __instance.m_nview.IsOwner()) { hit.m_toolTier = (short)((Humanoid)val).GetCurrentWeapon().m_quality; ((Character)val).RaiseSkill((SkillType)13, 0.2f); } if ((((Object)((Humanoid)val).GetCurrentWeapon().m_dropPrefab).name == "BMP_EikthyrsStaff" || ((Object)((Humanoid)val).GetCurrentWeapon().m_dropPrefab).name == "BMP_LightningStaff") && (int)__instance.m_damages.m_pickaxe != 3 && (int)__instance.m_destructibleType != 2 && hit.m_damage.m_pickaxe > 0f && __instance.m_nview.IsValid() && __instance.m_nview.IsOwner()) { hit.m_toolTier = (short)((Humanoid)val).GetCurrentWeapon().m_quality; ((Character)val).RaiseSkill((SkillType)12, 0.2f); } return true; } } } [HarmonyPatch] public class HumanoidPatch { [HarmonyPostfix] [HarmonyPatch(typeof(Humanoid), "IsItemEquiped")] private static void IsItemEquipped_Postfix(Humanoid __instance, ItemData item, ref bool __result) { if (AzuExtendedPlayerInventory.API.IsLoaded()) { Player val = (Player)(object)((__instance is Player) ? __instance : null); if (val != null && MagicSlot._magicSlots.TryGetValue(((Humanoid)val).m_visEquipment, out var value) && (value._equippedTomeItem == item || value._equippedEarringItem == item)) { __result = true; } } } [HarmonyPrefix] [HarmonyPatch(typeof(Humanoid), "SetupVisEquipment")] private static void SetupVisEquipment_Prefix(Humanoid __instance) { if (AzuExtendedPlayerInventory.API.IsLoaded()) { Player val = (Player)(object)((__instance is Player) ? __instance : null); if (val != null && MagicSlot._magicSlots.TryGetValue(((Humanoid)val).m_visEquipment, out var value)) { value.SetTomeItem((value._equippedTomeItem == null) ? "" : ((Object)value._equippedTomeItem.m_dropPrefab).name); value.SetEarringItem((value._equippedEarringItem == null) ? "" : ((Object)value._equippedEarringItem.m_dropPrefab).name); } } } [HarmonyPrefix] [HarmonyPatch(typeof(Humanoid), "UnequipAllItems")] private static void UnEquipAllItems_Prefix(Humanoid __instance) { if (AzuExtendedPlayerInventory.API.IsLoaded()) { Player val = (Player)(object)((__instance is Player) ? __instance : null); if (val != null) { ((Humanoid)val).UnequipItem(MagicSlot._magicSlots[((Humanoid)val).m_visEquipment]._equippedTomeItem, false); ((Humanoid)val).UnequipItem(MagicSlot._magicSlots[((Humanoid)val).m_visEquipment]._equippedEarringItem, false); } } } [HarmonyTranspiler] [HarmonyPatch(typeof(Humanoid), "EquipItem")] private static IEnumerable<CodeInstruction> EquipItemTranspiler(IEnumerable<CodeInstruction> instructions, ILGenerator il) { //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Expected O, but got Unknown //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Expected O, but got Unknown //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Expected O, but got Unknown //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Expected O, but got Unknown //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Expected O, but got Unknown List<CodeInstruction> list = new List<CodeInstruction>(instructions); int num = -1; for (int i = 0; i < list.Count; i++) { if (CodeInstructionExtensions.LoadsConstant(list[i], (Enum)(object)(ItemType)18)) { num = i; } } if (num == -1) { return list; } Label label = il.DefineLabel(); int j; for (j = num; j < list.Count; j++) { if (list[j].operand is Label label2) { label = label2; break; } } List<CodeInstruction> collection = new List<CodeInstruction> { new CodeInstruction(OpCodes.Ldarg_0, (object)null), new CodeInstruction(OpCodes.Ldarg_1, (object)null), new CodeInstruction(OpCodes.Ldarg_2, (object)null), new CodeInstruction(OpCodes.Call, (object)AccessTools.DeclaredMethod(typeof(HumanoidPatch), "EquipItem", (Type[])null, (Type[])null)), new CodeInstruction(OpCodes.Brtrue, (object)label) }; list.InsertRange(j + 1, collection); return list; } [HarmonyTranspiler] [HarmonyPatch(typeof(Humanoid), "UnequipItem")] private static IEnumerable<CodeInstruction> UnEquipItemTranspiler(IEnumerable<CodeInstruction> instructions) { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Expected O, but got Unknown //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Expected O, but got Unknown MethodInfo methodInfo = AccessTools.DeclaredMethod(typeof(Humanoid), "SetupEquipment", (Type[])null, (Type[])null); List<CodeInstruction> list = Enumerable.ToList(instructions); int num = list.FindIndex((CodeInstruction i) => CodeInstructionExtensions.Calls(i, methodInfo)); list.InsertRange(num - 1, new <>z__ReadOnlyArray<CodeInstruction>((CodeInstruction[])(object)new CodeInstruction[3] { new CodeInstruction(OpCodes.Ldarg_0, (object)null), new CodeInstruction(OpCodes.Ldarg_1, (object)null), new CodeInstruction(OpCodes.Call, (object)AccessTools.DeclaredMethod(typeof(HumanoidPatch), "UnEquipItem", (Type[])null, (Type[])null)) })); return list; } [HarmonyTranspiler] [HarmonyPatch(typeof(Humanoid), "UpdateEquipmentStatusEffects")] private static IEnumerable<CodeInstruction> StatusEffectsTranspiler(IEnumerable<CodeInstruction> instructions) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Expected O, but got Unknown //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Expected O, but got Unknown List<CodeInstruction> list = Enumerable.ToList(instructions); list.InsertRange(2, new <>z__ReadOnlyArray<CodeInstruction>((CodeInstruction[])(object)new CodeInstruction[3] { new CodeInstruction(OpCodes.Ldarg_0, (object)null), new CodeInstruction(OpCodes.Ldloc_0, (object)null), new CodeInstruction(OpCodes.Call, (object)AccessTools.DeclaredMethod(typeof(HumanoidPatch), "AddStatusEffects", (Type[])null, (Type[])null)) })); return list; } private static bool EquipItem(Humanoid humanoid, ItemData item, bool triggerEquipmentEffects) { if (!AzuExtendedPlayerInventory.API.IsLoaded()) { return false; } Player val = (Player)(object)((humanoid is Player) ? humanoid : null); if (val == null) { return false; } if (MagicSlot.IsTomeItem(item)) { ((Humanoid)val).UnequipItem(MagicSlot._magicSlots[((Humanoid)val).m_visEquipment]._equippedTomeItem, triggerEquipmentEffects); MagicSlot._magicSlots[((Humanoid)val).m_visEquipment]._equippedTomeItem = item; return true; } if (MagicSlot.IsEarringItem(item)) { ((Humanoid)val).UnequipItem(MagicSlot._magicSlots[((Humanoid)val).m_visEquipment]._equippedEarringItem, triggerEquipmentEffects); MagicSlot._magicSlots[((Humanoid)val).m_visEquipment]._equippedEarringItem = item; return true; } return false; } private static void UnEquipItem(Humanoid humanoid, ItemData item) { if (!AzuExtendedPlayerInventory.API.IsLoaded()) { return; } Player val = (Player)(object)((humanoid is Player) ? humanoid : null); if (val != null) { if (MagicSlot._magicSlots[((Humanoid)val).m_visEquipment]._equippedTomeItem == item) { MagicSlot._magicSlots[((Humanoid)val).m_visEquipment]._equippedTomeItem = null; } if (MagicSlot._magicSlots[((Humanoid)val).m_visEquipment]._equippedEarringItem == item) { MagicSlot._magicSlots[((Humanoid)val).m_visEquipment]._equippedEarringItem = null; } } } private static void AddStatusEffects(Humanoid humanoid, HashSet<StatusEffect> statusEffects) { if (!AzuExtendedPlayerInventory.API.IsLoaded()) { return; } Player val = (Player)(object)((humanoid is Player) ? humanoid : null); if (val != null && MagicSlot._magicSlots.TryGetValue(((Humanoid)val).m_visEquipment, out var value)) { StatusEffect val2 = value._equippedTomeItem?.m_shared.m_equipStatusEffect; if (val2 != null) { statusEffects.Add(val2); } StatusEffect val3 = value._equippedEarringItem?.m_shared.m_equipStatusEffect; if (val3 != null) { statusEffects.Add(val3); } } } } [HarmonyPatch] public class ItemDataPatch { [HarmonyPostfix] [HarmonyPatch(typeof(ItemData), "GetDamage", new Type[] { typeof(int), typeof(float) })] public static void GetDamage_Postfix(ItemData __instance, ref DamageTypes __result) { Player localPlayer = Player.m_localPlayer; if (!((Object)(object)localPlayer == (Object)null) && ((Humanoid)localPlayer).m_inventory.m_inventory.Exists((ItemData x) => x == __instance)) { float skillFactor = ((Character)localPlayer).GetSkillFactor((SkillType)9); if (((Character)localPlayer).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("bmp_hogwarts"))) { float num = 1f + skillFactor * ConfigSetup._hogwartsBeltBonus.Value; __result.m_fire *= num; __result.m_frost *= num; __result.m_lightning *= num; __result.m_poison *= num; __result.m_spirit *= num; } } } } [HarmonyPatch] public class ItemDropPatch { [HarmonyPostfix] [HarmonyPatch(typeof(ItemDrop), "Awake")] public static void ItemDropAwake_Postfix(ItemDrop __instance) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) Scene activeScene = SceneManager.GetActiveScene(); if (((Scene)(ref activeScene)).name != "main" || (Object)(object)__instance == (Object)null) { return; } string name = __instance.m_itemData.m_shared.m_name; if (name == null) { return; } switch (name.Length) { case 17: switch (name[15]) { case 'e': if (name == "$bmp_flamescepter") { StatsSetup.FlameScepter(__instance); } break; case 's': if (name == "$bmr_seeker_chest") { StatsSetup.SeekerChest(__instance.m_itemData); } break; case 'p': if (name == "$bmr_crimson_cape") { StatsSetup.CrimsonCape(__instance.m_itemData); } break; case 'o': if (name == "$bmr_crimson_hood") { StatsSetup.CrimsonHood(__instance.m_itemData); } break; case 'g': if (name == "$bmr_crimson_legs") { StatsSetup.CrimsonLegs(__instance.m_itemData); } break; } break; case 15: switch (name[5]) { case 'i': if (name == "$bmp_icescepter") { StatsSetup.IceScepter(__instance); } break; case 'd': if (name == "$bmp_dvergrbelt") { StatsSetup.DvergrBelt(__instance); } break; case 's': if (name == "$bmr_seeker_hat") { StatsSetup.SeekerHat(__instance.m_itemData); } break; } break; case 18: switch (name[16]) { case 'p': if (!(name == "$bmr_tattered_cape")) { if (name == "$bmr_warlocks_cape") { StatsSetup.WarlocksCape(__instance.m_itemData); } } else { StatsSetup.TatteredCape(__instance.m_itemData); } break; case 'l': if (name == "$bmr_tattered_helm") { StatsSetup.TatteredHelm(__instance.m_itemData); } break; case 'g': if (name == "$bmr_tattered_legs") { StatsSetup.TatteredLegs(__instance.m_itemData); } break; case 'a': if (name == "$bmr_sorcerers_hat") { StatsSetup.SorcerersHat(__instance.m_itemData); } break; case 'o': if (name == "$bmr_warlocks_hood") { StatsSetup.WarlocksHood(__instance.m_itemData); } break; case 's': if (!(name == "$bmr_warlocks_vest")) { if (name == "$bmr_crimson_chest") { StatsSetup.CrimsonChest(__instance.m_itemData); } } else { StatsSetup.WarlocksVest(__instance.m_itemData); } break; } break; case 19: switch (name[17]) { case 's': if (name == "$bmr_tattared_chest") { StatsSetup.TatteredChest(__instance.m_itemData); } break; case 'p': if (!(name == "$bmr_sorcerers_cape")) { if (name == "$bmr_polarwolf_cape") { StatsSetup.PolarWolfCape(__instance.m_itemData); } } else { StatsSetup.SorcerersCape(__instance.m_itemData); } break; case 'o': if (name == "$bmr_polarwolf_hood") { StatsSetup.PolarWolfHood(__instance.m_itemData); } break; case 'g': if (name == "$bmr_polarwolf_legs") { StatsSetup.PolarWolfLegs(__instance.m_itemData); } break; case 't': if (name == "$bmr_warlocks_pants") { StatsSetup.WarlocksPants(__instance.m_itemData); } break; } break; case 20: switch (name[5]) { case 's': if (name == "$bmr_sorcerers_tunic") { StatsSetup.SorcerersTunic(__instance.m_itemData); } break; case 'p': if (name == "$bmr_polarwolf_chest") { StatsSetup.PolarWolfChest(__instance.m_itemData); } break; } break; case 16: switch (name[12]) { case 'c': if (name == "$bmr_seeker_cape") { StatsSetup.SeekerCape(__instance.m_itemData); } break; case 'l': if (name == "$bmr_seeker_legs") { StatsSetup.SeekerLegs(__instance.m_itemData); } break; } break; case 22: if (name == "$bmp_modersinheritence") { StatsSetup.ModersHeritage(__instance); } break; case 24: if (name == "$bmp_yagluthsinheritence") { StatsSetup.YagluthsHeritage(__instance); } break; case 21: if (name == "$bmp_lightningscepter") { StatsSetup.LightningScepter(__instance); } break; case 23: if (name == "$bmr_sorcerers_trousers") { StatsSetup.SorcerersTrousers(__instance.m_itemData); } break; } } } [HarmonyPatch] public class MineRock5Patch { [HarmonyPatch(typeof(MineRock5), "RPC_Damage")] public static class RpcDamagePatch { private static void Prefix(MineRock5 __instance, HitData hit) { Character attacker = hit.GetAttacker(); Player val = (Player)(object)((attacker is Player) ? attacker : null); if (val != null && ((Humanoid)val).GetCurrentWeapon() != null && ((Humanoid)val).GetCurrentWeapon() != ((Humanoid)val).m_unarmedWeapon.m_itemData) { int quality = ((Humanoid)val).GetCurrentWeapon().m_quality; if ((!(((Object)((Humanoid)val).GetCurrentWeapon().m_dropPrefab).name != "BMP_EikthyrsStaff") || !(((Object)((Humanoid)val).GetCurrentWeapon().m_dropPrefab).name != "BMP_LightningStaff")) && quality >= __instance.m_minToolTier && hit.m_damage.m_pickaxe > 0f && __instance.m_nview.IsValid() && __instance.m_nview.IsOwner()) { hit.m_toolTier = (short)quality; ((Character)val).RaiseSkill((SkillType)12, 0.2f); } } } } [HarmonyPatch(typeof(MineRock5), "DamageArea")] public static class DamageAreaPatch { private static void Prefix(MineRock5 __instance, HitData hit) { Character attacker = hit.GetAttacker(); Player val = (Player)(object)((attacker is Player) ? attacker : null); if (val != null && ((Humanoid)val).GetCurrentWeapon() != null && ((Humanoid)val).GetCurrentWeapon() != ((Humanoid)val).m_unarmedWeapon.m_itemData) { int quality = ((Humanoid)val).GetCurrentWeapon().m_quality; if ((!(((Object)((Humanoid)val).GetCurrentWeapon().m_dropPrefab).name != "BMP_EikthyrsStaff") || !(((Object)((Humanoid)val).GetCurrentWeapon().m_dropPrefab).name != "BMP_LightningStaff")) && quality >= __instance.m_minToolTier && hit.m_damage.m_pickaxe > 0f && __instance.m_nview.IsValid() && __instance.m_nview.IsOwner()) { hit.m_toolTier = (short)quality; ((Character)val).RaiseSkill((SkillType)12, 0.2f); } } } } } [HarmonyPatch] public class MineRockPatch { [HarmonyPatch(typeof(MineRock), "RPC_Hit")] public static class RpcHitPatch { private static void Prefix(MineRock __instance, HitData hit) { Character attacker = hit.GetAttacker(); Player val = (Player)(object)((attacker is Player) ? attacker : null); if (val != null && ((Humanoid)val).GetCurrentWeapon() != null && ((Humanoid)val).GetCurrentWeapon() != ((Humanoid)val).m_unarmedWeapon.m_itemData) { int? num = ((Humanoid)val).GetCurrentWeapon()?.m_quality; if ((!(((Object)((Humanoid)val).GetCurrentWeapon().m_dropPrefab).name != "BMP_EikthyrsStaff") || !(((Object)((Humanoid)val).GetCurrentWeapon().m_dropPrefab).name != "BMP_LightningStaff")) && !(num < __instance.m_minToolTier) && hit.m_damage.m_pickaxe > 0f && __instance.m_nview.IsValid() && __instance.m_nview.IsOwner()) { hit.m_toolTier = (short)num.Value; ((Character)val).RaiseSkill((SkillType)12, 0.2f); } } } } } [HarmonyPatch] public class ObjectDBPatch { [HarmonyPriority(700)] [HarmonyPostfix] [HarmonyPatch(typeof(ObjectDB), "Awake")] private static void Awake_Postfix(ObjectDB __instance) { RegisterToFeaster(__instance); __instance.m_StatusEffects.Add((StatusEffect)(object)Helper.CreateCooldown("necktotem_cooldown", "$bmp_necktotem", PrefabsSetup._neckTotemIcon)); __instance.m_StatusEffects.Add((StatusEffect)(object)Helper.CreateCooldown("wolftotem_cooldown", "$bmp_wolftotem", PrefabsSetup._wolfTotemIcon)); __instance.m_StatusEffects.Add((StatusEffect)(object)Helper.CreateCooldown("crystaltotem_cooldown", "$bmp_crystaltotem", PrefabsSetup._crystalTotemIcon)); __instance.m_StatusEffects.Add((StatusEffect)(object)Helper.CreateCooldown("skulltotem_cooldown", "$bmp_skulltotem", PrefabsSetup._skullTotemIcon)); __instance.m_StatusEffects.Add((StatusEffect)(object)Helper.CreateCooldown("modersheritage_cooldown", "$bmp_modersinheritence", PrefabsSetup._modersIcon)); __instance.m_StatusEffects.Add((StatusEffect)(object)Helper.CreateCooldown("yagluthsheritage_cooldown", "$bmp_yagluthsinheritence", PrefabsSetup._yagluthsIcon)); __instance.m_StatusEffects.Add((StatusEffect)(object)Helper.CreateCooldown("asksvintotem_cooldown", "$bmp_askvintotem", PrefabsSetup._asksvinTotemIcon)); __instance.m_StatusEffects.Add((StatusEffect)(object)Helper.CreateCooldown("charredtotem_cooldown", "$bmp_charredtotem", PrefabsSetup._charredTotemIcon)); __instance.m_StatusEffects.Add((StatusEffect)(object)Helper.CreateCooldown("draketotem_cooldown", "$bmp_draketotem", PrefabsSetup._drakeTotemIcon)); __instance.m_StatusEffects.Add((StatusEffect)(object)Helper.CreateCooldown("seekertotem_cooldown", "$bmp_seekerbrutetotem", PrefabsSetup._seekerTotemIcon)); __instance.m_StatusEffects.Add((StatusEffect)(object)Helper.CreateCooldown("valkyrietotem_cooldown", "$bmp_valkyrietotem", PrefabsSetup._valkyrieTotemIcon)); __instance.m_StatusEffects.Add((StatusEffect)(object)Helper.CreateCooldown("bjorntotem_cooldown", "$bmp_bjorntotem", PrefabsSetup._bjornTotemIcon)); __instance.m_StatusEffects.Add((StatusEffect)(object)Helper.CreateCooldown("viletotem_cooldown", "$bmp_viletotem", PrefabsSetup._vileTotemIcon)); } private static void RegisterToFeaster(ObjectDB objectDB) { if (Helper.ObjectDBAwake()) { objectDB.AddToFeaster(PrefabsSetup._magicBundle.LoadAsset<GameObject>("BMP_MountainSoup")); objectDB.AddToFeaster(PrefabsSetup._magicBundle.LoadAsset<GameObject>("BMP_MountainStew")); objectDB.AddToFeaster(PrefabsSetup._magicBundle.LoadAsset<GameObject>("BMP_MushroomJam")); objectDB.AddToFeaster(PrefabsSetup._magicBundle.LoadAsset<GameObject>("BMP_MushroomPie")); objectDB.AddToFeaster(PrefabsSetup._magicBundle.LoadAsset<GameObject>("BMP_MushroomPuff")); objectDB.AddToFeaster(PrefabsSetup._magicBundle.LoadAsset<GameObject>("BMP_SautedMeatMushroom")); } } } [HarmonyPatch] public class PlayerPatch { [HarmonyPrefix] [HarmonyPatch(typeof(Player), "UpdateEnvStatusEffects")] private static bool UpdateEnvStatusEffect_Prefix(Player __instance) { if (!((Character)__instance).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("Arctic Buff"))) { return true; } if (EnvMan.IsCold()) { ((Character)__instance).GetSEMan().RemoveStatusEffect(StringExtensionMethods.GetStableHashCode("Cold"), false); } if (EnvMan.IsFreezing()) { ((Character)__instance).GetSEMan().RemoveStatusEffect(StringExtensionMethods.GetStableHashCode("Freezing"), false); } return true; } [HarmonyPostfix] [HarmonyPatch(typeof(Player), "GetTotalFoodValue")] public static void GetTotalFoodValue_Postfix(ref Player __instance, ref float eitr) { if (!((Object)(object)__instance == (Object)null)) { SetEitr(__instance, "bmr_tatteredcape", ConfigSetup._tatteredCapeEitr.Value, ref eitr); SetEitr(__instance, "bmr_tatteredchest", ConfigSetup._tatteredChestEitr.Value, ref eitr); SetEitr(__instance, "bmr_tatteredhelm", ConfigSetup._tatteredHelmEitr.Value, ref eitr); SetEitr(__instance, "bmr_tatteredlegs", ConfigSetup._tatteredLegsEitr.Value, ref eitr); SetEitr(__instance, "bmr_sorcererscape", ConfigSetup._sorcerersCapeEitr.Value, ref eitr); SetEitr(__instance, "bmr_sorcerershat", ConfigSetup._sorcerersHatEitr.Value, ref eitr); SetEitr(__instance, "bmr_sorcererstrousers", ConfigSetup._sorcerersTrousersEitr.Value, ref eitr); SetEitr(__instance, "bmr_sorcererstunic", ConfigSetup._sorcerersTunicEitr.Value, ref eitr); SetEitr(__instance, "bmr_warlockscape", ConfigSetup._warlocksCapeEitr.Value, ref eitr); SetEitr(__instance, "bmr_warlockshood", ConfigSetup._warlocksHoodEitr.Value, ref eitr); SetEitr(__instance, "bmr_warlockspants", ConfigSetup._warlocksPantsEitr.Value, ref eitr); SetEitr(__instance, "bmr_warlocksvest", ConfigSetup._warlocksVestEitr.Value, ref eitr); SetEitr(__instance, "bmr_polarwolfcape", ConfigSetup._polarWolfCapeEitr.Value, ref eitr); SetEitr(__instance, "bmr_polarwolfchest", ConfigSetup._polarWolfChestEitr.Value, ref eitr); SetEitr(__instance, "bmr_polarwolfhood", ConfigSetup._polarWolfHoodEitr.Value, ref eitr); SetEitr(__instance, "bmr_polarwolflegs", ConfigSetup._polarWolfLegEitr.Value, ref eitr); SetEitr(__instance, "bmr_seekercape", ConfigSetup._seekerCapeEitr.Value, ref eitr); SetEitr(__instance, "bmr_seekerchest", ConfigSetup._seekerChestEitr.Value, ref eitr); SetEitr(__instance, "bmr_seekerhat", ConfigSetup._seekerHatEitr.Value, ref eitr); SetEitr(__instance, "bmr_seekerlegs", ConfigSetup._seekerLegsEitr.Value, ref eitr); SetEitr(__instance, "bmr_crimsoncape", ConfigSetup._crimsonCapeEitr.Value, ref eitr); SetEitr(__instance, "bmr_crimsonchest", ConfigSetup._crimsonChestEitr.Value, ref eitr); SetEitr(__instance, "bmr_crimsonhood", ConfigSetup._crimsonHoodEitr.Value, ref eitr); SetEitr(__instance, "bmr_crimsonlegs", ConfigSetup._crimsonLegsEitr.Value, ref eitr); SetEitr(__instance, "bmp_eitrbelt", ConfigSetup._eitrBeltEitrBonus.Value, ref eitr); SetEitr(__instance, "bmp_eitr_earring", ConfigSetup._eitrEarringEitr.Value, ref eitr); SetEitr(__instance, "bmp_beginners_magicbook", ConfigSetup._beginnersBookEitr.Value, ref eitr); SetEitr(__instance, "bmp_advance_magicbook", ConfigSetup._advanceBookEitr.Value, ref eitr); SetEitr(__instance, "bmp_druidstome", ConfigSetup._druidsTomeEitr.Value, ref eitr); if (Jewelcrafting.API.IsLoaded()) { SetEitr(__instance, "bmp_eitr_ring", RingsAndNecklaces._eitrRingEitr.Value, ref eitr); SetEitr(__instance, "bmp_eitr_necklace", RingsAndNecklaces._eitrNecklaceEitr.Value, ref eitr); } } } [HarmonyPostfix] [HarmonyPatch(typeof(Player), "UpdateStats", new Type[] { typeof(float) })] public static void UpdateStats_Postfix(Player __instance) { if (!((Character)__instance).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("healstaff_cooldown"))) { return; } foreach (string item in Enumerable.Where(new List<string> { "Frost", "Smoked", "Burning", "Poison", "Tared", "Freezing", "Frost" }, (string se) => ((Character)__instance).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode(se)))) { ((Character)__instance).GetSEMan().RemoveStatusEffect(StringExtensionMethods.GetStableHashCode(item), false); } } [HarmonyPriority(800)] [HarmonyPrefix] [HarmonyPatch(typeof(Player), "Awake")] private static void Awake_Prefix(Player __instance) { if (Jewelcrafting.API.IsLoaded()) { MagicSlot._magicSlots.Add(((Component)__instance).GetComponent<VisEquipment>(), new MagicSlot(((Component)__instance).GetComponent<VisEquipment>())); } } [HarmonyPostfix] [HarmonyPatch(typeof(Player), "GetEquipmentEitrRegenModifier")] public static void GetEquipmentEitrRegenModifier_Postfix(ref Player __instance, ref float __result) { __result += Enumerable.Sum(Enumerable.Where(((Humanoid)__instance).GetInventory().GetEquippedItems(), MagicSlot.IsTomeItem), (ItemData item) => item.m_shared.m_eitrRegenModifier); __result += Enumerable.Sum(Enumerable.Where(((Humanoid)__instance).GetInventory().GetEquippedItems(), MagicSlot.IsEarringItem), (ItemData item) => item.m_shared.m_eitrRegenModifier); if (Jewelcrafting.API.IsLoaded()) { __result += Enumerable.Sum(Enumerable.Where(((Humanoid)__instance).GetInventory().GetEquippedItems(), (ItemData i) => i.m_shared.m_name.StartsWith("$jc_ring_") || i.m_shared.m_name.StartsWith("$jc_necklace_")), (ItemData i) => i.m_shared.m_eitrRegenModifier); } } [HarmonyPrefix] [HarmonyPatch(typeof(Player), "SetControls")] private static void SetControls_Prefix(Player __instance, ref bool jump, ref bool attack, ref bool secondaryAttack) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown if (((Character)__instance).IsRiding() & jump) { Sadle val = (Sadle)__instance.m_doodadController; if (!((Object)(object)val == (Object)null)) { ((BaseAI)val.m_monsterAI).m_character.Jump(false); jump = false; } } else if (((Character)__instance).IsRiding()) { jump = false; attack = false; secondaryAttack = false; } } [HarmonyPostfix] [HarmonyPatch(typeof(Player), "TeleportTo")] private static void TeleportTo_Postfix(Player __instance, ref Vector3 pos, ref Quaternion rot) { //IL_00a2: 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_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)__instance == (Object)null) { return; } foreach (Character item in Enumerable.Select(Enumerable.Where(Enumerable.Select(Character.GetAllCharacters(), (Character character) => new { character = character, tamable = ((Component)character).GetComponent<Tameable>() }), <>h__TransparentIdentifier0 => (Object)(object)<>h__TransparentIdentifier0.character != (Object)null && <>h__TransparentIdentifier0.character.m_nview.IsValid() && <>h__TransparentIdentifier0.character.IsTamed() && (Object)(object)<>h__TransparentIdentifier0.tamable != (Object)null && (Object)(object)<>h__TransparentIdentifier0.tamable.m_monsterAI.GetFollowTarget() != (Object)null && (Object)(object)<>h__TransparentIdentifier0.tamable.m_monsterAI.GetFollowTarget() == (Object)(object)((Component)__instance).gameObject && ((Object)((Component)<>h__TransparentIdentifier0.character).gameObject).name.StartsWith("BMP_")), <>h__TransparentIdentifier0 => <>h__TransparentIdentifier0.character)) { ((Component)item).transform.position = pos + ((Component)__instance).transform.forward; ((Component)item).transform.rotation = rot; } } private static void SetEitr(Player player, string statEffect, float amount, ref float eitr) { if (((Character)player).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode(statEffect))) { eitr += amount; } } } [HarmonyPatch] public class SaddlePatch { [HarmonyPrefix] [HarmonyPatch(typeof(Sadle), "ApplyControlls")] private static void ApplyControls_Prefix(Sadle __instance, ref bool run) { if (__instance.m_character.m_name.Contains("asksvin_summon") && Plugin._autoRun) { run = Plugin._autoRun; } } [HarmonyPostfix] [HarmonyPatch(typeof(Sadle), "ResetControlls")] private static void ResetControls_Postfix() { Plugin._autoRun = false; } [HarmonyPostfix] [HarmonyPatch(typeof(Sadle), "GetHoverText")] private static void GetHoverText_Postfix(Sadle __instance, ref string __result) { if (__instance.m_character.m_name.Contains("asksvin_summon")) { if (!__instance.InUseDistance((Humanoid)(object)Player.m_localPlayer)) { __result = Localization.instance.Localize("<color=#888888>$piece_toofar</color>"); } string text = Localization.instance.Localize(__instance.m_hoverText); text += Localization.instance.Localize("\n[<color=yellow><b>$KEY_Use</b></color>] $piece_use"); __result = text; } } } [HarmonyPatch] public class SEManPatch { [HarmonyPrefix] [HarmonyPatch(typeof(SEMan), "Internal_AddStatusEffect")] public static bool InternalAddStatusEffect_Prefix(SEMan __instance, ref int nameHash) { if (!__instance.HaveStatusEffect(StringExtensionMethods.GetStableHashCode("Arctic Buff"))) { return true; } if (nameHash != StringExtensionMethods.GetStableHashCode("Freezing")) { return nameHash != StringExtensionMethods.GetStableHashCode("Cold"); } return false; } } [HarmonyPatch] public static class SkillsPatch { [HarmonyPatch(typeof(Skills), "RaiseSkill")] public static class RaiseSkillPatch { public static void Prefix(ref SkillType skillType, ref float factor) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Invalid comparison between Unknown and I4 //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Invalid comparison between Unknown and I4 if (Plugin._enableExpMultiplier.Value != MagicPlugin.Functions.Toggle.On) { return; } SkillType val = skillType; if ((int)val != 9) { if ((int)val == 10) { factor *= Plugin._bmExpMultiplier.Value; } } else { factor *= Plugin._emExpMultiplier.Value; } } public static void Postfix(Skills __instance, SkillType skillType) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Invalid comparison between Unknown and I4 //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Invalid comparison between Unknown and I4 //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) if (Plugin._enableExpMultiplier.Value != MagicPlugin.Functions.Toggle.On || Plugin._displayExpGained.Value != MagicPlugin.Functions.Toggle.On || ((int)skillType != 10 && (int)skillType != 9)) { return; } try { if (__instance.GetSkillLevel((SkillType)10) < 100f || __instance.GetSkillLevel((SkillType)9) < 100f) { Skill skill = __instance.GetSkill(skillType); float value = skill.m_accumulator / (skill.GetNextLevelRequirement() / 100f); ((Character)__instance.m_player).Message((MessageType)1, $"Level {skill.m_level.tFloat(0)} {skill.m_info.m_skill} [{skill.m_accumulator.tFloat(2)}/{skill.GetNextLevelRequirement().tFloat(2)}] ({value.tFloat(0)}%)", 0, skill.m_info.m_icon); } } catch { } } } [HarmonyPostfix] [HarmonyPatch(typeof(Skills), "GetSkillLevel")] public static void GetSkillLevel_Postfix(Skills __instance, SkillType skillType, ref float __result) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Invalid comparison between Unknown and I4 //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Invalid comparison between Unknown and I4 //IL_0063: 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_0070: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: 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) if ((int)skillType != 9) { if ((int)skillType == 10) { float level = __instance.GetSkill(skillType).m_level; if (((Character)__instance.m_player).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("bmp_necromancer"))) { level += ConfigSetup._necromancerBeltBonus.Value; ((Character)__instance.m_player).GetSEMan().ModifySkillLevel(skillType, ref level); __result = level; } else { ((Character)__instance.m_player).GetSEMan().ModifySkillLevel(skillType, ref level); __result = level; } } } else { float level2 = __instance.GetSkill(skillType).m_level; if (((Character)__instance.m_player).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("bmp_elementalist"))) { level2 += ConfigSetup._elementalistBeltBonus.Value; ((Character)__instance.m_player).GetSEMan().ModifySkillLevel(skillType, ref level2); __result = level2; } else { ((Character)__instance.m_player).GetSEMan().ModifySkillLevel(skillType, ref level2); __result = level2; } } } } [HarmonyPatch] public class SpawnAbilityPatch { [HarmonyPrefix] [HarmonyPatch(typeof(SpawnAbility), "Spawn")] private static bool Spawn_Prefix(SpawnAbility __instance) { //IL_0501: Unknown result type (might be due to invalid IL or missing references) //IL_0506: Unknown result type (might be due to invalid IL or missing references) //IL_05c4: Unknown result type (might be due to invalid IL or missing references) //IL_05c9: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)__instance == (Object)null) && __instance.m_weapon != null) { Character owner = __instance.m_owner; Player val = (Player)(object)((owner is Player) ? owner : null); if (val != null) { switch (__instance.m_weapon.m_shared.m_name) { case "$bmp_necktotem": { if (((Character)val).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("necktotem_cooldown"))) { ((Character)val).Message((MessageType)2, "<size=28>Gate of Valhalla is not yet ready.</size>", 0, (Sprite)null); return false; } StatusEffect statusEffect = ObjectDB.instance.GetStatusEffect(StringExtensionMethods.GetStableHashCode("necktotem_cooldown")); ConfigSetup._neckTotemCooldown.SettingChanged += delegate { statusEffect.m_ttl = ConfigSetup._neckTotemCooldown.Value; }; statusEffect.m_ttl = ConfigSetup._neckTotemCooldown.Value; ((Character)val).GetSEMan().AddStatusEffect(statusEffect, false, 0, 0f); return true; } case "$bmp_wolftotem": { if (((Character)val).GetSkillLevel((SkillType)10) < (float)ConfigSetup._wolfTotemLevel.Value) { ((Character)val).Message((MessageType)2, "<size=28>You're not worthy to summon the <color=red>God of Flames</color></size>", 0, (Sprite)null); return false; } if (((Character)val).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("wolftotem_cooldown"))) { ((Character)val).Message((MessageType)2, "<size=28>Gate of Valhalla is not yet ready!</size>", 0, (Sprite)null); return false; } StatusEffect statusEffect6 = ObjectDB.instance.GetStatusEffect(StringExtensionMethods.GetStableHashCode("wolftotem_cooldown")); ConfigSetup._wolfTotemCooldown.SettingChanged += delegate { statusEffect6.m_ttl = ConfigSetup._wolfTotemCooldown.Value; }; statusEffect6.m_ttl = ConfigSetup._wolfTotemCooldown.Value; ((Character)val).GetSEMan().AddStatusEffect(statusEffect6, false, 0, 0f); return true; } case "$bmp_crystaltotem": { if (((Character)val).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("crystaltotem_cooldown"))) { ((Character)val).Message((MessageType)2, "<size=28>Gate of Valhalla is not yet ready!</size>", 0, (Sprite)null); return false; } StatusEffect statusEffect7 = ObjectDB.instance.GetStatusEffect(StringExtensionMethods.GetStableHashCode("crystaltotem_cooldown")); ConfigSetup._crystalTotemCooldown.SettingChanged += delegate { statusEffect7.m_ttl = ConfigSetup._crystalTotemCooldown.Value; }; statusEffect7.m_ttl = ConfigSetup._crystalTotemCooldown.Value; ((Character)val).GetSEMan().AddStatusEffect(statusEffect7, false, 0, 0f); return true; } case "$bmp_skulltotem": { if (((Character)val).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("skulltotem_cooldown"))) { ((Character)val).Message((MessageType)2, "<size=28>Gate of Valhalla is not yet ready!</size>", 0, (Sprite)null); return false; } StatusEffect statusEffect8 = ObjectDB.instance.GetStatusEffect(StringExtensionMethods.GetStableHashCode("skulltotem_cooldown")); ConfigSetup._skullTotemCooldown.SettingChanged += delegate { statusEffect8.m_ttl = ConfigSetup._skullTotemCooldown.Value; }; statusEffect8.m_ttl = ConfigSetup._skullTotemCooldown.Value; ((Character)val).GetSEMan().AddStatusEffect(statusEffect8, false, 0, 0f); return true; } case "$bmp_modersinheritence": { if (((Character)val).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("modersheritage_cooldown"))) { ((Character)val).Message((MessageType)2, "<size=28>Attack not ready!</size>", 0, (Sprite)null); return false; } StatusEffect statusEffect9 = ObjectDB.instance.GetStatusEffect(StringExtensionMethods.GetStableHashCode("modersheritage_cooldown")); ConfigSetup._modersCooldown.SettingChanged += delegate { statusEffect9.m_ttl = ConfigSetup._modersCooldown.Value; }; statusEffect9.m_ttl = ConfigSetup._modersCooldown.Value; if (ConfigSetup._modersCooldown.Value > 0f) { ((Character)val).GetSEMan().AddStatusEffect(statusEffect9, false, 0, 0f); } Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("fx_himminafl_aoe"), ((Character)val).GetCenterPoint(), Quaternion.identity); return true; } case "$bmp_yagluthsinheritence": { if (((Character)val).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("yagluthsheritage_cooldown"))) { ((Character)val).Message((MessageType)2, "<size=28>Attack not ready!</size>", 0, (Sprite)null); return false; } StatusEffect statusEffect10 = ObjectDB.instance.GetStatusEffect(StringExtensionMethods.GetStableHashCode("yagluthsheritage_cooldown")); ConfigSetup._yagluthsCooldown.SettingChanged += delegate { statusEffect10.m_ttl = ConfigSetup._yagluthsCooldown.Value; }; statusEffect10.m_ttl = ConfigSetup._yagluthsCooldown.Value; if (ConfigSetup._yagluthsCooldown.Value > 0f) { ((Character)val).GetSEMan().AddStatusEffect(statusEffect10, false, 0, 0f); } Object.Instantiate<GameObject>(ZNetScene.instance.GetPrefab("fx_himminafl_aoe"), ((Character)val).GetCenterPoint(), Quaternion.identity); return true; } case "$bmp_askvintotem": { if (((Character)val).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("asksvintotem_cooldown"))) { ((Character)val).Message((MessageType)2, "<size=28>Gate of Valhalla is not yet ready!</size>", 0, (Sprite)null); return false; } StatusEffect statusEffect11 = ObjectDB.instance.GetStatusEffect(StringExtensionMethods.GetStableHashCode("asksvintotem_cooldown")); ConfigSetup._asksvinTotemCD.SettingChanged += delegate { statusEffect11.m_ttl = ConfigSetup._asksvinTotemCD.Value; }; statusEffect11.m_ttl = ConfigSetup._asksvinTotemCD.Value; ((Character)val).GetSEMan().AddStatusEffect(statusEffect11, false, 0, 0f); return true; } case "$bmp_charredtotem": { if (((Character)val).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("charredtotem_cooldown"))) { ((Character)val).Message((MessageType)2, "<size=28>Gate of Valhalla is not yet ready!</size>", 0, (Sprite)null); return false; } StatusEffect statusEffect12 = ObjectDB.instance.GetStatusEffect(StringExtensionMethods.GetStableHashCode("charredtotem_cooldown")); ConfigSetup._charredTotemCD.SettingChanged += delegate { statusEffect12.m_ttl = ConfigSetup._charredTotemCD.Value; }; statusEffect12.m_ttl = ConfigSetup._charredTotemCD.Value; ((Character)val).GetSEMan().AddStatusEffect(statusEffect12, false, 0, 0f); return true; } case "$bmp_draketotem": { if (((Character)val).GetSkillLevel((SkillType)10) < (float)ConfigSetup._drakeTotemLevel.Value) { ((Character)val).Message((MessageType)2, "<size=28>You're not worthy to summon the <color=red>God of Flames</color></size>", 0, (Sprite)null); return false; } if (((Character)val).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("draketotem_cooldown"))) { ((Character)val).Message((MessageType)2, "<size=28>Gate of Valhalla is not yet ready!</size>", 0, (Sprite)null); return false; } StatusEffect statusEffect13 = ObjectDB.instance.GetStatusEffect(StringExtensionMethods.GetStableHashCode("draketotem_cooldown")); ConfigSetup._drakeTotemCD.SettingChanged += delegate { statusEffect13.m_ttl = ConfigSetup._drakeTotemCD.Value; }; statusEffect13.m_ttl = ConfigSetup._drakeTotemCD.Value; ((Character)val).GetSEMan().AddStatusEffect(statusEffect13, false, 0, 0f); return true; } case "$bmp_seekerbrutetotem": { if (((Character)val).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("seekertotem_cooldown"))) { ((Character)val).Message((MessageType)2, "<size=28>Gate of Valhalla is not yet ready!</size>", 0, (Sprite)null); return false; } StatusEffect statusEffect2 = ObjectDB.instance.GetStatusEffect(StringExtensionMethods.GetStableHashCode("seekertotem_cooldown")); ConfigSetup._seekerTotemCD.SettingChanged += delegate { statusEffect2.m_ttl = ConfigSetup._seekerTotemCD.Value; }; statusEffect2.m_ttl = ConfigSetup._seekerTotemCD.Value; ((Character)val).GetSEMan().AddStatusEffect(statusEffect2, false, 0, 0f); return true; } case "$bmp_valkyrietotem": { if (((Character)val).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("valkyrietotem_cooldown"))) { ((Character)val).Message((MessageType)2, "<size=28>Gate of Valhalla is not yet ready!</size>", 0, (Sprite)null); return false; } StatusEffect statusEffect3 = ObjectDB.instance.GetStatusEffect(StringExtensionMethods.GetStableHashCode("valkyrietotem_cooldown")); ConfigSetup._valkyrieTotemCD.SettingChanged += delegate { statusEffect3.m_ttl = ConfigSetup._valkyrieTotemCD.Value; }; statusEffect3.m_ttl = ConfigSetup._valkyrieTotemCD.Value; ((Character)val).GetSEMan().AddStatusEffect(statusEffect3, false, 0, 0f); return true; } case "$bmp_bjorntotem": { if (((Character)val).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("bjorntotem_cooldown"))) { ((Character)val).Message((MessageType)2, "<size=28>Gate of Valhalla is not yet ready!</size>", 0, (Sprite)null); return false; } StatusEffect statusEffect4 = ObjectDB.instance.GetStatusEffect(StringExtensionMethods.GetStableHashCode("bjorntotem_cooldown")); ConfigSetup._bjornTotemCD.SettingChanged += delegate { statusEffect4.m_ttl = ConfigSetup._bjornTotemCD.Value; }; statusEffect4.m_ttl = ConfigSetup._bjornTotemCD.Value; ((Character)val).GetSEMan().AddStatusEffect(statusEffect4, false, 0, 0f); return true; } case "$bmp_viletotem": { if (((Character)val).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("viletotem_cooldown"))) { ((Character)val).Message((MessageType)2, "<size=28>Gate of Valhalla is not yet ready!</size>", 0, (Sprite)null); return false; } StatusEffect statusEffect5 = ObjectDB.instance.GetStatusEffect(StringExtensionMethods.GetStableHashCode("viletotem_cooldown")); ConfigSetup._vileTotemCD.SettingChanged += delegate { statusEffect5.m_ttl = ConfigSetup._vileTotemCD.Value; }; statusEffect5.m_ttl = ConfigSetup._vileTotemCD.Value; ((Character)val).GetSEMan().AddStatusEffect(statusEffect5, false, 0, 0f); return true; } default: return true; } } } return true; } } [HarmonyPatch] public class TameablePatch { [HarmonyPostfix] [HarmonyPatch(typeof(Tameable), "Awake")] private static void Awake_Postfix(Tameable __instance) { if (!((Object)(object)__instance == (Object)null) && ((Object)((Component)__instance).gameObject).name.Contains("AsksvinFriendly")) { __instance.m_nview.GetZDO().Set(ZDOVars.s_haveSaddleHash, true); __instance.m_nview.InvokeRPC(ZNetView.Everybody, "SetSaddle", new object[1] { true }); } } [HarmonyPostfix] [HarmonyPatch(typeof(Tameable), "GetHoverText")] private static void GetHoverText_Postfix(Tameable __instance, ref string __result) { //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) if (!((Object)(object)__instance == (Object)null) && !((Object)(object)__instance.m_character == (Object)null) && !__instance.m_character.IsDead() && __instance.m_character.IsTamed() && __instance.m_nview.IsValid() && __instance.m_nview.IsOwner() && ((Object)((Component)__instance).gameObject).name.StartsWith("BMP_")) { string obj = __result; Localization instance = Localization.instance; KeyboardShortcut value = Plugin._unSummonKey.Value; __result = obj + instance.Localize("\n[<color=yellow><b>" + ((object)(KeyboardShortcut)(ref value)).ToString() + "</b></color>] $bmp_unsummon"); } } } [HarmonyPatch] public class TreeBasePatch { [HarmonyPatch(typeof(TreeBase), "RPC_Damage")] public static class RpcDamagePatch { private static void Prefix(TreeBase __instance, HitData hit) { Character attacker = hit.GetAttacker(); Player val = (Player)(object)((attacker is Player) ? attacker : null); if (val != null && ((Humanoid)val).GetCurrentWeapon() != null && ((Humanoid)val).GetCurrentWeapon() != ((Humanoid)val).m_unarmedWeapon.m_itemData) { int quality = ((Humanoid)val).GetCurrentWeapon().m_quality; if (!(((Object)((Humanoid)val).GetCurrentWeapon().m_dropPrefab).name != "BMP_SurtlingStaff") && quality >= __instance.m_minToolTier && hit.m_damage.m_chop > 0f && __instance.m_nview.IsValid() && __instance.m_nview.IsOwner()) { hit.m_toolTier = (short)quality; ((Character)val).RaiseSkill((SkillType)13, 0.2f); } } } } } [HarmonyPatch] public class TreeLogPatch { [HarmonyPatch(typeof(TreeLog), "RPC_Damage")] public static class RpcDamagePatch { private static void Prefix(TreeLog __instance, HitData hit) { Character attacker = hit.GetAttacker(); Player val = (Player)(object)((attacker is Player) ? attacker : null); if (val != null && ((Humanoid)val).GetCurrentWeapon() != null && ((Humanoid)val).GetCurrentWeapon() != ((Humanoid)val).m_unarmedWeapon.m_itemData) { int quality = ((Humanoid)val).GetCurrentWeapon().m_quality; if (!(((Object)((Humanoid)val).GetCurrentWeapon().m_dropPrefab).name != "BMP_SurtlingStaff") && quality >= __instance.m_minToolTier && hit.m_damage.m_chop > 0f && __instance.m_nview.IsValid() && __instance.m_nview.IsOwner()) { hit.m_toolTier = (short)quality; ((Character)val).RaiseSkill((SkillType)13, 0.2f); } } } } } [HarmonyPatch] public class VisEquipmentPatch { [HarmonyPostfix] [HarmonyPatch(typeof(VisEquipment), "OnEnable")] private static void OnEnable_Postfix(VisEquipment __instance) { if (!MagicSlot._magicSlots.ContainsKey(__instance) && __instance.m_isPlayer) { MagicSlot._magicSlots[__instance] = new MagicSlot(__instance); } } [HarmonyPostfix] [HarmonyPatch(typeof(VisEquipment), "OnDisable")] private static void OnDisable_Postfix(VisEquipment __instance) { MagicSlot._magicSlots.Remove(__instance); } [HarmonyPostfix] [HarmonyPatch(typeof(VisEquipment), "UpdateEquipmentVisuals")] private static void UpdateEquipmentVisuals_Postfix(VisEquipment __instance) { if (__instance.m_isPlayer) { MagicSlot._magicSlots[__instance].UpdateEquipmentVisuals(); } } } [HarmonyPatch(typeof(ZNetScene), "Awake")] public class ZNetScenePatch { public static void Postfix(ZNetScene __instance) { SummonHelper.CreateSummons(__instance); SummonHelper.LinkSummons(__instance); } } } namespace MagicPlugin.JCAdditions { public static class RingsAndNecklaces { public static ConfigEntry<float> _eitrRingEitr; public static ConfigEntry<float> _eitrNecklaceEitr; public static void Init() { if (Jewelcrafting.API.IsLoaded()) { DvergrRing(); EitrRing(); FireResistRing(); FrostResistRing(); PoisonResistRing(); DvergrNecklace(); EitrNecklace(); FireResistNecklace(); FrostResistNecklace(); PoisonResistNecklace(); } } private static void DvergrRing() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) Item item = new Item(Jewelcrafting.API.CreateRingFromTemplate("Blue", Color.blue)); ItemDrop component = item.Prefab.GetComponent<ItemDrop>(); component.m_itemData.m_shared.m_name = "$jc_ring_dvergrring"; component.m_itemData.m_shared.m_description = "$jc_ring_dvergrring_description"; component.m_itemData.m_shared.m_maxQuality = 1; component.m_itemData.m_shared.m_eitrRegenModifier = 0.25f; item.Crafting.Add(((Object)Jewelcrafting.API.GetGemcuttersTable()).name, 3); item.MaximumRequiredStationLevel = 3; item.RequiredItems.Add("Perfect_Blue_Socket", 5); item.RequiredItems.Add("Chain", 2); item.RequiredItems.Add("Eitr", 16); item.Configurable = Configurability.Recipe | Configurability.Stats; } private static void EitrRing() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Expected O, but got Unknown Item item = new Item(Jewelcrafting.API.CreateRingFromTemplate("Purple", new Color(128f, 0f, 128f))); ItemDrop component = item.Prefab.GetComponent<ItemDrop>(); component.m_itemData.m_shared.m_name = "$jc_ring_eitrring"; component.m_itemData.m_shared.m_description = "$jc_ring_eitrring_description"; component.m_itemData.m_shared.m_maxQuality = 1; string group = "Eitr Ring"; _eitrRingEitr = Plugin._Instance.config(group, "Eitr Bonus", 46f, new ConfigDescription("Eitr ring eitr bonus.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 100f), new object[1] { new MagicPlugin.Functions.ConfigurationManagerAttributes { ShowRangeAsPercent = false } })); item.Crafting.Add(((Object)Jewelcrafting.API.GetGemcuttersTable()).name, 3); item.MaximumRequiredStationLevel = 3; item.RequiredItems.Add("Perfect_Purple_Socket", 5); item.RequiredItems.Add("Chain", 2); item.RequiredItems.Add("Eitr", 16); item.Configurable = Configurability.Recipe; AddEitr statusEffect = ScriptableObject.CreateInstance<AddEitr>(); ((Object)statusEffect).name = "bmp_eitr_ring"; ((StatusEffect)statusEffect).m_name = component.m_itemData.m_shared.m_name; AddEitr addEitr = statusEffect; ItemData itemData = component.m_itemData; ((StatusEffect)addEitr).m_icon = ((itemData != null) ? itemData.GetIcon() : null); _eitrRingEitr.SettingChanged += delegate { statusEffect.SetEitr(_eitrRingEitr.Value); }; statusEffect.SetEitr(_eitrRingEitr.Value); component.m_itemData.m_shared.m_equipStatusEffect = (StatusEffect)(object)statusEffect; } private static void FireResistRing() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) Item item = new Item(Jewelcrafting.API.CreateRingFromTemplate("Red", Color.red)); ItemDrop component = item.Prefab.GetComponent<ItemDrop>(); component.m_itemData.m_shared.m_name = "$jc_ring_fireresistring"; component.m_itemData.m_shared.m_description = "$jc_ring_fireresistring_description"; component.m_itemData.m_shared.m_maxQuality = 1; item.Crafting.Add(((Object)Jewelcrafting.API.GetGemcuttersTable()).name, 3); item.MaximumRequiredStationLevel = 3; item.RequiredItems.Add("Perfect_Red_Socket", 5); item.RequiredItems.Add("Chain", 2); item.RequiredItems.Add("TrophySurtling", 1); item.Configurable = Configurability.Recipe; SE_Stats val = ScriptableObject.CreateInstance<SE_Stats>(); ((Object)val).name = "bmp_fireresist_ring"; ((StatusEffect)val).m_name = component.m_itemData.m_shared.m_name; ((StatusEffect)val).m_icon = component.m_itemData.GetIcon(); val.m_mods = new List<DamageModPair>(1) { new DamageModPair { m_type = (DamageType)32, m_modifier = (DamageModifier)5 } }; component.m_itemData.m_shared.m_equipStatusEffect = (StatusEffect)(object)val; } private static void FrostResistRing() { //IL_0005: 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_0107: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) Item item = new Item(Jewelcrafting.API.CreateRingFromTemplate("Cyan", Color.cyan)); ItemDrop component = item.Prefab.GetComponent<ItemDrop>(); component.m_itemData.m_shared.m_name = "$jc_ring_frostresistring"; component.m_itemData.m_shared.m_description = "$jc_ring_frostresistring_description"; component.m_itemData.m_shared.m_maxQuality = 1; item.Crafting.Add(((Object)Jewelcrafting.API.GetGemcuttersTable()).name, 3); item.MaximumRequiredStationLevel = 3; item.RequiredItems.Add("Perfect_Blue_Socket", 5); item.RequiredItems.Add("Chain", 2); item.RequiredItems.Add("FreezeGland", 16); item.Configurable = Configurability.Recipe; SE_Stats val = ScriptableObject.CreateInstance<SE_Stats>(); ((Object)val).name = "bmp_frostresist_ring"; ((StatusEffect)val).m_name = component.m_itemData.m_shared.m_name; ((StatusEffect)val).m_icon = component.m_itemData.GetIcon(); val.m_mods = new List<DamageModPair>(1) { new DamageModPair { m_type = (DamageType)64, m_modifier = (DamageModifier)5 } }; component.m_itemData.m_shared.m_equipStatusEffect = (StatusEffect)(object)val; } private static void PoisonResistRing() { //IL_0005: 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_010a: 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_0117: Unknown result type (might be due to invalid IL or missing references) Item item = new Item(Jewelcrafting.API.CreateRingFromTemplate("Green", Color.green)); ItemDrop component = item.Prefab.GetComponent<ItemDrop>(); component.m_itemData.m_shared.m_name = "$jc_ring_poisonresistring"; component.m_itemData.m_shared.m_description = "$jc_ring_poisonresistring_description"; component.m_itemData.m_shared.m_maxQuality = 1; item.Crafting.Add(((Object)Jewelcrafting.API.GetGemcuttersTable()).name, 3); item.MaximumRequiredStationLevel = 3; item.RequiredItems.Add("Perfect_Green_Socket", 5); item.RequiredItems.Add("Chain", 2); item.RequiredItems.Add("Guck", 16); item.Configurable = Configurability.Recipe; SE_Stats val = ScriptableObject.CreateInstance<SE_Stats>(); ((Object)val).name = "bmp_poisonresist_ring"; ((StatusEffect)val).m_name = component.m_itemData.m_shared.m_name; ((StatusEffect)val).m_icon = component.m_itemData.GetIcon(); val.m_mods = new List<DamageModPair>(1) { new DamageModPair { m_type = (DamageType)256, m_modifier = (DamageModifier)5 } }; component.m_itemData.m_shared.m_equipStatusEffect = (StatusEffect)(object)val; } private static void DvergrNecklace() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) Item item = new Item(Jewelcrafting.API.CreateNecklaceFromTemplate("Blue", Color.blue)); ItemDrop component = item.Prefab.GetComponent<ItemDrop>(); component.m_itemData.m_shared.m_name = "$jc_necklace_dvergrnecklace"; component.m_itemData.m_shared.m_description = "$jc_necklace_dvergrnecklace_description"; component.m_itemData.m_shared.m_maxQuality = 1; component.m_itemData.m_shared.m_eitrRegenModifier = 0.25f; item.Crafting.Add(((Object)Jewelcrafting.API.GetGemcuttersTable()).name, 3); item.MaximumRequiredStationLevel = 3; item.RequiredItems.Add("Perfect_Blue_Socket", 5); item.RequiredItems.Add("Chain", 2); item.Configurable = Configurability.Recipe | Configurability.Stats; } private static void EitrNecklace() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Expected O, but got Unknown Item item = new Item(Jewelcrafting.API.CreateNecklaceFromTemplate("Purple", new Color(128f, 0f, 128f))); ItemDrop component = item.Prefab.GetComponent<ItemDrop>(); component.m_itemData.m_shared.m_name = "$jc_necklace_eitrnecklace"; component.m_itemData.m_shared.m_description = "$jc_necklace_eitrnecklace_description"; component.m_itemData.m_shared.m_maxQuality = 1; string group = "Eitr Necklace"; _eitrNecklaceEitr = Plugin._Instance.config(group, "Eitr Bonus", 42f, new ConfigDescription("Eitr necklace eitr bonus.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 100f), new object[1] { new MagicPlugin.Functions.ConfigurationManagerAttributes { ShowRangeAsPercent = false } })); item.Crafting.Add(((Object)Jewelcrafting.API.GetGemcuttersTable()).name, 3); item.MaximumRequiredStationLevel = 3; item.RequiredItems.Add("Perfect_Purple_Socket", 5); item.RequiredItems.Add("Chain", 2); item.RequiredItems.Add("Eitr", 16); item.Configurable = Configurability.Recipe; AddEitr statusEffect = ScriptableObject.CreateInstance<AddEitr>(); ((Object)statusEffect).name = "bmp_eitr_necklace"; ((StatusEffect)statusEffect).m_name = component.m_itemData.m_shared.m_name; ((StatusEffect)statusEffect).m_icon = component.m_itemData.GetIcon(); _eitrNecklaceEitr.SettingChanged += delegate { statusEffect.SetEitr(_eitrNecklaceEitr.Value); }; statusEffect.SetEitr(_eitrNecklaceEitr.Value); component.m_itemData.m_shared.m_equipStatusEffect = (StatusEffect)(object)statusEffect; } private static void FireResistNecklace() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) Item item = new Item(Jewelcrafting.API.CreateNecklaceFromTemplate("Red", Color.red)); ItemDrop component = item.Prefab.GetComponent<ItemDrop>(); component.m_itemData.m_shared.m_name = "$jc_necklace_fireresistnecklace"; component.m_itemData.m_shared.m_description = "$jc_necklace_fireresistnecklace_description"; component.m_itemData.m_shared.m_maxQuality = 1; item.Crafting.Add(((Object)Jewelcrafting.API.GetGemcuttersTable()).name, 3); item.MaximumRequiredStationLevel = 3; item.RequiredItems.Add("Perfect_Red_Socket", 5); item.RequiredItems.Add("Chain", 2); item.RequiredItems.Add("TrophySurtling", 1); item.Configurable = Configurability.Recipe; SE_Stats val = ScriptableObject.CreateInstance<SE_Stats>(); ((Object)val).name = "bmp_fireresist_necklace"; ((StatusEffect)val).m_name = component.m_itemData.m_shared.m_name; ((StatusEffect)val).m_icon = component.m_itemData.GetIcon(); val.m_mods = new List<DamageModPair>(1) { new DamageModPair { m_type = (DamageType)32, m_modifier = (DamageModifier)5 } }; component.m_itemData.m_shared.m_equipStatusEffect = (StatusEffect)(object)val; } private static void FrostResistNecklace() { //IL_0005: 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_0107: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) Item item = new Item(Jewelcrafting.API.CreateNecklaceFromTemplate("Cyan", Color.cyan)); ItemDrop component = item.Prefab.GetComponent<ItemDrop>(); component.m_itemData.m_shared.m_name = "$jc_necklace_frostresistnecklace"; component.m_itemData.m_shared.m_description = "$jc_necklace_frostresistnecklace_description"; component.m_itemData.m_shared.m_maxQuality = 1; item.Crafting.Add(((Object)Jewelcrafting.API.GetGemcuttersTable()).name, 3); item.MaximumRequiredStationLevel = 3; item.RequiredItems.Add("Perfect_Blue_Socket", 5); item.RequiredItems.Add("Chain", 2); item.RequiredItems.Add("FreezeGland", 16); item.Configurable = Configurability.Recipe; SE_Stats val = ScriptableObject.CreateInstance<SE_Stats>(); ((Object)val).name = "bmp_frostresist_necklace"; ((StatusEffect)val).m_name = component.m_itemData.m_shared.m_name; ((StatusEffect)val).m_icon = component.m_itemData.GetIcon(); val.m_mods = new List<DamageModPair>(1) { new DamageModPair { m_type = (DamageType)64, m_modifier = (DamageModifier)5 } }; component.m_itemData.m_shared.m_equipStatusEffect = (StatusEffect)(object)val; } private static void PoisonResistNecklace() { //IL_0005: 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_010a: 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_0117: Unknown result type (might be due to invalid IL or missing re