using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Cryptography;
using System.Security.Permissions;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using ItemManager;
using JetBrains.Annotations;
using LocalizationManager;
using Microsoft.CodeAnalysis;
using ServerSync;
using TMPro;
using UnityEngine;
using YamlDotNet.Core;
using YamlDotNet.Core.Events;
using YamlDotNet.Core.Tokens;
using YamlDotNet.Helpers;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.BufferedDeserialization;
using YamlDotNet.Serialization.BufferedDeserialization.TypeDiscriminators;
using YamlDotNet.Serialization.Converters;
using YamlDotNet.Serialization.EventEmitters;
using YamlDotNet.Serialization.NamingConventions;
using YamlDotNet.Serialization.NodeDeserializers;
using YamlDotNet.Serialization.NodeTypeResolvers;
using YamlDotNet.Serialization.ObjectFactories;
using YamlDotNet.Serialization.ObjectGraphTraversalStrategies;
using YamlDotNet.Serialization.ObjectGraphVisitors;
using YamlDotNet.Serialization.Schemas;
using YamlDotNet.Serialization.TypeInspectors;
using YamlDotNet.Serialization.TypeResolvers;
using YamlDotNet.Serialization.Utilities;
using YamlDotNet.Serialization.ValueDeserializers;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("AscendedArsenal")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyProduct("AscendedArsenal")]
[assembly: AssemblyCopyright("Copyright © 2021")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("4358610B-F3F4-4843-B7AF-98B7BC60DCDE")]
[assembly: AssemblyFileVersion("1.1.0")]
[assembly: AssemblyCompany("catharis")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.1.0.0")]
[module: UnverifiableCode]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[<4396ef6c-36ee-470f-8aeb-c30f53982c02>Embedded]
internal sealed class <4396ef6c-36ee-470f-8aeb-c30f53982c02>EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[<4396ef6c-36ee-470f-8aeb-c30f53982c02>Embedded]
[CompilerGenerated]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class <4624231c-9f8a-4df0-9247-55ffd3619731>NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public <4624231c-9f8a-4df0-9247-55ffd3619731>NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public <4624231c-9f8a-4df0-9247-55ffd3619731>NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
[<4396ef6c-36ee-470f-8aeb-c30f53982c02>Embedded]
[CompilerGenerated]
internal sealed class <9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContextAttribute : Attribute
{
public readonly byte Flag;
public <9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContextAttribute(byte P_0)
{
Flag = P_0;
}
}
}
namespace AscendedArsenal
{
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(0)]
[BepInPlugin("catharis.AscendedArsenal", "AscendedArsenal", "1.1.0")]
[<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(1)]
public class AscendedArsenalPlugin : BaseUnityPlugin
{
[<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(0)]
public enum Toggle
{
On = 1,
Off = 0
}
[<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(0)]
private class ConfigurationManagerAttributes
{
[UsedImplicitly]
public int? Order;
[UsedImplicitly]
public bool? Browsable;
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(2)]
[UsedImplicitly]
public string Category;
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(new byte[] { 2, 1 })]
[UsedImplicitly]
public Action<ConfigEntryBase> CustomDrawer;
}
internal const string ModName = "AscendedArsenal";
internal const string ModVersion = "1.1.0";
internal const string Author = "catharis";
private const string ModGUID = "catharis.AscendedArsenal";
private static string ConfigFileName = "catharis.AscendedArsenal.cfg";
private static string ConfigFileFullPath;
internal static string ConnectionError;
private readonly Harmony _harmony = new Harmony("catharis.AscendedArsenal");
public static readonly ManualLogSource AscendedArsenalLogger;
private static readonly ConfigSync ConfigSync;
private static ConfigEntry<Toggle> _serverConfigLocked;
private static ConfigEntry<Toggle> _recipeIsActiveConfig;
public void Awake()
{
Localizer.Load();
_serverConfigLocked = config("1 - General", "Lock Configuration", Toggle.On, "If on, the configuration is locked and can be changed by server admins only.");
ConfigSync.AddLockingConfigEntry<Toggle>(_serverConfigLocked);
Item item = new Item("legendaryweapons", "CatharisSword");
item.Name.English("Avrinn");
item.Description.English("My very first blade, ornate and elegant. -Catharis");
item.Crafting.Add(CraftingTable.Disabled, 1);
item.RequiredItems.Add("CatharisRelic", 1);
item.RequiredItems.Add("TrophyEikthyr", 1);
item.RequiredUpgradeItems.Add("TrophyTheElder", 1, 2);
item.RequiredUpgradeItems.Add("Bronze", 20, 2);
item.RequiredUpgradeItems.Add("BjornHide", 20, 2);
item.RequiredUpgradeItems.Add("Chain", 5, 2);
item.RequiredUpgradeItems.Add("TrophyBonemass", 1, 3);
item.RequiredUpgradeItems.Add("Iron", 20, 3);
item.RequiredUpgradeItems.Add("Root", 20, 3);
item.RequiredUpgradeItems.Add("WolfClaw", 20, 3);
item.RequiredUpgradeItems.Add("TrophyDragonQueen", 1, 4);
item.RequiredUpgradeItems.Add("Silver", 20, 4);
item.RequiredUpgradeItems.Add("JuteRed", 20, 4);
item.RequiredUpgradeItems.Add("LoxPelt", 20, 4);
item.RequiredUpgradeItems.Add("TrophyGoblinKing", 1, 5);
item.RequiredUpgradeItems.Add("BlackMetal", 25, 5);
item.RequiredUpgradeItems.Add("GoblinTotem", 5, 5);
item.RequiredUpgradeItems.Add("Mandible", 10, 5);
item.CraftAmount = 1;
item.Trade.Price = 0u;
item.Trade.Stack = 0u;
item.Trade.RequiredGlobalKey = "defeated_bonemass";
item.Trade.Trader = Trader.None;
Item item2 = new Item("legendaryweapons", "CatharisSwordTranscended");
item2.Name.English("Transcendent Avrinn");
item2.Description.English("My sword, my life, all I stand for, my killing blade, absolute and infallible, mine, and mine alone. -Catharis");
item2.Crafting.Add(CraftingTable.Disabled, 5);
item2.RequiredItems.Add("CatharisSword", 1);
item2.RequiredItems.Add("AscensionRune_CL", 1);
item2.RequiredItems.Add("GemstoneRed", 3);
item2.RequiredItems.Add("MorgenHeart", 5);
item2.CraftAmount = 1;
item2.Trade.Price = 0u;
item2.Trade.Stack = 0u;
item2.Trade.RequiredGlobalKey = "defeated_bonemass";
item2.Trade.Trader = Trader.None;
Item item3 = new Item("legendaryweapons", "QuelTalia_CL");
item3.Name.English("Quel'Talia");
item3.Description.English("A crystalline blade coursing with energy. Almost as if it’s humming… -Channing");
item3.Crafting.Add(CraftingTable.Forge, 1);
item3.RequiredItems.Add("QuelTaliaRelic_CL", 1);
item3.RequiredItems.Add("TrophyEikthyr", 1);
item3.RequiredUpgradeItems.Add("TrophyTheElder", 1, 2);
item3.RequiredUpgradeItems.Add("TrollHide", 20, 2);
item3.RequiredUpgradeItems.Add("GreydwarfEye", 20, 2);
item3.RequiredUpgradeItems.Add("Root", 10, 2);
item3.RequiredUpgradeItems.Add("TrophyBonemass", 1, 3);
item3.RequiredUpgradeItems.Add("Iron", 20, 3);
item3.RequiredUpgradeItems.Add("ElderBark", 20, 3);
item3.RequiredUpgradeItems.Add("FreezeGland", 20, 3);
item3.RequiredUpgradeItems.Add("TrophyDragonQueen", 1, 4);
item3.RequiredUpgradeItems.Add("Silver", 20, 4);
item3.RequiredUpgradeItems.Add("Crystal", 30, 4);
item3.RequiredUpgradeItems.Add("UndeadBjornRibcage", 5, 4);
item3.RequiredUpgradeItems.Add("TrophyGoblinKing", 1, 5);
item3.RequiredUpgradeItems.Add("LinenThread", 20, 5);
item3.RequiredUpgradeItems.Add("GoblinTotem", 5, 5);
item3.RequiredUpgradeItems.Add("Carapace", 50, 5);
item3.CraftAmount = 1;
item3.Trade.Price = 0u;
item3.Trade.Stack = 0u;
item3.Trade.RequiredGlobalKey = "defeated_bonemass";
item3.Trade.Trader = Trader.None;
Item item4 = new Item("legendaryweapons", "QuelTaliaAwakened_CL");
item4.Name.English("Awakened Quel'Talia");
item4.Description.English("With this blade, fate is in your hands. All that you are, every dream, every triumph. In your grasp lies your hope, bright as the dawn after endless night. And It's edge hums with the promise of destiny fulfilled! -Channing");
item4.Crafting.Add(CraftingTable.BlackForge, 5);
item4.RequiredItems.Add("QuelTalia_CL", 1);
item4.RequiredItems.Add("AscensionRune_CL", 1);
item4.RequiredItems.Add("GemstoneBlue", 2);
item4.RequiredItems.Add("CelestialFeather", 10);
item4.CraftAmount = 1;
item4.Trade.Price = 0u;
item4.Trade.Stack = 0u;
item4.Trade.RequiredGlobalKey = "defeated_bonemass";
item4.Trade.Trader = Trader.None;
Item item5 = new Item("legendaryweapons", "Hastiel_CL");
item5.Name.English("Hastiel");
item5.Description.English("A fervent and vengeful spear, may its rage consume you...");
item5.Crafting.Add(CraftingTable.Forge, 1);
item5.RequiredItems.Add("HastielRelic_CL", 1);
item5.RequiredItems.Add("TrophyEikthyr", 1);
item5.RequiredUpgradeItems.Add("TrophyTheElder", 1, 2);
item5.RequiredUpgradeItems.Add("Copper", 20, 2);
item5.RequiredUpgradeItems.Add("Ruby", 20, 2);
item5.RequiredUpgradeItems.Add("Bloodbag", 20, 2);
item5.RequiredUpgradeItems.Add("TrophyBonemass", 1, 3);
item5.RequiredUpgradeItems.Add("Iron", 20, 3);
item5.RequiredUpgradeItems.Add("Root", 20, 3);
item5.RequiredUpgradeItems.Add("WolfFang", 20, 3);
item5.RequiredUpgradeItems.Add("TrophyDragonQueen", 1, 4);
item5.RequiredUpgradeItems.Add("Obsidian", 30, 4);
item5.RequiredUpgradeItems.Add("JuteRed", 30, 4);
item5.RequiredUpgradeItems.Add("UndeadBjornRibcage", 5, 4);
item5.RequiredUpgradeItems.Add("TrophyGoblinKing", 1, 5);
item5.RequiredUpgradeItems.Add("BlackMetal", 30, 5);
item5.RequiredUpgradeItems.Add("Needle", 10, 5);
item5.RequiredUpgradeItems.Add("BlackCore", 5, 5);
item5.CraftAmount = 1;
item5.Trade.Price = 0u;
item5.Trade.Stack = 0u;
item5.Trade.RequiredGlobalKey = "defeated_bonemass";
item5.Trade.Trader = Trader.None;
Item item6 = new Item("legendaryweapons", "HastielRageborn_CL");
item6.Name.English("Rageborn Hastiel");
item6.Description.English("Through perilous lineage, the truth is born to our eyes, the object of your ire, a violent rage, a ferocious fury, your spear of war, rebirthed with absolute power!");
item6.Crafting.Add(CraftingTable.BlackForge, 5);
item6.RequiredItems.Add("Hastiel_CL", 1);
item6.RequiredItems.Add("AscensionRune_CL", 1);
item6.RequiredItems.Add("Charredskull", 20);
item6.RequiredItems.Add("MorgenSinew", 10);
item6.CraftAmount = 1;
item6.Trade.Price = 0u;
item6.Trade.Stack = 0u;
item6.Trade.RequiredGlobalKey = "defeated_bonemass";
item6.Trade.Trader = Trader.None;
Item item7 = new Item("legendaryweapons", "Ignavius_CL");
item7.Name.English("Ignavius");
item7.Description.English("An axe of detailed craft, seemingly hot to the touch...");
item7.Crafting.Add(CraftingTable.Forge, 1);
item7.RequiredItems.Add("IgnaviusRelic_CL", 1);
item7.RequiredItems.Add("TrophyEikthyr", 1);
item7.RequiredUpgradeItems.Add("TrophyTheElder", 1, 2);
item7.RequiredUpgradeItems.Add("Bronze", 20, 2);
item7.RequiredUpgradeItems.Add("SurtlingCore", 10, 2);
item7.RequiredUpgradeItems.Add("Chain", 5, 2);
item7.RequiredUpgradeItems.Add("TrophyBonemass", 1, 3);
item7.RequiredUpgradeItems.Add("Iron", 20, 3);
item7.RequiredUpgradeItems.Add("WitheredBone", 5, 3);
item7.RequiredUpgradeItems.Add("JuteRed", 20, 3);
item7.RequiredUpgradeItems.Add("TrophyDragonQueen", 1, 4);
item7.RequiredUpgradeItems.Add("Silver", 20, 4);
item7.RequiredUpgradeItems.Add("WolfClaw", 10, 4);
item7.RequiredUpgradeItems.Add("GoblinTotem", 3, 4);
item7.RequiredUpgradeItems.Add("TrophyGoblinKing", 1, 5);
item7.RequiredUpgradeItems.Add("LinenThread", 20, 5);
item7.RequiredUpgradeItems.Add("LoxPelt", 20, 5);
item7.RequiredUpgradeItems.Add("Bilebag", 5, 5);
item7.CraftAmount = 1;
item7.Trade.Price = 0u;
item7.Trade.Stack = 0u;
item7.Trade.RequiredGlobalKey = "defeated_bonemass";
item7.Trade.Trader = Trader.None;
Item item8 = new Item("legendaryweapons", "IgnaviusInfernal_CL");
item8.Name.English("Infernal Ignavius");
item8.Description.English("A fire boils within you, a scorching torrent no being can tame, a true blight of ash, an adornment of magmatic repose, a demon of ember, your axe born of hell itself, effused in eternal flame!");
item8.Crafting.Add(CraftingTable.BlackForge, 5);
item8.RequiredItems.Add("Ignavius_CL", 1);
item8.RequiredItems.Add("AscensionRune_CL", 1);
item8.RequiredItems.Add("MoltenCore", 10);
item8.RequiredItems.Add("MorgenHeart", 3);
item8.CraftAmount = 1;
item8.Trade.Price = 0u;
item8.Trade.Stack = 0u;
item8.Trade.RequiredGlobalKey = "defeated_bonemass";
item8.Trade.Trader = Trader.None;
Item item9 = new Item("legendaryweapons", "Seravi_CL");
item9.Name.English("Seravi");
item9.Description.English("A holy scythe, a holy relic of an ancient fallen order...");
item9.Crafting.Add(CraftingTable.Forge, 1);
item9.RequiredItems.Add("SeraviRelic_CL", 1);
item9.RequiredItems.Add("TrophyEikthyr", 1);
item9.RequiredUpgradeItems.Add("TrophyTheElder", 1, 2);
item9.RequiredUpgradeItems.Add("Tin", 20, 2);
item9.RequiredUpgradeItems.Add("Dandelion", 20, 2);
item9.RequiredUpgradeItems.Add("Chain", 5, 2);
item9.RequiredUpgradeItems.Add("TrophyBonemass", 1, 3);
item9.RequiredUpgradeItems.Add("Iron", 20, 3);
item9.RequiredUpgradeItems.Add("WitheredBone", 5, 3);
item9.RequiredUpgradeItems.Add("Crystal", 20, 3);
item9.RequiredUpgradeItems.Add("TrophyDragonQueen", 1, 4);
item9.RequiredUpgradeItems.Add("Silver", 20, 4);
item9.RequiredUpgradeItems.Add("WolfFang", 20, 4);
item9.RequiredUpgradeItems.Add("UndeadBjornRibcage", 5, 4);
item9.RequiredUpgradeItems.Add("TrophyGoblinKing", 1, 5);
item9.RequiredUpgradeItems.Add("LinenThread", 50, 5);
item9.RequiredUpgradeItems.Add("GoblinTotem", 3, 5);
item9.RequiredUpgradeItems.Add("DvergrNeedle", 5, 5);
item9.CraftAmount = 1;
item9.Trade.Price = 0u;
item9.Trade.Stack = 0u;
item9.Trade.RequiredGlobalKey = "defeated_bonemass";
item9.Trade.Trader = Trader.None;
Item item10 = new Item("legendaryweapons", "SeraviDeific_CL");
item10.Name.English("Deific Seravi");
item10.Description.English("Beholden in the light of god, you are granted blessings once more, salvation from above, the creator almighty, nigh omniscience, your scythe of salvation, consecrated in divine providence!");
item10.Crafting.Add(CraftingTable.BlackForge, 5);
item10.RequiredItems.Add("Seravi_CL", 1);
item10.RequiredItems.Add("AscensionRune_CL", 1);
item10.RequiredItems.Add("CelestialFeather", 10);
item10.RequiredItems.Add("BonemawSerpentTooth", 25);
item10.CraftAmount = 1;
item10.Trade.Price = 0u;
item10.Trade.Stack = 0u;
item10.Trade.RequiredGlobalKey = "defeated_bonemass";
item10.Trade.Trader = Trader.None;
Item item11 = new Item("legendaryweapons", "Mavanhar_CL");
item11.Name.English("Mavanhar");
item11.Description.English("A hammer that radiates a faint nightmare energy...");
item11.Crafting.Add(CraftingTable.Forge, 1);
item11.RequiredItems.Add("MavanharRelic_CL", 1);
item11.RequiredItems.Add("TrophyEikthyr", 1);
item11.RequiredUpgradeItems.Add("TrophyTheElder", 1, 2);
item11.RequiredUpgradeItems.Add("Stone", 50, 2);
item11.RequiredUpgradeItems.Add("BjornHide", 10, 2);
item11.RequiredUpgradeItems.Add("Root", 10, 2);
item11.RequiredUpgradeItems.Add("TrophyBonemass", 1, 3);
item11.RequiredUpgradeItems.Add("Iron", 20, 3);
item11.RequiredUpgradeItems.Add("ElderBark", 20, 3);
item11.RequiredUpgradeItems.Add("Obsidian", 25, 3);
item11.RequiredUpgradeItems.Add("TrophyDragonQueen", 1, 4);
item11.RequiredUpgradeItems.Add("Silver", 20, 4);
item11.RequiredUpgradeItems.Add("WolfHairBundle", 20, 4);
item11.RequiredUpgradeItems.Add("UndeadBjornRibcage", 10, 4);
item11.RequiredUpgradeItems.Add("TrophyGoblinKing", 1, 5);
item11.RequiredUpgradeItems.Add("BlackMetal", 20, 5);
item11.RequiredUpgradeItems.Add("BlackMarble", 30, 5);
item11.RequiredUpgradeItems.Add("Eitr", 30, 5);
item11.CraftAmount = 1;
item11.Trade.Price = 0u;
item11.Trade.Stack = 0u;
item11.Trade.RequiredGlobalKey = "defeated_bonemass";
item11.Trade.Trader = Trader.None;
Item item12 = new Item("legendaryweapons", "MavanharFearborn_CL");
item12.Name.English("Fearborn Mavanhar");
item12.Description.English("Born from lost dreams, you stand atop a mountain of bodies, reviled by gods, feared by mortals, oh blessed dread, your hammer of nightmares, emboldened by the fear of all!");
item12.Crafting.Add(CraftingTable.BlackForge, 5);
item12.RequiredItems.Add("Mavanhar_CL", 1);
item12.RequiredItems.Add("AscensionRune_CL", 1);
item12.RequiredItems.Add("BonemawSerpentTooth", 30);
item12.RequiredItems.Add("MorgenSinew", 10);
item12.CraftAmount = 1;
item12.Trade.Price = 0u;
item12.Trade.Stack = 0u;
item12.Trade.RequiredGlobalKey = "defeated_bonemass";
item12.Trade.Trader = Trader.None;
Item item13 = new Item("legendaryweapons", "Excevior_CL");
item13.Name.English("Excevior");
item13.Description.English("An unholy dagger, a fragment of light and shadow...");
item13.Crafting.Add(CraftingTable.Forge, 1);
item13.RequiredItems.Add("ExceviorRelic_CL", 1);
item13.RequiredItems.Add("TrophyEikthyr", 1);
item13.RequiredUpgradeItems.Add("TrophyTheElder", 1, 2);
item13.RequiredUpgradeItems.Add("Copper", 20, 2);
item13.RequiredUpgradeItems.Add("TrollHide", 20, 2);
item13.RequiredUpgradeItems.Add("Guck", 20, 2);
item13.RequiredUpgradeItems.Add("TrophyBonemass", 1, 3);
item13.RequiredUpgradeItems.Add("Iron", 20, 3);
item13.RequiredUpgradeItems.Add("Chain", 5, 3);
item13.RequiredUpgradeItems.Add("WolfClaw", 10, 3);
item13.RequiredUpgradeItems.Add("TrophyDragonQueen", 1, 4);
item13.RequiredUpgradeItems.Add("Silver", 20, 4);
item13.RequiredUpgradeItems.Add("Obsidian", 30, 4);
item13.RequiredUpgradeItems.Add("Needle", 10, 4);
item13.RequiredUpgradeItems.Add("TrophyGoblinKing", 1, 5);
item13.RequiredUpgradeItems.Add("BlackMetal", 20, 5);
item13.RequiredUpgradeItems.Add("LinenThread", 20, 5);
item13.RequiredUpgradeItems.Add("ScaleHide", 25, 5);
item13.CraftAmount = 1;
item13.Trade.Price = 0u;
item13.Trade.Stack = 0u;
item13.Trade.RequiredGlobalKey = "defeated_bonemass";
item13.Trade.Trader = Trader.None;
Item item14 = new Item("legendaryweapons", "ExceviorPenumbral_CL");
item14.Name.English("Penumbral Excevior");
item14.Description.English("Graced by the dark light, a timeless shadow, a sunlight wraith, the lord of umbral light, cursed yet blessed, your dagger of penumbral fragments, wrought from light and dark!");
item14.Crafting.Add(CraftingTable.BlackForge, 5);
item14.RequiredItems.Add("Excevior_CL", 1);
item14.RequiredItems.Add("AscensionRune_CL", 1);
item14.RequiredItems.Add("MorgenSinew", 5);
item14.RequiredItems.Add("Coins", 1000);
item14.CraftAmount = 1;
item14.Trade.Price = 0u;
item14.Trade.Stack = 0u;
item14.Trade.RequiredGlobalKey = "defeated_bonemass";
item14.Trade.Trader = Trader.None;
Item item15 = new Item("legendaryweapons", "ExceviorDefender_CL");
item15.Name.English("Shadowlight Defender");
item15.Description.English("Incomplete form, shadow with no name, missing pieces... -Pairs with Excevior");
item15.Crafting.Add(CraftingTable.Forge, 1);
item15.RequiredItems.Add("Bronze", 15);
item15.RequiredItems.Add("BjornHide", 10);
item15.RequiredItems.Add("TrophyEikthyr", 1);
item15.RequiredUpgradeItems.Add("TrophyTheElder", 1, 2);
item15.RequiredUpgradeItems.Add("Copper", 5, 2);
item15.RequiredUpgradeItems.Add("TrollHide", 5, 2);
item15.RequiredUpgradeItems.Add("Guck", 5, 2);
item15.RequiredUpgradeItems.Add("TrophyBonemass", 1, 3);
item15.RequiredUpgradeItems.Add("Iron", 5, 3);
item15.RequiredUpgradeItems.Add("Chain", 2, 3);
item15.RequiredUpgradeItems.Add("WolfClaw", 5, 3);
item15.RequiredUpgradeItems.Add("TrophyDragonQueen", 1, 4);
item15.RequiredUpgradeItems.Add("Silver", 5, 4);
item15.RequiredUpgradeItems.Add("Obsidian", 10, 4);
item15.RequiredUpgradeItems.Add("Needle", 5, 4);
item15.RequiredUpgradeItems.Add("TrophyGoblinKing", 1, 5);
item15.RequiredUpgradeItems.Add("BlackMetal", 5, 5);
item15.RequiredUpgradeItems.Add("LinenThread", 5, 5);
item15.RequiredUpgradeItems.Add("ScaleHide", 5, 5);
item15.CraftAmount = 1;
item15.Trade.Price = 0u;
item15.Trade.Stack = 0u;
item15.Trade.RequiredGlobalKey = "defeated_bonemass";
item15.Trade.Trader = Trader.None;
Item item16 = new Item("legendaryweapons", "ExceviorDefenderPenumbral_CL");
item16.Name.English("Penumbral Defender");
item16.Description.English("Unholy one, cursed with light, blessed by dark, oh shadowless assassin, deceiving godly eyes. -Pairs with Excevior");
item16.Crafting.Add(CraftingTable.MageTable, 1);
item16.RequiredItems.Add("ExceviorDefender_CL", 1);
item16.RequiredItems.Add("AscensionRune_CL", 1);
item16.RequiredItems.Add("CelestialFeather", 5);
item16.RequiredItems.Add("Coins", 1000);
item16.CraftAmount = 1;
item16.Trade.Price = 0u;
item16.Trade.Stack = 0u;
item16.Trade.RequiredGlobalKey = "defeated_bonemass";
item16.Trade.Trader = Trader.None;
Item item17 = new Item("legendaryweapons", "Ziralux_CL");
item17.Name.English("Ziralux");
item17.Description.English("Claws of a mad beast nowhere to be seen...");
item17.Crafting.Add(CraftingTable.Forge, 1);
item17.RequiredItems.Add("ZiraluxRelic_CL", 1);
item17.RequiredItems.Add("TrophyEikthyr", 1);
item17.RequiredUpgradeItems.Add("TrophyTheElder", 1, 2);
item17.RequiredUpgradeItems.Add("Tin", 20, 2);
item17.RequiredUpgradeItems.Add("GreydwarfEye", 20, 2);
item17.RequiredUpgradeItems.Add("Thunderstone", 10, 2);
item17.RequiredUpgradeItems.Add("TrophyBonemass", 1, 3);
item17.RequiredUpgradeItems.Add("Iron", 20, 3);
item17.RequiredUpgradeItems.Add("Root", 10, 3);
item17.RequiredUpgradeItems.Add("WolfClaw", 10, 3);
item17.RequiredUpgradeItems.Add("TrophyDragonQueen", 1, 4);
item17.RequiredUpgradeItems.Add("Silver", 20, 4);
item17.RequiredUpgradeItems.Add("Thunderstone", 30, 4);
item17.RequiredUpgradeItems.Add("LinenThread", 10, 4);
item17.RequiredUpgradeItems.Add("TrophyGoblinKing", 1, 5);
item17.RequiredUpgradeItems.Add("BlackMetal", 20, 5);
item17.RequiredUpgradeItems.Add("LoxPelt", 20, 5);
item17.RequiredUpgradeItems.Add("Eitr", 20, 5);
item17.CraftAmount = 1;
item17.Trade.Price = 0u;
item17.Trade.Stack = 0u;
item17.Trade.RequiredGlobalKey = "defeated_bonemass";
item17.Trade.Trader = Trader.None;
Item item18 = new Item("legendaryweapons", "ZiraluxEffulgent_CL");
item18.Name.English("Effulgent Ziralux");
item18.Description.English("Wrought down from darkened skies, a single bolt crashes through the horizon, the air surges, a crackle of plasma radiates, a fulminated beast approaches, your claws of thundering might, struck with maximum potency.");
item18.Crafting.Add(CraftingTable.BlackForge, 5);
item18.RequiredItems.Add("Ziralux_CL", 1);
item18.RequiredItems.Add("AscensionRune_CL", 1);
item18.RequiredItems.Add("GemstoneBlue", 2);
item18.RequiredItems.Add("CelestialFeather", 10);
item18.CraftAmount = 1;
item18.Trade.Price = 0u;
item18.Trade.Stack = 0u;
item18.Trade.RequiredGlobalKey = "defeated_bonemass";
item18.Trade.Trader = Trader.None;
Item item19 = new Item("legendaryweapons", "Prisvallia_CL");
item19.Name.English("Prisvallia");
item19.Description.English("A magical staff with a prismatic core, it radiates a shimmering aura.");
item19.Crafting.Add(CraftingTable.Forge, 1);
item19.RequiredItems.Add("PrisvalliaRelic_CL", 1);
item19.RequiredItems.Add("TrophyEikthyr", 1);
item19.RequiredUpgradeItems.Add("TrophyTheElder", 1, 2);
item19.RequiredUpgradeItems.Add("Ectoplasm", 10, 2);
item19.RequiredUpgradeItems.Add("Tin", 10, 2);
item19.RequiredUpgradeItems.Add("Dandelion", 10, 2);
item19.RequiredUpgradeItems.Add("TrophyBonemass", 1, 3);
item19.RequiredUpgradeItems.Add("ElderBark", 30, 3);
item19.RequiredUpgradeItems.Add("Guck", 15, 3);
item19.RequiredUpgradeItems.Add("FreezeGland", 15, 3);
item19.RequiredUpgradeItems.Add("TrophyDragonQueen", 1, 4);
item19.RequiredUpgradeItems.Add("Silver", 20, 4);
item19.RequiredUpgradeItems.Add("Crystal", 30, 4);
item19.RequiredUpgradeItems.Add("Tar", 30, 4);
item19.RequiredUpgradeItems.Add("TrophyGoblinKing", 1, 5);
item19.RequiredUpgradeItems.Add("GoblinTotem", 5, 5);
item19.RequiredUpgradeItems.Add("LinenThread", 15, 5);
item19.RequiredUpgradeItems.Add("Eitr", 30, 5);
item19.CraftAmount = 1;
item19.Trade.Price = 0u;
item19.Trade.Stack = 0u;
item19.Trade.RequiredGlobalKey = "defeated_bonemass";
item19.Trade.Trader = Trader.None;
Item item20 = new Item("legendaryweapons", "PrisvalliaIlluminant_CL");
item20.Name.English("Illuminant Prisvallia");
item20.Description.English("With shimmering glory, the veil is lifted before your sight, a prismatic echo, an ascendant feat, a crystalline glare, your staff of prisms, illuminated in fervent glory!");
item20.Crafting.Add(CraftingTable.BlackForge, 5);
item20.RequiredItems.Add("Prisvallia_CL", 1);
item20.RequiredItems.Add("AscensionRune_CL", 1);
item20.RequiredItems.Add("GemstoneBlue", 1);
item20.RequiredItems.Add("GemstoneGreen", 1);
item20.RequiredItems.Add("GemstoneRed", 1);
item20.CraftAmount = 1;
item20.Trade.Price = 0u;
item20.Trade.Stack = 0u;
item20.Trade.RequiredGlobalKey = "defeated_bonemass";
item20.Trade.Trader = Trader.None;
Item item21 = new Item("legendaryweapons", "Nyphrion_CL");
item21.Name.English("Nyphrion");
item21.Description.English("A druidic bow, lightly emanating a natural energy.");
item21.Crafting.Add(CraftingTable.Forge, 1);
item21.RequiredItems.Add("NyphrionRelic_CL", 1);
item21.RequiredItems.Add("TrophyEikthyr", 1);
item21.RequiredUpgradeItems.Add("TrophyTheElder", 1, 2);
item21.RequiredUpgradeItems.Add("AncientSeed", 10, 2);
item21.RequiredUpgradeItems.Add("BoneFragments", 30, 2);
item21.RequiredUpgradeItems.Add("Guck", 10, 2);
item21.RequiredUpgradeItems.Add("TrophyBonemass", 1, 3);
item21.RequiredUpgradeItems.Add("Chain", 5, 3);
item21.RequiredUpgradeItems.Add("Entrails", 30, 3);
item21.RequiredUpgradeItems.Add("Silver", 20, 3);
item21.RequiredUpgradeItems.Add("TrophyDragonQueen", 1, 4);
item21.RequiredUpgradeItems.Add("Silver", 20, 4);
item21.RequiredUpgradeItems.Add("LinenThread", 20, 4);
item21.RequiredUpgradeItems.Add("Barley", 50, 4);
item21.RequiredUpgradeItems.Add("TrophyGoblinKing", 1, 5);
item21.RequiredUpgradeItems.Add("BlackMetal", 25, 5);
item21.RequiredUpgradeItems.Add("YggdrasilWood", 50, 5);
item21.RequiredUpgradeItems.Add("Sap", 30, 5);
item21.CraftAmount = 1;
item21.Trade.Price = 0u;
item21.Trade.Stack = 0u;
item21.Trade.RequiredGlobalKey = "defeated_bonemass";
item21.Trade.Trader = Trader.None;
Item item22 = new Item("legendaryweapons", "NyphrionWindblessed_CL");
item22.Name.English("Windblessed Nyphrion");
item22.Description.English("A sylphid sighs, a dryad tends to her roots, sunlight beams through the canopy, a glorious landscape, a lush forest, your bow of natural force, basking in the blessings of the earth!");
item22.Crafting.Add(CraftingTable.BlackForge, 5);
item22.RequiredItems.Add("Nyphrion_CL", 1);
item22.RequiredItems.Add("AscensionRune_CL", 1);
item22.RequiredItems.Add("GemstoneGreen", 2);
item22.RequiredItems.Add("CelestialFeather", 10);
item22.CraftAmount = 1;
item22.Trade.Price = 0u;
item22.Trade.Stack = 0u;
item22.Trade.RequiredGlobalKey = "defeated_bonemass";
item22.Trade.Trader = Trader.None;
Item item23 = new Item("legendaryweapons", "Ravalon_CL");
item23.Name.English("Ravalon");
item23.Description.English("A technological marvel, utilizing heat energy to produce firepower.");
item23.Crafting.Add(CraftingTable.Forge, 1);
item23.RequiredItems.Add("RavalonRelic_CL", 1);
item23.RequiredItems.Add("TrophyEikthyr", 1);
item23.RequiredUpgradeItems.Add("TrophyTheElder", 1, 2);
item23.RequiredUpgradeItems.Add("RoundLog", 20, 2);
item23.RequiredUpgradeItems.Add("SurtlingCore", 10, 2);
item23.RequiredUpgradeItems.Add("Root", 10, 2);
item23.RequiredUpgradeItems.Add("TrophyBonemass", 1, 3);
item23.RequiredUpgradeItems.Add("Iron", 20, 3);
item23.RequiredUpgradeItems.Add("Chain", 5, 3);
item23.RequiredUpgradeItems.Add("WolfClaw", 10, 3);
item23.RequiredUpgradeItems.Add("TrophyDragonQueen", 1, 4);
item23.RequiredUpgradeItems.Add("Silver", 20, 4);
item23.RequiredUpgradeItems.Add("SharpeningStone", 1, 4);
item23.RequiredUpgradeItems.Add("GoblinTotem", 3, 4);
item23.RequiredUpgradeItems.Add("TrophyGoblinKing", 1, 5);
item23.RequiredUpgradeItems.Add("BlackMetal", 25, 5);
item23.RequiredUpgradeItems.Add("MechanicalSpring", 5, 5);
item23.RequiredUpgradeItems.Add("Bilebag", 5, 5);
item23.CraftAmount = 1;
item23.Trade.Price = 0u;
item23.Trade.Stack = 0u;
item23.Trade.RequiredGlobalKey = "defeated_bonemass";
item23.Trade.Trader = Trader.None;
Item item24 = new Item("legendaryweapons", "RavalonAnnihilating_CL");
item24.Name.English("Annihilating Ravalon");
item24.Description.English("A devil roaming the battlefield, a technological disaster, corrupted by war, oh great regret of mankind, a vile scorching fury, your arbalest of annihilation, wrought in blood and fire!");
item24.Crafting.Add(CraftingTable.BlackForge, 5);
item24.RequiredItems.Add("Ravalon_CL", 1);
item24.RequiredItems.Add("AscensionRune_CL", 1);
item24.RequiredItems.Add("CharredCogwheel", 5);
item24.RequiredItems.Add("MoltenCore", 10);
item24.CraftAmount = 1;
item24.Trade.Price = 0u;
item24.Trade.Stack = 0u;
item24.Trade.RequiredGlobalKey = "defeated_bonemass";
item24.Trade.Trader = Trader.None;
Item item25 = new Item("legendaryweapons", "CatharisCrown");
item25.Name.English("Ardent Crown");
item25.Description.English("Finality, a grave of dead stars, the blood of a dead god, man-made transcendence... -Catharis");
item25.Crafting.Add(CraftingTable.Disabled, 1);
item25.RequiredItems.Add("CatharisRelic", 1);
item25.RequiredItems.Add("MysticBar_CL", 1);
item25.CraftAmount = 1;
item25.Trade.Price = 0u;
item25.Trade.Stack = 0u;
item25.Trade.RequiredGlobalKey = "defeated_bonemass";
item25.Trade.Trader = Trader.None;
Item item26 = new Item("legendaryweapons", "QuelTaliaTiara_CL");
item26.Name.English("Hailstar Diadem");
item26.Description.English("From frozen skies, an ancient crystal, given polar form, behold her majesty. -Pairs with Quel'Talia");
item26.Crafting.Add(CraftingTable.MageTable, 1);
item26.RequiredItems.Add("MysticBar_CL", 1);
item26.CraftAmount = 1;
item26.Trade.Price = 0u;
item26.Trade.Stack = 0u;
item26.Trade.RequiredGlobalKey = "defeated_bonemass";
item26.Trade.Trader = Trader.None;
Item item27 = new Item("legendaryweapons", "HastielCrown_CL");
item27.Name.English("Crown of Reprisal");
item27.Description.English("An unyielding rage, a fervent fury, a bloody dream, the avenger has arrived. -Pairs with Hastiel");
item27.Crafting.Add(CraftingTable.MageTable, 1);
item27.RequiredItems.Add("MysticBar_CL", 1);
item27.CraftAmount = 1;
item27.Trade.Price = 0u;
item27.Trade.Stack = 0u;
item27.Trade.RequiredGlobalKey = "defeated_bonemass";
item27.Trade.Trader = Trader.None;
Item item28 = new Item("legendaryweapons", "IgnaviusHelm_CL");
item28.Name.English("Pyrelord's Infernal Helm");
item28.Description.English("Molten soul, burning plains, a singular flame, the ashen warlord conquers once more. -Pairs with Ignavius");
item28.Crafting.Add(CraftingTable.MageTable, 1);
item28.RequiredItems.Add("MysticBar_CL", 1);
item28.CraftAmount = 1;
item28.Trade.Price = 0u;
item28.Trade.Stack = 0u;
item28.Trade.RequiredGlobalKey = "defeated_bonemass";
item28.Trade.Trader = Trader.None;
Item item29 = new Item("legendaryweapons", "SeraviSigil_CL");
item29.Name.English("Seraph's Holy Sigil");
item29.Description.English("Holy being, godly blood, descended from the heavens, an archangel reveals itself to mortal eyes. -Pairs with Seravi");
item29.Crafting.Add(CraftingTable.MageTable, 1);
item29.RequiredItems.Add("MysticBar_CL", 1);
item29.CraftAmount = 1;
item29.Trade.Price = 0u;
item29.Trade.Stack = 0u;
item29.Trade.RequiredGlobalKey = "defeated_bonemass";
item29.Trade.Trader = Trader.None;
Item item30 = new Item("legendaryweapons", "MavanharHelm_CL");
item30.Name.English("Helm of Banished Dreams");
item30.Description.English("Nightmare soul, feared bloodline, banished to the underworld, the nightmare of ages past sets foot upon this land. -Pairs with Mavanhar");
item30.Crafting.Add(CraftingTable.MageTable, 1);
item30.RequiredItems.Add("MysticBar_CL", 1);
item30.CraftAmount = 1;
item30.Trade.Price = 0u;
item30.Trade.Stack = 0u;
item30.Trade.RequiredGlobalKey = "defeated_bonemass";
item30.Trade.Trader = Trader.None;
Item item31 = new Item("legendaryweapons", "ZiraluxCape_CL");
item31.Name.English("Thunderclap Shroud");
item31.Description.English("Striking skies, energy fused bones, cutting into the earth, a mad storm tears into our reality. -Pairs with Ziralux");
item31.Crafting.Add(CraftingTable.MageTable, 1);
item31.RequiredItems.Add("MysticBar_CL", 1);
item31.CraftAmount = 1;
item31.Trade.Price = 0u;
item31.Trade.Stack = 0u;
item31.Trade.RequiredGlobalKey = "defeated_bonemass";
item31.Trade.Trader = Trader.None;
Item item32 = new Item("legendaryweapons", "ExceviorCape_CL");
item32.Name.English("Breathless Cloak");
item32.Description.English("Fearless assassin, stalker in the night, ghost of the day, a lightless walker fades from sight. -Pairs with Excevior");
item32.Crafting.Add(CraftingTable.MageTable, 1);
item32.RequiredItems.Add("MysticBar_CL", 1);
item32.CraftAmount = 1;
item32.Trade.Price = 0u;
item32.Trade.Stack = 0u;
item32.Trade.RequiredGlobalKey = "defeated_bonemass";
item32.Trade.Trader = Trader.None;
Item item33 = new Item("legendaryweapons", "PrisvalliaWings_CL");
item33.Name.English("Prismatic Wings");
item33.Description.English("Shining bright, shimmering in the night, prismatic glory reigns, the archwizard's descent. -Pairs with Prisvallia");
item33.Crafting.Add(CraftingTable.MageTable, 1);
item33.RequiredItems.Add("MysticBar_CL", 1);
item33.CraftAmount = 1;
item33.Trade.Price = 0u;
item33.Trade.Stack = 0u;
item33.Trade.RequiredGlobalKey = "defeated_bonemass";
item33.Trade.Trader = Trader.None;
Item item34 = new Item("legendaryweapons", "CatharisRelic");
item34.Name.English("Core of Catharis");
item34.Description.English("An ornate relic forged from the culmination of a lifetime...");
item34.Trade.Price = 0u;
item34.Trade.Stack = 0u;
item34.Trade.RequiredGlobalKey = "defeated_bonemass";
item34.Trade.Trader = Trader.None;
item34.DropsFrom.Add("Charred_Melee_Dyrnwyn", 0f, 1, 1);
Item item35 = new Item("legendaryweapons", "QuelTaliaRelic_CL");
item35.Name.English("Polaris Frostshard");
item35.Description.English("Cries echo, wind howls, and then, a freezing silence...");
item35.Trade.Price = 0u;
item35.Trade.Stack = 0u;
item35.Trade.RequiredGlobalKey = "defeated_bonemass";
item35.Trade.Trader = Trader.None;
item35.DropsFrom.Add("Eikthyr", 0.2f, 1, 1);
Item item36 = new Item("legendaryweapons", "HastielRelic_CL");
item36.Name.English("Vengeful Pendant");
item36.Description.English("Blood drips echo at dawn, a vile rage boils within, a fallen warrior, given purpose...");
item36.Trade.Price = 0u;
item36.Trade.Stack = 0u;
item36.Trade.RequiredGlobalKey = "defeated_bonemass";
item36.Trade.Trader = Trader.None;
item36.DropsFrom.Add("Eikthyr", 0.2f, 1, 1);
Item item37 = new Item("legendaryweapons", "IgnaviusRelic_CL");
item37.Name.English("Molten Soulstone");
item37.Description.English("A volcano erupts, magma flows within, crying out to ashen skies, a molten soul...");
item37.Trade.Price = 0u;
item37.Trade.Stack = 0u;
item37.Trade.RequiredGlobalKey = "defeated_bonemass";
item37.Trade.Trader = Trader.None;
item37.DropsFrom.Add("Eikthyr", 0.2f, 1, 1);
Item item38 = new Item("legendaryweapons", "SeraviRelic_CL");
item38.Name.English("Heavenly Chalice");
item38.Description.English("A blessed choir, holy wings descend, singing a sacred tune, my beloved nephilim...");
item38.Trade.Price = 0u;
item38.Trade.Stack = 0u;
item38.Trade.RequiredGlobalKey = "defeated_bonemass";
item38.Trade.Trader = Trader.None;
item38.DropsFrom.Add("Eikthyr", 0.2f, 1, 1);
Item item39 = new Item("legendaryweapons", "MavanharRelic_CL");
item39.Name.English("Dreamspoken Rune");
item39.Description.English("An unborn child, fearful dreams encroach, shuddering breaths echo, a lord of dreams...");
item39.Trade.Price = 0u;
item39.Trade.Stack = 0u;
item39.Trade.RequiredGlobalKey = "defeated_bonemass";
item39.Trade.Trader = Trader.None;
item39.DropsFrom.Add("Eikthyr", 0.2f, 1, 1);
Item item40 = new Item("legendaryweapons", "ExceviorRelic_CL");
item40.Name.English("Shadowlight Orb");
item40.Description.English("An unholy light, shadows under the sun, not a sound is heard, a silent killer...");
item40.Trade.Price = 0u;
item40.Trade.Stack = 0u;
item40.Trade.RequiredGlobalKey = "defeated_bonemass";
item40.Trade.Trader = Trader.None;
item40.DropsFrom.Add("Eikthyr", 0.2f, 1, 1);
Item item41 = new Item("legendaryweapons", "ZiraluxRelic_CL");
item41.Name.English("Stormsong Relic");
item41.Description.English("A thunderclap from far above, bolts of energy rain down, crashing howls tear through the sky, a wild beast...");
item41.Trade.Price = 0u;
item41.Trade.Stack = 0u;
item41.Trade.RequiredGlobalKey = "defeated_bonemass";
item41.Trade.Trader = Trader.None;
item41.DropsFrom.Add("Eikthyr", 0.2f, 1, 1);
Item item42 = new Item("legendaryweapons", "PrisvalliaRelic_CL");
item42.Name.English("Prismatic Heart");
item42.Description.English("A rainbow forms over the horizon, a shining crystal grows below, an ethereal beating heart, lost in aether...");
item42.Trade.Price = 0u;
item42.Trade.Stack = 0u;
item42.Trade.RequiredGlobalKey = "defeated_bonemass";
item42.Trade.Trader = Trader.None;
item42.DropsFrom.Add("Eikthyr", 0.2f, 1, 1);
Item item43 = new Item("legendaryweapons", "NyphrionRelic_CL");
item43.Name.English("Druidic Key");
item43.Description.English("A singing forest, a secluded retreat, a mysterious sealed tree, oh blessed earth...");
item43.Trade.Price = 0u;
item43.Trade.Stack = 0u;
item43.Trade.RequiredGlobalKey = "defeated_bonemass";
item43.Trade.Trader = Trader.None;
item43.DropsFrom.Add("Eikthyr", 0.2f, 1, 1);
Item item44 = new Item("legendaryweapons", "RavalonRelic_CL");
item44.Name.English("Wartorn Shell");
item44.Description.English("A burning battlefield, a civilization lost to strife, an endless torched plain, a desperate soldier...");
item44.Trade.Price = 0u;
item44.Trade.Stack = 0u;
item44.Trade.RequiredGlobalKey = "defeated_bonemass";
item44.Trade.Trader = Trader.None;
item44.DropsFrom.Add("Eikthyr", 0.2f, 1, 1);
Item item45 = new Item("legendaryweapons", "MysticBar_CL");
item45.Name.English("Mystic Steel Alloy");
item45.Description.English("A mystic alloy culminated from the will of the king, utilized for the creation of empowering artifacts.");
item45.Trade.Price = 0u;
item45.Trade.Stack = 0u;
item45.Trade.RequiredGlobalKey = "defeated_bonemass";
item45.Trade.Trader = Trader.None;
item45.DropsFrom.Add("GoblinKing", 1f, 1, 3);
Item item46 = new Item("legendaryweapons", "AscensionRune_CL");
item46.Name.English("Rune of Ascension");
item46.Description.English("Since the dawn of time, humans have sought power, very few have gained it, and even fewer have managed to keep it, but you, will you be any different?");
item46.Trade.Price = 0u;
item46.Trade.Stack = 0u;
item46.Trade.RequiredGlobalKey = "defeated_bonemass";
item46.Trade.Trader = Trader.None;
item46.DropsFrom.Add("SeekerQueen", 1f, 1, 3);
Item item47 = new Item("legendaryweapons", "RavalonGunboltT1_CL");
item47.Name.English("Surtling Gunbolts");
item47.Description.English("Specially made rounds for Ravalon, granted minor flame enhancements.");
item47.Crafting.Add(CraftingTable.Forge, 1);
item47.RequiredItems.Add("Bronze", 5);
item47.RequiredItems.Add("BoneFragments", 5);
item47.RequiredItems.Add("SurtlingCore", 1);
item47.CraftAmount = 50;
item47.Trade.Price = 0u;
item47.Trade.Stack = 0u;
item47.Trade.RequiredGlobalKey = "defeated_bonemass";
item47.Trade.Trader = Trader.None;
Item item48 = new Item("legendaryweapons", "RavalonGunboltT2_CL");
item48.Name.English("Goblintech Gunbolts");
item48.Description.English("Specially made rounds for Ravalon, empowered with technological materials.");
item48.Crafting.Add(CraftingTable.ArtisanTable, 1);
item48.RequiredItems.Add("BlackMetal", 5);
item48.RequiredItems.Add("SurtlingCore", 5);
item48.RequiredItems.Add("UndeadBjornRibcage", 1);
item48.CraftAmount = 100;
item48.Trade.Price = 0u;
item48.Trade.Stack = 0u;
item48.Trade.RequiredGlobalKey = "defeated_bonemass";
item48.Trade.Trader = Trader.None;
Item item49 = new Item("legendaryweapons", "RavalonGunboltT3_CL");
item49.Name.English("Annihilation Rounds");
item49.Description.English("Specially made rounds for Ravalon, infused with annihilation energy.");
item49.Crafting.Add(CraftingTable.BlackForge, 1);
item49.RequiredItems.Add("ProustitePowder", 10);
item49.RequiredItems.Add("MoltenCore", 1);
item49.RequiredItems.Add("MechanicalSpring", 5);
item49.CraftAmount = 50;
item49.Trade.Price = 0u;
item49.Trade.Stack = 0u;
item49.Trade.RequiredGlobalKey = "defeated_bonemass";
item49.Trade.Trader = Trader.None;
Item item50 = new Item("legendaryweapons", "RavalonGunboltBreaker_CL");
item50.Name.English("Demolition Rounds");
item50.Description.English("Specially made rounds for Ravalon, designed to destroy wildlife, how despicable...");
item50.Crafting.Add(CraftingTable.Forge, 1);
item50.RequiredItems.Add("SurtlingCore", 5);
item50.RequiredItems.Add("Stone", 50);
item50.RequiredItems.Add("FineWood", 25);
item50.CraftAmount = 50;
item50.Trade.Price = 0u;
item50.Trade.Stack = 0u;
item50.Trade.RequiredGlobalKey = "defeated_bonemass";
item50.Trade.Trader = Trader.None;
Item item51 = new Item("legendaryweapons", "NyphrionArrowT1_CL");
item51.Name.English("Shaman Arrows");
item51.Description.English("Specially made arrows for Nyphrion, granted minor poison blessings.");
item51.Crafting.Add(CraftingTable.Forge, 1);
item51.RequiredItems.Add("BoneFragments", 5);
item51.RequiredItems.Add("NeckTail", 5);
item51.RequiredItems.Add("AncientSeed", 1);
item51.CraftAmount = 50;
item51.Trade.Price = 0u;
item51.Trade.Stack = 0u;
item51.Trade.RequiredGlobalKey = "defeated_bonemass";
item51.Trade.Trader = Trader.None;
Item item52 = new Item("legendaryweapons", "NyphrionArrowT2_CL");
item52.Name.English("Toxinstrike Arrows");
item52.Description.English("Specially made arrows for Nyphrion, empowered with deadlier poisons.");
item52.Crafting.Add(CraftingTable.ArtisanTable, 1);
item52.RequiredItems.Add("LinenThread", 5);
item52.RequiredItems.Add("Guck", 5);
item52.RequiredItems.Add("Tar", 5);
item52.CraftAmount = 50;
item52.Trade.Price = 0u;
item52.Trade.Stack = 0u;
item52.Trade.RequiredGlobalKey = "defeated_bonemass";
item52.Trade.Trader = Trader.None;
Item item53 = new Item("legendaryweapons", "NyphrionArrowT3_CL");
item53.Name.English("Spirit-Blessed Soul Arrows");
item53.Description.English("Specially made arrows for Nyphrion, infused with dryadic soul energy.");
item53.Crafting.Add(CraftingTable.BlackForge, 1);
item53.RequiredItems.Add("Eitr", 10);
item53.RequiredItems.Add("BonemawSerpentTooth", 10);
item53.RequiredItems.Add("MorgenHeart", 1);
item53.CraftAmount = 50;
item53.Trade.Price = 0u;
item53.Trade.Stack = 0u;
item53.Trade.RequiredGlobalKey = "defeated_bonemass";
item53.Trade.Trader = Trader.None;
Item item54 = new Item("legendaryweapons", "NyphrionArrowScatter_CL");
item54.Name.English("Scatterstrike Arrows");
item54.Description.English("Specially made arrows for Nyphrion, a more high power focused arrow for direct combat.");
item54.Crafting.Add(CraftingTable.BlackForge, 1);
item54.RequiredItems.Add("Eitr", 15);
item54.RequiredItems.Add("Crystal", 25);
item54.RequiredItems.Add("Mandible", 1);
item54.CraftAmount = 50;
item54.Trade.Price = 0u;
item54.Trade.Stack = 0u;
item54.Trade.RequiredGlobalKey = "defeated_bonemass";
item54.Trade.Trader = Trader.None;
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Avrinn_Aoe");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Avrinn_AoeSuper");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Avrinn_AscendedStrike");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Avrinn_BasicStrike");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Avrinn_Block");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Avrinn_Shred");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Avrinn_Critical");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Avrinn_SpecialStrike");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Avrinn_BasicSound");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Avrinn_SpecialSound");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Talia_Adrenaline");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Talia_BasicStrike");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Talia_AwakenedStrike");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Talia_Block");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Talia_Shred");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Taliaeth_BasicSound");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Taliaeth_SpecialSound");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Taliaeth_RingedStrike");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Taliaeth_SomberSong");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Taliaeth_Projectile");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Hastiel_Projectile");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "HastielRageborn_Projectile");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Hastiel_Adrenaline");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Hastiel_BasicStrike");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Hastiel_SpecialStrike");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Hastiel_Block");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Hastiel_Shred");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Hastiel_BasicSound");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Hastiel_SpecialSound");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Hastiel_Warcry");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Hastiel_Aoe");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ignavius_ProjectileInfernal");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "IgnaviusCrystals");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Molten Shards");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ignavius_BasicStrike");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ignavius_BasicSound");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ignavius_SpecialSound");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ignavius_WarDrums");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ignavius_Adrenaline");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ignavius_Block");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ignavius_InfernalStrike");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ignavius_Shred");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "IgnaviusCrystal_BasicHit");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "IgnaviusCrystal_Destroyed");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ignavius_SpecialSmash");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ignavius_ProjectileDuplicate");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ignavius_Aoe");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Seravi_Projectile");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Seravi_ProjectileDuplicate");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Seravi_Adrenaline");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Seravi_BasicStrike1");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Seravi_BasicStrike2");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Seravi_Block");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Seravi_DeificStrike1");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Seravi_DeificStrike2");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Seravi_Shred");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Seravi_Holychoir");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Seravi_Slashsounds");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Seravi_SpecialSound");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ziralux_Projectile");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ziralux_ProjectileDuplicate");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ziralux_Splinter");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ziralux_Adrenaliine");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ziralux_BasicStrike");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ziralux_Block");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ziralux_NormalSpecialStrike");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ziralux_ScatterLightning");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ziralux_Shred");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ziralux_SpecialStrike");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ziralux_BasicSound");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ziralux_SpecialSound");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ziralux_TigerCries");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Excevior_Projectile");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Excevior_Adrenaline");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Excevior_BasicShred");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Excevior_BasicSpecialStrike");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Excevior_BasicStrike");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Excevior_Block");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Excevior_ShredSpecial");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Excevior_SpecialStrike");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Excevior_BasicSound");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Excevior_SinisterSong");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Excevior_SpecialSound");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Mavanhar_Aoe");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Mavanhar_Projectile");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Mavanhar_SpecialBasicSound");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Mavanhar_Warsong");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Mavanhar_Adrenaline");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Mavanhar_BasicSpecialStrike");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Mavanhar_BasicStrike");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Mavanhar_BasicStrikeAoe");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Mavanhar_Block");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Mavanhar_Shred");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Nyphrion_Aoe");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Nyphrion_Splinter");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Nyphrion_ProjectileArrow1");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Nyphrion_ProjectileArrow2");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Nyphrion_ProjectileArrow3");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Nyphrion_ProjectileArrow4");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Nyphrion_BowSound");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Nyphrion_PoisonHiss");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Nyphrion_AoeProjectile");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Nyphrion_BasicStrikeAoe");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Nyphrion_Block");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Nyphrion_Explosion");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Nyphrion_Shot");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Nyphrion_Shred");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ravalon_ProjectileBolt1");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ravalon_ProjectileBolt2");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ravalon_ProjectileBolt3");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ravalon_ExplosionSound");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ravalon_ShotSound");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ravalon_SmallAoeSound");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ravalon_SpecialSound");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ravalon_AoeProjectile");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ravalon_Block");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ravalon_FiringShot");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ravalon_Shred");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ravalon_UltraExplosion");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ravalon_ProjectileBolt4");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Ravlon_BreakingBoom");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Prisvallia_Projectile1");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Prisvallia_Projectile2");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Prisvallia_Projectile3");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Prisvallia_Laser");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "PrisvalliaCrystal_Destroyed");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "PrisvalliaCrystal_BasicHit");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Prisvallia_LaserLaunch");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Prisvallia_Block");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Prisvallia_Adrenaline");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Prisvallia_Shimmersong");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Prisvallia_MagicSpecialSound");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Prisvallia_Shred");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Prisvallia_BasicStrike");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Prisvallia_Launch");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Prisvallia_LaunchSpecial");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Prisvallia_Explosion1");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Prisvallia_Explosion2");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "PrivalliaCrystals");
PrefabManager.RegisterPrefab(PrefabManager.RegisterAssetBundle("legendaryweapons"), "Prisvallia_Aoe");
Assembly executingAssembly = Assembly.GetExecutingAssembly();
_harmony.PatchAll(executingAssembly);
SetupWatcher();
}
private void OnDestroy()
{
((BaseUnityPlugin)this).Config.Save();
}
private void SetupWatcher()
{
FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(Paths.ConfigPath, ConfigFileName);
fileSystemWatcher.Changed += ReadConfigValues;
fileSystemWatcher.Created += ReadConfigValues;
fileSystemWatcher.Renamed += ReadConfigValues;
fileSystemWatcher.IncludeSubdirectories = true;
fileSystemWatcher.SynchronizingObject = ThreadingHelper.SynchronizingObject;
fileSystemWatcher.EnableRaisingEvents = true;
}
private void ReadConfigValues(object sender, FileSystemEventArgs e)
{
if (!File.Exists(ConfigFileFullPath))
{
return;
}
try
{
AscendedArsenalLogger.LogDebug((object)"ReadConfigValues called");
((BaseUnityPlugin)this).Config.Reload();
}
catch
{
AscendedArsenalLogger.LogError((object)("There was an issue loading your " + ConfigFileName));
AscendedArsenalLogger.LogError((object)"Please check your config entries for spelling and format!");
}
}
private ConfigEntry<T> config<[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(2)] T>(string group, string name, T value, ConfigDescription description, bool synchronizedSetting = true)
{
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Expected O, but got Unknown
ConfigDescription val = new ConfigDescription(description.Description + (synchronizedSetting ? " [Synced with Server]" : " [Not Synced with Server]"), description.AcceptableValues, description.Tags);
ConfigEntry<T> val2 = ((BaseUnityPlugin)this).Config.Bind<T>(group, name, value, val);
SyncedConfigEntry<T> syncedConfigEntry = ConfigSync.AddConfigEntry<T>(val2);
syncedConfigEntry.SynchronizedConfig = synchronizedSetting;
return val2;
}
private ConfigEntry<T> config<[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(2)] T>(string group, string name, T value, string description, bool synchronizedSetting = true)
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Expected O, but got Unknown
return config(group, name, value, new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>()), synchronizedSetting);
}
static AscendedArsenalPlugin()
{
string configPath = Paths.ConfigPath;
char directorySeparatorChar = Path.DirectorySeparatorChar;
ConfigFileFullPath = configPath + directorySeparatorChar + ConfigFileName;
ConnectionError = "";
AscendedArsenalLogger = Logger.CreateLogSource("AscendedArsenal");
ConfigSync = new ConfigSync("catharis.AscendedArsenal")
{
DisplayName = "AscendedArsenal",
CurrentVersion = "1.1.0",
MinimumRequiredVersion = "1.1.0"
};
_serverConfigLocked = null;
_recipeIsActiveConfig = null;
}
}
public static class KeyboardExtensions
{
public static bool IsKeyDown(this KeyboardShortcut shortcut)
{
//IL_0003: 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 (int)((KeyboardShortcut)(ref shortcut)).MainKey != 0 && Input.GetKeyDown(((KeyboardShortcut)(ref shortcut)).MainKey) && ((KeyboardShortcut)(ref shortcut)).Modifiers.All((Func<KeyCode, bool>)Input.GetKey);
}
public static bool IsKeyHeld(this KeyboardShortcut shortcut)
{
//IL_0003: 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 (int)((KeyboardShortcut)(ref shortcut)).MainKey != 0 && Input.GetKey(((KeyboardShortcut)(ref shortcut)).MainKey) && ((KeyboardShortcut)(ref shortcut)).Modifiers.All((Func<KeyCode, bool>)Input.GetKey);
}
}
[HarmonyPatch(typeof(ZNet), "OnNewConnection")]
public static class RegisterAndCheckVersion
{
[<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(1)]
private static void Prefix(ZNetPeer peer, ref ZNet __instance)
{
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Expected O, but got Unknown
AscendedArsenalPlugin.AscendedArsenalLogger.LogDebug((object)"Registering version RPC handler");
peer.m_rpc.Register<ZPackage>("AscendedArsenal_VersionCheck", (Action<ZRpc, ZPackage>)RpcHandlers.RPC_ItemManagerModTemplate_Version);
AscendedArsenalPlugin.AscendedArsenalLogger.LogInfo((object)"Invoking version check");
ZPackage val = new ZPackage();
val.Write("1.1.0");
peer.m_rpc.Invoke("AscendedArsenal_VersionCheck", new object[1] { val });
}
}
[<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(1)]
[HarmonyPatch(typeof(ZNet), "RPC_PeerInfo")]
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(0)]
public static class VerifyClient
{
private static bool Prefix(ZRpc rpc, ZPackage pkg, ref ZNet __instance)
{
if (!__instance.IsServer() || RpcHandlers.ValidatedPeers.Contains(rpc))
{
return true;
}
AscendedArsenalPlugin.AscendedArsenalLogger.LogWarning((object)("Peer (" + rpc.m_socket.GetHostName() + ") never sent version or couldn't due to previous disconnect, disconnecting"));
rpc.Invoke("Error", new object[1] { 3 });
return false;
}
private static void Postfix(ZNet __instance)
{
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Expected O, but got Unknown
ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.instance.GetServerPeerID(), "AscendedArsenalRequestAdminSync", new object[1] { (object)new ZPackage() });
}
}
[HarmonyPatch(typeof(FejdStartup), "ShowConnectError")]
public class ShowConnectionError
{
[<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(1)]
private static void Postfix(FejdStartup __instance)
{
if (__instance.m_connectionFailedPanel.activeSelf)
{
__instance.m_connectionFailedError.fontSizeMax = 25f;
__instance.m_connectionFailedError.fontSizeMin = 15f;
TMP_Text connectionFailedError = __instance.m_connectionFailedError;
connectionFailedError.text = connectionFailedError.text + "\n" + AscendedArsenalPlugin.ConnectionError;
}
}
}
[HarmonyPatch(typeof(ZNet), "Disconnect")]
public static class RemoveDisconnectedPeerFromVerified
{
[<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(1)]
private static void Prefix(ZNetPeer peer, ref ZNet __instance)
{
if (__instance.IsServer())
{
AscendedArsenalPlugin.AscendedArsenalLogger.LogInfo((object)("Peer (" + peer.m_rpc.m_socket.GetHostName() + ") disconnected, removing from validated list"));
RpcHandlers.ValidatedPeers.Remove(peer.m_rpc);
}
}
}
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(0)]
[<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(1)]
public static class RpcHandlers
{
public static readonly List<ZRpc> ValidatedPeers = new List<ZRpc>();
public static void RPC_ItemManagerModTemplate_Version(ZRpc rpc, ZPackage pkg)
{
string text = pkg.ReadString();
AscendedArsenalPlugin.AscendedArsenalLogger.LogInfo((object)("Version check, local: 1.1.0, remote: " + text));
if (text != "1.1.0")
{
AscendedArsenalPlugin.ConnectionError = "AscendedArsenal Installed: 1.1.0\n Needed: " + text;
if (ZNet.instance.IsServer())
{
AscendedArsenalPlugin.AscendedArsenalLogger.LogWarning((object)("Peer (" + rpc.m_socket.GetHostName() + ") has incompatible version, disconnecting..."));
rpc.Invoke("Error", new object[1] { 3 });
}
}
else if (!ZNet.instance.IsServer())
{
AscendedArsenalPlugin.AscendedArsenalLogger.LogInfo((object)"Received same version from server!");
}
else
{
AscendedArsenalPlugin.AscendedArsenalLogger.LogInfo((object)("Adding peer (" + rpc.m_socket.GetHostName() + ") to validated list"));
ValidatedPeers.Add(rpc);
}
}
public static string ComputeHashForMod()
{
using SHA256 sHA = SHA256.Create();
byte[] array = sHA.ComputeHash(File.ReadAllBytes(Assembly.GetExecutingAssembly().Location));
StringBuilder stringBuilder = new StringBuilder();
byte[] array2 = array;
foreach (byte b in array2)
{
stringBuilder.Append(b.ToString("X2"));
}
return stringBuilder.ToString();
}
}
}
namespace LocalizationManager
{
[<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(1)]
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(0)]
[PublicAPI]
public class Localizer
{
private static readonly Dictionary<string, Dictionary<string, Func<string>>> PlaceholderProcessors;
private static readonly Dictionary<string, Dictionary<string, string>> loadedTexts;
private static readonly ConditionalWeakTable<Localization, string> localizationLanguage;
private static readonly List<WeakReference<Localization>> localizationObjects;
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(2)]
private static BaseUnityPlugin _plugin;
private static readonly List<string> fileExtensions;
private static BaseUnityPlugin plugin
{
get
{
//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
//IL_00b2: Expected O, but got Unknown
if (_plugin == null)
{
IEnumerable<TypeInfo> source;
try
{
source = Assembly.GetExecutingAssembly().DefinedTypes.ToList();
}
catch (ReflectionTypeLoadException ex)
{
source = from t in ex.Types
where t != null
select t.GetTypeInfo();
}
_plugin = (BaseUnityPlugin)Chainloader.ManagerObject.GetComponent((Type)source.First([<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(0)] (TypeInfo t) => t.IsClass && typeof(BaseUnityPlugin).IsAssignableFrom(t)));
}
return _plugin;
}
}
private static void UpdatePlaceholderText(Localization localization, string key)
{
localizationLanguage.TryGetValue(localization, out var value);
string text = loadedTexts[value][key];
if (PlaceholderProcessors.TryGetValue(key, out var value2))
{
text = value2.Aggregate(text, [<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(0)] (string current, KeyValuePair<string, Func<string>> kv) => current.Replace("{" + kv.Key + "}", kv.Value()));
}
localization.AddWord(key, text);
}
public static void AddPlaceholder<T>(string key, string placeholder, ConfigEntry<T> config, [<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(new byte[] { 2, 1, 1 })] Func<T, string> convertConfigValue = null)
{
if (convertConfigValue == null)
{
convertConfigValue = (T val) => val.ToString();
}
if (!PlaceholderProcessors.ContainsKey(key))
{
PlaceholderProcessors[key] = new Dictionary<string, Func<string>>();
}
config.SettingChanged += [<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(0)] (object _, EventArgs _) =>
{
UpdatePlaceholder();
};
if (loadedTexts.ContainsKey(Localization.instance.GetSelectedLanguage()))
{
UpdatePlaceholder();
}
void UpdatePlaceholder()
{
PlaceholderProcessors[key][placeholder] = () => convertConfigValue(config.Value);
UpdatePlaceholderText(Localization.instance, key);
}
}
public static void AddText(string key, string text)
{
List<WeakReference<Localization>> list = new List<WeakReference<Localization>>();
foreach (WeakReference<Localization> localizationObject in localizationObjects)
{
if (localizationObject.TryGetTarget(out var target))
{
Dictionary<string, string> dictionary = loadedTexts[localizationLanguage.GetOrCreateValue(target)];
if (!target.m_translations.ContainsKey(key))
{
dictionary[key] = text;
target.AddWord(key, text);
}
}
else
{
list.Add(localizationObject);
}
}
foreach (WeakReference<Localization> item in list)
{
localizationObjects.Remove(item);
}
}
public static void Load()
{
LoadLocalization(Localization.instance, Localization.instance.GetSelectedLanguage());
}
private static void LoadLocalization(Localization __instance, string language)
{
if (!localizationLanguage.Remove(__instance))
{
localizationObjects.Add(new WeakReference<Localization>(__instance));
}
localizationLanguage.Add(__instance, language);
Dictionary<string, string> dictionary = new Dictionary<string, string>();
foreach (string item in from f in Directory.GetFiles(Path.GetDirectoryName(Paths.PluginPath), plugin.Info.Metadata.Name + ".*", SearchOption.AllDirectories)
where fileExtensions.IndexOf(Path.GetExtension(f)) >= 0
select f)
{
string text = Path.GetFileNameWithoutExtension(item).Split(new char[1] { '.' })[1];
if (dictionary.ContainsKey(text))
{
Debug.LogWarning((object)("Duplicate key " + text + " found for " + plugin.Info.Metadata.Name + ". The duplicate file found at " + item + " will be skipped."));
}
else
{
dictionary[text] = item;
}
}
byte[] array = LoadTranslationFromAssembly("English");
if (array == null)
{
throw new Exception("Found no English localizations in mod " + plugin.Info.Metadata.Name + ". Expected an embedded resource translations/English.json or translations/English.yml.");
}
Dictionary<string, string> dictionary2 = new DeserializerBuilder().IgnoreFields().Build().Deserialize<Dictionary<string, string>>(Encoding.UTF8.GetString(array));
if (dictionary2 == null)
{
throw new Exception("Localization for mod " + plugin.Info.Metadata.Name + " failed: Localization file was empty.");
}
string text2 = null;
if (language != "English")
{
if (dictionary.ContainsKey(language))
{
text2 = File.ReadAllText(dictionary[language]);
}
else
{
byte[] array2 = LoadTranslationFromAssembly(language);
if (array2 != null)
{
text2 = Encoding.UTF8.GetString(array2);
}
}
}
if (text2 == null && dictionary.ContainsKey("English"))
{
text2 = File.ReadAllText(dictionary["English"]);
}
if (text2 != null)
{
foreach (KeyValuePair<string, string> item2 in new DeserializerBuilder().IgnoreFields().Build().Deserialize<Dictionary<string, string>>(text2) ?? new Dictionary<string, string>())
{
dictionary2[item2.Key] = item2.Value;
}
}
loadedTexts[language] = dictionary2;
foreach (KeyValuePair<string, string> item3 in dictionary2)
{
UpdatePlaceholderText(__instance, item3.Key);
}
}
static Localizer()
{
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Expected O, but got Unknown
//IL_0084: Unknown result type (might be due to invalid IL or missing references)
//IL_0091: Expected O, but got Unknown
PlaceholderProcessors = new Dictionary<string, Dictionary<string, Func<string>>>();
loadedTexts = new Dictionary<string, Dictionary<string, string>>();
localizationLanguage = new ConditionalWeakTable<Localization, string>();
localizationObjects = new List<WeakReference<Localization>>();
fileExtensions = new List<string> { ".json", ".yml" };
Harmony val = new Harmony("org.bepinex.helpers.LocalizationManager");
val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Localization), "LoadCSV", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Localizer), "LoadLocalization", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
}
[return: <4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(2)]
private static byte[] LoadTranslationFromAssembly(string language)
{
foreach (string fileExtension in fileExtensions)
{
byte[] array = ReadEmbeddedFileBytes("translations." + language + fileExtension);
if (array != null)
{
return array;
}
}
return null;
}
[<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(2)]
public static byte[] ReadEmbeddedFileBytes([<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(1)] string resourceFileName, Assembly containingAssembly = null)
{
using MemoryStream memoryStream = new MemoryStream();
if ((object)containingAssembly == null)
{
containingAssembly = Assembly.GetCallingAssembly();
}
string text = containingAssembly.GetManifestResourceNames().FirstOrDefault([<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(0)] (string str) => str.EndsWith(resourceFileName, StringComparison.Ordinal));
if (text != null)
{
containingAssembly.GetManifestResourceStream(text)?.CopyTo(memoryStream);
}
return (memoryStream.Length == 0L) ? null : memoryStream.ToArray();
}
}
}
namespace ItemManager
{
[PublicAPI]
public enum CraftingTable
{
Disabled,
Inventory,
[InternalName("piece_workbench")]
Workbench,
[InternalName("piece_cauldron")]
Cauldron,
[InternalName("piece_MeadCauldron")]
MeadCauldron,
[InternalName("forge")]
Forge,
[InternalName("piece_artisanstation")]
ArtisanTable,
[InternalName("piece_stonecutter")]
StoneCutter,
[InternalName("piece_magetable")]
MageTable,
[InternalName("piece_preptable")]
PrepTable,
[InternalName("blackforge")]
BlackForge,
Custom
}
[PublicAPI]
public enum ConversionPiece
{
Disabled,
[InternalName("smelter")]
Smelter,
[InternalName("charcoal_kiln")]
CharcoalKiln,
[InternalName("blastfurnace")]
BlastFurnace,
[InternalName("windmill")]
Windmill,
[InternalName("piece_spinningwheel")]
SpinningWheel,
[InternalName("eitrrefinery")]
EitrRefinery,
Custom
}
[<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(1)]
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(0)]
public class InternalName : Attribute
{
public readonly string internalName;
public InternalName(string internalName)
{
this.internalName = internalName;
}
}
[<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(1)]
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(0)]
[PublicAPI]
public class RequiredResourceList
{
public readonly List<Requirement> Requirements = new List<Requirement>();
public bool Free = false;
public void Add(string itemName, int amount, int quality = 0)
{
Requirements.Add(new Requirement
{
itemName = itemName,
amount = amount,
quality = quality
});
}
public void Add(string itemName, ConfigEntry<int> amountConfig, int quality = 0)
{
Requirements.Add(new Requirement
{
itemName = itemName,
amountConfig = amountConfig,
quality = quality
});
}
}
[PublicAPI]
[<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(1)]
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(0)]
public class CraftingStationList
{
public readonly List<CraftingStationConfig> Stations = new List<CraftingStationConfig>();
public void Add(CraftingTable table, int level)
{
Stations.Add(new CraftingStationConfig
{
Table = table,
level = level
});
}
public void Add(string customTable, int level)
{
Stations.Add(new CraftingStationConfig
{
Table = CraftingTable.Custom,
level = level,
custom = customTable
});
}
}
[PublicAPI]
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(0)]
[<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(1)]
public class ItemRecipe
{
public readonly RequiredResourceList RequiredItems = new RequiredResourceList();
public readonly RequiredResourceList RequiredUpgradeItems = new RequiredResourceList();
public readonly CraftingStationList Crafting = new CraftingStationList();
public int CraftAmount = 1;
public bool RequireOnlyOneIngredient = false;
public float QualityResultAmountMultiplier = 1f;
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(2)]
public ConfigEntryBase RecipeIsActive = null;
}
[PublicAPI]
public class Trade
{
public Trader Trader = Trader.None;
public uint Price = 0u;
public uint Stack = 1u;
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(2)]
public string RequiredGlobalKey = null;
}
[PublicAPI]
[Flags]
public enum Trader
{
None = 0,
Haldor = 1,
Hildir = 2
}
public struct Requirement
{
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(1)]
public string itemName;
public int amount;
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(2)]
public ConfigEntry<int> amountConfig;
[Description("Set to a non-zero value to apply the requirement only for a specific quality")]
public int quality;
}
public struct CraftingStationConfig
{
public CraftingTable Table;
public int level;
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(2)]
public string custom;
}
[Flags]
public enum Configurability
{
Disabled = 0,
Recipe = 1,
Stats = 2,
Drop = 4,
Trader = 8,
Full = 0xF
}
[<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(1)]
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(0)]
[PublicAPI]
public class DropTargets
{
public readonly List<DropTarget> Drops = new List<DropTarget>();
public void Add(string creatureName, float chance, int min = 1, int? max = null, bool levelMultiplier = true)
{
Drops.Add(new DropTarget
{
creature = creatureName,
chance = chance,
min = min,
max = max.GetValueOrDefault(min),
levelMultiplier = levelMultiplier
});
}
}
public struct DropTarget
{
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(1)]
public string creature;
public int min;
public int max;
public float chance;
public bool levelMultiplier;
}
public enum Toggle
{
On = 1,
Off = 0
}
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(0)]
[<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(1)]
[PublicAPI]
public class Item
{
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(0)]
private class ItemConfig
{
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(new byte[] { 2, 1 })]
public ConfigEntry<string> craft;
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(new byte[] { 2, 1 })]
public ConfigEntry<string> upgrade;
public ConfigEntry<CraftingTable> table = null;
public ConfigEntry<int> tableLevel = null;
public ConfigEntry<string> customTable = null;
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(2)]
public ConfigEntry<int> maximumTableLevel;
public ConfigEntry<Toggle> requireOneIngredient = null;
public ConfigEntry<float> qualityResultAmountMultiplier = null;
}
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(0)]
private class TraderConfig
{
public ConfigEntry<Trader> trader = null;
public ConfigEntry<uint> price = null;
public ConfigEntry<uint> stack = null;
public ConfigEntry<string> requiredGlobalKey = null;
}
[<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(0)]
private class RequirementQuality
{
public int quality;
}
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(0)]
[<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(2)]
private class ConfigurationManagerAttributes
{
[UsedImplicitly]
public int? Order;
[UsedImplicitly]
public bool? Browsable;
[UsedImplicitly]
public string Category;
[UsedImplicitly]
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(new byte[] { 2, 1 })]
public Action<ConfigEntryBase> CustomDrawer;
public Func<bool> browsability;
}
[PublicAPI]
[<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(0)]
public enum DamageModifier
{
Normal,
Resistant,
SlightlyResistant,
Weak,
Immune,
Ignore,
VeryResistant,
VeryWeak,
None
}
[<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(0)]
private delegate void setDmgFunc(ref DamageTypes dmg, float value);
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(0)]
private class SerializedRequirements
{
public readonly List<Requirement> Reqs;
public SerializedRequirements(List<Requirement> reqs)
{
Reqs = reqs;
}
public SerializedRequirements(string reqs)
: this(reqs.Split(new char[1] { ',' }).Select([<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(0)] (string r) =>
{
string[] array = r.Split(new char[1] { ':' });
Requirement result = default(Requirement);
result.itemName = array[0];
result.amount = ((array.Length <= 1 || !int.TryParse(array[1], out var result2)) ? 1 : result2);
result.quality = ((array.Length > 2 && int.TryParse(array[2], out var result3)) ? result3 : 0);
return result;
}).ToList())
{
}
public override string ToString()
{
return string.Join(",", Reqs.Select([<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(0)] (Requirement r) => $"{r.itemName}:{r.amount}" + ((r.quality > 0) ? $":{r.quality}" : "")));
}
[return: <4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(2)]
public static ItemDrop fetchByName(ObjectDB objectDB, string name)
{
GameObject itemPrefab = objectDB.GetItemPrefab(name);
ItemDrop val = ((itemPrefab != null) ? itemPrefab.GetComponent<ItemDrop>() : null);
if ((Object)(object)val == (Object)null)
{
Debug.LogWarning((object)("The required item '" + name + "' does not exist."));
}
return val;
}
public static Requirement[] toPieceReqs(ObjectDB objectDB, SerializedRequirements craft, SerializedRequirements upgrade)
{
//IL_0100: Unknown result type (might be due to invalid IL or missing references)
//IL_0105: Unknown result type (might be due to invalid IL or missing references)
//IL_010d: Unknown result type (might be due to invalid IL or missing references)
//IL_019b: Unknown result type (might be due to invalid IL or missing references)
//IL_01a0: Unknown result type (might be due to invalid IL or missing references)
//IL_01a8: Unknown result type (might be due to invalid IL or missing references)
//IL_01af: Unknown result type (might be due to invalid IL or missing references)
//IL_01b2: Expected O, but got Unknown
//IL_01b7: Expected O, but got Unknown
//IL_012c: Unknown result type (might be due to invalid IL or missing references)
//IL_0135: Expected O, but got Unknown
Dictionary<string, Requirement> dictionary = craft.Reqs.Where((Requirement r) => r.itemName != "").ToDictionary((Func<Requirement, string>)([<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(0)] (Requirement r) => r.itemName), (Func<Requirement, Requirement>)([<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(0)] (Requirement r) =>
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: 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)
ItemDrop val6 = ResItem(r);
return (val6 == null) ? ((Requirement)null) : new Requirement
{
m_amount = (r.amountConfig?.Value ?? r.amount),
m_resItem = val6,
m_amountPerLevel = 0
};
}));
List<Requirement> list = dictionary.Values.Where([<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(0)] (Requirement v) => v != null).ToList();
foreach (Requirement item in upgrade.Reqs.Where((Requirement r) => r.itemName != ""))
{
if (item.quality > 0)
{
ItemDrop val = ResItem(item);
if (val != null)
{
Requirement val2 = new Requirement
{
m_resItem = val,
m_amountPerLevel = (item.amountConfig?.Value ?? item.amount),
m_amount = 0
};
list.Add(val2);
requirementQuality.Add(val2, new RequirementQuality
{
quality = item.quality
});
}
continue;
}
if (!dictionary.TryGetValue(item.itemName, out var value) || value == null)
{
ItemDrop val3 = ResItem(item);
if (val3 != null)
{
string itemName = item.itemName;
Requirement val4 = new Requirement
{
m_resItem = val3,
m_amount = 0
};
Requirement val5 = val4;
dictionary[itemName] = val4;
value = val5;
list.Add(value);
}
}
if (value != null)
{
value.m_amountPerLevel = item.amountConfig?.Value ?? item.amount;
}
}
return list.ToArray();
[<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(2)]
ItemDrop ResItem(Requirement r)
{
return fetchByName(objectDB, r.itemName);
}
}
}
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(0)]
private class SerializedDrop
{
public readonly List<DropTarget> Drops;
public SerializedDrop(List<DropTarget> drops)
{
Drops = drops;
}
public SerializedDrop(string drops)
{
Drops = ((drops == "") ? ((IEnumerable<string>)Array.Empty<string>()) : ((IEnumerable<string>)drops.Split(new char[1] { ',' }))).Select([<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(0)] (string r) =>
{
string[] array = r.Split(new char[1] { ':' });
if (array.Length <= 2 || !int.TryParse(array[2], out var result))
{
result = 1;
}
if (array.Length <= 3 || !int.TryParse(array[3], out var result2))
{
result2 = result;
}
bool levelMultiplier = array.Length <= 4 || array[4] != "0";
DropTarget result3 = default(DropTarget);
result3.creature = array[0];
result3.chance = ((array.Length > 1 && float.TryParse(array[1], out var result4)) ? result4 : 1f);
result3.min = result;
result3.max = result2;
result3.levelMultiplier = levelMultiplier;
return result3;
}).ToList();
}
public override string ToString()
{
return string.Join(",", Drops.Select([<9a8ebf11-c4db-4ad9-b2c0-54bc36a5aa97>NullableContext(0)] (DropTarget r) => $"{r.creature}:{r.chance.ToString(CultureInfo.InvariantCulture)}:{r.min}:" + ((r.min == r.max) ? "" : $"{r.max}") + (r.levelMultiplier ? "" : ":0")));
}
[return: <4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(2)]
private static Character fetchByName(ZNetScene netScene, string name)
{
GameObject prefab = netScene.GetPrefab(name);
Character val = ((prefab != null) ? prefab.GetComponent<Character>() : null);
if ((Object)(object)val == (Object)null)
{
Debug.LogWarning((object)("The drop target character '" + name + "' does not exist."));
}
return val;
}
public Dictionary<Character, Drop> toCharacterDrops(ZNetScene netScene, GameObject item)
{
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Expected O, but got Unknown
Dictionary<Character, Drop> dictionary = new Dictionary<Character, Drop>();
foreach (DropTarget drop in Drops)
{
Character val = fetchByName(netScene, drop.creature);
if (val != null)
{
dictionary[val] = new Drop
{
m_prefab = item,
m_amountMin = drop.min,
m_amountMax = drop.max,
m_chance = drop.chance,
m_levelMultiplier = drop.levelMultiplier
};
}
}
return dictionary;
}
}
[CompilerGenerated]
private sealed class <>c__DisplayClass83_0
{
public Quaternion? cameraRotation;
public float lightIntensity;
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(0)]
public ItemDrop item;
public Quaternion? itemRotation;
}
[CompilerGenerated]
private sealed class <Transpile_InventoryGui>d__85 : IEnumerable<CodeInstruction>, IEnumerable, IEnumerator<CodeInstruction>, IDisposable, IEnumerator
{
private int <>1__state;
private CodeInstruction <>2__current;
private int <>l__initialThreadId;
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(new byte[] { 0, 1 })]
private IEnumerable<CodeInstruction> instructions;
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(new byte[] { 0, 1 })]
public IEnumerable<CodeInstruction> <>3__instructions;
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(new byte[] { 0, 1 })]
private List<CodeInstruction> <instrs>5__1;
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(0)]
private FieldInfo <amountField>5__2;
private int <i>5__3;
CodeInstruction IEnumerator<CodeInstruction>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
[return: <4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(0)]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <Transpile_InventoryGui>d__85(int <>1__state)
{
this.<>1__state = <>1__state;
<>l__initialThreadId = Environment.CurrentManagedThreadId;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<instrs>5__1 = null;
<amountField>5__2 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_0179: Unknown result type (might be due to invalid IL or missing references)
//IL_0183: Expected O, but got Unknown
//IL_01af: Unknown result type (might be due to invalid IL or missing references)
//IL_01b9: Expected O, but got Unknown
//IL_0143: Unknown result type (might be due to invalid IL or missing references)
//IL_014d: Expected O, but got Unknown
int num;
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<instrs>5__1 = instructions.ToList();
<amountField>5__2 = AccessTools.DeclaredField(typeof(Recipe), "m_amount");
<i>5__3 = 0;
break;
case 1:
<>1__state = -1;
if (<i>5__3 > 1 && <instrs>5__1[<i>5__3 - 2].opcode == OpCodes.Ldfld && CodeInstructionExtensions.OperandIs(<instrs>5__1[<i>5__3 - 2], (MemberInfo)<amountField>5__2) && <instrs>5__1[<i>5__3 - 1].opcode == OpCodes.Ldc_I4_1 && <instrs>5__1[<i>5__3].operand is Label)
{
<>2__current = new CodeInstruction(OpCodes.Ldarg_0, (object)null);
<>1__state = 2;
return true;
}
goto IL_01ca;
case 2:
<>1__state = -1;
<>2__current = new CodeInstruction(OpCodes.Call, (object)AccessTools.DeclaredMethod(typeof(Item), "CheckItemIsUpgrade", (Type[])null, (Type[])null));
<>1__state = 3;
return true;
case 3:
<>1__state = -1;
<>2__current = new CodeInstruction(OpCodes.Brtrue, <instrs>5__1[<i>5__3].operand);
<>1__state = 4;
return true;
case 4:
{
<>1__state = -1;
goto IL_01ca;
}
IL_01ca:
num = <i>5__3 + 1;
<i>5__3 = num;
break;
}
if (<i>5__3 < <instrs>5__1.Count)
{
<>2__current = <instrs>5__1[<i>5__3];
<>1__state = 1;
return true;
}
return false;
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
[DebuggerHidden]
[return: <4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(0)]
IEnumerator<CodeInstruction> IEnumerable<CodeInstruction>.GetEnumerator()
{
<Transpile_InventoryGui>d__85 <Transpile_InventoryGui>d__;
if (<>1__state == -2 && <>l__initialThreadId == Environment.CurrentManagedThreadId)
{
<>1__state = 0;
<Transpile_InventoryGui>d__ = this;
}
else
{
<Transpile_InventoryGui>d__ = new <Transpile_InventoryGui>d__85(0);
}
<Transpile_InventoryGui>d__.instructions = <>3__instructions;
return <Transpile_InventoryGui>d__;
}
[DebuggerHidden]
[return: <4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(0)]
IEnumerator IEnumerable.GetEnumerator()
{
return ((IEnumerable<CodeInstruction>)this).GetEnumerator();
}
}
private static readonly List<Item> registeredItems = new List<Item>();
private static readonly Dictionary<ItemDrop, Item> itemDropMap = new Dictionary<ItemDrop, Item>();
private static Dictionary<Item, Dictionary<string, List<Recipe>>> activeRecipes = new Dictionary<Item, Dictionary<string, List<Recipe>>>();
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(new byte[] { 1, 1, 2 })]
private static Dictionary<Recipe, ConfigEntryBase> hiddenCraftRecipes = new Dictionary<Recipe, ConfigEntryBase>();
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(new byte[] { 1, 1, 2 })]
private static Dictionary<Recipe, ConfigEntryBase> hiddenUpgradeRecipes = new Dictionary<Recipe, ConfigEntryBase>();
private static Dictionary<Item, Dictionary<string, ItemConfig>> itemCraftConfigs = new Dictionary<Item, Dictionary<string, ItemConfig>>();
private static Dictionary<Item, ConfigEntry<string>> itemDropConfigs = new Dictionary<Item, ConfigEntry<string>>();
private Dictionary<CharacterDrop, Drop> characterDrops = new Dictionary<CharacterDrop, Drop>();
private readonly Dictionary<ConfigEntryBase, Action> statsConfigs = new Dictionary<ConfigEntryBase, Action>();
private static readonly ConditionalWeakTable<Requirement, RequirementQuality> requirementQuality = new ConditionalWeakTable<Requirement, RequirementQuality>();
public static Configurability DefaultConfigurability = Configurability.Full;
public Configurability? Configurable = null;
private Configurability configurationVisible = Configurability.Full;
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(2)]
private TraderConfig traderConfig;
public readonly GameObject Prefab;
[Description("Specifies the maximum required crafting station level to upgrade and repair the item.\nDefault is calculated from crafting station level and maximum quality.")]
public int MaximumRequiredStationLevel = int.MaxValue;
[Description("Assigns the item as a drop item to a creature.\nUses a creature name, a drop chance and a minimum and maximum amount.")]
public readonly DropTargets DropsFrom = new DropTargets();
[Description("Configures whether the item can be bought at the trader.\nDon't forget to set cost to something above 0 or the item will be sold for free.")]
public readonly Trade Trade = new Trade();
internal List<Conversion> Conversions = new List<Conversion>();
internal List<ItemConversion> conversions = new List<ItemConversion>();
public Dictionary<string, ItemRecipe> Recipes = new Dictionary<string, ItemRecipe>();
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(2)]
private LocalizeKey _name;
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(2)]
private LocalizeKey _description;
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(2)]
private static object configManager;
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(2)]
private static Localization _english;
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(2)]
private static BaseUnityPlugin _plugin;
private static bool hasConfigSync = true;
[<4624231c-9f8a-4df0-9247-55ffd3619731>Nullable(2)]
private static object _configSync;
private Configurability configurability => Configurable ?? DefaultConfigurability;
[Description("Specifies the resources needed to craft the item.\nUse .Add to add resources with their internal ID and an amount.\nUse one .Add for each resource type the item s