Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of ForsakenJVL v2.0.40
plugins/Digitalroot.Valheim.ForsakenJVL.dll
Decompiled a year ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.CodeDom.Compiler; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Net.Http; using System.Reflection; using System.Resources; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Timers; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using Digitalroot.Valheim.Common; using Digitalroot.Valheim.Common.Json; using Digitalroot.Valheim.Common.Names.Vanilla; using Digitalroot.Valheim.ForsakenJVL.Properties; using JetBrains.Annotations; using Jotunn.Configs; using Jotunn.Entities; using Jotunn.Managers; using Jotunn.Utils; using SimpleJson; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("Digitalroot.Valheim.ForsakenJVL")] [assembly: AssemblyDescription("Digitalroot ForsakenJVL")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Digitalroot Technologies")] [assembly: AssemblyProduct("Digitalroot Valheim Mods")] [assembly: AssemblyCopyright("Copyright © Digitalroot Technologies 2021 - 2024")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("3ccc4dc1-5b17-47c1-b996-ca03b8639a61")] [assembly: AssemblyFileVersion("2.0.40")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("2.0.40.0")] [module: UnverifiableCode] namespace Digitalroot.Valheim.ForsakenJVL { public class CMB_BurnWhenHeld : MonoBehaviour { private readonly System.Timers.Timer _timer; public CMB_BurnWhenHeld() { try { Log.Trace(Main.Instance, "Digitalroot.Valheim.ForsakenJVL." + MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name); _timer = new System.Timers.Timer { AutoReset = true, Enabled = false, Interval = 10000.0 }; _timer.Elapsed += TimerElapsed; } catch (Exception e) { Log.Error(Main.Instance, e); } } private void TimerElapsed(object sender, ElapsedEventArgs e) { try { Log.Trace(Main.Instance, "Digitalroot.Valheim.ForsakenJVL." + MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name); if (Utils.IsPlayerReady() && ((Humanoid)Player.m_localPlayer).IsItemEquiped(((Component)this).gameObject.GetComponent<ItemDrop>().m_itemData)) { ((Character)Player.m_localPlayer).AddFireDamage(10f); } } catch (Exception e2) { Log.Error(Main.Instance, e2); } } [UsedImplicitly] public void Start() { Log.Trace(Main.Instance, "Digitalroot.Valheim.ForsakenJVL." + MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name); _timer.Elapsed += TimerElapsed; _timer.Start(); } [UsedImplicitly] private void OnDestroy() { Log.Trace(Main.Instance, "Digitalroot.Valheim.ForsakenJVL." + MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name); _timer.Elapsed -= TimerElapsed; _timer.Stop(); _timer.Dispose(); } } [BepInPlugin("digitalroot.valheim.mods.forsaken.jvl", "Digitalroot ForsakenJVL", "2.0.40")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInIncompatibility("com.bepinex.plugins.forsaken")] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] public class Main : BaseUnityPlugin, ITraceableLogging { [UsedImplicitly] public static ConfigEntry<int> NexusId; public static Main Instance; private AssetBundle _assetBundle; [UsedImplicitly] public const string Version = "2.0.40"; [UsedImplicitly] public const string Name = "Digitalroot ForsakenJVL"; [UsedImplicitly] public const string Guid = "digitalroot.valheim.mods.forsaken.jvl"; [UsedImplicitly] public const string Namespace = "Digitalroot.Valheim.ForsakenJVL"; public string Source => "Digitalroot.Valheim.ForsakenJVL"; public bool EnableTrace { get; } public Main() { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Expected O, but got Unknown Instance = this; NexusId = ((BaseUnityPlugin)this).Config.Bind<int>("General", "NexusID", 1538, new ConfigDescription("Nexus mod ID for updates", (AcceptableValueBase)null, new object[1] { (object)new ConfigurationManagerAttributes { IsAdminOnly = false, Browsable = false, ReadOnly = true } })); EnableTrace = false; Log.RegisterSource(Instance); Log.Trace(Instance, "Digitalroot.Valheim.ForsakenJVL." + MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name); } [UsedImplicitly] private void Awake() { try { Log.Trace(Instance, "Digitalroot.Valheim.ForsakenJVL." + MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name); LoadAssetFile(); PrefabManager.OnVanillaPrefabsAvailable += AddCustomItems; } catch (Exception e) { Log.Error(Instance, e); } } private async void LoadAssetFile() { try { Log.Trace(Instance, "Digitalroot.Valheim.ForsakenJVL." + MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name); FileInfo assetFile = new FileInfo(Path.Combine(new FileInfo(typeof(Main).Assembly.Location).DirectoryName ?? throw new InvalidOperationException("Unable to load assetFile."), "forsakenmod")); if (!assetFile.Exists) { HttpUtil.DownloadFileAsync(Resources.asseturl, assetFile); } for (int i = 0; i < 36000; i++) { assetFile.Refresh(); if (assetFile.Exists) { break; } await Task.Delay(25); } if (!assetFile.Exists) { Log.Error(Instance, "Unable to find asset file 'forsakenmod', please make sure 'forsakenmod' and 'Digitalroot.Valheim.ForsakenJVL.dll' are in " + assetFile.DirectoryName); Log.Error(Instance, "Digitalroot.Valheim.ForsakenJVL is not loaded."); } else { _assetBundle = AssetUtils.LoadAssetBundle(assetFile.FullName); } } catch (Exception e) { Log.Error(Instance, e); } } private void AddCustomItems() { try { Log.Trace(Instance, "Digitalroot.Valheim.ForsakenJVL." + MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name); if (!((Object)(object)_assetBundle == (Object)null)) { AddBattleaxeLightning(); AddBowFrost(); AddSledgeFire(); AddSledgePoison(); AddSpearSpirit(); AddUnarmedFenring(); AddKnifeFrost(); AddUnarmedFrost(); AddUnarmedFrostOh(); AddSwordFire(); AddSwordLightning(); AddShieldFire(); AddSpellFire(); _assetBundle.Unload(false); PrefabManager.OnVanillaPrefabsAvailable -= AddCustomItems; } } catch (Exception e) { Log.Error(Instance, e); } } private void AddSpellFire() { //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Expected O, but got Unknown //IL_01c8: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Expected O, but got Unknown //IL_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_01f0: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: Unknown result type (might be due to invalid IL or missing references) //IL_0203: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Expected O, but got Unknown //IL_020d: Unknown result type (might be due to invalid IL or missing references) //IL_0212: Unknown result type (might be due to invalid IL or missing references) //IL_021d: Unknown result type (might be due to invalid IL or missing references) //IL_0225: Unknown result type (might be due to invalid IL or missing references) //IL_022d: Expected O, but got Unknown //IL_0233: Unknown result type (might be due to invalid IL or missing references) //IL_023d: Expected O, but got Unknown try { Log.Trace(Instance, "Digitalroot.Valheim.ForsakenJVL." + MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name); GameObject val = _assetBundle.LoadAsset<GameObject>("Assets/Custom_Items/v801_SpellFire/v801_SpellFire.prefab"); if ((Object)(object)val == (Object)null) { throw new NullReferenceException("prefab"); } ItemDrop component = val.GetComponent<ItemDrop>(); if ((Object)(object)component == (Object)null) { throw new NullReferenceException("itemDrop"); } component.m_itemData.m_shared.m_name = "$item_forsaken_spellfire"; component.m_itemData.m_shared.m_description = "$item_forsaken_spellfire_description"; component.m_itemData.m_shared.m_itemType = (ItemType)3; component.m_itemData.m_shared.m_maxStackSize = 1; component.m_itemData.m_shared.m_maxQuality = 4; component.m_itemData.m_shared.m_weight = 0.1f; component.m_itemData.m_shared.m_maxDurability = 600f; component.m_itemData.m_shared.m_equipDuration = 0.2f; component.m_itemData.m_shared.m_variants = 1; component.m_itemData.m_shared.m_blockPower = 0f; component.m_itemData.m_shared.m_timedBlockBonus = 0f; component.m_itemData.m_shared.m_deflectionForce = 0f; component.m_itemData.m_shared.m_attackForce = 0f; component.m_itemData.m_shared.m_damagesPerLevel.m_fire = 20f; ItemManager instance = ItemManager.Instance; ItemConfig val2 = new ItemConfig(); val2.CraftingStation = CraftingStationNames.Forge; val2.MinStationLevel = 7; val2.Requirements = (RequirementConfig[])(object)new RequirementConfig[3] { new RequirementConfig { Item = ItemDropNames.Crystal, Amount = 40, AmountPerLevel = 10 }, new RequirementConfig { Item = ItemDropNames.TrophyGoblinKing, Amount = 12, AmountPerLevel = 0 }, new RequirementConfig { Item = ItemDropNames.YagluthDrop, Amount = 36, AmountPerLevel = 2 } }; instance.AddItem(new CustomItem(val, false, val2)); } catch (Exception e) { Log.Error(Instance, e); } } private void AddShieldFire() { //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Expected O, but got Unknown //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01b3: Unknown result type (might be due to invalid IL or missing references) //IL_01be: Unknown result type (might be due to invalid IL or missing references) //IL_01c6: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Expected O, but got Unknown //IL_01d1: Unknown result type (might be due to invalid IL or missing references) //IL_01d6: Unknown result type (might be due to invalid IL or missing references) //IL_01e1: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Unknown result type (might be due to invalid IL or missing references) //IL_01f2: Expected O, but got Unknown //IL_01f4: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_020c: Unknown result type (might be due to invalid IL or missing references) //IL_0214: Expected O, but got Unknown //IL_0216: Unknown result type (might be due to invalid IL or missing references) //IL_021b: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Unknown result type (might be due to invalid IL or missing references) //IL_022e: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Expected O, but got Unknown //IL_023c: Unknown result type (might be due to invalid IL or missing references) //IL_0246: Expected O, but got Unknown try { Log.Trace(Instance, "Digitalroot.Valheim.ForsakenJVL." + MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name); GameObject val = _assetBundle.LoadAsset<GameObject>("Assets/Custom_Items/v801_ShieldFire/v801_ShieldFire.prefab"); if ((Object)(object)val == (Object)null) { throw new NullReferenceException("prefab"); } ItemDrop component = val.GetComponent<ItemDrop>(); if ((Object)(object)component == (Object)null) { throw new NullReferenceException("itemDrop"); } component.m_itemData.m_shared.m_name = "$item_forsaken_shieldfire"; component.m_itemData.m_shared.m_description = "$item_forsaken_shieldfire_description"; component.m_itemData.m_shared.m_itemType = (ItemType)5; component.m_itemData.m_shared.m_maxStackSize = 1; component.m_itemData.m_shared.m_maxQuality = 4; component.m_itemData.m_shared.m_weight = 10f; component.m_itemData.m_shared.m_maxDurability = 600f; component.m_itemData.m_shared.m_equipDuration = 0.2f; component.m_itemData.m_shared.m_variants = 1; component.m_itemData.m_shared.m_blockPower = 120f; component.m_itemData.m_shared.m_timedBlockBonus = 6f; component.m_itemData.m_shared.m_deflectionForce = 8f; component.m_itemData.m_shared.m_attackForce = 0f; ItemManager instance = ItemManager.Instance; ItemConfig val2 = new ItemConfig(); val2.CraftingStation = CraftingStationNames.Forge; val2.MinStationLevel = 7; val2.Requirements = (RequirementConfig[])(object)new RequirementConfig[4] { new RequirementConfig { Item = ItemDropNames.Silver, Amount = 20, AmountPerLevel = 10 }, new RequirementConfig { Item = ItemDropNames.FlametalNew, Amount = 40, AmountPerLevel = 12 }, new RequirementConfig { Item = ItemDropNames.TrophyGoblinKing, Amount = 10, AmountPerLevel = 0 }, new RequirementConfig { Item = ItemDropNames.YagluthDrop, Amount = 30, AmountPerLevel = 2 } }; instance.AddItem(new CustomItem(val, false, val2)); } catch (Exception e) { Log.Error(Instance, e); } } private void AddSwordLightning() { //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_02e0: Unknown result type (might be due to invalid IL or missing references) //IL_02e6: Expected O, but got Unknown //IL_0301: Unknown result type (might be due to invalid IL or missing references) //IL_0306: Unknown result type (might be due to invalid IL or missing references) //IL_0311: Unknown result type (might be due to invalid IL or missing references) //IL_0319: Unknown result type (might be due to invalid IL or missing references) //IL_0322: Expected O, but got Unknown //IL_0324: Unknown result type (might be due to invalid IL or missing references) //IL_0329: Unknown result type (might be due to invalid IL or missing references) //IL_0334: Unknown result type (might be due to invalid IL or missing references) //IL_033c: Unknown result type (might be due to invalid IL or missing references) //IL_0345: Expected O, but got Unknown //IL_0347: Unknown result type (might be due to invalid IL or missing references) //IL_034c: Unknown result type (might be due to invalid IL or missing references) //IL_0357: Unknown result type (might be due to invalid IL or missing references) //IL_035f: Unknown result type (might be due to invalid IL or missing references) //IL_0367: Expected O, but got Unknown //IL_0369: Unknown result type (might be due to invalid IL or missing references) //IL_036e: Unknown result type (might be due to invalid IL or missing references) //IL_0379: Unknown result type (might be due to invalid IL or missing references) //IL_0381: Unknown result type (might be due to invalid IL or missing references) //IL_0389: Expected O, but got Unknown //IL_038f: Unknown result type (might be due to invalid IL or missing references) //IL_0399: Expected O, but got Unknown try { Log.Trace(Instance, "Digitalroot.Valheim.ForsakenJVL." + MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name); GameObject val = _assetBundle.LoadAsset<GameObject>("Assets/Custom_Items/v801_SwordLightning/v801_SwordLightning.prefab"); if ((Object)(object)val == (Object)null) { throw new NullReferenceException("prefab"); } ItemDrop component = val.GetComponent<ItemDrop>(); if ((Object)(object)component == (Object)null) { throw new NullReferenceException("itemDrop"); } component.m_itemData.m_shared.m_name = "$item_forsaken_swordlightning"; component.m_itemData.m_shared.m_description = "$item_forsaken_swordlightning_description"; component.m_itemData.m_shared.m_itemType = (ItemType)3; component.m_itemData.m_shared.m_equipDuration = 0.2f; component.m_itemData.m_shared.m_maxDurability = 700f; component.m_itemData.m_shared.m_maxStackSize = 1; component.m_itemData.m_shared.m_maxQuality = 4; component.m_itemData.m_shared.m_variants = 1; component.m_itemData.m_shared.m_timedBlockBonus = 2f; component.m_itemData.m_shared.m_deflectionForce = 2f; component.m_itemData.m_shared.m_attackForce = 8f; component.m_itemData.m_shared.m_blockPower = 30f; component.m_itemData.m_shared.m_damages.m_slash = 40f; component.m_itemData.m_shared.m_damages.m_pierce = 40f; component.m_itemData.m_shared.m_damages.m_lightning = 70f; component.m_itemData.m_shared.m_damagesPerLevel.m_slash = 5f; component.m_itemData.m_shared.m_damagesPerLevel.m_pierce = 5f; component.m_itemData.m_shared.m_damagesPerLevel.m_lightning = 10f; component.m_itemData.m_shared.m_attack.m_attackStamina = 20f; component.m_itemData.m_shared.m_secondaryAttack.m_damageMultiplier = 1f; component.m_itemData.m_shared.m_secondaryAttack.m_attackStamina = 30f; component.m_itemData.m_shared.m_secondaryAttack.m_speedFactor = 0.3f; component.m_itemData.m_shared.m_secondaryAttack.m_speedFactorRotation = 0.3f; component.m_itemData.m_shared.m_secondaryAttack.m_forceMultiplier = 10f; component.m_itemData.m_shared.m_secondaryAttack.m_staggerMultiplier = 6f; component.m_itemData.m_shared.m_secondaryAttack.m_lowerDamagePerHit = false; ItemManager instance = ItemManager.Instance; ItemConfig val2 = new ItemConfig(); val2.CraftingStation = CraftingStationNames.Forge; val2.MinStationLevel = 7; val2.Requirements = (RequirementConfig[])(object)new RequirementConfig[4] { new RequirementConfig { Item = ItemDropNames.Crystal, Amount = 40, AmountPerLevel = 40 }, new RequirementConfig { Item = ItemDropNames.FlametalNew, Amount = 60, AmountPerLevel = 60 }, new RequirementConfig { Item = ItemDropNames.TrophyGoblinKing, Amount = 12, AmountPerLevel = 0 }, new RequirementConfig { Item = ItemDropNames.YagluthDrop, Amount = 36, AmountPerLevel = 2 } }; instance.AddItem(new CustomItem(val, false, val2)); } catch (Exception e) { Log.Error(Instance, e); } } private void AddSwordFire() { //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_043b: Unknown result type (might be due to invalid IL or missing references) //IL_0441: Expected O, but got Unknown //IL_045c: Unknown result type (might be due to invalid IL or missing references) //IL_0461: Unknown result type (might be due to invalid IL or missing references) //IL_046c: Unknown result type (might be due to invalid IL or missing references) //IL_0474: Unknown result type (might be due to invalid IL or missing references) //IL_047d: Expected O, but got Unknown //IL_047f: Unknown result type (might be due to invalid IL or missing references) //IL_0484: Unknown result type (might be due to invalid IL or missing references) //IL_048f: Unknown result type (might be due to invalid IL or missing references) //IL_0497: Unknown result type (might be due to invalid IL or missing references) //IL_04a0: Expected O, but got Unknown //IL_04a2: Unknown result type (might be due to invalid IL or missing references) //IL_04a7: Unknown result type (might be due to invalid IL or missing references) //IL_04b2: Unknown result type (might be due to invalid IL or missing references) //IL_04ba: Unknown result type (might be due to invalid IL or missing references) //IL_04c3: Expected O, but got Unknown //IL_04c5: Unknown result type (might be due to invalid IL or missing references) //IL_04ca: Unknown result type (might be due to invalid IL or missing references) //IL_04d5: Unknown result type (might be due to invalid IL or missing references) //IL_04dd: Unknown result type (might be due to invalid IL or missing references) //IL_04e5: Expected O, but got Unknown //IL_04eb: Unknown result type (might be due to invalid IL or missing references) //IL_04f5: Expected O, but got Unknown try { Log.Trace(Instance, "Digitalroot.Valheim.ForsakenJVL." + MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name); GameObject val = _assetBundle.LoadAsset<GameObject>("Assets/Custom_Items/v801_SwordFire/v801_SwordFire.prefab"); if ((Object)(object)val == (Object)null) { throw new NullReferenceException("prefab"); } ItemDrop component = val.GetComponent<ItemDrop>(); if ((Object)(object)component == (Object)null) { throw new NullReferenceException("itemDrop"); } component.m_itemData.m_shared.m_name = "$item_forsaken_swordfire"; component.m_itemData.m_shared.m_description = "$item_forsaken_swordfire_description"; component.m_itemData.m_shared.m_itemType = (ItemType)14; component.m_itemData.m_shared.m_maxStackSize = 1; component.m_itemData.m_shared.m_maxQuality = 4; component.m_itemData.m_shared.m_weight = 30f; component.m_itemData.m_shared.m_maxDurability = 800f; component.m_itemData.m_shared.m_equipDuration = 1f; component.m_itemData.m_shared.m_variants = 1; component.m_itemData.m_shared.m_blockPower = 70f; component.m_itemData.m_shared.m_timedBlockBonus = 4f; component.m_itemData.m_shared.m_deflectionForce = 8f; component.m_itemData.m_shared.m_attackForce = 0f; component.m_itemData.m_shared.m_movementModifier = -0.25f; component.m_itemData.m_shared.m_damages.m_slash = 0f; component.m_itemData.m_shared.m_damages.m_fire = 46f; component.m_itemData.m_shared.m_damages.m_frost = 46f; component.m_itemData.m_shared.m_damages.m_lightning = 46f; component.m_itemData.m_shared.m_damages.m_spirit = 46f; component.m_itemData.m_shared.m_damages.m_poison = 46f; component.m_itemData.m_shared.m_damagesPerLevel.m_slash = 0f; component.m_itemData.m_shared.m_damagesPerLevel.m_fire = 10f; component.m_itemData.m_shared.m_damagesPerLevel.m_frost = 10f; component.m_itemData.m_shared.m_damagesPerLevel.m_lightning = 10f; component.m_itemData.m_shared.m_damagesPerLevel.m_spirit = 10f; component.m_itemData.m_shared.m_damagesPerLevel.m_poison = 10f; component.m_itemData.m_shared.m_attack.m_attackStamina = 25f; component.m_itemData.m_shared.m_attack.m_attackAnimation = "battleaxe_attack"; component.m_itemData.m_shared.m_attack.m_attackChainLevels = 3; component.m_itemData.m_shared.m_attack.m_speedFactor = 0.1f; component.m_itemData.m_shared.m_attack.m_speedFactorRotation = 0.1f; component.m_itemData.m_shared.m_secondaryAttack.m_attackAnimation = "battleaxe_secondary"; component.m_itemData.m_shared.m_secondaryAttack.m_attackChainLevels = 0; component.m_itemData.m_shared.m_secondaryAttack.m_attackStamina = 30f; component.m_itemData.m_shared.m_secondaryAttack.m_speedFactor = 0.1f; component.m_itemData.m_shared.m_secondaryAttack.m_speedFactorRotation = 0.1f; component.m_itemData.m_shared.m_secondaryAttack.m_damageMultiplier = 1f; component.m_itemData.m_shared.m_secondaryAttack.m_forceMultiplier = 10f; component.m_itemData.m_shared.m_secondaryAttack.m_staggerMultiplier = 6f; component.m_itemData.m_shared.m_secondaryAttack.m_lowerDamagePerHit = false; ItemManager instance = ItemManager.Instance; ItemConfig val2 = new ItemConfig(); val2.CraftingStation = CraftingStationNames.Forge; val2.MinStationLevel = 7; val2.Requirements = (RequirementConfig[])(object)new RequirementConfig[4] { new RequirementConfig { Item = ItemDropNames.Iron, Amount = 40, AmountPerLevel = 10 }, new RequirementConfig { Item = ItemDropNames.Crystal, Amount = 40, AmountPerLevel = 15 }, new RequirementConfig { Item = ItemDropNames.Silver, Amount = 36, AmountPerLevel = 12 }, new RequirementConfig { Item = ItemDropNames.TrophyEikthyr, Amount = 12, AmountPerLevel = 0 } }; instance.AddItem(new CustomItem(val, false, val2)); } catch (Exception e) { Log.Error(Instance, e); } } private void AddUnarmedFrostOh() { //IL_02fe: Unknown result type (might be due to invalid IL or missing references) //IL_0304: Expected O, but got Unknown //IL_031f: Unknown result type (might be due to invalid IL or missing references) //IL_0324: Unknown result type (might be due to invalid IL or missing references) //IL_032f: Unknown result type (might be due to invalid IL or missing references) //IL_0337: Unknown result type (might be due to invalid IL or missing references) //IL_033f: Expected O, but got Unknown //IL_0341: Unknown result type (might be due to invalid IL or missing references) //IL_0346: Unknown result type (might be due to invalid IL or missing references) //IL_0351: Unknown result type (might be due to invalid IL or missing references) //IL_0358: Unknown result type (might be due to invalid IL or missing references) //IL_0360: Expected O, but got Unknown //IL_0362: Unknown result type (might be due to invalid IL or missing references) //IL_0367: Unknown result type (might be due to invalid IL or missing references) //IL_0372: Unknown result type (might be due to invalid IL or missing references) //IL_037a: Unknown result type (might be due to invalid IL or missing references) //IL_0382: Expected O, but got Unknown //IL_0384: Unknown result type (might be due to invalid IL or missing references) //IL_0389: Unknown result type (might be due to invalid IL or missing references) //IL_0394: Unknown result type (might be due to invalid IL or missing references) //IL_039b: Unknown result type (might be due to invalid IL or missing references) //IL_03a3: Expected O, but got Unknown //IL_03a9: Unknown result type (might be due to invalid IL or missing references) //IL_03b3: Expected O, but got Unknown try { Log.Trace(Instance, "Digitalroot.Valheim.ForsakenJVL." + MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name); GameObject val = _assetBundle.LoadAsset<GameObject>("Assets/Custom_Items/v801_UnarmedFrost/v801_UnarmedFrostOH.prefab"); if ((Object)(object)val == (Object)null) { throw new NullReferenceException("prefab"); } ItemDrop component = val.GetComponent<ItemDrop>(); if ((Object)(object)component == (Object)null) { throw new NullReferenceException("itemDrop"); } component.m_itemData.m_shared.m_name = "$item_forsaken_unarmedfrostoh"; component.m_itemData.m_shared.m_description = "$item_forsaken_unarmedfrostoh_description"; component.m_itemData.m_shared.m_maxStackSize = 1; component.m_itemData.m_shared.m_maxQuality = 4; component.m_itemData.m_shared.m_maxDurability = 700f; component.m_itemData.m_shared.m_equipDuration = 0.2f; component.m_itemData.m_shared.m_variants = 1; component.m_itemData.m_shared.m_timedBlockBonus = 2f; component.m_itemData.m_shared.m_deflectionForce = 2f; component.m_itemData.m_shared.m_attackForce = 8f; component.m_itemData.m_shared.m_blockPower = 90f; component.m_itemData.m_shared.m_deflectionForce = 1f; component.m_itemData.m_shared.m_damages.m_blunt = 90f; component.m_itemData.m_shared.m_damages.m_frost = 80f; component.m_itemData.m_shared.m_damagesPerLevel.m_blunt = 5f; component.m_itemData.m_shared.m_damagesPerLevel.m_frost = 10f; component.m_itemData.m_shared.m_attack.m_attackStamina = 20f; component.m_itemData.m_shared.m_secondaryAttack.m_attackStamina = 20f; component.m_itemData.m_shared.m_secondaryAttack.m_speedFactor = 0.2f; component.m_itemData.m_shared.m_secondaryAttack.m_speedFactorRotation = 0.2f; component.m_itemData.m_shared.m_secondaryAttack.m_damageMultiplier = 1f; component.m_itemData.m_shared.m_secondaryAttack.m_forceMultiplier = 10f; component.m_itemData.m_shared.m_secondaryAttack.m_staggerMultiplier = 6f; component.m_itemData.m_shared.m_secondaryAttack.m_attackRange = 3.5f; component.m_itemData.m_shared.m_secondaryAttack.m_attackAngle = 180f; component.m_itemData.m_shared.m_secondaryAttack.m_attackRayWidth = 0.3f; component.m_itemData.m_shared.m_secondaryAttack.m_lowerDamagePerHit = false; ItemManager instance = ItemManager.Instance; ItemConfig val2 = new ItemConfig(); val2.CraftingStation = CraftingStationNames.Forge; val2.MinStationLevel = 6; val2.Requirements = (RequirementConfig[])(object)new RequirementConfig[4] { new RequirementConfig { Item = ItemDropNames.FreezeGland, Amount = 10, AmountPerLevel = 2 }, new RequirementConfig { Item = ItemDropNames.TrophyHatchling, Amount = 4, AmountPerLevel = 0 }, new RequirementConfig { Item = ItemDropNames.DragonTear, Amount = 20, AmountPerLevel = 5 }, new RequirementConfig { Item = ItemDropNames.TrophyDragonQueen, Amount = 4, AmountPerLevel = 0 } }; instance.AddItem(new CustomItem(val, false, val2)); } catch (Exception e) { Log.Error(Instance, e); } } private void AddUnarmedFrost() { //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_032e: Unknown result type (might be due to invalid IL or missing references) //IL_0334: Expected O, but got Unknown //IL_034f: Unknown result type (might be due to invalid IL or missing references) //IL_0354: Unknown result type (might be due to invalid IL or missing references) //IL_035f: Unknown result type (might be due to invalid IL or missing references) //IL_0367: Unknown result type (might be due to invalid IL or missing references) //IL_036f: Expected O, but got Unknown //IL_0371: Unknown result type (might be due to invalid IL or missing references) //IL_0376: Unknown result type (might be due to invalid IL or missing references) //IL_0381: Unknown result type (might be due to invalid IL or missing references) //IL_0389: Unknown result type (might be due to invalid IL or missing references) //IL_0391: Expected O, but got Unknown //IL_0393: Unknown result type (might be due to invalid IL or missing references) //IL_0398: Unknown result type (might be due to invalid IL or missing references) //IL_03a3: Unknown result type (might be due to invalid IL or missing references) //IL_03ab: Unknown result type (might be due to invalid IL or missing references) //IL_03b4: Expected O, but got Unknown //IL_03b6: Unknown result type (might be due to invalid IL or missing references) //IL_03bb: Unknown result type (might be due to invalid IL or missing references) //IL_03c6: Unknown result type (might be due to invalid IL or missing references) //IL_03cd: Unknown result type (might be due to invalid IL or missing references) //IL_03d5: Expected O, but got Unknown //IL_03db: Unknown result type (might be due to invalid IL or missing references) //IL_03e5: Expected O, but got Unknown try { Log.Trace(Instance, "Digitalroot.Valheim.ForsakenJVL." + MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name); GameObject val = _assetBundle.LoadAsset<GameObject>("Assets/Custom_Items/v801_UnarmedFrost/v801_UnarmedFrost.prefab"); if ((Object)(object)val == (Object)null) { throw new NullReferenceException("prefab"); } ItemDrop component = val.GetComponent<ItemDrop>(); if ((Object)(object)component == (Object)null) { throw new NullReferenceException("itemDrop"); } component.m_itemData.m_shared.m_name = "$item_forsaken_unarmedfrost"; component.m_itemData.m_shared.m_description = "$item_forsaken_unarmedfrost_description"; component.m_itemData.m_shared.m_itemType = (ItemType)3; component.m_itemData.m_shared.m_maxStackSize = 1; component.m_itemData.m_shared.m_maxQuality = 4; component.m_itemData.m_shared.m_maxDurability = 700f; component.m_itemData.m_shared.m_equipDuration = 0.2f; component.m_itemData.m_shared.m_variants = 1; component.m_itemData.m_shared.m_timedBlockBonus = 2f; component.m_itemData.m_shared.m_deflectionForce = 2f; component.m_itemData.m_shared.m_attackForce = 8f; component.m_itemData.m_shared.m_blockPower = 70f; component.m_itemData.m_shared.m_damages.m_blunt = 70f; component.m_itemData.m_shared.m_damages.m_frost = 90f; component.m_itemData.m_shared.m_damagesPerLevel.m_blunt = 5f; component.m_itemData.m_shared.m_damagesPerLevel.m_frost = 10f; component.m_itemData.m_shared.m_attack.m_attackStamina = 15f; component.m_itemData.m_shared.m_secondaryAttack.m_attackAnimation = "knife_secondary"; component.m_itemData.m_shared.m_secondaryAttack.m_attackRayWidth = 0.3f; component.m_itemData.m_shared.m_secondaryAttack.m_attackStamina = 20f; component.m_itemData.m_shared.m_secondaryAttack.m_speedFactor = 0.2f; component.m_itemData.m_shared.m_secondaryAttack.m_speedFactorRotation = 0.2f; component.m_itemData.m_shared.m_secondaryAttack.m_damageMultiplier = 1.25f; component.m_itemData.m_shared.m_secondaryAttack.m_forceMultiplier = 10f; component.m_itemData.m_shared.m_secondaryAttack.m_staggerMultiplier = 6f; component.m_itemData.m_shared.m_secondaryAttack.m_attackRange = 2.5f; component.m_itemData.m_shared.m_secondaryAttack.m_attackAngle = 50f; component.m_itemData.m_shared.m_secondaryAttack.m_attackRayWidth = 0.3f; component.m_itemData.m_shared.m_secondaryAttack.m_lowerDamagePerHit = false; ItemManager instance = ItemManager.Instance; ItemConfig val2 = new ItemConfig(); val2.CraftingStation = CraftingStationNames.Forge; val2.MinStationLevel = 6; val2.Requirements = (RequirementConfig[])(object)new RequirementConfig[4] { new RequirementConfig { Item = ItemDropNames.FreezeGland, Amount = 20, AmountPerLevel = 4 }, new RequirementConfig { Item = ItemDropNames.TrophyHatchling, Amount = 10, AmountPerLevel = 0 }, new RequirementConfig { Item = ItemDropNames.DragonTear, Amount = 80, AmountPerLevel = 20 }, new RequirementConfig { Item = ItemDropNames.TrophyDragonQueen, Amount = 8, AmountPerLevel = 0 } }; instance.AddItem(new CustomItem(val, false, val2)); } catch (Exception e) { Log.Error(Instance, e); } } private void AddKnifeFrost() { //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_0275: Unknown result type (might be due to invalid IL or missing references) //IL_027b: Expected O, but got Unknown //IL_0296: Unknown result type (might be due to invalid IL or missing references) //IL_029b: Unknown result type (might be due to invalid IL or missing references) //IL_02a6: Unknown result type (might be due to invalid IL or missing references) //IL_02ae: Unknown result type (might be due to invalid IL or missing references) //IL_02b6: Expected O, but got Unknown //IL_02b8: Unknown result type (might be due to invalid IL or missing references) //IL_02bd: Unknown result type (might be due to invalid IL or missing references) //IL_02c8: Unknown result type (might be due to invalid IL or missing references) //IL_02d0: Unknown result type (might be due to invalid IL or missing references) //IL_02d9: Expected O, but got Unknown //IL_02db: Unknown result type (might be due to invalid IL or missing references) //IL_02e0: Unknown result type (might be due to invalid IL or missing references) //IL_02eb: Unknown result type (might be due to invalid IL or missing references) //IL_02f3: Unknown result type (might be due to invalid IL or missing references) //IL_02fc: Expected O, but got Unknown //IL_02fe: Unknown result type (might be due to invalid IL or missing references) //IL_0303: Unknown result type (might be due to invalid IL or missing references) //IL_030e: Unknown result type (might be due to invalid IL or missing references) //IL_0315: Unknown result type (might be due to invalid IL or missing references) //IL_031d: Expected O, but got Unknown //IL_0323: Unknown result type (might be due to invalid IL or missing references) //IL_032d: Expected O, but got Unknown try { Log.Trace(Instance, "Digitalroot.Valheim.ForsakenJVL." + MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name); GameObject val = _assetBundle.LoadAsset<GameObject>("Assets/Custom_Items/weapons/v801_KnifeFrost/v801_KnifeFrost.prefab"); if ((Object)(object)val == (Object)null) { throw new NullReferenceException("prefab"); } ItemDrop component = val.GetComponent<ItemDrop>(); if ((Object)(object)component == (Object)null) { throw new NullReferenceException("itemDrop"); } component.m_itemData.m_shared.m_name = "$item_forsaken_knifefrost"; component.m_itemData.m_shared.m_description = "$item_forsaken_knifefrost_description"; component.m_itemData.m_shared.m_itemType = (ItemType)3; component.m_itemData.m_shared.m_maxStackSize = 1; component.m_itemData.m_shared.m_maxQuality = 4; component.m_itemData.m_shared.m_weight = 1.5f; component.m_itemData.m_shared.m_maxDurability = 500f; component.m_itemData.m_shared.m_equipDuration = 0.2f; component.m_itemData.m_shared.m_backstabBonus = 4f; component.m_itemData.m_shared.m_damages.m_slash = 0f; component.m_itemData.m_shared.m_damages.m_pierce = 75f; component.m_itemData.m_shared.m_damages.m_frost = 75f; component.m_itemData.m_shared.m_damagesPerLevel.m_slash = 0f; component.m_itemData.m_shared.m_damagesPerLevel.m_pierce = 5f; component.m_itemData.m_shared.m_damagesPerLevel.m_frost = 5f; component.m_itemData.m_shared.m_attack.m_attackStamina = 15f; component.m_itemData.m_shared.m_attack.m_speedFactor = 0.1f; component.m_itemData.m_shared.m_attack.m_speedFactorRotation = 0.1f; component.m_itemData.m_shared.m_attack.m_attackHeight = 1f; component.m_itemData.m_shared.m_secondaryAttack.m_damageMultiplier = 1.15f; component.m_itemData.m_shared.m_secondaryAttack.m_attackStamina = 30f; ItemManager instance = ItemManager.Instance; ItemConfig val2 = new ItemConfig(); val2.CraftingStation = CraftingStationNames.Forge; val2.MinStationLevel = 6; val2.Requirements = (RequirementConfig[])(object)new RequirementConfig[4] { new RequirementConfig { Item = ItemDropNames.FreezeGland, Amount = 24, AmountPerLevel = 6 }, new RequirementConfig { Item = ItemDropNames.Needle, Amount = 60, AmountPerLevel = 10 }, new RequirementConfig { Item = ItemDropNames.DragonTear, Amount = 80, AmountPerLevel = 20 }, new RequirementConfig { Item = ItemDropNames.TrophyDragonQueen, Amount = 8, AmountPerLevel = 0 } }; instance.AddItem(new CustomItem(val, false, val2)); } catch (Exception e) { Log.Error(Instance, e); } } private void AddBattleaxeLightning() { //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_0344: Unknown result type (might be due to invalid IL or missing references) //IL_034a: Expected O, but got Unknown //IL_035e: Unknown result type (might be due to invalid IL or missing references) //IL_0363: Unknown result type (might be due to invalid IL or missing references) //IL_036e: Unknown result type (might be due to invalid IL or missing references) //IL_0376: Unknown result type (might be due to invalid IL or missing references) //IL_037f: Expected O, but got Unknown //IL_0381: Unknown result type (might be due to invalid IL or missing references) //IL_0386: Unknown result type (might be due to invalid IL or missing references) //IL_0391: Unknown result type (might be due to invalid IL or missing references) //IL_0399: Unknown result type (might be due to invalid IL or missing references) //IL_03a1: Expected O, but got Unknown //IL_03a3: Unknown result type (might be due to invalid IL or missing references) //IL_03a8: Unknown result type (might be due to invalid IL or missing references) //IL_03b3: Unknown result type (might be due to invalid IL or missing references) //IL_03bb: Unknown result type (might be due to invalid IL or missing references) //IL_03c4: Expected O, but got Unknown //IL_03c6: Unknown result type (might be due to invalid IL or missing references) //IL_03cb: Unknown result type (might be due to invalid IL or missing references) //IL_03d6: Unknown result type (might be due to invalid IL or missing references) //IL_03dd: Unknown result type (might be due to invalid IL or missing references) //IL_03e5: Expected O, but got Unknown //IL_03eb: Unknown result type (might be due to invalid IL or missing references) //IL_03f5: Expected O, but got Unknown try { Log.Trace(Instance, "Digitalroot.Valheim.ForsakenJVL." + MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name); GameObject val = _assetBundle.LoadAsset<GameObject>("Assets/Custom_Items/v801_BattleaxeLightning/v801_BattleaxeLightning.prefab"); if ((Object)(object)val == (Object)null) { throw new NullReferenceException("prefab"); } ItemDrop component = val.GetComponent<ItemDrop>(); if ((Object)(object)component == (Object)null) { throw new NullReferenceException("itemDrop"); } component.m_itemData.m_shared.m_name = "$item_forsaken_battleaxelightning"; component.m_itemData.m_shared.m_description = "$item_forsaken_battleaxelightning_description"; component.m_itemData.m_shared.m_itemType = (ItemType)3; component.m_itemData.m_shared.m_equipDuration = 0.2f; component.m_itemData.m_shared.m_maxDurability = 400f; component.m_itemData.m_shared.m_maxQuality = 4; component.m_itemData.m_shared.m_maxStackSize = 1; component.m_itemData.m_shared.m_variants = 1; component.m_itemData.m_shared.m_weight = 2.5f; component.m_itemData.m_shared.m_attackForce = 12f; component.m_itemData.m_shared.m_deflectionForce = 6f; component.m_itemData.m_shared.m_timedBlockBonus = 6f; component.m_itemData.m_shared.m_damages.m_slash = 75f; component.m_itemData.m_shared.m_damages.m_lightning = 40f; component.m_itemData.m_shared.m_damagesPerLevel.m_slash = 5f; component.m_itemData.m_shared.m_damagesPerLevel.m_lightning = 5f; component.m_itemData.m_shared.m_attack.m_attackStamina = 30f; component.m_itemData.m_shared.m_attack.m_attackAnimation = "swing_longsword"; component.m_itemData.m_shared.m_secondaryAttack.m_attackAnimation = "atgeir_secondary"; component.m_itemData.m_shared.m_secondaryAttack.m_attackChainLevels = 0; component.m_itemData.m_shared.m_secondaryAttack.m_attackStamina = 20f; component.m_itemData.m_shared.m_secondaryAttack.m_speedFactor = 0.2f; component.m_itemData.m_shared.m_secondaryAttack.m_speedFactorRotation = 0.2f; component.m_itemData.m_shared.m_secondaryAttack.m_damageMultiplier = 0.75f; component.m_itemData.m_shared.m_secondaryAttack.m_forceMultiplier = 10f; component.m_itemData.m_shared.m_secondaryAttack.m_staggerMultiplier = 6f; component.m_itemData.m_shared.m_secondaryAttack.m_attackRange = 3.5f; component.m_itemData.m_shared.m_secondaryAttack.m_attackAngle = 360f; component.m_itemData.m_shared.m_secondaryAttack.m_attackRayWidth = 0.3f; component.m_itemData.m_shared.m_secondaryAttack.m_lowerDamagePerHit = false; ItemManager instance = ItemManager.Instance; ItemConfig val2 = new ItemConfig(); val2.CraftingStation = CraftingStationNames.Forge; val2.Requirements = (RequirementConfig[])(object)new RequirementConfig[4] { new RequirementConfig { Item = ItemDropNames.FineWood, Amount = 30, AmountPerLevel = 10 }, new RequirementConfig { Item = ItemDropNames.LeatherScraps, Amount = 12, AmountPerLevel = 4 }, new RequirementConfig { Item = ItemDropNames.Silver, Amount = 90, AmountPerLevel = 25 }, new RequirementConfig { Item = ItemDropNames.TrophyEikthyr, Amount = 1, AmountPerLevel = 0 } }; instance.AddItem(new CustomItem(val, false, val2)); } catch (Exception e) { Log.Error(Instance, e); } } private void AddBowFrost() { //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Expected O, but got Unknown //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Expected O, but got Unknown //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_01cc: Unknown result type (might be due to invalid IL or missing references) //IL_01d4: Unknown result type (might be due to invalid IL or missing references) //IL_01dc: Expected O, but got Unknown //IL_01de: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_01ff: Expected O, but got Unknown //IL_0201: Unknown result type (might be due to invalid IL or missing references) //IL_0206: Unknown result type (might be due to invalid IL or missing references) //IL_0211: Unknown result type (might be due to invalid IL or missing references) //IL_0218: Unknown result type (might be due to invalid IL or missing references) //IL_0220: Expected O, but got Unknown //IL_0226: Unknown result type (might be due to invalid IL or missing references) //IL_0230: Expected O, but got Unknown try { Log.Trace(Instance, "Digitalroot.Valheim.ForsakenJVL." + MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name); GameObject val = _assetBundle.LoadAsset<GameObject>("Assets/Custom_Items/v801_BowFrost/v801_BowFrost.prefab"); if ((Object)(object)val == (Object)null) { throw new NullReferenceException("prefab"); } ItemDrop component = val.GetComponent<ItemDrop>(); if ((Object)(object)component == (Object)null) { throw new NullReferenceException("itemDrop"); } component.m_itemData.m_shared.m_name = "$item_forsaken_bowfrost"; component.m_itemData.m_shared.m_description = "$item_forsaken_bowfrost_description"; component.m_itemData.m_shared.m_itemType = (ItemType)4; component.m_itemData.m_shared.m_equipDuration = 0.2f; component.m_itemData.m_shared.m_maxDurability = 600f; component.m_itemData.m_shared.m_maxStackSize = 1; component.m_itemData.m_shared.m_maxQuality = 4; component.m_itemData.m_shared.m_variants = 1; component.m_itemData.m_shared.m_weight = 10f; component.m_itemData.m_shared.m_timedBlockBonus = 6f; component.m_itemData.m_shared.m_deflectionForce = 8f; component.m_itemData.m_shared.m_attackForce = 0f; ItemManager instance = ItemManager.Instance; ItemConfig val2 = new ItemConfig(); val2.CraftingStation = CraftingStationNames.Forge; val2.MinStationLevel = 6; val2.Requirements = (RequirementConfig[])(object)new RequirementConfig[4] { new RequirementConfig { Item = ItemDropNames.FreezeGland, Amount = 20, AmountPerLevel = 10 }, new RequirementConfig { Item = ItemDropNames.Crystal, Amount = 20, AmountPerLevel = 6 }, new RequirementConfig { Item = ItemDropNames.DragonTear, Amount = 20, AmountPerLevel = 15 }, new RequirementConfig { Item = ItemDropNames.TrophyDragonQueen, Amount = 6, AmountPerLevel = 0 } }; instance.AddItem(new CustomItem(val, false, val2)); } catch (Exception e) { Log.Error(Instance, e); } } private void AddSledgeFire() { //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_0367: Unknown result type (might be due to invalid IL or missing references) //IL_036d: Expected O, but got Unknown //IL_0388: Unknown result type (might be due to invalid IL or missing references) //IL_038d: Unknown result type (might be due to invalid IL or missing references) //IL_0398: Unknown result type (might be due to invalid IL or missing references) //IL_03a0: Unknown result type (might be due to invalid IL or missing references) //IL_03a9: Expected O, but got Unknown //IL_03ab: Unknown result type (might be due to invalid IL or missing references) //IL_03b0: Unknown result type (might be due to invalid IL or missing references) //IL_03bb: Unknown result type (might be due to invalid IL or missing references) //IL_03c3: Unknown result type (might be due to invalid IL or missing references) //IL_03cc: Expected O, but got Unknown //IL_03ce: Unknown result type (might be due to invalid IL or missing references) //IL_03d3: Unknown result type (might be due to invalid IL or missing references) //IL_03de: Unknown result type (might be due to invalid IL or missing references) //IL_03e6: Unknown result type (might be due to invalid IL or missing references) //IL_03ef: Expected O, but got Unknown //IL_03f1: Unknown result type (might be due to invalid IL or missing references) //IL_03f6: Unknown result type (might be due to invalid IL or missing references) //IL_0401: Unknown result type (might be due to invalid IL or missing references) //IL_0409: Unknown result type (might be due to invalid IL or missing references) //IL_0411: Expected O, but got Unknown //IL_0417: Unknown result type (might be due to invalid IL or missing references) //IL_0421: Expected O, but got Unknown try { Log.Trace(Instance, "Digitalroot.Valheim.ForsakenJVL." + MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name); GameObject val = _assetBundle.LoadAsset<GameObject>("Assets/Custom_Items/v801_SledgeFire/v801_SledgeFire.prefab"); if ((Object)(object)val == (Object)null) { throw new NullReferenceException("prefab"); } ItemDrop component = val.GetComponent<ItemDrop>(); if ((Object)(object)component == (Object)null) { throw new NullReferenceException("itemDrop"); } component.m_itemData.m_shared.m_name = "$item_forsaken_sledgefire"; component.m_itemData.m_shared.m_description = "$item_forsaken_sledgefire_description"; component.m_itemData.m_shared.m_itemType = (ItemType)14; component.m_itemData.m_shared.m_equipDuration = 0.2f; component.m_itemData.m_shared.m_maxDurability = 750f; component.m_itemData.m_shared.m_maxStackSize = 1; component.m_itemData.m_shared.m_maxQuality = 4; component.m_itemData.m_shared.m_variants = 1; component.m_itemData.m_shared.m_weight = 4f; component.m_itemData.m_shared.m_blockPower = 80f; component.m_itemData.m_shared.m_timedBlockBonus = 6f; component.m_itemData.m_shared.m_deflectionForce = 6f; component.m_itemData.m_shared.m_attackForce = 6f; component.m_itemData.m_shared.m_damages.m_blunt = 40f; component.m_itemData.m_shared.m_damages.m_pierce = 100f; component.m_itemData.m_shared.m_damages.m_fire = 112f; component.m_itemData.m_shared.m_damagesPerLevel.m_blunt = 3f; component.m_itemData.m_shared.m_damagesPerLevel.m_pierce = 10f; component.m_itemData.m_shared.m_damagesPerLevel.m_fire = 5f; component.m_itemData.m_shared.m_attack.m_attackStamina = 20f; component.m_itemData.m_shared.m_attack.m_attackAnimation = "battleaxe_attack"; component.m_itemData.m_shared.m_attack.m_attackChainLevels = 3; component.m_itemData.m_shared.m_secondaryAttack.m_attackAnimation = "swing_sledge"; component.m_itemData.m_shared.m_secondaryAttack.m_attackStamina = 35f; component.m_itemData.m_shared.m_secondaryAttack.m_speedFactor = 0.2f; component.m_itemData.m_shared.m_secondaryAttack.m_speedFactorRotation = 0.2f; component.m_itemData.m_shared.m_secondaryAttack.m_forceMultiplier = 10f; component.m_itemData.m_shared.m_secondaryAttack.m_staggerMultiplier = 6f; component.m_itemData.m_shared.m_secondaryAttack.m_lowerDamagePerHit = false; SE_Burning val2 = ScriptableObject.CreateInstance<SE_Burning>(); if ((Object)(object)val2 == (Object)null) { throw new NullReferenceException("statusEffect"); } val2.m_fireDamagePerHit = 1f; val2.m_damageInterval = 1f; component.m_itemData.m_shared.m_equipStatusEffect = (StatusEffect)(object)val2; ItemManager instance = ItemManager.Instance; ItemConfig val3 = new ItemConfig(); val3.CraftingStation = CraftingStationNames.Forge; val3.MinStationLevel = 6; val3.Requirements = (RequirementConfig[])(object)new RequirementConfig[4] { new RequirementConfig { Item = ItemDropNames.FlametalNew, Amount = 60, AmountPerLevel = 15 }, new RequirementConfig { Item = ItemDropNames.SurtlingCore, Amount = 60, AmountPerLevel = 15 }, new RequirementConfig { Item = ItemDropNames.BlackMetal, Amount = 60, AmountPerLevel = 15 }, new RequirementConfig { Item = ItemDropNames.TrophySurtling, Amount = 60, AmountPerLevel = 8 } }; instance.AddItem(new CustomItem(val, false, val3)); } catch (Exception e) { Log.Error(Instance, e); } } private void AddSledgePoison() { //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_0330: Unknown result type (might be due to invalid IL or missing references) //IL_0336: Expected O, but got Unknown //IL_0351: Unknown result type (might be due to invalid IL or missing references) //IL_0356: Unknown result type (might be due to invalid IL or missing references) //IL_0361: Unknown result type (might be due to invalid IL or missing references) //IL_0369: Unknown result type (might be due to invalid IL or missing references) //IL_0372: Expected O, but got Unknown //IL_0374: Unknown result type (might be due to invalid IL or missing references) //IL_0379: Unknown result type (might be due to invalid IL or missing references) //IL_0384: Unknown result type (might be due to invalid IL or missing references) //IL_038c: Unknown result type (might be due to invalid IL or missing references) //IL_0395: Expected O, but got Unknown //IL_0397: Unknown result type (might be due to invalid IL or missing references) //IL_039c: Unknown result type (might be due to invalid IL or missing references) //IL_03a7: Unknown result type (might be due to invalid IL or missing references) //IL_03af: Unknown result type (might be due to invalid IL or missing references) //IL_03b8: Expected O, but got Unknown //IL_03ba: Unknown result type (might be due to invalid IL or missing references) //IL_03bf: Unknown result type (might be due to invalid IL or missing references) //IL_03ca: Unknown result type (might be due to invalid IL or missing references) //IL_03d1: Unknown result type (might be due to invalid IL or missing references) //IL_03d9: Expected O, but got Unknown //IL_03df: Unknown result type (might be due to invalid IL or missing references) //IL_03e9: Expected O, but got Unknown try { Log.Trace(Instance, "Digitalroot.Valheim.ForsakenJVL." + MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name); GameObject val = _assetBundle.LoadAsset<GameObject>("Assets/Custom_Items/v801_SledgePoison/v801_SledgePoison.prefab"); if ((Object)(object)val == (Object)null) { throw new NullReferenceException("prefab"); } ItemDrop component = val.GetComponent<ItemDrop>(); if ((Object)(object)component == (Object)null) { throw new NullReferenceException("itemDrop"); } component.m_itemData.m_shared.m_name = "$item_forsaken_sledgepoison"; component.m_itemData.m_shared.m_description = "$item_forsaken_sledgepoison_description"; component.m_itemData.m_shared.m_itemType = (ItemType)14; component.m_itemData.m_shared.m_maxStackSize = 1; component.m_itemData.m_shared.m_maxQuality = 4; component.m_itemData.m_shared.m_maxDurability = 550f; component.m_itemData.m_shared.m_equipDuration = 0.2f; component.m_itemData.m_shared.m_weight = 4f; component.m_itemData.m_shared.m_variants = 1; component.m_itemData.m_shared.m_timedBlockBonus = 6f; component.m_itemData.m_shared.m_deflectionForce = 6f; component.m_itemData.m_shared.m_attackForce = 12f; component.m_itemData.m_shared.m_blockPower = 40f; component.m_itemData.m_shared.m_damages.m_blunt = 140f; component.m_itemData.m_shared.m_damages.m_poison = 80f; component.m_itemData.m_shared.m_damagesPerLevel.m_blunt = 5f; component.m_itemData.m_shared.m_damagesPerLevel.m_poison = 10f; component.m_itemData.m_shared.m_attack.m_attackStamina = 20f; component.m_itemData.m_shared.m_attack.m_attackAnimation = "battleaxe_attack"; component.m_itemData.m_shared.m_attack.m_attackChainLevels = 3; component.m_itemData.m_shared.m_secondaryAttack.m_attackAnimation = "swing_sledge"; component.m_itemData.m_shared.m_secondaryAttack.m_attackStamina = 35f; component.m_itemData.m_shared.m_secondaryAttack.m_speedFactor = 0.2f; component.m_itemData.m_shared.m_secondaryAttack.m_speedFactorRotation = 0.2f; component.m_itemData.m_shared.m_secondaryAttack.m_forceMultiplier = 10f; component.m_itemData.m_shared.m_secondaryAttack.m_staggerMultiplier = 6f; component.m_itemData.m_shared.m_secondaryAttack.m_lowerDamagePerHit = false; StatusEffect equipStatusEffect = component.m_itemData.m_shared.m_equipStatusEffect; StatusEffect obj = ((equipStatusEffect is SE_Poison) ? equipStatusEffect : null); if ((Object)(object)obj == (Object)null) { throw new NullReferenceException("statusEffect"); } ((SE_Poison)obj).m_damageInterval = 1f; ((SE_Poison)obj).m_damagePerHit = 1f; ItemManager instance = ItemManager.Instance; ItemConfig val2 = new ItemConfig(); val2.CraftingStation = CraftingStationNames.Forge; val2.MinStationLevel = 4; val2.Requirements = (RequirementConfig[])(object)new RequirementConfig[4] { new RequirementConfig { Item = ItemDropNames.WitheredBone, Amount = 20, AmountPerLevel = 10 }, new RequirementConfig { Item = ItemDropNames.Guck, Amount = 20, AmountPerLevel = 10 }, new RequirementConfig { Item = ItemDropNames.BlackMetal, Amount = 40, AmountPerLevel = 10 }, new RequirementConfig { Item = ItemDropNames.TrophyBonemass, Amount = 6, AmountPerLevel = 0 } }; instance.AddItem(new CustomItem(val, false, val2)); } catch (Exception e) { Log.Error(Instance, e); } } private void AddSpearSpirit() { //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_027d: Unknown result type (might be due to invalid IL or missing references) //IL_0283: Expected O, but got Unknown //IL_029e: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02ae: Unknown result type (might be due to invalid IL or missing references) //IL_02b6: Unknown result type (might be due to invalid IL or missing references) //IL_02bf: Expected O, but got Unknown //IL_02c1: Unknown result type (might be due to invalid IL or missing references) //IL_02c6: Unknown result type (might be due to invalid IL or missing references) //IL_02d1: Unknown result type (might be due to invalid IL or missing references) //IL_02d9: Unknown result type (might be due to invalid IL or missing references) //IL_02e1: Expected O, but got Unknown //IL_02e3: Unknown result type (might be due to invalid IL or missing references) //IL_02e8: Unknown result type (might be due to invalid IL or missing references) //IL_02f3: Unknown result type (might be due to invalid IL or missing references) //IL_02fb: Unknown result type (might be due to invalid IL or missing references) //IL_0304: Expected O, but got Unknown //IL_0306: Unknown result type (might be due to invalid IL or missing references) //IL_030b: Unknown result type (might be due to invalid IL or missing references) //IL_0316: Unknown result type (might be due to invalid IL or missing references) //IL_031d: Unknown result type (might be due to invalid IL or missing references) //IL_0325: Expected O, but got Unknown //IL_032b: Unknown result type (might be due to invalid IL or missing references) //IL_0335: Expected O, but got Unknown try { Log.Trace(Instance, "Digitalroot.Valheim.ForsakenJVL." + MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name); GameObject val = _assetBundle.LoadAsset<GameObject>("Assets/Custom_Items/v801_SpearSpirit/v801_SpearSpirit.prefab"); if ((Object)(object)val == (Object)null) { throw new NullReferenceException("prefab"); } ItemDrop component = val.GetComponent<ItemDrop>(); if ((Object)(object)component == (Object)null) { throw new NullReferenceException("itemDrop"); } component.m_itemData.m_shared.m_name = "$item_forsaken_spearspirit"; component.m_itemData.m_shared.m_description = "$item_forsaken_spearspirit_description"; component.m_itemData.m_shared.m_itemType = (ItemType)3; component.m_itemData.m_shared.m_maxStackSize = 1; component.m_itemData.m_shared.m_maxQuality = 4; component.m_itemData.m_shared.m_maxDurability = 500f; component.m_itemData.m_shared.m_equipDuration = 0.2f; component.m_itemData.m_shared.m_variants = 1; component.m_itemData.m_shared.m_timedBlockBonus = 1f; component.m_itemData.m_shared.m_deflectionForce = 1f; component.m_itemData.m_shared.m_attackForce = 12f; component.m_itemData.m_shared.m_damages.m_pierce = 75f; component.m_itemData.m_shared.m_damages.m_spirit = 75f; component.m_itemData.m_shared.m_damagesPerLevel.m_pierce = 5f; component.m_itemData.m_shared.m_damagesPerLevel.m_spirit = 5f; component.m_itemData.m_shared.m_attack.m_attackStamina = 20f; component.m_itemData.m_shared.m_secondaryAttack.m_speedFactor = 0.2f; component.m_itemData.m_shared.m_secondaryAttack.m_speedFactorRotation = 0.2f; component.m_itemData.m_shared.m_secondaryAttack.m_damageMultiplier = 0.75f; component.m_itemData.m_shared.m_secondaryAttack.m_forceMultiplier = 10f; component.m_itemData.m_shared.m_secondaryAttack.m_staggerMultiplier = 6f; component.m_itemData.m_shared.m_secondaryAttack.m_lowerDamagePerHit = false; ItemManager instance = ItemManager.Instance; ItemConfig val2 = new ItemConfig(); val2.CraftingStation = CraftingStationNames.Forge; val2.MinStationLevel = 4; val2.Requirements = (RequirementConfig[])(object)new RequirementConfig[4] { new RequirementConfig { Item = ItemDropNames.ElderBark, Amount = 40, AmountPerLevel = 10 }, new RequirementConfig { Item = ItemDropNames.Crystal, Amount = 12, AmountPerLevel = 4 }, new RequirementConfig { Item = ItemDropNames.AncientSeed, Amount = 40, AmountPerLevel = 15 }, new RequirementConfig { Item = ItemDropNames.TrophyTheElder, Amount = 3, AmountPerLevel = 0 } }; instance.AddItem(new CustomItem(val, false, val2)); } catch (Exception e) { Log.Error(Instance, e); } } private void AddUnarmedFenring() { //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_02f0: Unknown result type (might be due to invalid IL or missing references) //IL_02f6: Expected O, but got Unknown //IL_0311: Unknown result type (might be due to invalid IL or missing references) //IL_0316: Unknown result type (might be due to invalid IL or missing references) //IL_0321: Unknown result type (might be due to invalid IL or missing references) //IL_0329: Unknown result type (might be due to invalid IL or missing references) //IL_0332: Expected O, but got Unknown //IL_0334: Unknown result type (might be due to invalid IL or missing references) //IL_0339: Unknown result type (might be due to invalid IL or missing references) //IL_0344: Unknown result type (might be due to invalid IL or missing references) //IL_034c: Unknown result type (might be due to invalid IL or missing references) //IL_0355: Expected O, but got Unknown //IL_0357: Unknown result type (might be due to invalid IL or missing references) //IL_035c: Unknown result type (might be due to invalid IL or missing references) //IL_0367: Unknown result type (might be due to invalid IL or missing references) //IL_036e: Unknown result type (might be due to invalid IL or missing references) //IL_0376: Expected O, but got Unknown //IL_0378: Unknown result type (might be due to invalid IL or missing references) //IL_037d: Unknown result type (might be due to invalid IL or missing references) //IL_0388: Unknown result type (might be due to invalid IL or missing references) //IL_0390: Unknown result type (might be due to invalid IL or missing references) //IL_0398: Expected O, but got Unknown //IL_039e: Unknown result type (might be due to invalid IL or missing references) //IL_03a8: Expected O, but got Unknown try { Log.Trace(Instance, "Digitalroot.Valheim.ForsakenJVL." + MethodBase.GetCurrentMethod()?.DeclaringType?.Name + "." + MethodBase.GetCurrentMethod()?.Name); GameObject val = _assetBundle.LoadAsset<GameObject>("Assets/Custom_Items/v801_UnarmedFenring/v801_UnarmedFenring.prefab"); if ((Object)(object)val == (Object)null) { throw new NullReferenceException("prefab"); } ItemDrop component = val.GetComponent<ItemDrop>(); if ((Object)(object)component == (Object)null) { throw new NullReferenceException("itemDrop"); } component.m_itemData.m_shared.m_name = "$item_forsaken_unarmedfenring"; component.m_itemData.m_shared.m_description = "$item_forsaken_unarmedfenring_description"; component.m_itemData.m_shared.m_itemType = (ItemType)3; component.m_itemData.m_shared.m_equipDuration = 0.25f; component.m_itemData.m_shared.m_maxDurability = 800f; component.m_itemData.m_shared.m_maxQuality = 4; component.m_itemData.m_shared.m_maxStackSize = 1; component.m_itemData.m_shared.m_variants = 1; component.m_itemData.m_shared.m_weight = 2f; component.m_itemData.m_shared.m_blockPower = 30f; component.m_itemData.m_shared.m_timedBlockBonus = 2f; component.m_itemData.m_shared.m_deflectionForce = 2f; component.m_itemData.m_shared.m_attackForce = 2f; component.m_itemData.m_shared.m_movementModifier = 0f; component.m_itemData.m_shared.m_damages.m_slash = 60f; component.m_itemData.m_shared.m_damages.m_pierce = 60f; component.m_itemData.m_shared.m_damagesPerLevel.m_slash = 5f; component.m_itemData.m_shared.m_damagesPerLevel.m_pierce = 5f; component.m_itemData.m_shared.m_attack.m_attackStamina = 15f; component.m_itemData.m_shared.m_attack.m_speedFactor = 0.1f; component.m_itemData.m_shared.m_attack.m_speedFactorRotation = 0.1f; component.m_itemData.m_shared.m_secondaryAttack.m_speedFactor = 0.1f; component.m_itemData.m_shared.m_secondaryAttack.m_speedFactorRotation = 0.1f; component.m_itemData.m_shared.m_secondaryAttack.m_damageMultiplier = 1.15f; component.m_itemData.m_shared.m_secondaryAttack.m_forceMultiplier = 10f; component.m_itemData.m_shared.m_secondaryAttack.m_staggerMultiplier = 6f; component.m_itemData.m_shared.m_secondaryAttack.m_lowerDamagePerHit = false; ItemManager instance = ItemManager.Instance; ItemConfig val2 = new ItemConfig(); val2.CraftingStation = CraftingStationNames.Forge; val2.MinStationLevel = 5; val2.Requirements = (RequirementConfig[])(object)new RequirementConfig[4] { new RequirementConfig { Item = ItemDropNames.FreezeGland, Amount = 40, AmountPerLevel = 10 }, new RequirementConfig { Item = ItemDropNames.Silver, Amount = 60, AmountPerLevel = 10 }, new RequirementConfig { Item = ItemDropNames.Chain, Amount = 4, AmountPerLevel = 2 }, new RequirementConfig { Item = ItemDropNames.TrophyFenring, Amount = 10, AmountPerLevel = 0 } }; instance.AddItem(new CustomItem(val, false, val2)); } catch (Exception e) { Log.Error(Instance, e); } } } } namespace Digitalroot.Valheim.ForsakenJVL.Properties { [GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [DebuggerNonUserCode] [CompilerGenerated] internal class Resources { private static ResourceManager resourceMan; private static CultureInfo resourceCulture; [EditorBrowsable(EditorBrowsableState.Advanced)] internal static ResourceManager ResourceManager { get { if (resourceMan == null) { resourceMan = new ResourceManager("Digitalroot.Valheim.ForsakenJVL.Properties.Resources", typeof(Resources).Assembly); } return resourceMan; } } [EditorBrowsable(EditorBrowsableState.Advanced)] internal static CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } internal static string asseturl => ResourceManager.GetString("asseturl", resourceCulture); internal Resources() { } } } namespace Digitalroot.Valheim.Common { internal sealed class Log { private static readonly Dictionary<string, TraceLogger> TraceLoggers; [UsedImplicitly] private static Log Instance { get; } static Log() { TraceLoggers = new Dictionary<string, TraceLogger>(); Instance = new Log(); } private Log() { TraceLoggers.Add("Digitalroot", new TraceLogger("Digitalroot", enableTrace: false)); } public static void RegisterSource(ITraceableLogging sender) { if ((!TraceLoggers.ContainsKey(sender.Source) || TraceLoggers[sender.Source].IsTraceEnabled != sender.EnableTrace) && (!TraceLoggers.ContainsKey(sender.Source) || sender.EnableTrace)) { if (TraceLoggers.ContainsKey(sender.Source) && sender.EnableTrace) { TraceLoggers[sender.Source].EnableTrace(); } else { TraceLoggers.Add(sender.Source, new TraceLogger(sender.Source, sender.EnableTrace)); } } } private static TraceLogger GetTraceLogger(ITraceableLogging sender) { if (!TraceLoggers.ContainsKey(sender.Source)) { return TraceLoggers["Digitalroot"]; } return TraceLoggers[sender.Source]; } [UsedImplicitly] public static void SetEnableTrace(ITraceableLogging sender, bool value) { if (value) { GetTraceLogger(sender).EnableTrace(); } else { GetTraceLogger(sender).DisableTrace(); } } [UsedImplicitly] public static void SetEnableTraceForAllLoggers(bool value) { foreach (TraceLogger value2 in TraceLoggers.Values) { if (value) { value2.EnableTrace(); } else { value2.DisableTrace(); } } } [UsedImplicitly] public static void Debug(ITraceableLogging sender, object value) { GetTraceLogger(sender).LoggerRef.LogDebug(value); } [UsedImplicitly] public static void Error(ITraceableLogging sender, Exception e, int i = 1) { Error(sender, "Message: " + e.Message); Error(sender, $"TargetSite: {e.TargetSite}"); Error(sender, "StackTrace: " + e.StackTrace); Error(sender, "Source: " + e.Source); if (e.Data.Count > 0) { foreach (object key in e.Data.Keys) { Error(sender, $"key: {key}, value: {e.Data[key]}"); } } if (e.InnerException != null) { Error(sender, $"--- InnerException [{i}][Start] ---"); Error(sender, e.InnerException, ++i); } } [UsedImplicitly] public static void Error(ITraceableLogging sender, object value) { GetTraceLogger(sender).LoggerRef.LogError(value); } [UsedImplicitly] public static void Info(ITraceableLogging sender, object value) { GetTraceLogger(sender).LoggerRef.LogInfo(value); } [UsedImplicitly] public static void Fatal(ITraceableLogging sender, Exception e, int i = 1) { Fatal(sender, "Message: " + e.Message); Fatal(sender, $"TargetSite: {e.TargetSite}"); Fatal(sender, "StackTrace: " + e.StackTrace); Fatal(sender, "Source: " + e.Source); if (e.Data.Count > 0) { foreach (object key in e.Data.Keys) { Fatal(sender, $"key: {key}, value: {e.Data[key]}"); } } if (e.InnerException != null) { Fatal(sender, $"--- InnerException [{i}][Start] ---"); Fatal(sender, e.InnerException, ++i); } } [UsedImplicitly] public static void Fatal(ITraceableLogging sender, object value) { GetTraceLogger(sender).LoggerRef.LogFatal(value); } [UsedImplicitly] public static void Message(ITraceableLogging sender, object value) { GetTraceLogger(sender).LoggerRef.LogMessage(value); } [UsedImplicitly] public static void Trace(ITraceableLogging sender, object value) { if (GetTraceLogger(sender).IsTraceEnabled || sender.EnableTrace) { GetTraceLogger(sender).LoggerRef.Log((LogLevel)63, value); } } [UsedImplicitly] public static void Warning(ITraceableLogging sender, object value) { GetTraceLogger(sender).LoggerRef.LogWarning(value); } } internal class TraceLogger { internal readonly ManualLogSource LoggerRef; private readonly string _source; private readonly FileInfo _traceFileInfo; public bool IsTraceEnabled { get; private set; } private DirectoryInfo AssemblyDirectory => new FileInfo(Uri.UnescapeDataString(new UriBuilder(Assembly.GetExecutingAssembly().CodeBase).Path)).Directory; public TraceLogger(string source, bool enableTrace) { _source = source; IsTraceEnabled = enableTrace; LoggerRef = Logger.CreateLogSource(_source); _traceFileInfo = new FileInfo(Path.Combine(Paths.BepInExRootPath ?? AssemblyDirectory.FullName, "logs", _source + ".Trace.log")); if (_traceFileInfo.DirectoryName != null) { Directory.CreateDirectory(_traceFileInfo.DirectoryName); } if (_traceFileInfo.Exists) { _traceFileInfo.Delete(); _traceFileInfo.Refresh(); } LoggerRef.LogEvent += OnLogEvent; } public void EnableTrace() { IsTraceEnabled = true; } public void DisableTrace() { IsTraceEnabled = false; } [UsedImplicitly] public void StopTrace() { LoggerRef.LogEvent -= OnLogEvent; } private void OnLogEvent(object sender, LogEventArgs e) { //IL_00b0: 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) if (e.Source.SourceName != _source || !IsTraceEnabled) { return; } using Mutex mutex = new Mutex(initiallyOwned: false, "Digitalroot.Valheim.Common.TraceLogger." + _source); mutex.WaitOne(); try { if (e.Data is string) { string contents = $"[{e.Level,-7}:{e.Source.SourceName,10}] {e.Data}{Environment.NewLine}"; File.AppendAllText(_traceFileInfo.FullName, contents, Encoding.UTF8); } else { string contents2 = $"[{e.Level,-7}:{e.Source.SourceName,10}] {JsonSerializationProvider.Serialize(e.Data)}{Environment.NewLine}"; File.AppendAllText(_traceFileInfo.FullName, contents2, Encoding.UTF8); } } finally { mutex.ReleaseMutex(); } } } internal interface ITraceableLogging { string Source { get; } bool EnableTrace { get; } } } namespace Digitalroot.Valheim.Common.Json { [UsedImplicitly] internal static class JsonSerializationProvider { [Obsolete("Use Deserialize<T>()")] public static T FromJson<T>(string json) { return Deserialize<T>(json); } public static T Deserialize<T>(string json) { return SimpleJson.DeserializeObject<T>(json, (IJsonSerializerStrategy)(object)new DigitalrootJsonSerializerStrategy()); } [Obsolete("Use Serialize()")] public static string ToJson(object obj, bool pretty = false) { return Serialize(obj); } public static string Serialize(object obj) { return SimpleJson.SerializeObject(obj, (IJsonSerializerStrategy)(object)new DigitalrootJsonSerializerStrategy()); } } internal class DigitalrootJsonSerializerStrategy : PocoJsonSerializerStrategy { public override bool TrySerializeNonPrimitiveObject(object input, out object output) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) if (!(input is Vector3 val)) { if (input is Quaternion val2) { output = new float[4] { val2.x, val2.y, val2.z, val2.w }; return true; } return ((PocoJsonSerializerStrategy)this).TrySerializeNonPrimitiveObject(input, ref output); } output = new float[3] { val.x, val.y, val.z }; return true; } public override object DeserializeObject(object value, Type type) { //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) if (type == null) { throw new ArgumentNullException("type"); } if (value == null) { throw new ArgumentNullException("value"); } if (value is string value2) { if (string.IsNullOrWhiteSpace(value2)) { throw new ArgumentNullException("value"); } if (type == typeof(Vector3)) { if (!(((PocoJsonSerializerStrategy)this).DeserializeObject(value, typeof(float[])) is float[] array) || (array != null && array.Length != 3)) { throw new ArgumentException(string.Format("The value '{0}' can be converted to a {1}.", value, "Vector3"), "value"); } return (object)new Vector3(array[0], array[1], array[2]); } if (type == typeof(Quaternion)) { if (!(((PocoJsonSerializerStrategy)this).DeserializeObject(value, typeof(float[])) is float[] array2) || (array2 != null && array2.Length != 4)) { throw new ArgumentException(string.Format("The value '{0}' can be converted to a {1}.", value, "Quaternion"), "value"); } return (object)new Quaternion(array2[0], array2[1], array2[2], array2[3]); } return ((PocoJsonSerializerStrategy)this).DeserializeObject(value, type); } throw new ArgumentException($"The value '{value}' can be converted to a {type.Name}.", "value"); } } } namespace Digitalroot.Valheim.Common { internal static class Utils { private static readonly ITraceableLogging Logger = GetLogger(); [UsedImplicitly] public static DirectoryInfo AssemblyDirectory => new FileInfo(Uri.UnescapeDataString(new UriBuilder(Assembly.GetExecutingAssembly().CodeBase).Path)).Directory; [UsedImplicitly] public static bool IsDedicated => ZNet.instance.IsDedicated(); [UsedImplicitly] public static bool IsServer => ZNet.instance.IsServer(); public static bool IsRunningFromNUnit => AppDomain.CurrentDomain.GetAssemblies().Any((Assembly a) => a.FullName.ToLowerInvariant().StartsWith("nunit.framework")); public static string Namespace => "Digitalroot.Valheim.Common"; private static ITraceableLogging GetLogger() { return new StaticSourceLogger(); } [UsedImplicitly] public static bool IsHeadless() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Invalid comparison between Unknown and I4 return (int)SystemInfo.graphicsDeviceType == 4; } [UsedImplicitly] public static List<T> AllOf<T>() { return Enum.GetValues(typeof(T)).OfType<T>().ToList(); } [UsedImplicitly] public static IEnumerable<string> AllNames(Type type) { foreach (FieldInfo item in from f1 in type.GetFields() where f1.FieldType == typeof(string) select f1) { yield return item.GetValue(null).ToString(); } } [UsedImplicitly] public static bool DoesPluginExist(string pluginGuid) { return Chainloader.PluginInfos.Any((KeyValuePair<string, PluginInfo> keyValuePair) => keyValuePair.Value.Metadata.GUID == pluginGuid); } [UsedImplicitly] public static Vector3 GetGroundHeight(int x, int z) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) return Utils.GetGroundHeight(new Vector3Int(x, 500, z)); } [UsedImplicitly] public static Vector3 GetGroundHeight(float x, float z) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) return Utils.GetGroundHeight(new Vector3(x, 500f, z)); } public static Vector3 GetGroundHeight(Vector3Int vector3) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) return new Vector3((float)((Vector3Int)(ref vector3)).x, ZoneSystem.instance.GetGroundHeight(Vector3Int.op_Implicit(vector3)), (float)((Vector3Int)(ref vector3)).z); } public static Vector3 GetGroundHeight(Vector3 vector3) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) return new Vector3(vector3.x, ZoneSystem.instance.GetGroundHeight(vector3), vector3.z); } [UsedImplicitly] public static GameObject GetItemPrefab(string itemName) { if (!IsObjectDBReady()) { return null; } return GetObjectDB().GetItemPrefab(itemName); } [UsedImplicitly] public static GameObject GetItemPrefab(int hash) { if (!IsObjectDBReady()) { return null; } return GetObjectDB().GetItemPrefab(hash); } [UsedImplicitly] public static Player GetLocalPlayer() { return Player.m_localPlayer; } [UsedImplicitly] public static Vector3 GetLocalPlayersPosition() { //IL_000a: Unknown result type (might be due to invalid IL or missing references) return ((Component)Player.m_localPlayer).transform.position; } [UsedImplicitly] public static ObjectDB GetObjectDB() { return ObjectDB.instance; } [UsedImplicitly] public static string GetPluginPath(Type modPluginType) { return Path.GetDirectoryName(modPluginType.Assembly.Location); } [UsedImplicitly] public static GameObject GetPrefab(string itemName) { if (!IsZNetSceneReady()) { return null; } return ZNetScene.instance.GetPrefab(itemName); } [UsedImplicitly] public static GameObject GetPrefab(int hash) { if (!IsZNetSceneReady()) { return null; } return ZNetScene.instance.GetPrefab(hash); } [UsedImplicitly] public static T GetPrivateField<T>(object instance, string name) { FieldInfo field = instance.GetType().GetField(name, BindingFlags.Instance | BindingFlags.NonPublic); if (field != null) { return (T)field.GetValue(instance); } Log.Error(Logger, "Variable " + name + " does not exist on type: " + instance.GetType()); return default(T); } [UsedImplicitly] public static object InvokePrivate(object instance, string name, object[] args = null) { MethodInfo method = instance.GetType().GetMethod(name, BindingFlags.Instance | BindingFlags.NonPublic); if (method == null) { Type[] types = ((args == null) ? Type.EmptyTypes : args.Select((object arg) => arg.GetType()).ToArray()); method = instance.GetType().GetMethod(name, types); } if (method == null) { Log.Error(Logger, "Method " + name + " does not exist on type: " + instance.GetType()); return null; } return method.Invoke(instance, args); } [UsedImplicitly] public static bool IsGameInMainScene() { return (Object)(object)ZNetScene.instance != (Object)null; } [UsedImplicitly] public static bool IsObjectDBReady() { if (!((Object)(object)GetObjectDB() != (Object)null) || GetObjectDB().m_items.Count == 0 || !((Object)(object)GetItemPrefab("Amber") != (Object)null)) { return IsRunningFromNUnit; } return true; } [UsedImplicitly] public static bool IsPlayerReady() { return (Object)(object)GetLocalPlayer() != (Object)null; } [UsedImplicitly] public static bool IsZNetSceneReady() { if ((Object)(object)ZNetScene.instance != (Object)null) { List<GameObject> list = ZNetScene.instance?.m_prefabs; if (list != null) { return list.Count > 0; } return false; } return false; } [UsedImplicitly] public static bool IsZNetReady() { return (Object)(object)ZNet.instance != (Object)null; } [UsedImplicitly] public static string Localize(string value) { return Localization.instance.Localize(value); } [UsedImplicitly] public static Vector3 GetStartTemplesPosition() { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) LocationInstance val = default(LocationInstance); if (ZoneSystem.instance.FindClosestLocation("StartTemple", Vector3.zero, ref val)) { Log.Trace(Logger, $"[GetStartTemplesPosition] StartTemple at {val.m_position}"); return val.m_position; } Log.Error(Logger, "[GetStartTemplesPosition] Can't find StartTemple"); return Vector3.zero; } [UsedImplicitly] public static void SetPrivateField(object instance, string name, object value) { FieldInfo field = instance.GetType().GetField(name, BindingFlags.Instance | BindingFlags.NonPublic); if (field == null) { Log.Error(Logger, "Variable " + name + " does not exist on type: " + instance.GetType()); } else { field.SetValue(instance, value); } } [UsedImplicitly] public static GameObject Spawn([NotNull] string prefabName, Vector3 location, [CanBeNull] Transform parent = null) { //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) Log.Trace(Logger, $"{Namespace}.{MethodBase.GetCurrentMethod().DeclaringType?.Name}.{MethodBase.GetCurrentMethod().Name}({prefabName}, {location}, {((parent != null) ? ((Object)parent).name : null)})"); GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(StringExtensionMethods.GetStableHashCode(prefabName)); if (!((Object)(object)itemPrefab == (Object)null)) { return Spawn(itemPrefab, location, parent); } return null; } [UsedImplicitly] public static GameObject Spawn([NotNull] GameObject prefab, Vector3 location, [CanBeNull] Transform parent = null) { //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) Log.Trace(Logger, $"{Namespace}.{MethodBase.GetCurrentMethod().DeclaringType?.Name}.{MethodBase.GetCurrentMethod().Name}({((Object)prefab).name}, {location}, {((parent != null) ? ((Object)parent).name : null)})"); if ((Object)(object)parent == (Object)null) { return Object.Instantiate<GameObject>(prefab, location, Quaternion.identity); } return Object.Instantiate<GameObject>(prefab, location, Quaternion.identity, parent); } public static AssetBundle LoadAssetBundleFromResources(string bundleName, Assembly resourceAssembly) { if (resourceAssembly == null) { throw new ArgumentNullException("resourceAssembly"); } string text = null; try { text = resourceAssembly.GetManifestResourceNames().Single((string str) => str.EndsWith(bundleName)); } catch (Exception) { } if (text == null) { Log.Error(Logger, "AssetBundle " + bundleName + " not found in assembly manifest"); return null; } using Stream stream = resourceAssembly.GetManifestResourceStream(text); return AssetBundle.LoadFromStream(stream); } } [DebuggerDisplay("Source = {Source}, EnableTrace = {EnableTrace}", Name = "{Source}")] internal class StaticSourceLogger : ITraceableLogging { public static StaticSourceLogger PreMadeTraceableInstance = new StaticSourceLogger(enableTrace: true); public static StaticSourceLogger PreMadeNonTraceableInstance = new StaticSourceLogger(); public string Source { get; } public bool EnableTrace { get; } public StaticSourceLogger(bool enableTrace = false) : this("Digitalroot", enableTrace) { } public StaticSourceLogger(string source, bool enableTrace = false) { Source = source; EnableTrace = enableTrace; } } } namespace Digitalroot.Valheim.Common.Names.Vanilla { internal static class CraftingStationNames { public static readonly IEnumerable<string> AllNames = Utils.AllNames(typeof(CraftingStationNames)); public static readonly string ArtisanTable = "piece_artisanstation"; public static readonly string Blackforge = "blackforge"; public static readonly string Cauldron = "piece_cauldron"; public static readonly string Forge = "forge"; public static readonly string MeadCauldron = "piece_MeadCauldron"; public static readonly string MageTable = "piece_magetable"; public static readonly string Preptable = "piece_preptable"; public static readonly string Stonecutter = "piece_stonecutter"; public static readonly string Workbench = "piece_workbench"; public static string Ketill => MeadCauldron; } internal static class ItemDropNames { public static readonly IEnumerable<string> AllNames = Utils.AllNames(typeof(ItemDropNames)); public static string Acorn = "Acorn"; public static string Amber = "Amber"; public static string AmberPearl = "AmberPearl"; public static string AncientSkull = "ancient_skull"; public static string AncientSeed = "AncientSeed"; public static string ArmorCarapaceChest = "ArmorCarapaceChest"; public static string ArmorCarapaceLegs = "ArmorCarapaceLegs"; public static string ArmorDress1 = "ArmorDress1"; public static string ArmorDress2 = "ArmorDress2"; public static string ArmorDress3 = "ArmorDress3"; public static string ArmorDress4 = "ArmorDress4"; public static string ArmorDress5 = "ArmorDress5"; public static string ArmorDress6 = "ArmorDress6"; public static string ArmorDress7 = "ArmorDress7"; public static string ArmorDress8 = "ArmorDress8"; public static string ArmorDress9 = "ArmorDress9"; public static string ArmorDress10 = "ArmorDress10"; public static string ArmorFenringChest = "ArmorFenringChest"; public static string ArmorFenringLegs = "ArmorFenringLegs"; public static string ArmorFlametalChest = "ArmorFlametalChest"; public static string ArmorFlametalLegs = "ArmorFlametalLegs"; public static string ArmorHarvester1 = "ArmorHarvester1"; public static string ArmorHarvester2 = "ArmorHarvester2"; public static string ArmorAshlandsMediumChest = "ArmorAshlandsMediumChest"; public static string ArmorAshlandsMediumlegs = "ArmorAshlandsMediumlegs"; public static string ArmorBronzeChest = "ArmorBronzeChest"; public static string ArmorBronzeLegs = "ArmorBronzeLegs"; public static string ArmorIronChest = "ArmorIronChest"; public static string ArmorIronLegs = "ArmorIronLegs"; public static string ArmorMageChest = "ArmorMageChest"; public static string ArmorMageLegs = "ArmorMageLegs"; public static string ArmorMageLegsAshlands = "ArmorMageLegs_Ashlands"; public static string ArmorLeatherChest = "ArmorLeatherChest"; public static string ArmorLeatherLegs = "ArmorLeatherLegs"; public static string ArmorPaddedCuirass = "ArmorPaddedCuirass"; public static string ArmorPaddedGreaves = "ArmorPaddedGreaves"; public static string ArmorRagsChest = "ArmorRagsChest"; public static string ArmorRagsLegs = "ArmorRagsLegs"; public static string ArmorRootChest = "ArmorRootChest"; public static string ArmorRootLegs = "ArmorRootLegs"; public static string ArmorTrollLeatherChest = "ArmorTrollLeatherChest"; public static string ArmorTrollLeatherLegs = "ArmorTrollLeatherLegs"; public static string ArmorTunic1 = "ArmorTunic1"; public static string ArmorTunic2 = "ArmorTunic2"; public static string ArmorTunic3 = "ArmorTunic3"; public static string ArmorTunic4 = "ArmorTunic4"; public static string ArmorTunic5 = "ArmorTunic5"; public static string ArmorTunic6 = "ArmorTunic6"; public static string ArmorTunic7 = "ArmorTunic7"; public static string ArmorTunic8 = "ArmorTunic8"; public static string ArmorTunic9 = "ArmorTunic9"; public static string ArmorTunic10 = "ArmorTunic10"; public static string ArmorWolfChest = "ArmorWolfChest"; public static string ArmorWolfLegs = "ArmorWolfLegs"; public static string ArrowBronze = "ArrowBronze"; public static string ArrowCarapace = "ArrowCarapace"; public static string ArrowCharred = "ArrowCharred"; public static string ArrowFire = "ArrowFire"; public static string ArrowFlint = "ArrowFlint"; public static string ArrowFrost = "ArrowFrost"; public static string ArrowIron = "ArrowIron"; public static string ArrowNeedle = "ArrowNeedle"; public static string ArrowObsidian = "ArrowObsidian"; public static string ArrowPoison = "ArrowPoison"; public static string ArrowSilver = "ArrowSilver"; public static string ArrowWood = "ArrowWood"; public static string AtgeirBlackmetal = "AtgeirBlackmetal"; public static string AtgeirBronze = "AtgeirBronze"; public static string AtgeirHimminAfl = "AtgeirHimminAfl"; public static string AtgeirIron = "AtgeirIron"; public static string AxeBlackMetal = "AxeBlackMetal"; public static string AxeBronze = "AxeBronze"; public static string AxeFlint = "AxeFlint"; public static string AxeIron = "AxeIron"; public static string AxeJotunBane = "AxeJotunBane"; public static string AxeStone = "AxeStone"; public static string BarberKit = "BarberKit"; public static string Barley = "Barley"; public static string BarleyFlour = "BarleyFlour"; public static string BarleyWine = "BarleyWine"; public static string BarleyWineBase = "BarleyWineBase"; public static string BarrelRings = "BarrelRings"; public static string Battleaxe = "Battleaxe"; public static string BattleaxeCrystal = "BattleaxeCrystal"; public static string BeechSeeds = "BeechSeeds"; public static string Bell = "Bell"; public static string BeltStrength = "BeltStrength"; public static string Bilebag = "Bilebag"; public static string BirchSeeds = "BirchSeeds"; public static string BlackCore = "BlackCore"; public static string BlackMarble = "BlackMarble"; public static string BlackMetal = "BlackMetal"; public static string BlackMetalScrap = "BlackMetalScrap"; public static string BlackSoup = "BlackSoup"; public static string Blackwood = "Blackwood"; public static string Bloodbag = "Bloodbag"; public static string BloodPudding = "BloodPudding"; public static string Blueberries = "Blueberries"; public static string BoarJerky = "BoarJerky"; public static string BoltBlackmetal = "BoltBlackmetal"; public static string BoltBone = "BoltBone"; public static string BoltCarapace = "BoltCarapace"; public static string BoltCharred = "BoltCharred"; public static string BoltIron = "BoltIron"; public static string BombBile = "BombBile"; public static string BombLava = "BombLava"; public static string BombOoze = "BombOoze"; public static string BombSiege = "BombSiege"; public static string BombSmoke = "BombSmoke"; public static string BoneFragments = "BoneFragments"; public static string BoneMawSerpentMeat = "BoneMawSerpentMeat"; public static string BonemawSerpentScale = "BonemawSerpentScale"; public static string BonemawSerpentTooth = "BonemawSerpentTooth"; public static string Bow = "Bow"; public static string BowAshlands = "BowAshlands"; public static string BowAshlandsBlood = "BowAshlandsBlood"; public static string BowAshlandsRoot = "BowAshlandsRoot"; public static string BowAshlandsStorm = "BowAshlandsStorm"; public static string BowDraugrFang = "BowDraugrFang"; public static string BowFineWood = "BowFineWood"; public static string BowHuntsman = "BowHuntsman"; public static string BowSpineSnap = "BowSpineSnap"; public static string Bread = "Bread"; public static string BreadDough = "BreadDough"; public static string Bronze = "Bronze"; public static string BronzeNails = "BronzeNails"; public static string BronzeScrap = "BronzeScrap"; public static string BugMeat = "BugMeat"; public static string CandleWick = "CandleWick"; public static string CapeAsh = "CapeA