diff --git a/.gitignore b/.gitignore index 4ce6fdd..df3714a 100644 --- a/.gitignore +++ b/.gitignore @@ -337,4 +337,5 @@ ASALocalRun/ .localhistory/ # BeatPulse healthcheck temp database -healthchecksdb \ No newline at end of file +healthchecksdb +Loki/SharedItemData.old1.csv diff --git a/Loki/Beard.cs b/Loki/Beard.cs index 9e42814..9a8d0df 100644 --- a/Loki/Beard.cs +++ b/Loki/Beard.cs @@ -5,20 +5,13 @@ namespace Loki { public readonly struct Beard { - private static readonly Beard[] SensibleBeards = - { - new Beard(Loki.Properties.Resources.B_No_beard, "BeardNone"), - new Beard(Loki.Properties.Resources.B_Braided_2, "Beard5"), - new Beard(Loki.Properties.Resources.B_Braided_2, "Beard6"), - new Beard(Loki.Properties.Resources.B_Braided_3, "Beard9"), - new Beard(Loki.Properties.Resources.B_Braided_4, "Beard10"), - new Beard(Loki.Properties.Resources.B_Long_1, "Beard1"), - new Beard(Loki.Properties.Resources.B_Long_2, "Beard2"), - new Beard(Loki.Properties.Resources.B_Short_1, "Beard3"), - new Beard(Loki.Properties.Resources.B_Short_2, "Beard4"), - new Beard(Loki.Properties.Resources.B_Short_3, "Beard7"), - new Beard(Loki.Properties.Resources.B_Thick_1, "Beard8"), - }; + private static readonly IEnumerable SensibleBeards = + ItemDb.AllItems + .Where(i => + i.ItemType == ItemType.Customization + && i.ItemName.ToLower().Contains("beard")) + .Select(i => + new Beard(i.DisplayName, i.ItemName)); private static readonly IEnumerable SillyBeards = ItemDb.AllItems.Where(i => i.ItemType == ItemType.Trophy) diff --git a/Loki/Biome.cs b/Loki/Biome.cs index 3b9a5b3..cace6cd 100644 --- a/Loki/Biome.cs +++ b/Loki/Biome.cs @@ -12,6 +12,6 @@ public enum Biome DeepNorth = 64, Ocean = 256, Mistlands = 512, - BiomesMax = 513, + All = 895, } } diff --git a/Loki/BoolToLocalizedTextConverter.cs b/Loki/BoolToLocalizedTextConverter.cs new file mode 100644 index 0000000..0b177c7 --- /dev/null +++ b/Loki/BoolToLocalizedTextConverter.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Data; + +namespace Loki +{ + public class BoolToLocalizedTextConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value == null) + { + return null; + } + + if (value is bool boolValue) + { + var localizedText = boolValue + ? Loki.Properties.Resources.BoolTrueText + : Loki.Properties.Resources.BoolFalseText; + return localizedText ?? value.ToString(); + } + + return null; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + throw new NotImplementedException(); + } + } +} diff --git a/Loki/CharacterFile.cs b/Loki/CharacterFile.cs index a0121d1..401ef70 100644 --- a/Loki/CharacterFile.cs +++ b/Loki/CharacterFile.cs @@ -50,9 +50,20 @@ public string FilePath public static CharacterFile[] LoadCharacterFiles() { - string localLowPath = Shell32.GetKnownFolderPath(Shell32.LocalLowId); - string charactersPath = Path.Join(localLowPath, @"IronGate\Valheim\characters"); - return Directory.EnumerateFiles(charactersPath, "*.fch").Select(FromPath).ToArray(); + + // Explicit load of a character file + if (!string.IsNullOrEmpty(MainWindow.explicitlyLoadThisFile)) + { + // File to open given by command line arg (ie "open with -> Loki") + return new CharacterFile[] { FromPath(MainWindow.explicitlyLoadThisFile) }; + } + else + { + // Standard behaviour: open all character files in Valheim local save directory + string localLowPath = Shell32.GetKnownFolderPath(Shell32.LocalLowId); + string charactersPath = Path.Join(localLowPath, @"IronGate\Valheim\characters_local"); + return Directory.EnumerateFiles(charactersPath, "*.fch").Select(FromPath).ToArray(); + } } public static CharacterFile FromPath(string characterFilePath) diff --git a/Loki/Commands.cs b/Loki/Commands.cs index 062b1ea..ce5cea5 100644 --- a/Loki/Commands.cs +++ b/Loki/Commands.cs @@ -12,5 +12,14 @@ public static class Commands public static RoutedUICommand RestoreCharacter = new RoutedUICommand("Restore", nameof(RestoreCharacter), typeof(Commands)); + + public static RoutedUICommand ModifyAllSkills = + new RoutedUICommand("ModifySkills", nameof(ModifyAllSkills), typeof(Commands)); + + public static RoutedUICommand RepairInventoryItems = + new RoutedUICommand("RepairItems", nameof(RepairInventoryItems), typeof(Commands)); + + public static RoutedUICommand FillInventoryStacks = + new RoutedUICommand("FillStacks", nameof(RepairInventoryItems), typeof(Commands)); } } diff --git a/Loki/EnumConverter.cs b/Loki/EnumConverter.cs new file mode 100644 index 0000000..44beec8 --- /dev/null +++ b/Loki/EnumConverter.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Data; +using System.Windows; + +namespace Loki +{ + public class EnumConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + if (value == null) + { + return null; + } + + if (targetType.IsEnum) + { + // int -> Enum + return Enum.ToObject(targetType, value); + } + + if (value.GetType().IsEnum) + { + // Enum -> int + return System.Convert.ChangeType(value, Enum.GetUnderlyingType(value.GetType())); + } + + return null; + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + // Same conversion for both directions + return Convert(value, targetType, parameter, culture); + } + } +} diff --git a/Loki/Hair.cs b/Loki/Hair.cs index a6778a0..01c08e7 100644 --- a/Loki/Hair.cs +++ b/Loki/Hair.cs @@ -5,25 +5,13 @@ namespace Loki { public readonly struct Hair { - private static readonly Hair[] SensibleHairs = - { - new Hair(Loki.Properties.Resources.No_hair, "HairNone"), - new Hair(Loki.Properties.Resources.Braided_1, "Hair3"), - new Hair(Loki.Properties.Resources.Braided_2, "Hair11"), - new Hair(Loki.Properties.Resources.Braided_3, "Hair12"), - new Hair(Loki.Properties.Resources.Braided_4, "Hair6"), - new Hair(Loki.Properties.Resources.Long_1, "Hair1"), - new Hair(Loki.Properties.Resources.Ponytail_1, "Hair2"), - new Hair(Loki.Properties.Resources.Ponytail_2, "Hair4"), - new Hair(Loki.Properties.Resources.Ponytail_3, "Hair7"), - new Hair(Loki.Properties.Resources.Ponytail_4, "Hair5"), - new Hair(Loki.Properties.Resources.Short_1, "Hair8"), - new Hair(Loki.Properties.Resources.Short_2, "Hair13"), - new Hair(Loki.Properties.Resources.Side_Swept_1, "Hair9"), - new Hair(Loki.Properties.Resources.Side_Swept_2, "Hair10"), - new Hair(Loki.Properties.Resources.Side_Swept_3, "Hair14"), - new Hair(Loki.Properties.Resources.Blob_hair, "TrophyBlob"), - }; + private static readonly IEnumerable SensibleHairs = + ItemDb.AllItems + .Where(i => + i.ItemType == ItemType.Customization + && i.ItemName.ToLower().Contains("hair")) + .Select(i => + new Hair(i.DisplayName, i.ItemName)); private static readonly IEnumerable SillyHairs = ItemDb.AllItems.Where(i => i.ItemType == ItemType.Trophy) diff --git a/Loki/InventoryListItem.cs b/Loki/InventoryListItem.cs index 821b277..7c56272 100644 --- a/Loki/InventoryListItem.cs +++ b/Loki/InventoryListItem.cs @@ -43,13 +43,17 @@ private static InventoryListItem CreateListItem(SharedItemData itemData) ItemType.Legs => Loki.Properties.Resources.Legs, ItemType.Hands => Loki.Properties.Resources.Hands, ItemType.Trophy => Loki.Properties.Resources.Trophy, - ItemType.TwoHandedWeapon => Loki.Properties.Resources.Trophy, + ItemType.TwoHandedWeapon => Loki.Properties.Resources.Two_Handed_Weapon, ItemType.Torch => Loki.Properties.Resources.Torch, ItemType.Misc => Loki.Properties.Resources.Miscellaneous, ItemType.Shoulder => Loki.Properties.Resources.Shoulder, ItemType.Utility => Loki.Properties.Resources.Utility, ItemType.Tool => Loki.Properties.Resources.Tool, ItemType.AttachAtgeir => Loki.Properties.Resources.Attach_Atgeir, + ItemType.Fish => Loki.Properties.Resources.Fish, + ItemType.TwoHandedWeaponLeft => Loki.Properties.Resources.Two_Handed_Weapon_Left, + ItemType.AmmoNonEquipable => Loki.Properties.Resources.Ammo_Non_Equipable, + ItemType.Trinket => Loki.Properties.Resources.Trinket, _ => Loki.Properties.Resources.Unknown, }; return new InventoryListItem(displayName, category, itemData); diff --git a/Loki/InventorySlotEditor.xaml b/Loki/InventorySlotEditor.xaml index e418606..03a699f 100644 --- a/Loki/InventorySlotEditor.xaml +++ b/Loki/InventorySlotEditor.xaml @@ -167,7 +167,7 @@ - + + + + + + + + + + + + + + + + diff --git a/Loki/MainWindow.xaml.cs b/Loki/MainWindow.xaml.cs index c40c02b..467c86b 100644 --- a/Loki/MainWindow.xaml.cs +++ b/Loki/MainWindow.xaml.cs @@ -25,6 +25,9 @@ public MainWindow() } public static PlayerProfile selectedPlayerProfile = null; + public static string explicitlyLoadThisFile = null; + + private static CharacterFile[] characterFiles; private async void MainWindow_OnLoaded(object sender, RoutedEventArgs e) { @@ -32,10 +35,19 @@ private async void MainWindow_OnLoaded(object sender, RoutedEventArgs e) Debug.Assert(version != null, nameof(version) + " != null"); Title = $"{Title} v{version.Major}.{version.Minor}"; + var args = Environment.GetCommandLineArgs(); + explicitlyLoadThisFile = args.Length > 1 && Path.GetExtension(args[1]).ToLower() == ".fch" ? args[1] : null; + + if (!string.IsNullOrEmpty(explicitlyLoadThisFile)) + { + ChkLoadBackupFiles.IsChecked = false; + ChkLoadBackupFiles.IsEnabled = false; + } + try { - CharacterFiles = await Task.Run(CharacterFile.LoadCharacterFiles); - SelectedCharacterFile = CharacterFiles.FirstOrDefault(); + characterFiles = await Task.Run(CharacterFile.LoadCharacterFiles); + RefreshCharacterFiles((bool)ChkLoadBackupFiles.IsChecked); CommandManager.InvalidateRequerySuggested(); } catch (Exception ex) @@ -44,6 +56,19 @@ private async void MainWindow_OnLoaded(object sender, RoutedEventArgs e) } } + private void RefreshCharacterFiles(bool loadBackups) + { + if (loadBackups) + { + CharacterFiles = characterFiles; + } + else + { + CharacterFiles = characterFiles.Where(f => !f.FilePath.Contains("backup", StringComparison.InvariantCultureIgnoreCase)).ToArray(); + } + SelectedCharacterFile = CharacterFiles.FirstOrDefault(); + } + public static readonly DependencyProperty ProfileProperty = DependencyProperty.Register( "Profile", typeof(PlayerProfile), typeof(MainWindow), new PropertyMetadata(default(PlayerProfile))); @@ -151,7 +176,7 @@ await Task.Run(() => }); character.PlayerName = Profile.PlayerName; - ShowNotification("Character Saved"); + ShowNotification(Loki.Properties.Resources.Character_Saved); } catch (Exception ex) { @@ -181,7 +206,7 @@ private void CanSaveOrRevertExecute(object sender, CanExecuteRoutedEventArgs e) private void RevertExecuted(object sender, ExecutedRoutedEventArgs e) { LoadProfile(SelectedCharacterFile); - ShowNotification("Character Reverted"); + ShowNotification(Loki.Properties.Resources.Character_Reverted); } private void SaveExecuted(object sender, ExecutedRoutedEventArgs e) @@ -189,6 +214,69 @@ private void SaveExecuted(object sender, ExecutedRoutedEventArgs e) SaveProfile(SelectedCharacterFile); } + private void CanModifyAllSkillsExecute(object sender, CanExecuteRoutedEventArgs e) + { + e.CanExecute = Profile != null && Profile.Player.Skills.Count > 0; + } + + private void ModifyAllSkillsExecuted(Object sender, ExecutedRoutedEventArgs e) + { + var percent = (float)ModifyAllSkillsSlider.Value; + var factor = 1f + 0.01f * percent; + var count = 0; + foreach (var skill in Profile.Player.Skills) + { + if (skill.Level > 0f) + { + skill.Level *= factor; + count++; + } + } + + var textToFormat = percent < 0f + ? Loki.Properties.Resources._0__skills_decreased__1__percent + : Loki.Properties.Resources._0__skills_increased__1__percent; + ShowNotification(string.Format(textToFormat, count, percent.ToString("+0;-#"))); + } + + private void CanRepairInventoryItemsExecute(object sender, CanExecuteRoutedEventArgs e) + { + e.CanExecute = Profile != null && Profile.Player.Inventory.Slots.Any(slot => slot.RepairItem.CanExecute(null)); + } + + private void RepairInventoryItemsExecuted(object sender, ExecutedRoutedEventArgs e) + { + int count = 0; + Profile?.Player.Inventory.Slots.ForEach(slot => + { + if (slot.RepairItem.CanExecute(null)) + { + slot.RepairItem.Execute(null); + count++; + } + }); + ShowNotification(string.Format(Loki.Properties.Resources.Repaired__0__items, count)); + } + + private void CanFillInventoryStacksExecute(object sender, CanExecuteRoutedEventArgs e) + { + e.CanExecute = Profile != null && Profile.Player.Inventory.Slots.Any(slot => slot.FillStack.CanExecute(null)); + } + + private void FillInventoryStacksExecuted(object sender, ExecutedRoutedEventArgs e) + { + int count = 0; + Profile?.Player.Inventory.Slots.ForEach(slot => + { + if (slot.FillStack.CanExecute(null)) + { + slot.FillStack.Execute(null); + count++; + } + }); + ShowNotification(string.Format(Loki.Properties.Resources.Filled__0__stacks, count)); + } + private void ItemPickerItemMouseMove(object sender, MouseEventArgs e) { if(sender is FrameworkElement element && e.LeftButton == MouseButtonState.Pressed) @@ -247,5 +335,26 @@ private void InventoryViewSource_OnFilter(object sender, FilterEventArgs e) item.Name.Contains(filterItem, StringComparison.OrdinalIgnoreCase)); } } + + private void ModifyAllSkillsSlider_ValueChanged(object sender, RoutedPropertyChangedEventArgs e) + { + ModifyAllSkillsText.Text = $"{(e.NewValue > 0 ? "+" : "")}{e.NewValue:F0}%"; + ModifyAllSkillsButton.IsEnabled = e.NewValue != 0d; + } + + private void ModifyAllSkillsReset_Clicked(object sender, RoutedEventArgs e) + { + ModifyAllSkillsSlider.Value = 5; + } + + private void ChkLoadBackupFiles_Checked(object sender, RoutedEventArgs e) + { + RefreshCharacterFiles(true); + } + + private void ChkLoadBackupFiles_Unchecked(object sender, RoutedEventArgs e) + { + RefreshCharacterFiles(false); + } } } diff --git a/Loki/Player.cs b/Loki/Player.cs index 9c65428..f54972a 100644 --- a/Loki/Player.cs +++ b/Loki/Player.cs @@ -15,14 +15,14 @@ namespace Loki { public class Player: INotifyPropertyChanged { - private const int Version = 26; - private const int InventoryVersion = 104; + private const int Version = 29; + private const int InventoryVersion = 106; private const int SkillVersion = 2; private float _maxHealth; private float _curHealth; private float _maxStamina; - private bool _firstSpawn; + public bool LegacyFirstSpawn { get; private set; } private float _timeSinceDeath; private string _guardianPower; private float _guardianPowerCooldown; @@ -136,20 +136,37 @@ public static Player Read(Stream input, bool leaveOpen = false) var version = reader.ReadInt32(); + var maxHealth = version >= 7 ? reader.ReadSingle() : 25f; // ToDo: Verify default still are correct + var curHealth = reader.ReadSingle(); + var maxStamina = version >= 10 ? reader.ReadSingle() : 100f; // ToDo: Verify default still are correct + + // As of Player version 28 and Profile version 40 FirstSpawn is within profile part of save, it seems + var legacyFirstSpawn = false; + if (version >= 8 && version < 28) + { + legacyFirstSpawn = reader.ReadBoolean(); // no skip, pass on to profile (but do not use in player) + } + + var timeSinceDeath = version >= 20 ? reader.ReadSingle() : 999999f; + var guardianPower = version >= 23 ? reader.ReadString() : string.Empty; + var guardianPowerCooldown = version >= 24 ? reader.ReadSingle() : default; + var player = new Player { - _maxHealth = version >= 7 ? reader.ReadSingle() : 25f, - _curHealth = reader.ReadSingle(), - _maxStamina = version >= 10 ? reader.ReadSingle() : 100f, - _firstSpawn = version < 8 || reader.ReadBoolean(), - _timeSinceDeath = version >= 20 ? reader.ReadSingle() : 999999f, - _guardianPower = version >= 23 ? reader.ReadString() : string.Empty, - _guardianPowerCooldown = version >= 24 ? reader.ReadSingle() : default, - _shownTutorials = new List(), + _maxHealth = maxHealth, + _curHealth = curHealth, + _maxStamina = maxStamina, + LegacyFirstSpawn = legacyFirstSpawn, + _timeSinceDeath = timeSinceDeath, + _guardianPower = guardianPower, + _guardianPowerCooldown = guardianPowerCooldown, }; + // Skip over 'ZDOID', long + uint if (version == 2) - input.Position += 12; // Skip over 'ZDOID', long + uint + { + input.Position += 12; + } player._inventory = ReadInventory(input, true); player.UpdateInventorySlots(); @@ -260,6 +277,20 @@ public static Player Read(Stream input, bool leaveOpen = false) player._eitr = reader.ReadSingle(); } + if (version < 27) + { + if (player._knownMaterials.Contains("$item_flametal")) + { + player._knownMaterials.Remove("$item_flametal"); + player._knownMaterials.Add("$item_flametal_old"); + } + if (player._knownMaterials.Contains("$item_flametalore")) + { + player._knownMaterials.Remove("$item_flametalore"); + player._knownMaterials.Add("$item_flametalore_old"); + } + } + // Sanity check - compare with player data length provided. long amountRead = input.Position - playerDataStartPos; if (amountRead != expectedPlayerDataLength) @@ -300,8 +331,7 @@ public void Write(Stream output, bool leaveOpen = false) writer.Write(Version); writer.Write(_maxHealth); writer.Write(_curHealth); - writer.Write(_maxStamina); - writer.Write(_firstSpawn); + writer.Write(_maxStamina); writer.Write(_timeSinceDeath); writer.Write(_guardianPower); writer.Write(_guardianPowerCooldown); @@ -328,6 +358,8 @@ public void Write(Stream output, bool leaveOpen = false) writer.Write(key); writer.Write(value); } + writer.Write(item.WorldLevel); + writer.Write(item.PickedUp); } writer.WriteCountItems(_knownRecipes); @@ -345,8 +377,8 @@ public void Write(Stream output, bool leaveOpen = false) writer.Write(_knownTexts.Count); foreach ((string key, string value) in _knownTexts) { - writer.Write(key); - writer.Write(value); + writer.Write(key.Replace("\u0016", "")); + writer.Write(value.Replace("\u0016", "")); } writer.Write(_beard); @@ -389,28 +421,58 @@ private static List ReadInventory(Stream input, bool leaveOpen = false) var version = reader.ReadInt32(); var itemCount = reader.ReadInt32(); var items = new List(itemCount); - for (int i = 0; i < itemCount; i++) + if (version == 106) // ToDo: check if changed from <= in 0.221.4 (Call To Arms) update or wrong aldready? { - string name = reader.ReadString(); - int stack = reader.ReadInt32(); - float durability = reader.ReadSingle(); - Vector2i pos = reader.ReadVector2i(); - bool equiped = reader.ReadBoolean(); - int quality = version >= 101 ? reader.ReadInt32() : 1; - int variant = version >= 102 ? reader.ReadInt32() : 0; - (long crafterId, string crafterName) = - version >= 103 ? (reader.ReadInt64(), reader.ReadString()) : (0, string.Empty); - var itemData = new List<(string, string)>(); - if (version >= 104) + for (int i = 0; i < itemCount; i++) { + string name = reader.ReadString(); + int stack = reader.ReadInt32(); + float durability = reader.ReadSingle(); + Vector2i pos = reader.ReadVector2i(); + bool equipped = reader.ReadBoolean(); + int quality = reader.ReadInt32(); + int variant = reader.ReadInt32(); + long crafterId = reader.ReadInt64(); + string crafterName = reader.ReadString(); + var itemData = new List<(string, string)>(); var itemDataCount = reader.ReadInt32(); for (int j = 0; j < itemDataCount; j++) { itemData.Add((reader.ReadString(), reader.ReadString())); } + int worldLevel = reader.ReadInt32(); + bool pickedUp = reader.ReadBoolean(); + Debug.WriteLine($"ReadInv: Item={name}, Position={pos}"); + if (name != "") items.Add(new Item(name, stack, durability, pos, equipped, quality, variant, crafterId, crafterName, itemData, worldLevel, pickedUp)); + } + } + else + { + for (int i = 0; i < itemCount; i++) + { + string name = reader.ReadString(); + int stack = reader.ReadInt32(); + float durability = reader.ReadSingle(); + Vector2i pos = reader.ReadVector2i(); + bool equipped = reader.ReadBoolean(); + int quality = version >= 101 ? reader.ReadInt32() : 1; + int variant = version >= 102 ? reader.ReadInt32() : 0; + (long crafterId, string crafterName) = + version >= 103 ? (reader.ReadInt64(), reader.ReadString()) : (0, string.Empty); + var itemData = new List<(string, string)>(); + if (version >= 104) + { + var itemDataCount = reader.ReadInt32(); + for (int j = 0; j < itemDataCount; j++) + { + itemData.Add((reader.ReadString(), reader.ReadString())); + } + } + Debug.WriteLine($"ReadInv: Item={name}, Position={pos}"); + int worldLevel = version >= 105 ? reader.ReadInt32() : 0; + bool pickedUp = version >= 106 ? reader.ReadBoolean() : false; + if (name != "") items.Add(new Item(name, stack, durability, pos, equipped, quality, variant, crafterId, crafterName, itemData, worldLevel, pickedUp)); } - Debug.WriteLine($"ReadInv: Item={name}, Position={pos}"); - if(name != "") items.Add(new Item(name, stack, durability, pos, equiped, quality, variant, crafterId, crafterName, itemData)); } return items; } diff --git a/Loki/PlayerProfile.cs b/Loki/PlayerProfile.cs index 4290e0a..2a627fc 100644 --- a/Loki/PlayerProfile.cs +++ b/Loki/PlayerProfile.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.IO; +using System.Linq; using System.Security.Cryptography; using System.Text; using System.Windows; @@ -15,6 +17,15 @@ public class PlayerProfile public long PlayerId { get; set; } public string PlayerName { get; set; } public string StartSeed { get; set; } + public DateTime DateCreated { get; set; } + public bool FirstSpawn { get; set; } + public bool UsedCheats { get; set; } + public Dictionary KnownWorlds { get; set; } + public Dictionary KnownWorldKeys { get; set; } + public Dictionary KnownCommands { get; set; } + public Dictionary EnemyStats { get; set; } + public Dictionary ItemPickupStats { get; set; } + public Dictionary ItemCraftStats { get; set; } public PlayerStats Stats { get; private set; } public Player Player { get; private set; } private List<(long, WorldPlayerData)> _worldData; @@ -33,14 +44,24 @@ public static PlayerProfile Read(Stream input, bool leaveOpen = false) throw new InvalidDataException("Character version is not compatible"); var playerStats = new PlayerStats(); - if (version >= 28) + + // ToDo: if version != 42 "create backup" (just a note: this is what Valheim does, maybe what we want in Loki) + if (version >= 38) { - playerStats.Kills = reader.ReadInt32(); - playerStats.Deaths = reader.ReadInt32(); - playerStats.Crafts = reader.ReadInt32(); - playerStats.Builds = reader.ReadInt32(); + int statsCount = reader.ReadInt32(); + for (int i = 0; i < statsCount; i++) + { + playerStats[(PlayerStatType)i] = reader.ReadSingle(); + } } - + else if (version >= 28) + { + playerStats[PlayerStatType.EnemyKills] = reader.ReadInt32(); + playerStats[PlayerStatType.Deaths] = reader.ReadInt32(); + playerStats[PlayerStatType.CraftsOrUpgrades] = reader.ReadInt32(); + playerStats[PlayerStatType.Builds] = reader.ReadInt32(); + } + var firstSpawn = version >= 40 ? reader.ReadBoolean() : default; int worldCount = reader.ReadInt32(); var worldData = new List<(long, WorldPlayerData)>(); for (var i = 0; i < worldCount; i++) @@ -58,11 +79,69 @@ public static PlayerProfile Read(Stream input, bool leaveOpen = false) MapData = version >= 29 && reader.ReadBoolean() ? reader.ReadByteArray() : default, })); - string playerName = reader.ReadString(); - long playerId = reader.ReadInt64(); - string startSeed = reader.ReadString(); + string playerName = reader.ReadString(); // Used later + long playerId = reader.ReadInt64(); // Used later + string startSeed = reader.ReadString(); // Used later - var player = reader.ReadBoolean() ? Player.Read(input, true) : default; + bool usedCheats = default; + var knownWorlds = new Dictionary(); + var knownWorldKeys = new Dictionary(); + var knownCommands = new Dictionary(); + var enemyStats = new Dictionary(); + var itemPickupStats = new Dictionary(); + var itemCraftStats = new Dictionary(); + DateTime dateCreated; + + if (version >= 38) + { + usedCheats = reader.ReadBoolean(); + dateCreated = DateTimeOffset.FromUnixTimeSeconds(reader.ReadInt64()).Date; + int knownWorldsCount = reader.ReadInt32(); + + for (int i = 0; i < knownWorldsCount; i++) + { + knownWorlds[reader.ReadString()] = reader.ReadSingle(); + } + var knownWorldKeysCount = reader.ReadInt32(); + + for (int i = 0; i < knownWorldKeysCount; i++) + { + knownWorldKeys[reader.ReadString()] = reader.ReadSingle(); + } + var knownCommandsCount = reader.ReadInt32(); + + for (int i = 0; i < knownCommandsCount; i++) + { + knownCommands[reader.ReadString()] = reader.ReadSingle(); + } + + if (version >= 42) + { + int statsCount = reader.ReadInt32(); + + for (int i = 0;i < statsCount; i++) + { + enemyStats[reader.ReadString()] = reader.ReadSingle(); + } + statsCount = reader.ReadInt32(); + + for (int i = 0; i < statsCount; i++) + { + itemPickupStats[reader.ReadString()] = reader.ReadSingle(); + } + + statsCount = reader.ReadInt32(); + for (int i = 0; i < statsCount; i++) + { + itemCraftStats[reader.ReadString()] = reader.ReadSingle(); + } + } + } + else + { + dateCreated = new DateTime(2021, 2, 2); + } + var player = reader.ReadBoolean() ? Player.Read(input, true) : default; // Verify we read all the data and haven't skipped anything. var dataRead = input.Position - startPosition; @@ -74,8 +153,8 @@ public static PlayerProfile Read(Stream input, bool leaveOpen = false) var result = MessageBox.Show( $"{message}" + Environment.NewLine + Environment.NewLine + - "Do you want to continue loading? (Not Recommended)", - $"Error reading {nameof(PlayerProfile)}", + "Do you want to continue loading? (Not Recommended)", + $"Error reading {nameof(PlayerProfile)}", MessageBoxButton.YesNo, MessageBoxImage.Warning); if (result == MessageBoxResult.No) @@ -90,6 +169,16 @@ public static PlayerProfile Read(Stream input, bool leaveOpen = false) PlayerId = playerId, PlayerName = playerName, StartSeed = startSeed, + DateCreated = dateCreated, + // Instead of reusing reader stream for player like valheim do, we read legacy value while at it in Player + FirstSpawn = version < 40 && player != null ? player.LegacyFirstSpawn : firstSpawn, + UsedCheats = usedCheats, + KnownWorlds = knownWorlds, + KnownWorldKeys = knownWorldKeys, + KnownCommands = knownCommands, + EnemyStats = enemyStats, + ItemPickupStats = itemPickupStats, + ItemCraftStats = itemCraftStats, _worldData = worldData, Player = player, }; @@ -106,11 +195,13 @@ public void Write(Stream output, bool leaveOpen = false) using var writer = new BinaryWriter(output, Encoding.UTF8, leaveOpen); writer.Write(Version.ProfileVersion); - writer.Write(Stats.Kills); - writer.Write(Stats.Deaths); - writer.Write(Stats.Crafts); - writer.Write(Stats.Builds); + writer.Write(Stats.Count); + for (int i = 0; i < Stats.Count; i++) + { + writer.Write(Stats[(PlayerStatType)i]); + } + writer.Write(FirstSpawn); writer.Write(_worldData.Count); foreach (var (key, worldData) in _worldData) { @@ -129,11 +220,55 @@ public void Write(Stream output, bool leaveOpen = false) writer.Write(PlayerName); writer.Write(PlayerId); writer.Write(StartSeed); + writer.Write(UsedCheats); + writer.Write(new DateTimeOffset(DateCreated).ToUnixTimeSeconds()); + + writer.Write(KnownWorlds.Count); + foreach (KeyValuePair knownWorld in KnownWorlds) + { + writer.Write(knownWorld.Key); + writer.Write(knownWorld.Value); + } + + writer.Write(KnownWorldKeys.Count); + foreach (KeyValuePair knownWorldKey in KnownWorldKeys) + { + writer.Write(knownWorldKey.Key); + writer.Write(knownWorldKey.Value); + } + + writer.Write(KnownCommands.Count); + foreach (KeyValuePair knownCommand in KnownCommands) + { + writer.Write(knownCommand.Key); + writer.Write(knownCommand.Value); + } + + writer.Write(EnemyStats.Count); + foreach (KeyValuePair enemyStats in EnemyStats) + { + writer.Write(enemyStats.Key); + writer.Write(enemyStats.Value); + } + + writer.Write(ItemPickupStats.Count); + foreach (KeyValuePair itemPickupStats in ItemPickupStats) + { + writer.Write(itemPickupStats.Key); + writer.Write(itemPickupStats.Value); + } + + writer.Write(ItemCraftStats.Count); + foreach (KeyValuePair itemCraftStats in ItemCraftStats) + { + writer.Write(itemCraftStats.Key); + writer.Write(itemCraftStats.Value); + } writer.Write(Player != null); if (Player != null) { - output.Position += 4; + output.Position += 4; // Make room for player data size var playerOffset = output.Position; Player.Write(output, true); diff --git a/Loki/PlayerStatData.cs b/Loki/PlayerStatData.cs new file mode 100644 index 0000000..1fd92c5 --- /dev/null +++ b/Loki/PlayerStatData.cs @@ -0,0 +1,43 @@ +using JetBrains.Annotations; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using System.Threading.Tasks; + +namespace Loki +{ + public class PlayerStatData : INotifyPropertyChanged + { + private float _value; + + public PlayerStatType Type { get; } + + public float Value + { + get => _value; + set + { + if (value.Equals(_value)) return; + if (value <= 0f) value = 0f; + _value = value; + OnPropertyChanged(); + } + } + + public PlayerStatData(PlayerStatType type, float value) + { + Type = type; + Value = value; + } + + public event PropertyChangedEventHandler PropertyChanged; [NotifyPropertyChangedInvocator] + + protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + } +} diff --git a/Loki/PlayerStatType.cs b/Loki/PlayerStatType.cs new file mode 100644 index 0000000..4c654b8 --- /dev/null +++ b/Loki/PlayerStatType.cs @@ -0,0 +1,116 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Loki +{ + public enum PlayerStatType + { + Deaths, + CraftsOrUpgrades, + Builds, + Jumps, + Cheats, + EnemyHits, + EnemyKills, + EnemyKillsLastHits, + PlayerHits, + PlayerKills, + HitsTakenEnemies, + HitsTakenPlayers, + ItemsPickedUp, + Crafts, + Upgrades, + PortalsUsed, + DistanceTraveled, + DistanceWalk, + DistanceRun, + DistanceSail, + DistanceAir, + TimeInBase, + TimeOutOfBase, + Sleep, + ItemStandUses, + ArmorStandUses, + WorldLoads, + TreeChops, + Tree, + TreeTier0, + TreeTier1, + TreeTier2, + TreeTier3, + TreeTier4, + TreeTier5, + LogChops, + Logs, + MineHits, + Mines, + MineTier0, + MineTier1, + MineTier2, + MineTier3, + MineTier4, + MineTier5, + RavenHits, + RavenTalk, + RavenAppear, + CreatureTamed, + FoodEaten, + SkeletonSummons, + ArrowsShot, + TombstonesOpenedOwn, + TombstonesOpenedOther, + TombstonesFit, + DeathByUndefined, + DeathByEnemyHit, + DeathByPlayerHit, + DeathByFall, + DeathByDrowning, + DeathByBurning, + DeathByFreezing, + DeathByPoisoned, + DeathBySmoke, + DeathByWater, + DeathByEdgeOfWorld, + DeathByImpact, + DeathByCart, + DeathByTree, + DeathBySelf, + DeathByStructural, + DeathByTurret, + DeathByBoat, + DeathByStalagtite, + DoorsOpened, + DoorsClosed, + BeesHarvested, + SapHarvested, + TurretAmmoAdded, + TurretTrophySet, + TrapArmed, + TrapTriggered, + PlaceStacks, + PortalDungeonIn, + PortalDungeonOut, + BossKills, + BossLastHits, + SetGuardianPower, + SetPowerEikthyr, + SetPowerElder, + SetPowerBonemass, + SetPowerModer, + SetPowerYagluth, + SetPowerQueen, + SetPowerAshlands, + SetPowerDeepNorth, + UseGuardianPower, + UsePowerEikthyr, + UsePowerElder, + UsePowerBonemass, + UsePowerModer, + UsePowerYagluth, + UsePowerQueen, + UsePowerAshlands, + UsePowerDeepNorth, + Count + } +} diff --git a/Loki/PlayerStats.cs b/Loki/PlayerStats.cs index 49bcf80..0b16292 100644 --- a/Loki/PlayerStats.cs +++ b/Loki/PlayerStats.cs @@ -1,10 +1,42 @@ -namespace Loki +using JetBrains.Annotations; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.ComponentModel; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Windows.Data; + +namespace Loki { - public class PlayerStats + // Note: This could have been skipped and ObservableCollection could have been used in + // PlayerProfile (property Stats) in a similar way ObservableCollection is used in Player (property Skills). + // + // (In the game, PlayerStats is a separate class with a local Dictionary. Works in Loki but not if stats + // should be editable. This was my choice of compromise between keeping the read/write code close to original + // but also being able to bind to UI with edit possibilies). + public class PlayerStats : ObservableCollection { - public int Kills { get; set; } - public int Deaths { get; set; } - public int Crafts { get; set; } - public int Builds { get; set; } - } + // Indexer based on enum PlayerStatType and will get/set the Value property of PlayerStat class + public float this[PlayerStatType type] + { + get + { + return this[(int)type].Value; + } + set + { + this[(int)type].Value = value; + } + } + + private static IEnumerable Empty() + { + return Enumerable.Range(0, (int)PlayerStatType.Count).Select(i => new PlayerStatData((PlayerStatType)i, 0f)); + } + + public PlayerStats() : base(Empty()) + { + // Empty constructor will populate with a full collection of PlayerStat's based on value of enum PlayerStatType + } + } } diff --git a/Loki/Properties/Resources.Designer.cs b/Loki/Properties/Resources.Designer.cs index 5a3350b..7f3f583 100644 --- a/Loki/Properties/Resources.Designer.cs +++ b/Loki/Properties/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace Loki.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] public class Resources { @@ -60,6 +60,33 @@ internal Resources() { } } + /// + /// Looks up a localized string similar to {0} skills decreased ({1}%). + /// + public static string _0__skills_decreased__1__percent { + get { + return ResourceManager.GetString("{0} skills decreased {1} percent", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to {0} skills increased ({1}%). + /// + public static string _0__skills_increased__1__percent { + get { + return ResourceManager.GetString("{0} skills increased {1} percent", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to . + /// + public static string Abjuration { + get { + return ResourceManager.GetString("Abjuration", resourceCulture); + } + } + /// /// Looks up a localized string similar to All. /// @@ -69,6 +96,15 @@ public static string All { } } + /// + /// Looks up a localized string similar to . + /// + public static string Alteration { + get { + return ResourceManager.GetString("Alteration", resourceCulture); + } + } + /// /// Looks up a localized string similar to Amber. /// @@ -96,6 +132,15 @@ public static string Ammo { } } + /// + /// Looks up a localized string similar to Ammo Non Equipable. + /// + public static string Ammo_Non_Equipable { + get { + return ResourceManager.GetString("Ammo Non Equipable", resourceCulture); + } + } + /// /// Looks up a localized string similar to Ancient seed. /// @@ -366,6 +411,15 @@ public static string Bloodbag { } } + /// + /// Looks up a localized string similar to Blood magic. + /// + public static string BloodMagic { + get { + return ResourceManager.GetString("BloodMagic", resourceCulture); + } + } + /// /// Looks up a localized string similar to Blueberries. /// @@ -393,6 +447,24 @@ public static string Bone_fragments { } } + /// + /// Looks up a localized string similar to No. + /// + public static string BoolFalseText { + get { + return ResourceManager.GetString("BoolFalseText", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Yes. + /// + public static string BoolTrueText { + get { + return ResourceManager.GetString("BoolTrueText", resourceCulture); + } + } + /// /// Looks up a localized string similar to Bow. /// @@ -528,6 +600,24 @@ public static string Builds { } } + /// + /// Looks up a localized string similar to Character Reverted. + /// + public static string Character_Reverted { + get { + return ResourceManager.GetString("Character Reverted", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Character Saved. + /// + public static string Character_Saved { + get { + return ResourceManager.GetString("Character Saved", resourceCulture); + } + } + /// /// Looks up a localized string similar to Chest. /// @@ -546,6 +636,15 @@ public static string Clubs { } } + /// + /// Looks up a localized string similar to . + /// + public static string Conjuration { + get { + return ResourceManager.GetString("Conjuration", resourceCulture); + } + } + /// /// Looks up a localized string similar to Consumable. /// @@ -555,6 +654,24 @@ public static string Consumable { } } + /// + /// Looks up a localized string similar to Cooking. + /// + public static string Cooking { + get { + return ResourceManager.GetString("Cooking", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Crafting. + /// + public static string Crafting { + get { + return ResourceManager.GetString("Crafting", resourceCulture); + } + } + /// /// Looks up a localized string similar to Crafts. /// @@ -564,6 +681,24 @@ public static string Crafts { } } + /// + /// Looks up a localized string similar to Created. + /// + public static string Created { + get { + return ResourceManager.GetString("Created", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Crossbow. + /// + public static string Crossbow { + get { + return ResourceManager.GetString("Crossbow", resourceCulture); + } + } + /// /// Looks up a localized string similar to Crude bow. /// @@ -591,6 +726,24 @@ public static string Deaths { } } + /// + /// Looks up a localized string similar to . + /// + public static string Discipline { + get { + return ResourceManager.GetString("Discipline", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Dodge. + /// + public static string Dodge { + get { + return ResourceManager.GetString("Dodge", resourceCulture); + } + } + /// /// Looks up a localized string similar to Draugr fang. /// @@ -600,6 +753,33 @@ public static string Draugr_fang { } } + /// + /// Looks up a localized string similar to Elemental magic. + /// + public static string ElementalMagic { + get { + return ResourceManager.GetString("ElementalMagic", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to . + /// + public static string Evocation { + get { + return ResourceManager.GetString("Evocation", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Farming. + /// + public static string Farming { + get { + return ResourceManager.GetString("Farming", resourceCulture); + } + } + /// /// Looks up a localized string similar to fart. /// @@ -618,6 +798,24 @@ public static string Female { } } + /// + /// Looks up a localized string similar to Fill stacks. + /// + public static string Fill_stacks { + get { + return ResourceManager.GetString("Fill stacks", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Filled {0} stacks. + /// + public static string Filled__0__stacks { + get { + return ResourceManager.GetString("Filled {0} stacks", resourceCulture); + } + } + /// /// Looks up a localized string similar to Finewood bow. /// @@ -646,7 +844,7 @@ public static string Fire_resistance_barley_wine { } /// - /// Looks up a localized string similar to FireMagic. + /// Looks up a localized string similar to . /// public static string FireMagic { get { @@ -654,6 +852,24 @@ public static string FireMagic { } } + /// + /// Looks up a localized string similar to Fish. + /// + public static string Fish { + get { + return ResourceManager.GetString("Fish", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Fishing. + /// + public static string Fishing { + get { + return ResourceManager.GetString("Fishing", resourceCulture); + } + } + /// /// Looks up a localized string similar to Flint axe. /// @@ -682,7 +898,7 @@ public static string Frost_arrow { } /// - /// Looks up a localized string similar to FrostMagic. + /// Looks up a localized string similar to . /// public static string FrostMagic { get { @@ -753,6 +969,15 @@ public static string Huntsman_bow { } } + /// + /// Looks up a localized string similar to . + /// + public static string Illusion { + get { + return ResourceManager.GetString("Illusion", resourceCulture); + } + } + /// /// Looks up a localized string similar to Inventory. /// @@ -915,6 +1140,15 @@ public static string Model { } } + /// + /// Looks up a localized string similar to Modify all. + /// + public static string Modify_all { + get { + return ResourceManager.GetString("Modify all", resourceCulture); + } + } + /// /// Looks up a localized string similar to Name. /// @@ -1059,6 +1293,15 @@ public static string Ponytail_4 { } } + /// + /// Looks up a localized string similar to PP_Alchemy. + /// + public static string PP_Alchemy { + get { + return ResourceManager.GetString("PP_Alchemy", resourceCulture); + } + } + /// /// Looks up a localized string similar to Rag pants. /// @@ -1077,6 +1320,33 @@ public static string Rag_tunic { } } + /// + /// Looks up a localized string similar to Repair items. + /// + public static string Repair_items { + get { + return ResourceManager.GetString("Repair items", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Repaired {0} items. + /// + public static string Repaired__0__items { + get { + return ResourceManager.GetString("Repaired {0} items", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Reset. + /// + public static string Reset { + get { + return ResourceManager.GetString("Reset", resourceCulture); + } + } + /// /// Looks up a localized string similar to Revert. /// @@ -1194,6 +1464,15 @@ public static string Skills { } } + /// + /// Looks up a localized string similar to NOTE: You can click and drag to re-order the skills. + /// + public static string Skills_tab_instruction { + get { + return ResourceManager.GetString("Skills_tab_instruction", resourceCulture); + } + } + /// /// Looks up a localized string similar to Skin Colour. /// @@ -1284,6 +1563,15 @@ public static string Swords { } } + /// + /// Looks up a localized string similar to . + /// + public static string test { + get { + return ResourceManager.GetString("test", resourceCulture); + } + } + /// /// Looks up a localized string similar to Tool. /// @@ -1302,6 +1590,15 @@ public static string Torch { } } + /// + /// Looks up a localized string similar to Trinket. + /// + public static string Trinket { + get { + return ResourceManager.GetString("Trinket", resourceCulture); + } + } + /// /// Looks up a localized string similar to Troll leather pants. /// @@ -1338,6 +1635,15 @@ public static string Two_Handed_Weapon { } } + /// + /// Looks up a localized string similar to Two Handed Weapon Left. + /// + public static string Two_Handed_Weapon_Left { + get { + return ResourceManager.GetString("Two Handed Weapon Left", resourceCulture); + } + } + /// /// Looks up a localized string similar to Unarmed. /// @@ -1357,112 +1663,111 @@ public static string Unknown { } /// - /// Looks up a localized string similar to Utility. + /// Looks up a localized string similar to Used cheats. /// - public static string Utility { + public static string Used_cheats { get { - return ResourceManager.GetString("Utility", resourceCulture); + return ResourceManager.GetString("Used cheats", resourceCulture); } } /// - /// Looks up a localized string similar to Wolf armor chest. + /// Looks up a localized string similar to Utility. /// - public static string Wolf_armor_chest { + public static string Utility { get { - return ResourceManager.GetString("Wolf armor chest", resourceCulture); + return ResourceManager.GetString("Utility", resourceCulture); } } /// - /// Looks up a localized string similar to Wolf armor legs. + /// Looks up a localized string similar to VL_Abjuration. /// - public static string Wolf_armor_legs { + public static string VL_Abjuration { get { - return ResourceManager.GetString("Wolf armor legs", resourceCulture); + return ResourceManager.GetString("VL_Abjuration", resourceCulture); } } /// - /// Looks up a localized string similar to Wood arrow. + /// Looks up a localized string similar to VL_Alteration. /// - public static string Wood_arrow { + public static string VL_Alteration { get { - return ResourceManager.GetString("Wood arrow", resourceCulture); + return ResourceManager.GetString("VL_Alteration", resourceCulture); } } /// - /// Looks up a localized string similar to Wood Cutting. + /// Looks up a localized string similar to VL_Conjuration. /// - public static string Wood_Cutting { + public static string VL_Conjuration { get { - return ResourceManager.GetString("Wood Cutting", resourceCulture); + return ResourceManager.GetString("VL_Conjuration", resourceCulture); } } - + /// - /// Looks up a localized string similar to Wood Cutting. + /// Looks up a localized string similar to VL_Discipline. /// public static string VL_Discipline { get { return ResourceManager.GetString("VL_Discipline", resourceCulture); } } - + /// - /// Looks up a localized string similar to Wood Cutting. + /// Looks up a localized string similar to VL_Evocation. /// - public static string VL_Abjuration { + public static string VL_Evocation { get { - return ResourceManager.GetString("VL_Abjuration", resourceCulture); + return ResourceManager.GetString("VL_Evocation", resourceCulture); } } - + /// - /// Looks up a localized string similar to Wood Cutting. + /// Looks up a localized string similar to VL_Illusion. /// - public static string VL_Alteration { + public static string VL_Illusion { get { - return ResourceManager.GetString("VL_Alteration", resourceCulture); + return ResourceManager.GetString("VL_Illusion", resourceCulture); } } - + /// - /// Looks up a localized string similar to Wood Cutting. + /// Looks up a localized string similar to Wolf armor chest. /// - public static string VL_Conjuration { + public static string Wolf_armor_chest { get { - return ResourceManager.GetString("VL_Conjuration", resourceCulture); + return ResourceManager.GetString("Wolf armor chest", resourceCulture); } } - + /// - /// Looks up a localized string similar to Wood Cutting. + /// Looks up a localized string similar to Wolf armor legs. /// - public static string VL_Evocation { + public static string Wolf_armor_legs { get { - return ResourceManager.GetString("VL_Evocation", resourceCulture); + return ResourceManager.GetString("Wolf armor legs", resourceCulture); } } /// - /// Looks up a localized string similar to Wood Cutting. + /// Looks up a localized string similar to Wood arrow. /// - public static string VL_Illusion { + public static string Wood_arrow { get { - return ResourceManager.GetString("VL_Illusion", resourceCulture); + return ResourceManager.GetString("Wood arrow", resourceCulture); } } - + /// /// Looks up a localized string similar to Wood Cutting. /// - public static string PP_Alchemy { + public static string Wood_Cutting { get { - return ResourceManager.GetString("PP_Alchemy", resourceCulture); + return ResourceManager.GetString("Wood Cutting", resourceCulture); } } - } } diff --git a/Loki/Properties/Resources.ko-KR.resx b/Loki/Properties/Resources.ko-KR.resx index d1ba4c0..a97f2a8 100644 --- a/Loki/Properties/Resources.ko-KR.resx +++ b/Loki/Properties/Resources.ko-KR.resx @@ -117,15 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 포기 - 모두 - - 변경 - 호박석 @@ -285,9 +279,6 @@ 둔기 - - 주문 - 소모품 @@ -303,15 +294,9 @@ 죽음 - - 규율 - 드라우그 송곳니 - - 환기 - fart @@ -327,9 +312,6 @@ 불 저항의 보리주 - - 불 마법 - 부싯돌 도끼 @@ -339,9 +321,6 @@ 냉기 화살 - - 얼음 마법 - 일반 @@ -363,9 +342,6 @@ 사냥꾼 활 - - 환각 - 인벤토리 @@ -546,9 +522,6 @@ - - test - 도구 @@ -606,4 +579,38 @@ 벌목 + + 포기 + + + 변경 + + + 주문 + + + 규율 + + + 환기 + + + 불 마법 + + + 얼음 마법 + + + 환각 + + + test + + + + + + + + \ No newline at end of file diff --git a/Loki/Properties/Resources.resx b/Loki/Properties/Resources.resx index 4092c1f..acb1ba4 100644 --- a/Loki/Properties/Resources.resx +++ b/Loki/Properties/Resources.resx @@ -129,6 +129,9 @@ Ammo + + Ammo Non Equipable + Ancient seed @@ -186,6 +189,9 @@ Bloodbag + + Blood magic + Blueberries @@ -195,6 +201,12 @@ Bone fragments + + No + + + Yes + Bow @@ -273,6 +285,12 @@ Thick 1 + + Character Reverted + + + Character Saved + Chest @@ -285,6 +303,12 @@ Crafts + + Created + + + Crossbow + Crude bow @@ -297,12 +321,21 @@ Draugr fang + + Elemental magic + fart Female + + Fill stacks + + + Filled {0} stacks + Finewood bow @@ -312,8 +345,11 @@ Fire resistance barley wine - - FireMagic + + Fish + + + Fishing Flint axe @@ -324,9 +360,6 @@ Frost arrow - - FrostMagic - General @@ -402,6 +435,9 @@ Model + + Modify all + Name @@ -459,6 +495,15 @@ Rag tunic + + Repair items + + + Repaired {0} items + + + Reset + Revert @@ -498,6 +543,9 @@ Skills + + NOTE: You can click and drag to re-order the skills + Skin Colour @@ -546,12 +594,18 @@ Two Handed Weapon + + Two Handed Weapon Left + Unarmed Unknown + + Used cheats + Utility @@ -585,4 +639,52 @@ Wood Cutting + + {0} skills decreased ({1}%) + + + {0} skills increased ({1}%) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Farming + + + Cooking + + + Crafting + + + Dodge + + + Trinket + \ No newline at end of file diff --git a/Loki/SharedItemData.cs b/Loki/SharedItemData.cs index 8c76d5d..31b28f6 100644 --- a/Loki/SharedItemData.cs +++ b/Loki/SharedItemData.cs @@ -1,4 +1,10 @@ +using System; using System.Collections.Generic; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Windows; using Loki; namespace Loki @@ -25,6 +31,10 @@ public enum ItemType Utility = 18, Tool = 19, AttachAtgeir = 20, + Fish = 21, + TwoHandedWeaponLeft = 22, + AmmoNonEquipable = 23, + Trinket = 24, } public class SharedItemData @@ -37,2623 +47,38 @@ public class SharedItemData public int MaxStack { get; set; } public string DisplayName { get; set; } public int MaxQuality { get; set; } - public ItemType ItemType {get;set;} + public ItemType ItemType { get; set; } } public static class ItemDb { - private static readonly Dictionary ItemData = new Dictionary - { - ["Abomination_attack1"] = new SharedItemData - { - ItemName = "Abomination_attack1", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Swing attack", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Abomination_attack2"] = new SharedItemData - { - ItemName = "Abomination_attack2", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Slam attack", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Abomination_attack3"] = new SharedItemData - { - ItemName = "Abomination_attack3", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Stub to the ground", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Acorn"] = new SharedItemData - { - ItemName = "Acorn", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 100, DisplayName = "Acorns", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["Amber"] = new SharedItemData - { - ItemName = "Amber", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Amber", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["AmberPearl"] = new SharedItemData - { - ItemName = "AmberPearl", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Amber pearl", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["AncientSeed"] = new SharedItemData - { - ItemName = "AncientSeed", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Ancient seed", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["ArmorBronzeChest"] = new SharedItemData - { - ItemName = "ArmorBronzeChest", IsTeleportable = true, UsesDurability = true, MaxDurability = 1000, - DurabilityPerLevel = 200, MaxStack = 1, DisplayName = "Bronze plate cuirass", - MaxQuality = 4, ItemType = (ItemType)7, - }, - ["ArmorBronzeLegs"] = new SharedItemData - { - ItemName = "ArmorBronzeLegs", IsTeleportable = true, UsesDurability = true, MaxDurability = 1000, - DurabilityPerLevel = 200, MaxStack = 1, DisplayName = "Bronze plate leggings", - MaxQuality = 4, ItemType = (ItemType)11, - }, - ["ArmorFenringChest"] = new SharedItemData - { - ItemName = "ArmorFenringChest", IsTeleportable = true, UsesDurability = true, MaxDurability = 1000, - DurabilityPerLevel = 200, MaxStack = 1, DisplayName = "Fenris coat", - MaxQuality = 4, ItemType = (ItemType)7, - }, - ["ArmorFenringLegs"] = new SharedItemData - { - ItemName = "ArmorFenringLegs", IsTeleportable = true, UsesDurability = true, MaxDurability = 1000, - DurabilityPerLevel = 200, MaxStack = 1, DisplayName = "Fenris leggings", - MaxQuality = 4, ItemType = (ItemType)11, - }, - ["ArmorIronChest"] = new SharedItemData - { - ItemName = "ArmorIronChest", IsTeleportable = true, UsesDurability = true, MaxDurability = 1000, - DurabilityPerLevel = 200, MaxStack = 1, DisplayName = "Iron scale mail", - MaxQuality = 4, ItemType = (ItemType)7, - }, - ["ArmorIronLegs"] = new SharedItemData - { - ItemName = "ArmorIronLegs", IsTeleportable = true, UsesDurability = true, MaxDurability = 1000, - DurabilityPerLevel = 200, MaxStack = 1, DisplayName = "Iron greaves", - MaxQuality = 4, ItemType = (ItemType)11, - }, - ["ArmorLeatherChest"] = new SharedItemData - { - ItemName = "ArmorLeatherChest", IsTeleportable = true, UsesDurability = true, MaxDurability = 400, - DurabilityPerLevel = 100, MaxStack = 1, DisplayName = "Leather tunic", - MaxQuality = 4, ItemType = (ItemType)7, - }, - ["ArmorLeatherLegs"] = new SharedItemData - { - ItemName = "ArmorLeatherLegs", IsTeleportable = true, UsesDurability = true, MaxDurability = 400, - DurabilityPerLevel = 100, MaxStack = 1, DisplayName = "Leather pants", - MaxQuality = 4, ItemType = (ItemType)11, - }, - ["ArmorPaddedCuirass"] = new SharedItemData - { - ItemName = "ArmorPaddedCuirass", IsTeleportable = true, UsesDurability = true, MaxDurability = 1000, - DurabilityPerLevel = 200, MaxStack = 1, DisplayName = "Padded cuirass", - MaxQuality = 4, ItemType = (ItemType)7, - }, - ["ArmorPaddedGreaves"] = new SharedItemData - { - ItemName = "ArmorPaddedGreaves", IsTeleportable = true, UsesDurability = true, MaxDurability = 1000, - DurabilityPerLevel = 200, MaxStack = 1, DisplayName = "Padded greaves", - MaxQuality = 4, ItemType = (ItemType)11, - }, - ["ArmorRagsChest"] = new SharedItemData - { - ItemName = "ArmorRagsChest", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Rag tunic", - MaxQuality = 2, ItemType = (ItemType)7, - }, - ["ArmorRagsLegs"] = new SharedItemData - { - ItemName = "ArmorRagsLegs", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Rag pants", - MaxQuality = 2, ItemType = (ItemType)11, - }, - ["ArmorRootChest"] = new SharedItemData - { - ItemName = "ArmorRootChest", IsTeleportable = true, UsesDurability = true, MaxDurability = 800, - DurabilityPerLevel = 100, MaxStack = 1, DisplayName = "Root harnesk", - MaxQuality = 4, ItemType = (ItemType)7, - }, - ["ArmorRootLegs"] = new SharedItemData - { - ItemName = "ArmorRootLegs", IsTeleportable = true, UsesDurability = true, MaxDurability = 800, - DurabilityPerLevel = 100, MaxStack = 1, DisplayName = "Root leggings", - MaxQuality = 4, ItemType = (ItemType)11, - }, - ["ArmorTrollLeatherChest"] = new SharedItemData - { - ItemName = "ArmorTrollLeatherChest", IsTeleportable = true, UsesDurability = true, MaxDurability = 500, - DurabilityPerLevel = 200, MaxStack = 1, DisplayName = "Troll leather tunic", - MaxQuality = 4, ItemType = (ItemType)7, - }, - ["ArmorTrollLeatherLegs"] = new SharedItemData - { - ItemName = "ArmorTrollLeatherLegs", IsTeleportable = true, UsesDurability = true, MaxDurability = 500, - DurabilityPerLevel = 200, MaxStack = 1, DisplayName = "Troll leather pants", - MaxQuality = 4, ItemType = (ItemType)11, - }, - ["ArmorWolfChest"] = new SharedItemData - { - ItemName = "ArmorWolfChest", IsTeleportable = true, UsesDurability = true, MaxDurability = 1000, - DurabilityPerLevel = 200, MaxStack = 1, DisplayName = "Wolf armor chest", - MaxQuality = 4, ItemType = (ItemType)7, - }, - ["ArmorWolfLegs"] = new SharedItemData - { - ItemName = "ArmorWolfLegs", IsTeleportable = true, UsesDurability = true, MaxDurability = 1000, - DurabilityPerLevel = 200, MaxStack = 1, DisplayName = "Wolf armor legs", - MaxQuality = 4, ItemType = (ItemType)11, - }, - ["ArrowBronze"] = new SharedItemData - { - ItemName = "ArrowBronze", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 100, DisplayName = "Bronzehead arrow", - MaxQuality = 1, ItemType = (ItemType)9, - }, - ["ArrowFire"] = new SharedItemData - { - ItemName = "ArrowFire", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 100, DisplayName = "Fire arrow", - MaxQuality = 1, ItemType = (ItemType)9, - }, - ["ArrowFlint"] = new SharedItemData - { - ItemName = "ArrowFlint", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 100, DisplayName = "Flinthead arrow", - MaxQuality = 1, ItemType = (ItemType)9, - }, - ["ArrowFrost"] = new SharedItemData - { - ItemName = "ArrowFrost", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 100, DisplayName = "Frost arrow", - MaxQuality = 1, ItemType = (ItemType)9, - }, - ["ArrowIron"] = new SharedItemData - { - ItemName = "ArrowIron", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 100, DisplayName = "Ironhead arrow", - MaxQuality = 1, ItemType = (ItemType)9, - }, - ["ArrowNeedle"] = new SharedItemData - { - ItemName = "ArrowNeedle", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 100, DisplayName = "Needle arrow", - MaxQuality = 1, ItemType = (ItemType)9, - }, - ["ArrowObsidian"] = new SharedItemData - { - ItemName = "ArrowObsidian", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 100, DisplayName = "Obsidian arrow", - MaxQuality = 1, ItemType = (ItemType)9, - }, - ["ArrowPoison"] = new SharedItemData - { - ItemName = "ArrowPoison", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 100, DisplayName = "Poison arrow", - MaxQuality = 1, ItemType = (ItemType)9, - }, - ["ArrowSilver"] = new SharedItemData - { - ItemName = "ArrowSilver", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 100, DisplayName = "Silver arrow", - MaxQuality = 1, ItemType = (ItemType)9, - }, - ["ArrowWood"] = new SharedItemData - { - ItemName = "ArrowWood", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 100, DisplayName = "Wood arrow", - MaxQuality = 1, ItemType = (ItemType)9, - }, - ["AtgeirBlackmetal"] = new SharedItemData - { - ItemName = "AtgeirBlackmetal", IsTeleportable = true, UsesDurability = true, MaxDurability = 175, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Blackmetal atgeir", - MaxQuality = 4, ItemType = (ItemType)14, - }, - ["AtgeirBronze"] = new SharedItemData - { - ItemName = "AtgeirBronze", IsTeleportable = true, UsesDurability = true, MaxDurability = 125, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Bronze atgeir", - MaxQuality = 4, ItemType = (ItemType)14, - }, - ["AtgeirIron"] = new SharedItemData - { - ItemName = "AtgeirIron", IsTeleportable = true, UsesDurability = true, MaxDurability = 175, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Iron atgeir", - MaxQuality = 4, ItemType = (ItemType)14, - }, - ["AxeBlackMetal"] = new SharedItemData - { - ItemName = "AxeBlackMetal", IsTeleportable = true, UsesDurability = true, MaxDurability = 175, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Blackmetal axe", - MaxQuality = 4, ItemType = (ItemType)3, - }, - ["AxeBronze"] = new SharedItemData - { - ItemName = "AxeBronze", IsTeleportable = true, UsesDurability = true, MaxDurability = 125, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Bronze axe", - MaxQuality = 4, ItemType = (ItemType)3, - }, - ["AxeFlint"] = new SharedItemData - { - ItemName = "AxeFlint", IsTeleportable = true, UsesDurability = true, MaxDurability = 100, - DurabilityPerLevel = 30, MaxStack = 1, DisplayName = "Flint axe", - MaxQuality = 4, ItemType = (ItemType)3, - }, - ["AxeIron"] = new SharedItemData - { - ItemName = "AxeIron", IsTeleportable = true, UsesDurability = true, MaxDurability = 175, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Iron axe", - MaxQuality = 4, ItemType = (ItemType)3, - }, - ["AxeStone"] = new SharedItemData - { - ItemName = "AxeStone", IsTeleportable = true, UsesDurability = true, MaxDurability = 100, - DurabilityPerLevel = 30, MaxStack = 1, DisplayName = "Stone axe", - MaxQuality = 4, ItemType = (ItemType)3, - }, - ["Barley"] = new SharedItemData - { - ItemName = "Barley", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 100, DisplayName = "Barley", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["BarleyFlour"] = new SharedItemData - { - ItemName = "BarleyFlour", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Barley flour", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["BarleyWine"] = new SharedItemData - { - ItemName = "BarleyWine", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 10, DisplayName = "Fire resistance barley wine", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["BarleyWineBase"] = new SharedItemData - { - ItemName = "BarleyWineBase", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Barley wine base: Fire resistance", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["Battleaxe"] = new SharedItemData - { - ItemName = "Battleaxe", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Battleaxe", - MaxQuality = 4, ItemType = (ItemType)14, - }, - ["BattleaxeCrystal"] = new SharedItemData - { - ItemName = "BattleaxeCrystal", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Crystal battleaxe", - MaxQuality = 4, ItemType = (ItemType)14, - }, - ["bat_melee"] = new SharedItemData - { - ItemName = "bat_melee", IsTeleportable = true, UsesDurability = true, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Bat melee", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Beard1"] = new SharedItemData - { - ItemName = "Beard1", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Long 1", - MaxQuality = 1, ItemType = (ItemType)10, - }, - ["Beard10"] = new SharedItemData - { - ItemName = "Beard10", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Braided 4", - MaxQuality = 1, ItemType = (ItemType)10, - }, - ["Beard2"] = new SharedItemData - { - ItemName = "Beard2", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Long 2", - MaxQuality = 1, ItemType = (ItemType)10, - }, - ["Beard3"] = new SharedItemData - { - ItemName = "Beard3", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Short 1", - MaxQuality = 1, ItemType = (ItemType)10, - }, - ["Beard4"] = new SharedItemData - { - ItemName = "Beard4", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Short 2", - MaxQuality = 1, ItemType = (ItemType)10, - }, - ["Beard5"] = new SharedItemData - { - ItemName = "Beard5", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Braided 1", - MaxQuality = 1, ItemType = (ItemType)10, - }, - ["Beard6"] = new SharedItemData - { - ItemName = "Beard6", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Braided 2", - MaxQuality = 1, ItemType = (ItemType)10, - }, - ["Beard7"] = new SharedItemData - { - ItemName = "Beard7", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Short 3", - MaxQuality = 1, ItemType = (ItemType)10, - }, - ["Beard8"] = new SharedItemData - { - ItemName = "Beard8", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Thick 1", - MaxQuality = 1, ItemType = (ItemType)10, - }, - ["Beard9"] = new SharedItemData - { - ItemName = "Beard9", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Braided 3", - MaxQuality = 1, ItemType = (ItemType)10, - }, - ["BeardNone"] = new SharedItemData - { - ItemName = "BeardNone", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "No beard", - MaxQuality = 1, ItemType = (ItemType)10, - }, - ["BeechSeeds"] = new SharedItemData - { - ItemName = "BeechSeeds", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 100, DisplayName = "Beech seeds", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["BeltStrength"] = new SharedItemData - { - ItemName = "BeltStrength", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Megingjord", - MaxQuality = 1, ItemType = (ItemType)18, - }, - ["BirchSeeds"] = new SharedItemData - { - ItemName = "BirchSeeds", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 100, DisplayName = "Birch seeds", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["BlackMetal"] = new SharedItemData - { - ItemName = "BlackMetal", IsTeleportable = false, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 30, DisplayName = "Black metal", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["BlackMetalScrap"] = new SharedItemData - { - ItemName = "BlackMetalScrap", IsTeleportable = false, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 30, DisplayName = "Black metal scrap", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["BlackSoup"] = new SharedItemData - { - ItemName = "BlackSoup", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 10, DisplayName = "Black soup", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["blobelite_attack_aoe"] = new SharedItemData - { - ItemName = "blobelite_attack_aoe", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "fart", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["blobtar_attack"] = new SharedItemData - { - ItemName = "blobtar_attack", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "fireballattack", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["blob_attack_aoe"] = new SharedItemData - { - ItemName = "blob_attack_aoe", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "fart", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Bloodbag"] = new SharedItemData - { - ItemName = "Bloodbag", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Bloodbag", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["BloodPudding"] = new SharedItemData - { - ItemName = "BloodPudding", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 10, DisplayName = "Blood pudding", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["Blueberries"] = new SharedItemData - { - ItemName = "Blueberries", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Blueberries", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["BoarJerky"] = new SharedItemData - { - ItemName = "BoarJerky", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Boar jerky", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["boar_base_attack"] = new SharedItemData - { - ItemName = "boar_base_attack", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "boar attack1", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["BombOoze"] = new SharedItemData - { - ItemName = "BombOoze", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Ooze bomb", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["BoneFragments"] = new SharedItemData - { - ItemName = "BoneFragments", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Bone fragments", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["bonemass_attack_aoe"] = new SharedItemData - { - ItemName = "bonemass_attack_aoe", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "heal", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["bonemass_attack_punch"] = new SharedItemData - { - ItemName = "bonemass_attack_punch", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "slap", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["bonemass_attack_spawn"] = new SharedItemData - { - ItemName = "bonemass_attack_spawn", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "heal", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["bonemass_attack_throw"] = new SharedItemData - { - ItemName = "bonemass_attack_throw", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "slime throw", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Bow"] = new SharedItemData - { - ItemName = "Bow", IsTeleportable = true, UsesDurability = true, MaxDurability = 50, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Crude bow", - MaxQuality = 4, ItemType = (ItemType)4, - }, - ["BowDraugrFang"] = new SharedItemData - { - ItemName = "BowDraugrFang", IsTeleportable = true, UsesDurability = true, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Draugr fang", - MaxQuality = 4, ItemType = (ItemType)4, - }, - ["BowFineWood"] = new SharedItemData - { - ItemName = "BowFineWood", IsTeleportable = true, UsesDurability = true, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Finewood bow", - MaxQuality = 4, ItemType = (ItemType)4, - }, - ["BowHuntsman"] = new SharedItemData - { - ItemName = "BowHuntsman", IsTeleportable = true, UsesDurability = true, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Huntsman bow", - MaxQuality = 4, ItemType = (ItemType)4, - }, - ["Bread"] = new SharedItemData - { - ItemName = "Bread", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Bread", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["BreadDough"] = new SharedItemData - { - ItemName = "BreadDough", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Bread dough", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["Bronze"] = new SharedItemData - { - ItemName = "Bronze", IsTeleportable = false, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 30, DisplayName = "Bronze", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["BronzeNails"] = new SharedItemData - { - ItemName = "BronzeNails", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 100, DisplayName = "Bronze nails", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["CapeDeerHide"] = new SharedItemData - { - ItemName = "CapeDeerHide", IsTeleportable = true, UsesDurability = true, MaxDurability = 400, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Deer hide cape", - MaxQuality = 4, ItemType = (ItemType)17, - }, - ["CapeLinen"] = new SharedItemData - { - ItemName = "CapeLinen", IsTeleportable = true, UsesDurability = true, MaxDurability = 1500, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Linen cape", - MaxQuality = 4, ItemType = (ItemType)17, - }, - ["CapeLox"] = new SharedItemData - { - ItemName = "CapeLox", IsTeleportable = true, UsesDurability = true, MaxDurability = 1200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Lox cape", - MaxQuality = 4, ItemType = (ItemType)17, - }, - ["CapeOdin"] = new SharedItemData - { - ItemName = "CapeOdin", IsTeleportable = true, UsesDurability = true, MaxDurability = 1500, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Cape of Odin", - MaxQuality = 4, ItemType = (ItemType)17, - }, - ["CapeTest"] = new SharedItemData - { - ItemName = "CapeTest", IsTeleportable = true, UsesDurability = true, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "CAPE TEST", - MaxQuality = 4, ItemType = (ItemType)17, - }, - ["CapeTrollHide"] = new SharedItemData - { - ItemName = "CapeTrollHide", IsTeleportable = true, UsesDurability = true, MaxDurability = 500, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Troll hide cape", - MaxQuality = 4, ItemType = (ItemType)17, - }, - ["CapeWolf"] = new SharedItemData - { - ItemName = "CapeWolf", IsTeleportable = true, UsesDurability = true, MaxDurability = 1000, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Wolf fur cape", - MaxQuality = 4, ItemType = (ItemType)17, - }, - ["Carrot"] = new SharedItemData - { - ItemName = "Carrot", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Carrot", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["CarrotSeeds"] = new SharedItemData - { - ItemName = "CarrotSeeds", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 100, DisplayName = "Carrot seeds", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["CarrotSoup"] = new SharedItemData - { - ItemName = "CarrotSoup", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 10, DisplayName = "Carrot soup", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["Chain"] = new SharedItemData - { - ItemName = "Chain", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Chain", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["Chitin"] = new SharedItemData - { - ItemName = "Chitin", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Chitin", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["Cloudberry"] = new SharedItemData - { - ItemName = "Cloudberry", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Cloudberries", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["Club"] = new SharedItemData - { - ItemName = "Club", IsTeleportable = true, UsesDurability = true, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Club", - MaxQuality = 4, ItemType = (ItemType)3, - }, - ["Coal"] = new SharedItemData - { - ItemName = "Coal", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Coal", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["Coins"] = new SharedItemData - { - ItemName = "Coins", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 999, DisplayName = "Coins", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["CookedDeerMeat"] = new SharedItemData - { - ItemName = "CookedDeerMeat", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Cooked deer meat", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["CookedLoxMeat"] = new SharedItemData - { - ItemName = "CookedLoxMeat", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Cooked lox meat", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["CookedMeat"] = new SharedItemData - { - ItemName = "CookedMeat", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Cooked boar meat", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["CookedWolfMeat"] = new SharedItemData - { - ItemName = "CookedWolfMeat", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Cooked wolf meat", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["Copper"] = new SharedItemData - { - ItemName = "Copper", IsTeleportable = false, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 30, DisplayName = "Copper", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["CopperOre"] = new SharedItemData - { - ItemName = "CopperOre", IsTeleportable = false, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 30, DisplayName = "Copper ore", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["CryptKey"] = new SharedItemData - { - ItemName = "CryptKey", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Swamp key", - MaxQuality = 1, ItemType = (ItemType)16, - }, - ["Crystal"] = new SharedItemData - { - ItemName = "Crystal", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Crystal", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["Cultivator"] = new SharedItemData - { - ItemName = "Cultivator", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 200, MaxStack = 1, DisplayName = "Cultivator", - MaxQuality = 3, ItemType = (ItemType)19, - }, - ["Dandelion"] = new SharedItemData - { - ItemName = "Dandelion", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Dandelion", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["Deathsquito_sting"] = new SharedItemData - { - ItemName = "Deathsquito_sting", IsTeleportable = true, UsesDurability = true, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Wraith melee", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["DeerHide"] = new SharedItemData - { - ItemName = "DeerHide", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Deer hide", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["DeerMeat"] = new SharedItemData - { - ItemName = "DeerMeat", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Deer meat", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["DeerStew"] = new SharedItemData - { - ItemName = "DeerStew", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 10, DisplayName = "Deer stew", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["DragonEgg"] = new SharedItemData - { - ItemName = "DragonEgg", IsTeleportable = false, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Dragon egg", - MaxQuality = 1, ItemType = (ItemType)16, - }, - ["DragonTear"] = new SharedItemData - { - ItemName = "DragonTear", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Dragon tear", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["dragon_bite"] = new SharedItemData - { - ItemName = "dragon_bite", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Dragon claw left", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["dragon_claw_left"] = new SharedItemData - { - ItemName = "dragon_claw_left", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Dragon claw left", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["dragon_claw_right"] = new SharedItemData - { - ItemName = "dragon_claw_right", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Dragon claw left", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["dragon_coldbreath"] = new SharedItemData - { - ItemName = "dragon_coldbreath", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "dragon breath", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["dragon_coldbreath_OLD"] = new SharedItemData - { - ItemName = "dragon_coldbreath_OLD", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "dragon breath", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["dragon_spit_shotgun"] = new SharedItemData - { - ItemName = "dragon_spit_shotgun", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "cold ball", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["dragon_taunt"] = new SharedItemData - { - ItemName = "dragon_taunt", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "scream", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["draugr_arrow"] = new SharedItemData - { - ItemName = "draugr_arrow", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Ironhead arrow", - MaxQuality = 1, ItemType = (ItemType)9, - }, - ["draugr_axe"] = new SharedItemData - { - ItemName = "draugr_axe", IsTeleportable = true, UsesDurability = true, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Dragur axe", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["draugr_bow"] = new SharedItemData - { - ItemName = "draugr_bow", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Bow", - MaxQuality = 1, ItemType = (ItemType)4, - }, - ["draugr_sword"] = new SharedItemData - { - ItemName = "draugr_sword", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Dragur axe", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Eikthyr_antler"] = new SharedItemData - { - ItemName = "Eikthyr_antler", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "StagAttack1", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Eikthyr_charge"] = new SharedItemData - { - ItemName = "Eikthyr_charge", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "StagAttack2", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Eikthyr_flegs_OLD"] = new SharedItemData - { - ItemName = "Eikthyr_flegs_OLD", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "StagAttack1", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Eikthyr_stomp"] = new SharedItemData - { - ItemName = "Eikthyr_stomp", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "slap", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["ElderBark"] = new SharedItemData - { - ItemName = "ElderBark", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Ancient bark", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["Entrails"] = new SharedItemData - { - ItemName = "Entrails", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Entrails", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["Eyescream"] = new SharedItemData - { - ItemName = "Eyescream", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 10, DisplayName = "Eyescream", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["Feathers"] = new SharedItemData - { - ItemName = "Feathers", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Feathers", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["Fenring_attack_claw"] = new SharedItemData - { - ItemName = "Fenring_attack_claw", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "claw", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Fenring_attack_fireclaw"] = new SharedItemData - { - ItemName = "Fenring_attack_fireclaw", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "claw", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Fenring_attack_fireclaw_double"] = new SharedItemData - { - ItemName = "Fenring_attack_fireclaw_double", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "claw", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Fenring_attack_flames"] = new SharedItemData - { - ItemName = "Fenring_attack_flames", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Fenring cultist flames", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Fenring_attack_jump"] = new SharedItemData - { - ItemName = "Fenring_attack_jump", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "claw", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Fenring_taunt"] = new SharedItemData - { - ItemName = "Fenring_taunt", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "scream", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["FineWood"] = new SharedItemData - { - ItemName = "FineWood", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Fine wood", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["FirCone"] = new SharedItemData - { - ItemName = "FirCone", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 100, DisplayName = "Fir cone", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["FishCooked"] = new SharedItemData - { - ItemName = "FishCooked", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Cooked fish", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["FishingBait"] = new SharedItemData - { - ItemName = "FishingBait", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 100, DisplayName = "Fishing bait", - MaxQuality = 1, ItemType = (ItemType)9, - }, - ["FishingRod"] = new SharedItemData - { - ItemName = "FishingRod", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Fishing rod", - MaxQuality = 1, ItemType = (ItemType)14, - }, - ["FishRaw"] = new SharedItemData - { - ItemName = "FishRaw", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Raw fish", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["FishWraps"] = new SharedItemData - { - ItemName = "FishWraps", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 10, DisplayName = "Fish wraps", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["FistFenrirClaw"] = new SharedItemData - { - ItemName = "FistFenrirClaw", IsTeleportable = true, UsesDurability = true, MaxDurability = 300, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Flesh rippers", - MaxQuality = 4, ItemType = (ItemType)14, - }, - ["Flametal"] = new SharedItemData - { - ItemName = "Flametal", IsTeleportable = false, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 30, DisplayName = "Flametal", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["FlametalOre"] = new SharedItemData - { - ItemName = "FlametalOre", IsTeleportable = false, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 30, DisplayName = "Flametal ore", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["Flax"] = new SharedItemData - { - ItemName = "Flax", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 100, DisplayName = "Flax", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["Flint"] = new SharedItemData - { - ItemName = "Flint", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 30, DisplayName = "Flint", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["FreezeGland"] = new SharedItemData - { - ItemName = "FreezeGland", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Freeze gland", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["gd_king_punch"] = new SharedItemData - { - ItemName = "gd_king_punch", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "jaws", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["gd_king_rootspawn"] = new SharedItemData - { - ItemName = "gd_king_rootspawn", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "spawn", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["gd_king_scream"] = new SharedItemData - { - ItemName = "gd_king_scream", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "scream", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["gd_king_shoot"] = new SharedItemData - { - ItemName = "gd_king_shoot", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "shaman attack", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["gd_king_stomp"] = new SharedItemData - { - ItemName = "gd_king_stomp", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "jaws", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Ghost_attack"] = new SharedItemData - { - ItemName = "Ghost_attack", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "jaws", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["GoblinArmband"] = new SharedItemData - { - ItemName = "GoblinArmband", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Iron plate armor", - MaxQuality = 4, ItemType = (ItemType)7, - }, - ["GoblinBrute_ArmGuard"] = new SharedItemData - { - ItemName = "GoblinBrute_ArmGuard", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Iron plate armor", - MaxQuality = 4, ItemType = (ItemType)7, - }, - ["GoblinBrute_Attack"] = new SharedItemData - { - ItemName = "GoblinBrute_Attack", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Brute sword", - MaxQuality = 7, ItemType = (ItemType)3, - }, - ["GoblinBrute_Backbones"] = new SharedItemData - { - ItemName = "GoblinBrute_Backbones", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Iron plate armor", - MaxQuality = 4, ItemType = (ItemType)6, - }, - ["GoblinBrute_ExecutionerCap"] = new SharedItemData - { - ItemName = "GoblinBrute_ExecutionerCap", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Iron plate armor", - MaxQuality = 4, ItemType = (ItemType)6, - }, - ["GoblinBrute_HipCloth"] = new SharedItemData - { - ItemName = "GoblinBrute_HipCloth", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Iron plate armor", - MaxQuality = 4, ItemType = (ItemType)11, - }, - ["GoblinBrute_LegBones"] = new SharedItemData - { - ItemName = "GoblinBrute_LegBones", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Iron plate armor", - MaxQuality = 4, ItemType = (ItemType)18, - }, - ["GoblinBrute_RageAttack"] = new SharedItemData - { - ItemName = "GoblinBrute_RageAttack", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Brute sword", - MaxQuality = 7, ItemType = (ItemType)3, - }, - ["GoblinBrute_ShoulderGuard"] = new SharedItemData - { - ItemName = "GoblinBrute_ShoulderGuard", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Iron plate armor", - MaxQuality = 4, ItemType = (ItemType)17, - }, - ["GoblinBrute_Taunt"] = new SharedItemData - { - ItemName = "GoblinBrute_Taunt", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Brute taunt", - MaxQuality = 7, ItemType = (ItemType)3, - }, - ["GoblinClub"] = new SharedItemData - { - ItemName = "GoblinClub", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Club", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["GoblinHelmet"] = new SharedItemData - { - ItemName = "GoblinHelmet", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Iron plate armor", - MaxQuality = 4, ItemType = (ItemType)7, - }, - ["GoblinKing_Beam"] = new SharedItemData - { - ItemName = "GoblinKing_Beam", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "dragon breath", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["GoblinKing_Meteors"] = new SharedItemData - { - ItemName = "GoblinKing_Meteors", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "spawn", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["GoblinKing_Nova"] = new SharedItemData - { - ItemName = "GoblinKing_Nova", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "slap", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["GoblinKing_Taunt"] = new SharedItemData - { - ItemName = "GoblinKing_Taunt", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "scream", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["GoblinLegband"] = new SharedItemData - { - ItemName = "GoblinLegband", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Iron plate armor", - MaxQuality = 4, ItemType = (ItemType)7, - }, - ["GoblinLoin"] = new SharedItemData - { - ItemName = "GoblinLoin", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Iron plate armor", - MaxQuality = 4, ItemType = (ItemType)11, - }, - ["GoblinShaman_attack_fireball"] = new SharedItemData - { - ItemName = "GoblinShaman_attack_fireball", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "fireballattack", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["GoblinShaman_attack_poke"] = new SharedItemData - { - ItemName = "GoblinShaman_attack_poke", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Club", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["GoblinShaman_attack_protect"] = new SharedItemData - { - ItemName = "GoblinShaman_attack_protect", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "heal", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["GoblinShaman_Headdress_antlers"] = new SharedItemData - { - ItemName = "GoblinShaman_Headdress_antlers", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Club", - MaxQuality = 1, ItemType = (ItemType)6, - }, - ["GoblinShaman_Headdress_feathers"] = new SharedItemData - { - ItemName = "GoblinShaman_Headdress_feathers", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Club", - MaxQuality = 1, ItemType = (ItemType)6, - }, - ["GoblinShaman_Staff_Bones"] = new SharedItemData - { - ItemName = "GoblinShaman_Staff_Bones", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Club", - MaxQuality = 1, ItemType = (ItemType)18, - }, - ["GoblinShaman_Staff_Feathers"] = new SharedItemData - { - ItemName = "GoblinShaman_Staff_Feathers", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Club", - MaxQuality = 1, ItemType = (ItemType)18, - }, - ["GoblinShoulders"] = new SharedItemData - { - ItemName = "GoblinShoulders", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Iron plate armor", - MaxQuality = 4, ItemType = (ItemType)7, - }, - ["GoblinSpear"] = new SharedItemData - { - ItemName = "GoblinSpear", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 10, DisplayName = "Flint spear", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["GoblinSword"] = new SharedItemData - { - ItemName = "GoblinSword", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Bronze sword", - MaxQuality = 7, ItemType = (ItemType)3, - }, - ["GoblinTorch"] = new SharedItemData - { - ItemName = "GoblinTorch", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Torch", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["GoblinTotem"] = new SharedItemData - { - ItemName = "GoblinTotem", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 30, DisplayName = "Fuling totem", - MaxQuality = 1, ItemType = (ItemType)16, - }, - ["GreydwarfEye"] = new SharedItemData - { - ItemName = "GreydwarfEye", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Greydwarf eye", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["Greydwarf_attack"] = new SharedItemData - { - ItemName = "Greydwarf_attack", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "jaws", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Greydwarf_elite_attack"] = new SharedItemData - { - ItemName = "Greydwarf_elite_attack", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "jaws", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Greydwarf_shaman_attack"] = new SharedItemData - { - ItemName = "Greydwarf_shaman_attack", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "shaman attack", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Greydwarf_shaman_heal"] = new SharedItemData - { - ItemName = "Greydwarf_shaman_heal", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "heal", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Greydwarf_throw"] = new SharedItemData - { - ItemName = "Greydwarf_throw", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "throw stone", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Greyling_attack"] = new SharedItemData - { - ItemName = "Greyling_attack", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "jaws", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Guck"] = new SharedItemData - { - ItemName = "Guck", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Guck", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["Hair1"] = new SharedItemData - { - ItemName = "Hair1", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Ponytail 1", - MaxQuality = 1, ItemType = (ItemType)10, - }, - ["Hair10"] = new SharedItemData - { - ItemName = "Hair10", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Side Swept 2", - MaxQuality = 1, ItemType = (ItemType)10, - }, - ["Hair11"] = new SharedItemData - { - ItemName = "Hair11", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Braided 2", - MaxQuality = 1, ItemType = (ItemType)10, - }, - ["Hair12"] = new SharedItemData - { - ItemName = "Hair12", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Braided 3", - MaxQuality = 1, ItemType = (ItemType)10, - }, - ["Hair13"] = new SharedItemData - { - ItemName = "Hair13", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Braided 4", - MaxQuality = 1, ItemType = (ItemType)10, - }, - ["Hair14"] = new SharedItemData - { - ItemName = "Hair14", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Side Swept 3", - MaxQuality = 1, ItemType = (ItemType)10, - }, - ["Hair2"] = new SharedItemData - { - ItemName = "Hair2", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Ponytail 2", - MaxQuality = 1, ItemType = (ItemType)10, - }, - ["Hair3"] = new SharedItemData - { - ItemName = "Hair3", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Braided 1", - MaxQuality = 1, ItemType = (ItemType)10, - }, - ["Hair4"] = new SharedItemData - { - ItemName = "Hair4", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Ponytail 3", - MaxQuality = 1, ItemType = (ItemType)10, - }, - ["Hair5"] = new SharedItemData - { - ItemName = "Hair5", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Short 1", - MaxQuality = 1, ItemType = (ItemType)10, - }, - ["Hair6"] = new SharedItemData - { - ItemName = "Hair6", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Long 1", - MaxQuality = 1, ItemType = (ItemType)10, - }, - ["Hair7"] = new SharedItemData - { - ItemName = "Hair7", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Ponytail 4", - MaxQuality = 1, ItemType = (ItemType)10, - }, - ["Hair8"] = new SharedItemData - { - ItemName = "Hair8", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Short 2", - MaxQuality = 1, ItemType = (ItemType)10, - }, - ["Hair9"] = new SharedItemData - { - ItemName = "Hair9", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Side Swept 1", - MaxQuality = 1, ItemType = (ItemType)10, - }, - ["HairNone"] = new SharedItemData - { - ItemName = "HairNone", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "No hair", - MaxQuality = 1, ItemType = (ItemType)10, - }, - ["Hammer"] = new SharedItemData - { - ItemName = "Hammer", IsTeleportable = true, UsesDurability = true, MaxDurability = 100, - DurabilityPerLevel = 100, MaxStack = 1, DisplayName = "Hammer", - MaxQuality = 3, ItemType = (ItemType)19, - }, - ["HardAntler"] = new SharedItemData - { - ItemName = "HardAntler", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Hard antler", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["hatchling_spit_cold"] = new SharedItemData - { - ItemName = "hatchling_spit_cold", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "cold ball", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["HealthUpgrade_Bonemass"] = new SharedItemData - { - ItemName = "HealthUpgrade_Bonemass", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Bonemass heart", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["HealthUpgrade_GDKing"] = new SharedItemData - { - ItemName = "HealthUpgrade_GDKing", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Elder heart", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["HelmetBronze"] = new SharedItemData - { - ItemName = "HelmetBronze", IsTeleportable = true, UsesDurability = true, MaxDurability = 1000, - DurabilityPerLevel = 200, MaxStack = 1, DisplayName = "Bronze helmet", - MaxQuality = 4, ItemType = (ItemType)6, - }, - ["HelmetDrake"] = new SharedItemData - { - ItemName = "HelmetDrake", IsTeleportable = true, UsesDurability = true, MaxDurability = 1000, - DurabilityPerLevel = 200, MaxStack = 1, DisplayName = "Drake helmet", - MaxQuality = 4, ItemType = (ItemType)6, - }, - ["HelmetDverger"] = new SharedItemData - { - ItemName = "HelmetDverger", IsTeleportable = true, UsesDurability = false, MaxDurability = 1000, - DurabilityPerLevel = 100, MaxStack = 1, DisplayName = "Dverger circlet", - MaxQuality = 1, ItemType = (ItemType)6, - }, - ["HelmetFenring"] = new SharedItemData - { - ItemName = "HelmetFenring", IsTeleportable = true, UsesDurability = true, MaxDurability = 1000, - DurabilityPerLevel = 200, MaxStack = 1, DisplayName = "Fenris hood", - MaxQuality = 4, ItemType = (ItemType)6, - }, - ["HelmetIron"] = new SharedItemData - { - ItemName = "HelmetIron", IsTeleportable = true, UsesDurability = true, MaxDurability = 1000, - DurabilityPerLevel = 200, MaxStack = 1, DisplayName = "Iron helmet", - MaxQuality = 4, ItemType = (ItemType)6, - }, - ["HelmetLeather"] = new SharedItemData - { - ItemName = "HelmetLeather", IsTeleportable = true, UsesDurability = true, MaxDurability = 400, - DurabilityPerLevel = 100, MaxStack = 1, DisplayName = "Leather helmet", - MaxQuality = 4, ItemType = (ItemType)6, - }, - ["HelmetOdin"] = new SharedItemData - { - ItemName = "HelmetOdin", IsTeleportable = true, UsesDurability = true, MaxDurability = 300, - DurabilityPerLevel = 100, MaxStack = 1, DisplayName = "Hood of Odin", - MaxQuality = 4, ItemType = (ItemType)6, - }, - ["HelmetPadded"] = new SharedItemData - { - ItemName = "HelmetPadded", IsTeleportable = true, UsesDurability = true, MaxDurability = 1000, - DurabilityPerLevel = 200, MaxStack = 1, DisplayName = "Padded helmet", - MaxQuality = 4, ItemType = (ItemType)6, - }, - ["HelmetRoot"] = new SharedItemData - { - ItemName = "HelmetRoot", IsTeleportable = true, UsesDurability = true, MaxDurability = 800, - DurabilityPerLevel = 100, MaxStack = 1, DisplayName = "Root mask", - MaxQuality = 4, ItemType = (ItemType)6, - }, - ["HelmetTrollLeather"] = new SharedItemData - { - ItemName = "HelmetTrollLeather", IsTeleportable = true, UsesDurability = true, MaxDurability = 500, - DurabilityPerLevel = 200, MaxStack = 1, DisplayName = "Troll leather helmet", - MaxQuality = 4, ItemType = (ItemType)6, - }, - ["HelmetYule"] = new SharedItemData - { - ItemName = "HelmetYule", IsTeleportable = true, UsesDurability = false, MaxDurability = 1000, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Yule hat", - MaxQuality = 1, ItemType = (ItemType)6, - }, - ["Hoe"] = new SharedItemData - { - ItemName = "Hoe", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 200, MaxStack = 1, DisplayName = "Hoe", - MaxQuality = 3, ItemType = (ItemType)19, - }, - ["Honey"] = new SharedItemData - { - ItemName = "Honey", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Honey", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["imp_fireball_attack"] = new SharedItemData - { - ItemName = "imp_fireball_attack", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "fireballattack", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Iron"] = new SharedItemData - { - ItemName = "Iron", IsTeleportable = false, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 30, DisplayName = "Iron", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["IronNails"] = new SharedItemData - { - ItemName = "IronNails", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 100, DisplayName = "Iron nails", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["IronOre"] = new SharedItemData - { - ItemName = "IronOre", IsTeleportable = false, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 30, DisplayName = "Iron ore", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["IronScrap"] = new SharedItemData - { - ItemName = "IronScrap", IsTeleportable = false, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 30, DisplayName = "Scrap iron", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["JuteRed"] = new SharedItemData - { - ItemName = "JuteRed", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Red jute", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["KnifeBlackMetal"] = new SharedItemData - { - ItemName = "KnifeBlackMetal", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Blackmetal knife", - MaxQuality = 4, ItemType = (ItemType)3, - }, - ["KnifeButcher"] = new SharedItemData - { - ItemName = "KnifeButcher", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Butcher knife", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["KnifeChitin"] = new SharedItemData - { - ItemName = "KnifeChitin", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Abyssal razor", - MaxQuality = 4, ItemType = (ItemType)3, - }, - ["KnifeCopper"] = new SharedItemData - { - ItemName = "KnifeCopper", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Copper knife", - MaxQuality = 4, ItemType = (ItemType)3, - }, - ["KnifeFlint"] = new SharedItemData - { - ItemName = "KnifeFlint", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Flint knife", - MaxQuality = 4, ItemType = (ItemType)3, - }, - ["KnifeSilver"] = new SharedItemData - { - ItemName = "KnifeSilver", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Silver knife", - MaxQuality = 4, ItemType = (ItemType)3, - }, - ["LeatherScraps"] = new SharedItemData - { - ItemName = "LeatherScraps", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Leather scraps", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["Leech_BiteAttack"] = new SharedItemData - { - ItemName = "Leech_BiteAttack", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "jaws", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["LinenThread"] = new SharedItemData - { - ItemName = "LinenThread", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Linen thread", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["LoxMeat"] = new SharedItemData - { - ItemName = "LoxMeat", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Lox meat", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["LoxPelt"] = new SharedItemData - { - ItemName = "LoxPelt", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Lox pelt", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["LoxPie"] = new SharedItemData - { - ItemName = "LoxPie", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 10, DisplayName = "Lox meat pie", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["LoxPieUncooked"] = new SharedItemData - { - ItemName = "LoxPieUncooked", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 10, DisplayName = "Unbaked lox pie", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["lox_bite"] = new SharedItemData - { - ItemName = "lox_bite", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "lox bite", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["lox_stomp"] = new SharedItemData - { - ItemName = "lox_stomp", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "slap", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["MaceBronze"] = new SharedItemData - { - ItemName = "MaceBronze", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Bronze mace", - MaxQuality = 4, ItemType = (ItemType)3, - }, - ["MaceIron"] = new SharedItemData - { - ItemName = "MaceIron", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Iron mace", - MaxQuality = 4, ItemType = (ItemType)3, - }, - ["MaceNeedle"] = new SharedItemData - { - ItemName = "MaceNeedle", IsTeleportable = true, UsesDurability = true, MaxDurability = 150, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Porcupine", - MaxQuality = 4, ItemType = (ItemType)3, - }, - ["MaceSilver"] = new SharedItemData - { - ItemName = "MaceSilver", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Frostner", - MaxQuality = 4, ItemType = (ItemType)3, - }, - ["MeadBaseFrostResist"] = new SharedItemData - { - ItemName = "MeadBaseFrostResist", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Mead base: Frost resistance", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["MeadBaseHealthMedium"] = new SharedItemData - { - ItemName = "MeadBaseHealthMedium", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Mead base: Medium healing", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["MeadBaseHealthMinor"] = new SharedItemData - { - ItemName = "MeadBaseHealthMinor", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Mead base: Minor healing", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["MeadBasePoisonResist"] = new SharedItemData - { - ItemName = "MeadBasePoisonResist", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Mead base: Poison resistance", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["MeadBaseStaminaMedium"] = new SharedItemData - { - ItemName = "MeadBaseStaminaMedium", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Mead base: Medium stamina", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["MeadBaseStaminaMinor"] = new SharedItemData - { - ItemName = "MeadBaseStaminaMinor", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Mead base: Minor stamina", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["MeadBaseTasty"] = new SharedItemData - { - ItemName = "MeadBaseTasty", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Mead base: Tasty", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["MeadFrostResist"] = new SharedItemData - { - ItemName = "MeadFrostResist", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 10, DisplayName = "Frost resistance mead", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["MeadHealthMedium"] = new SharedItemData - { - ItemName = "MeadHealthMedium", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 10, DisplayName = "Medium healing mead", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["MeadHealthMinor"] = new SharedItemData - { - ItemName = "MeadHealthMinor", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 10, DisplayName = "Minor healing mead", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["MeadPoisonResist"] = new SharedItemData - { - ItemName = "MeadPoisonResist", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 10, DisplayName = "Poison resistance mead", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["MeadStaminaMedium"] = new SharedItemData - { - ItemName = "MeadStaminaMedium", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 10, DisplayName = "Medium stamina mead", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["MeadStaminaMinor"] = new SharedItemData - { - ItemName = "MeadStaminaMinor", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 10, DisplayName = "Minor stamina mead", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["MeadTasty"] = new SharedItemData - { - ItemName = "MeadTasty", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 10, DisplayName = "Tasty mead", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["MinceMeatSauce"] = new SharedItemData - { - ItemName = "MinceMeatSauce", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 10, DisplayName = "Minced Meat Sauce", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["Mushroom"] = new SharedItemData - { - ItemName = "Mushroom", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Mushroom", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["MushroomBlue"] = new SharedItemData - { - ItemName = "MushroomBlue", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Blue mushroom", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["MushroomYellow"] = new SharedItemData - { - ItemName = "MushroomYellow", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Yellow mushroom", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["NeckTail"] = new SharedItemData - { - ItemName = "NeckTail", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Neck tail", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["NeckTailGrilled"] = new SharedItemData - { - ItemName = "NeckTailGrilled", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Grilled Neck tail", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["Neck_BiteAttack"] = new SharedItemData - { - ItemName = "Neck_BiteAttack", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "jaws", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Needle"] = new SharedItemData - { - ItemName = "Needle", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Needle", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["Obsidian"] = new SharedItemData - { - ItemName = "Obsidian", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Obsidian", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["Onion"] = new SharedItemData - { - ItemName = "Onion", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Onion", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["OnionSeeds"] = new SharedItemData - { - ItemName = "OnionSeeds", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 100, DisplayName = "Onion seeds", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["OnionSoup"] = new SharedItemData - { - ItemName = "OnionSoup", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 10, DisplayName = "Onion soup", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["Ooze"] = new SharedItemData - { - ItemName = "Ooze", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Ooze", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["PickaxeAntler"] = new SharedItemData - { - ItemName = "PickaxeAntler", IsTeleportable = true, UsesDurability = true, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Antler pickaxe", - MaxQuality = 1, ItemType = (ItemType)14, - }, - ["PickaxeBronze"] = new SharedItemData - { - ItemName = "PickaxeBronze", IsTeleportable = true, UsesDurability = true, MaxDurability = 120, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Bronze pickaxe", - MaxQuality = 4, ItemType = (ItemType)14, - }, - ["PickaxeIron"] = new SharedItemData - { - ItemName = "PickaxeIron", IsTeleportable = true, UsesDurability = true, MaxDurability = 150, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Iron pickaxe", - MaxQuality = 4, ItemType = (ItemType)14, - }, - ["PickaxeStone"] = new SharedItemData - { - ItemName = "PickaxeStone", IsTeleportable = true, UsesDurability = true, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Stone pickaxe", - MaxQuality = 1, ItemType = (ItemType)14, - }, - ["PineCone"] = new SharedItemData - { - ItemName = "PineCone", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 100, DisplayName = "Pine cone", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["PlayerUnarmed"] = new SharedItemData - { - ItemName = "PlayerUnarmed", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Unarmed", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Pukeberries"] = new SharedItemData - { - ItemName = "Pukeberries", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Bukeperries", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["QueenBee"] = new SharedItemData - { - ItemName = "QueenBee", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Queen bee", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["QueensJam"] = new SharedItemData - { - ItemName = "QueensJam", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 10, DisplayName = "Queens jam", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["Raspberry"] = new SharedItemData - { - ItemName = "Raspberry", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Raspberries", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["RawMeat"] = new SharedItemData - { - ItemName = "RawMeat", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Boar meat", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["Resin"] = new SharedItemData - { - ItemName = "Resin", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Resin", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["Root"] = new SharedItemData - { - ItemName = "Root", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Root", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["RottenMeat"] = new SharedItemData - { - ItemName = "RottenMeat", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Rotten meat", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["RoundLog"] = new SharedItemData - { - ItemName = "RoundLog", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Core wood", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["Ruby"] = new SharedItemData - { - ItemName = "Ruby", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Ruby", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["SaddleLox"] = new SharedItemData - { - ItemName = "SaddleLox", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Lox saddle", - MaxQuality = 1, ItemType = (ItemType)16, - }, - ["Sausages"] = new SharedItemData - { - ItemName = "Sausages", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Sausages", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["SerpentMeat"] = new SharedItemData - { - ItemName = "SerpentMeat", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Serpent meat", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["SerpentMeatCooked"] = new SharedItemData - { - ItemName = "SerpentMeatCooked", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Cooked serpent meat", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["SerpentScale"] = new SharedItemData - { - ItemName = "SerpentScale", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Serpent scale", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["SerpentStew"] = new SharedItemData - { - ItemName = "SerpentStew", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 10, DisplayName = "Serpent stew", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["Serpent_attack"] = new SharedItemData - { - ItemName = "Serpent_attack", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Serpent bite", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Serpent_taunt"] = new SharedItemData - { - ItemName = "Serpent_taunt", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Serpent Taunt", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["SharpeningStone"] = new SharedItemData - { - ItemName = "SharpeningStone", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Sharpening stone", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["ShieldBanded"] = new SharedItemData - { - ItemName = "ShieldBanded", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Banded shield", - MaxQuality = 3, ItemType = (ItemType)5, - }, - ["ShieldBlackmetal"] = new SharedItemData - { - ItemName = "ShieldBlackmetal", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Black metal shield", - MaxQuality = 3, ItemType = (ItemType)5, - }, - ["ShieldBlackmetalTower"] = new SharedItemData - { - ItemName = "ShieldBlackmetalTower", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Black metal tower shield", - MaxQuality = 3, ItemType = (ItemType)5, - }, - ["ShieldBoneTower"] = new SharedItemData - { - ItemName = "ShieldBoneTower", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Bone tower shield", - MaxQuality = 3, ItemType = (ItemType)5, - }, - ["ShieldBronzeBuckler"] = new SharedItemData - { - ItemName = "ShieldBronzeBuckler", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Bronze buckler", - MaxQuality = 3, ItemType = (ItemType)5, - }, - ["ShieldIronBuckler"] = new SharedItemData - { - ItemName = "ShieldIronBuckler", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Iron buckler", - MaxQuality = 3, ItemType = (ItemType)5, - }, - ["ShieldIronSquare"] = new SharedItemData - { - ItemName = "ShieldIronSquare", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Iron shield", - MaxQuality = 3, ItemType = (ItemType)5, - }, - ["ShieldIronTower"] = new SharedItemData - { - ItemName = "ShieldIronTower", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Iron tower shield", - MaxQuality = 3, ItemType = (ItemType)5, - }, - ["ShieldKnight"] = new SharedItemData - { - ItemName = "ShieldKnight", IsTeleportable = true, UsesDurability = true, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Knight shield", - MaxQuality = 1, ItemType = (ItemType)5, - }, - ["ShieldSerpentscale"] = new SharedItemData - { - ItemName = "ShieldSerpentscale", IsTeleportable = true, UsesDurability = true, MaxDurability = 250, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Serpent scale shield", - MaxQuality = 3, ItemType = (ItemType)5, - }, - ["ShieldSilver"] = new SharedItemData - { - ItemName = "ShieldSilver", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Silver shield", - MaxQuality = 3, ItemType = (ItemType)5, - }, - ["ShieldWood"] = new SharedItemData - { - ItemName = "ShieldWood", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Wood shield", - MaxQuality = 3, ItemType = (ItemType)5, - }, - ["ShieldWoodTower"] = new SharedItemData - { - ItemName = "ShieldWoodTower", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Wood tower shield", - MaxQuality = 3, ItemType = (ItemType)5, - }, - ["ShocklateSmoothie"] = new SharedItemData - { - ItemName = "ShocklateSmoothie", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 10, DisplayName = "Muckshake", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["Silver"] = new SharedItemData - { - ItemName = "Silver", IsTeleportable = false, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 30, DisplayName = "Silver", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["SilverNecklace"] = new SharedItemData - { - ItemName = "SilverNecklace", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Silver Necklace", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["SilverOre"] = new SharedItemData - { - ItemName = "SilverOre", IsTeleportable = false, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 30, DisplayName = "Silver ore", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["skeleton_bow"] = new SharedItemData - { - ItemName = "skeleton_bow", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Bow", - MaxQuality = 1, ItemType = (ItemType)4, - }, - ["skeleton_mace"] = new SharedItemData - { - ItemName = "skeleton_mace", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Dragur axe", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["skeleton_sword"] = new SharedItemData - { - ItemName = "skeleton_sword", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Dragur axe", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["SledgeCheat"] = new SharedItemData - { - ItemName = "SledgeCheat", IsTeleportable = true, UsesDurability = true, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Cheat sledge", - MaxQuality = 4, ItemType = (ItemType)14, - }, - ["SledgeIron"] = new SharedItemData - { - ItemName = "SledgeIron", IsTeleportable = true, UsesDurability = true, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Iron sledge", - MaxQuality = 4, ItemType = (ItemType)14, - }, - ["SledgeStagbreaker"] = new SharedItemData - { - ItemName = "SledgeStagbreaker", IsTeleportable = true, UsesDurability = true, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Stagbreaker", - MaxQuality = 4, ItemType = (ItemType)14, - }, - ["SpearBronze"] = new SharedItemData - { - ItemName = "SpearBronze", IsTeleportable = true, UsesDurability = true, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Bronze spear", - MaxQuality = 4, ItemType = (ItemType)3, - }, - ["SpearChitin"] = new SharedItemData - { - ItemName = "SpearChitin", IsTeleportable = true, UsesDurability = true, MaxDurability = 50, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Abyssal harpoon", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["SpearElderbark"] = new SharedItemData - { - ItemName = "SpearElderbark", IsTeleportable = true, UsesDurability = true, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Ancient bark spear", - MaxQuality = 4, ItemType = (ItemType)3, - }, - ["SpearFlint"] = new SharedItemData - { - ItemName = "SpearFlint", IsTeleportable = true, UsesDurability = true, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Flint spear", - MaxQuality = 4, ItemType = (ItemType)3, - }, - ["SpearWolfFang"] = new SharedItemData - { - ItemName = "SpearWolfFang", IsTeleportable = true, UsesDurability = true, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Fang spear", - MaxQuality = 4, ItemType = (ItemType)3, - }, - ["StaminaUpgrade_Greydwarf"] = new SharedItemData - { - ItemName = "StaminaUpgrade_Greydwarf", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Stamina Greydwarf", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["StaminaUpgrade_Troll"] = new SharedItemData - { - ItemName = "StaminaUpgrade_Troll", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Stamina Troll", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["StaminaUpgrade_Wraith"] = new SharedItemData - { - ItemName = "StaminaUpgrade_Wraith", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Stamina Wraith", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["Stone"] = new SharedItemData - { - ItemName = "Stone", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Stone", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["stonegolem_attack1_spike"] = new SharedItemData - { - ItemName = "stonegolem_attack1_spike", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Spike attack", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["stonegolem_attack2_left_groundslam"] = new SharedItemData - { - ItemName = "stonegolem_attack2_left_groundslam", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "One hand ground slam", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["stonegolem_attack3_spikesweep"] = new SharedItemData - { - ItemName = "stonegolem_attack3_spikesweep", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Spike sweep", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["stonegolem_attack_doublesmash"] = new SharedItemData - { - ItemName = "stonegolem_attack_doublesmash", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "slap", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["stonegolem_attack_sonicboom_NOTUSED"] = new SharedItemData - { - ItemName = "stonegolem_attack_sonicboom_NOTUSED", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "slap", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["StoneGolem_clubs"] = new SharedItemData - { - ItemName = "StoneGolem_clubs", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "", - MaxQuality = 1, ItemType = (ItemType)7, - }, - ["StoneGolem_hat"] = new SharedItemData - { - ItemName = "StoneGolem_hat", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "", - MaxQuality = 1, ItemType = (ItemType)6, - }, - ["StoneGolem_spikes"] = new SharedItemData - { - ItemName = "StoneGolem_spikes", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "", - MaxQuality = 1, ItemType = (ItemType)7, - }, - ["SurtlingCore"] = new SharedItemData - { - ItemName = "SurtlingCore", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 10, DisplayName = "Surtling core", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["SwordBlackmetal"] = new SharedItemData - { - ItemName = "SwordBlackmetal", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Blackmetal sword", - MaxQuality = 4, ItemType = (ItemType)3, - }, - ["SwordBronze"] = new SharedItemData - { - ItemName = "SwordBronze", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Bronze sword", - MaxQuality = 4, ItemType = (ItemType)3, - }, - ["SwordCheat"] = new SharedItemData - { - ItemName = "SwordCheat", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Cheat sword", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["SwordIron"] = new SharedItemData - { - ItemName = "SwordIron", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Iron sword", - MaxQuality = 4, ItemType = (ItemType)3, - }, - ["SwordIronFire"] = new SharedItemData - { - ItemName = "SwordIronFire", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Dyrnwyn", - MaxQuality = 4, ItemType = (ItemType)3, - }, - ["SwordSilver"] = new SharedItemData - { - ItemName = "SwordSilver", IsTeleportable = true, UsesDurability = true, MaxDurability = 200, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Silver sword", - MaxQuality = 4, ItemType = (ItemType)3, - }, - ["Tankard"] = new SharedItemData - { - ItemName = "Tankard", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Tankard", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["TankardAnniversary"] = new SharedItemData - { - ItemName = "TankardAnniversary", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Anniversary Tankard", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["TankardOdin"] = new SharedItemData - { - ItemName = "TankardOdin", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Mead horn of Odin", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Tar"] = new SharedItemData - { - ItemName = "Tar", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Tar", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["tentaroot_attack"] = new SharedItemData - { - ItemName = "tentaroot_attack", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Dragur axe", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Thistle"] = new SharedItemData - { - ItemName = "Thistle", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Thistle", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["Thunderstone"] = new SharedItemData - { - ItemName = "Thunderstone", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Thunder stone", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["Tin"] = new SharedItemData - { - ItemName = "Tin", IsTeleportable = false, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 30, DisplayName = "Tin", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["TinOre"] = new SharedItemData - { - ItemName = "TinOre", IsTeleportable = false, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 30, DisplayName = "Tin ore", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["Torch"] = new SharedItemData - { - ItemName = "Torch", IsTeleportable = true, UsesDurability = true, MaxDurability = 20, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Torch", - MaxQuality = 1, ItemType = (ItemType)15, - }, - ["TrollHide"] = new SharedItemData - { - ItemName = "TrollHide", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Troll hide", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["troll_groundslam"] = new SharedItemData - { - ItemName = "troll_groundslam", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "slap", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["troll_log_swing_h"] = new SharedItemData - { - ItemName = "troll_log_swing_h", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "LOG", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["troll_log_swing_v"] = new SharedItemData - { - ItemName = "troll_log_swing_v", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "LOG", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["troll_punch"] = new SharedItemData - { - ItemName = "troll_punch", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "slap", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["troll_throw"] = new SharedItemData - { - ItemName = "troll_throw", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "fireballattack", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["TrophyAbomination"] = new SharedItemData - { - ItemName = "TrophyAbomination", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Abomination trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyBlob"] = new SharedItemData - { - ItemName = "TrophyBlob", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Blob trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyBoar"] = new SharedItemData - { - ItemName = "TrophyBoar", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Boar trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyBonemass"] = new SharedItemData - { - ItemName = "TrophyBonemass", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Bonemass trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyCultist"] = new SharedItemData - { - ItemName = "TrophyCultist", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Cultist trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyDeathsquito"] = new SharedItemData - { - ItemName = "TrophyDeathsquito", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Deathsquito trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyDeer"] = new SharedItemData - { - ItemName = "TrophyDeer", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Deer trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyDragonQueen"] = new SharedItemData - { - ItemName = "TrophyDragonQueen", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Moder trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyDraugr"] = new SharedItemData - { - ItemName = "TrophyDraugr", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Draugr trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyDraugrElite"] = new SharedItemData - { - ItemName = "TrophyDraugrElite", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Draugr Elite trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyDraugrFem"] = new SharedItemData - { - ItemName = "TrophyDraugrFem", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Draugr trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyEikthyr"] = new SharedItemData - { - ItemName = "TrophyEikthyr", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Eikthyr trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyFenring"] = new SharedItemData - { - ItemName = "TrophyFenring", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Fenring trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyForestTroll"] = new SharedItemData - { - ItemName = "TrophyForestTroll", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Troll trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyFrostTroll"] = new SharedItemData - { - ItemName = "TrophyFrostTroll", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Troll trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyGoblin"] = new SharedItemData - { - ItemName = "TrophyGoblin", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Fuling trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyGoblinBrute"] = new SharedItemData - { - ItemName = "TrophyGoblinBrute", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Fuling berserker trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyGoblinKing"] = new SharedItemData - { - ItemName = "TrophyGoblinKing", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Yagluth trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyGoblinShaman"] = new SharedItemData - { - ItemName = "TrophyGoblinShaman", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Fuling shaman trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyGreydwarf"] = new SharedItemData - { - ItemName = "TrophyGreydwarf", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Greydwarf trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyGreydwarfBrute"] = new SharedItemData - { - ItemName = "TrophyGreydwarfBrute", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Greydwarf Brute trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyGreydwarfShaman"] = new SharedItemData - { - ItemName = "TrophyGreydwarfShaman", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Greydwarf Shaman trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyGrowth"] = new SharedItemData - { - ItemName = "TrophyGrowth", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Growth trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyHatchling"] = new SharedItemData - { - ItemName = "TrophyHatchling", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Drake trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyLeech"] = new SharedItemData - { - ItemName = "TrophyLeech", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Leech trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyLox"] = new SharedItemData - { - ItemName = "TrophyLox", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Lox trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyNeck"] = new SharedItemData - { - ItemName = "TrophyNeck", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Neck trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophySerpent"] = new SharedItemData - { - ItemName = "TrophySerpent", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Serpent trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophySGolem"] = new SharedItemData - { - ItemName = "TrophySGolem", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Stone Golem trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophySkeleton"] = new SharedItemData - { - ItemName = "TrophySkeleton", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Skeleton trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophySkeletonPoison"] = new SharedItemData - { - ItemName = "TrophySkeletonPoison", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Rancid remains trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophySurtling"] = new SharedItemData - { - ItemName = "TrophySurtling", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Surtling trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyTheElder"] = new SharedItemData - { - ItemName = "TrophyTheElder", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "The Elder trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyUlv"] = new SharedItemData - { - ItemName = "TrophyUlv", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Ulv trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyWolf"] = new SharedItemData - { - ItemName = "TrophyWolf", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Wolf trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["TrophyWraith"] = new SharedItemData - { - ItemName = "TrophyWraith", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Wraith trophy", - MaxQuality = 1, ItemType = (ItemType)13, - }, - ["Turnip"] = new SharedItemData - { - ItemName = "Turnip", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Turnip", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["TurnipSeeds"] = new SharedItemData - { - ItemName = "TurnipSeeds", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 100, DisplayName = "Turnip seeds", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["TurnipStew"] = new SharedItemData - { - ItemName = "TurnipStew", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 10, DisplayName = "Turnip stew", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["Ulv_attack1_bite"] = new SharedItemData - { - ItemName = "Ulv_attack1_bite", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Bite Attack", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Ulv_attack2_slash"] = new SharedItemData - { - ItemName = "Ulv_attack2_slash", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Slash Attack", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["VegvisirShard_Bonemass"] = new SharedItemData - { - ItemName = "VegvisirShard_Bonemass", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 30, DisplayName = "Yagluth thing", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["Wishbone"] = new SharedItemData - { - ItemName = "Wishbone", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Wishbone", - MaxQuality = 1, ItemType = (ItemType)18, - }, - ["WitheredBone"] = new SharedItemData - { - ItemName = "WitheredBone", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 30, DisplayName = "Withered bone", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["WolfClaw"] = new SharedItemData - { - ItemName = "WolfClaw", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Fenris claw", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["WolfFang"] = new SharedItemData - { - ItemName = "WolfFang", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Wolf fang", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["WolfHairBundle"] = new SharedItemData - { - ItemName = "WolfHairBundle", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Fenris hair", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["WolfJerky"] = new SharedItemData - { - ItemName = "WolfJerky", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Wolf jerky", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["WolfMeat"] = new SharedItemData - { - ItemName = "WolfMeat", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Wolf meat", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["WolfMeatSkewer"] = new SharedItemData - { - ItemName = "WolfMeatSkewer", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 20, DisplayName = "Wolf skewer", - MaxQuality = 1, ItemType = (ItemType)2, - }, - ["WolfPelt"] = new SharedItemData - { - ItemName = "WolfPelt", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Wolf pelt", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["Wolf_Attack1"] = new SharedItemData - { - ItemName = "Wolf_Attack1", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "WolfAttack1", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Wolf_Attack2"] = new SharedItemData - { - ItemName = "Wolf_Attack2", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "WolfAttack2", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Wolf_Attack3"] = new SharedItemData - { - ItemName = "Wolf_Attack3", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "WolfAttack3", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["Wood"] = new SharedItemData - { - ItemName = "Wood", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Wood", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["wraith_melee"] = new SharedItemData - { - ItemName = "wraith_melee", IsTeleportable = true, UsesDurability = true, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 1, DisplayName = "Wraith melee", - MaxQuality = 1, ItemType = (ItemType)3, - }, - ["YagluthDrop"] = new SharedItemData - { - ItemName = "YagluthDrop", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 30, DisplayName = "Yagluth thing", - MaxQuality = 1, ItemType = (ItemType)1, - }, - ["YmirRemains"] = new SharedItemData - { - ItemName = "YmirRemains", IsTeleportable = true, UsesDurability = false, MaxDurability = 100, - DurabilityPerLevel = 50, MaxStack = 50, DisplayName = "Ymir flesh", - MaxQuality = 1, ItemType = (ItemType)1, - }, - }; + private static readonly Dictionary ItemData = ReadItemDataFromCsvFile("SharedItemData.csv"); - public static SharedItemData TryFindSharedData(string itemName) => + public static SharedItemData TryFindSharedData(string itemName) => ItemData.TryGetValue(itemName, out SharedItemData sharedData) ? sharedData : null; public static IEnumerable AllItems => ItemData.Values; + + private static Dictionary ReadItemDataFromCsvFile(string fileName) + { + if (!File.Exists(fileName)) + { + fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fileName); + } + try + { + using var reader = new StreamReader(fileName); + using var csv = new CsvHelper.CsvReader(reader, CultureInfo.InvariantCulture); + var items = csv.GetRecords().ToDictionary(item => item.ItemName); + Debug.WriteLine($"Loaded {items.Count} items to shared item data"); + return items; + } + catch (Exception ex) + { + Debug.WriteLine($"Failed to load shared item data. Details: {ex.Message}"); + return new Dictionary(); + } + } } } diff --git a/Loki/SharedItemData.csv b/Loki/SharedItemData.csv new file mode 100644 index 0000000..6ac7d45 --- /dev/null +++ b/Loki/SharedItemData.csv @@ -0,0 +1,791 @@ +ItemName,IsTeleportable,UsesDurability,MaxDurability,DurabilityPerLevel,MaxStack,DisplayName,MaxQuality,ItemType +Acorn,True,False,100,50,100,Acorns,1,1 +AmberPearl,True,False,100,50,50,Amber Pearl,1,1 +Amber,True,False,100,50,20,Amber,1,1 +AncientSeed,True,False,100,50,50,Ancient Seed,1,16 +ArmorAshlandsMediumChest,True,True,1000,200,1,Breastplate of Ask,4,7 +ArmorAshlandsMediumlegs,True,True,1000,200,1,Trousers of Ask,4,11 +ArmorBerserkerChest,True,True,1000,200,1,Patterns of the Bear,4,7 +ArmorBerserkerLegs,True,True,1000,200,1,Loincloth of the Bear,4,11 +ArmorBerserkerUndeadChest,True,True,1000,200,1,Vilebone Cage,4,7 +ArmorBerserkerUndeadLegs,True,True,1000,200,1,Vilebone Drapes,4,11 +ArmorBronzeChest,True,True,1000,200,1,Bronze Plate Tunic,4,7 +ArmorBronzeLegs,True,True,1000,200,1,Bronze Plate Leggings,4,11 +ArmorCarapaceChest,True,True,1200,200,1,Carapace Breastplate,4,7 +ArmorCarapaceLegs,True,True,1200,200,1,Carapace Greaves,4,11 +ArmorDress1,True,True,1000,200,1,Plain Brown Dress,4,7 +ArmorDress10,True,True,1000,200,1,Simple Undyed Dress,4,7 +ArmorDress2,True,True,1000,200,1,Brown Dress with Shawl,4,7 +ArmorDress3,True,True,1000,200,1,Brown Dress with Beads,4,7 +ArmorDress4,True,True,1000,200,1,Plain Blue Dress,4,7 +ArmorDress5,True,True,1000,200,1,Blue Dress with Shawl,4,7 +ArmorDress6,True,True,1000,200,1,Blue Dress with Beads,4,7 +ArmorDress7,True,True,1000,200,1,Plain Yellow Dress,4,7 +ArmorDress8,True,True,1000,200,1,Yellow Dress with Shawl,4,7 +ArmorDress9,True,True,1000,200,1,Yellow Dress with Beads,4,7 +ArmorFenringChest,True,True,1000,200,1,Fenris Coat,4,7 +ArmorFenringLegs,True,True,1000,200,1,Fenris Leggings,4,11 +ArmorFlametalChest,True,True,1000,200,1,Flametal Breastplate,4,7 +ArmorFlametalLegs,True,True,1000,200,1,Flametal Greaves,4,11 +ArmorHarvester1,True,True,1000,200,1,Harvest Tunic,4,7 +ArmorHarvester2,True,True,1000,200,1,Harvest Dress,4,7 +ArmorIronChest,True,True,1000,200,1,Iron Scale Mail,4,7 +ArmorIronLegs,True,True,1000,200,1,Iron Greaves,4,11 +ArmorLeatherChest,True,True,400,100,1,Leather Tunic,4,7 +ArmorLeatherLegs,True,True,400,100,1,Leather Trousers,4,11 +ArmorMageChest,True,True,1000,200,1,Eitr-weave Robe,4,7 +ArmorMageChest_Ashlands,True,True,1000,200,1,Robes of Embla,4,7 +ArmorMageLegs,True,True,1000,200,1,Eitr-weave Trousers,4,11 +ArmorMageLegs_Ashlands,True,True,1000,200,1,Trousers of Embla,4,11 +ArmorPaddedCuirass,True,True,1000,200,1,Padded Cuirass,4,7 +ArmorPaddedGreaves,True,True,1000,200,1,Padded Greaves,4,11 +ArmorRagsChest,True,True,200,50,1,Rag Tunic,2,7 +ArmorRagsLegs,True,True,200,50,1,Rag Trousers,2,11 +ArmorRootChest,True,True,800,100,1,Root Harnesk,4,7 +ArmorRootLegs,True,True,800,100,1,Root Leggings,4,11 +ArmorTrollLeatherChest,True,True,500,200,1,Troll Leather Tunic,4,7 +ArmorTrollLeatherLegs,True,True,500,200,1,Troll Leather Trousers,4,11 +ArmorTunic1,True,True,1000,200,1,Plain Blue Tunic,4,7 +ArmorTunic10,True,True,1000,200,1,Simple Undyed Tunic,4,7 +ArmorTunic2,True,True,1000,200,1,Blue Tunic with Cape,4,7 +ArmorTunic3,True,True,1000,200,1,Blue Tunic with Beads,4,7 +ArmorTunic4,True,True,1000,200,1,Plain Red Tunic,4,7 +ArmorTunic5,True,True,1000,200,1,Red Tunic with Cape,4,7 +ArmorTunic6,True,True,1000,200,1,Red Tunic with Beads,4,7 +ArmorTunic7,True,True,1000,200,1,Plain Yellow Tunic,4,7 +ArmorTunic8,True,True,1000,200,1,Yellow Tunic with Cape,4,7 +ArmorTunic9,True,True,1000,200,1,Yellow Tunic with Beads,4,7 +ArmorWolfChest,True,True,1000,200,1,Wolf Hide Chestpiece,4,7 +ArmorWolfLegs,True,True,1000,200,1,Wolf Hide Trousers,4,11 +ArrowBronze,True,False,100,50,100,Bronzehead Arrow,1,9 +ArrowCarapace,True,False,100,50,100,Carapace Arrow,1,9 +ArrowCharred,True,False,100,50,100,Charred Arrow,1,9 +ArrowFire,True,False,100,50,100,Fire Arrow,1,9 +ArrowFlint,True,False,100,50,100,Flinthead Arrow,1,9 +ArrowFrost,True,False,100,50,100,Frost Arrow,1,9 +ArrowIron,True,False,100,50,100,Ironhead Arrow,1,9 +ArrowNeedle,True,False,100,50,100,Needle Arrow,1,9 +ArrowObsidian,True,False,100,50,100,Obsidian Arrow,1,9 +ArrowPoison,True,False,100,50,100,Poison Arrow,1,9 +ArrowSilver,True,False,100,50,100,Silver Arrow,1,9 +ArrowWood,True,False,100,50,100,Wood Arrow,1,9 +AskBladder,True,False,100,50,50,Asksvin Bladder,1,1 +AskHide,True,False,100,50,50,Asksvin Hide,1,1 +AsksvinCarrionNeck,True,False,100,50,50,Asksvin Neck,1,1 +AsksvinCarrionPelvic,True,False,100,50,50,Asksvin Pelvis,1,1 +AsksvinCarrionRibcage,True,False,100,50,50,Asksvin Ribcage,1,1 +AsksvinCarrionSkull,True,False,100,50,50,Asksvin Skull,1,1 +AsksvinEgg,True,False,100,50,20,Asksvin Egg,4,16 +AsksvinMeat,True,False,100,50,20,Asksvin Tail,1,1 +AtgeirBlackmetal,True,True,175,50,1,Black Metal Atgeir,4,14 +AtgeirBronze,True,True,125,50,1,Bronze Atgeir,4,14 +AtgeirHimminAfl,True,True,175,50,1,Himminafl,4,14 +AtgeirIron,True,True,175,50,1,Iron Atgeir,4,14 +AtgeirWood,True,True,175,50,1,Wooden Atgeir,4,14 +AxeBerzerkr,True,True,175,50,1,Berserkir Axes,4,14 +AxeBerzerkrBlood,True,True,175,50,1,Bleeding Berserkir Axes,4,14 +AxeBerzerkrLightning,True,True,175,50,1,Thundering Berserkir Axes,4,14 +AxeBerzerkrNature,True,True,175,50,1,Primal Berserkir Axes,4,14 +AxeBlackMetal,True,True,175,50,1,Black Metal Axe,4,3 +AxeBronze,True,True,125,50,1,Bronze Axe,4,3 +AxeFlint,True,True,100,30,1,Flint Axe,4,3 +AxeIron,True,True,175,50,1,Iron Axe,4,3 +AxeJotunBane,True,True,175,50,1,Jotun Bane,4,3 +AxeStone,True,True,100,30,1,Stone Axe,4,3 +AxeWood,True,True,125,50,1,Wooden Axe,4,3 +BarberKit,True,False,100,50,1,Barber Kit,1,16 +Barley,True,False,100,50,100,Barley,1,1 +BarleyFlour,True,False,100,50,50,Barley Flour,1,16 +BarleyWine,True,False,100,50,10,Fire Resistance Barley Wine,1,2 +BarleyWineBase,True,False,100,50,1,Barley Wine Base: Fire Resistance,1,1 +BarrelRings,True,False,100,50,20,Barrel Hoops,1,16 +Battleaxe,True,True,200,50,1,Battleaxe,4,14 +BattleaxeBlackmetal,True,True,200,50,1,Black Metal Battleaxe,4,14 +BattleaxeCrystal,True,True,200,50,1,Crystal Battleaxe,4,14 +BattleaxeSkullSplittur,True,True,200,50,1,Skull Splittur,4,14 +BattleaxeWood,True,True,200,50,1,Wooden Battleaxe,4,14 +Beard1,True,False,100,50,1,Majestic,1,10 +Beard10,True,False,100,50,1,Top Braid,1,10 +Beard11,True,False,100,50,1,Facewarmer,1,10 +Beard12,True,False,100,50,1,Royal,1,10 +Beard13,True,False,100,50,1,Triplets,1,10 +Beard14,True,False,100,50,1,Split Braid,1,10 +Beard15,True,False,100,50,1,Mini Braid,1,10 +Beard16,True,False,100,50,1,Stonedweller,1,10 +Beard17,True,False,100,50,1,Neat,1,10 +Beard18,True,False,100,50,1,Jarl Braids,1,10 +Beard19,True,False,100,50,1,Bushy,1,10 +Beard2,True,False,100,50,1,Twin Braids,1,10 +Beard20,True,False,100,50,1,Spiky,1,10 +Beard21,True,False,100,50,1,Tidy,1,10 +Beard22,True,False,100,50,1,Mustache,1,10 +Beard23,True,False,100,50,1,Crumb Catcher,1,10 +Beard24,True,False,100,50,1,Waxed,1,10 +Beard25,True,False,100,50,1,Trimmed,1,10 +Beard26,True,False,100,50,1,Handlebar,1,10 +Beard3,True,False,100,50,1,Short,1,10 +Beard4,True,False,100,50,1,Straight,1,10 +Beard5,True,False,100,50,1,Single Braid,1,10 +Beard6,True,False,100,50,1,Loose Braid,1,10 +Beard7,True,False,100,50,1,Split Shave,1,10 +Beard8,True,False,100,50,1,Thick,1,10 +Beard9,True,False,100,50,1,Trobadour,1,10 +BeardNone,True,False,100,50,1,No Beard,1,10 +BeechSeeds,True,False,100,50,100,Beech Seeds,1,1 +Bell,True,False,100,50,9,Bell,1,16 +BellFragment,True,False,100,50,9,Bell Fragment,1,1 +BeltStrength,True,False,100,50,1,Megingjord,1,18 +Bilebag,True,False,100,50,50,Bilebag,1,1 +BirchSeeds,True,False,100,50,100,Birch Seeds,1,1 +BjornHide,True,False,100,50,50,Bear Hide,1,1 +BjornMeat,True,False,100,50,20,Bear Meat,1,1 +BjornPaw,True,False,100,50,50,Bear Paw,1,1 +BlackCore,True,False,100,50,20,Black Core,1,1 +BlackMarble,True,False,100,50,50,Black Marble,1,1 +BlackMetal,False,False,100,50,30,Black Metal,1,1 +BlackMetalScrap,False,False,100,50,30,Black Metal Scrap,1,1 +BlackSoup,True,False,100,50,10,Black Soup,1,2 +Blackwood,True,False,100,50,50,Ashwood,1,1 +BlobVial,True,False,100,50,10,Corked Vial,1,1 +Bloodbag,True,False,100,50,50,Bloodbag,1,1 +BloodPudding,True,False,100,50,10,Blood Pudding,1,2 +Blueberries,True,False,100,50,50,Blueberries,1,2 +BoarJerky,True,False,100,50,20,Boar Jerky,1,2 +BoltBlackmetal,True,False,100,50,100,Black Metal Bolt,1,9 +BoltBone,True,False,100,50,100,Bone Bolt,1,9 +BoltCarapace,True,False,100,50,100,Carapace Bolt,1,9 +BoltCharred,True,False,100,50,100,Charred Bolt,1,9 +BoltIron,True,False,100,50,100,Iron Bolt,1,9 +BombBile,True,False,100,50,50,Bile Bomb,1,3 +BombBlob_Frost,True,False,100,50,50,Blob Bomb: Frost,1,3 +BombBlob_Lava,True,False,100,50,50,Blob Bomb: Lava,1,3 +BombBlob_Poison,True,False,100,50,50,Blob Bomb: Poison,1,3 +BombBlob_PoisonElite,True,False,100,50,50,Blob Bomb: Elite Poison,1,3 +BombBlob_Tar,True,False,100,50,50,Blob Bomb: Tar,1,3 +BombLava,True,False,100,50,50,Basalt Bomb,1,3 +BombOoze,True,False,100,50,50,Ooze Bomb,1,3 +BombSiege,True,False,100,50,50,Explosive Payload,1,1 +BombSmoke,True,False,100,50,50,Smoke Bomb,1,3 +BoneFragments,True,False,100,50,50,Bone Fragments,1,1 +BoneMawSerpentMeat,True,False,100,50,50,Bonemaw Meat,1,1 +BonemawSerpentScale,True,False,100,50,50,Bonemaw Scale,1,1 +BonemawSerpentTooth,True,False,100,50,50,Bonemaw Tooth,1,1 +Bow,True,True,50,50,1,Crude Bow,4,4 +BowAshlands,True,True,100,50,1,Ashlands Bow,4,4 +BowAshlandsBlood,True,True,100,50,1,Blood Fang,4,4 +BowAshlandsRoot,True,True,100,50,1,Root Fang,4,4 +BowAshlandsStorm,True,True,100,50,1,Storm Fang,4,4 +BowDraugrFang,True,True,100,50,1,Draugr Fang,4,4 +BowFineWood,True,True,100,50,1,Finewood Bow,4,4 +BowHuntsman,True,True,100,50,1,Huntsman Bow,4,4 +BowSpineSnap,True,True,100,50,1,Spinesnap,4,4 +BreadDough,True,False,100,50,20,Bread Dough,1,1 +Bread,True,False,100,50,20,Bread,1,2 +Bronze,False,False,100,50,30,Bronze,1,1 +BronzeNails,True,False,100,50,100,Bronze Nails,1,1 +BronzeScrap,False,False,100,50,30,Scrap Bronze,1,1 +BugMeat,True,False,100,50,20,Seeker Meat,1,1 +CandleWick,True,False,100,50,50,Candle Wick,1,1 +CapeAsh,True,True,1200,50,1,Ashen Cape,4,17 +CapeAsksvin,True,True,1500,50,1,Asksvin Cloak,4,17 +CapeDeerHide,True,True,400,50,1,Deer Hide Cape,4,17 +CapeFeather,True,True,1200,50,1,Feather Cape,4,17 +CapeLinen,True,True,1500,50,1,Linen Cape,4,17 +CapeLox,True,True,1200,50,1,Lox Cape,4,17 +CapeOdin,True,True,1500,50,1,Cape of Odin,4,17 +CapeTrollHide,True,True,500,50,1,Troll Hide Cape,4,17 +CapeWolf,True,True,1000,50,1,Wolf Fur Cape,4,17 +Carapace,True,False,100,50,50,Carapace,1,1 +CarrotSeeds,True,False,100,50,100,Carrot Seeds,1,1 +CarrotSoup,True,False,100,50,10,Carrot Soup,1,2 +Carrot,True,False,100,50,50,Carrot,1,2 +Catapult_ammo,True,False,100,50,50,Grausten Payload,1,1 +CelestialFeather,True,False,100,50,50,Celestial Feather,1,1 +CeramicPlate,True,False,100,50,30,Ceramic Plate,1,1 +Chain,True,False,100,50,50,Chain,1,1 +CharcoalResin,True,False,100,50,50,Charcoal Resin,1,1 +CharredBone,True,False,100,50,50,Charred Bone,1,1 +CharredCogwheel,False,False,100,50,10,Charred Cogwheel,1,1 +Charredskull,True,False,100,50,50,Charred Skull,1,1 +chest_hildir1,False,False,100,50,1,Hildir's Brass Chest,1,16 +chest_hildir2,False,False,100,50,1,Hildir's Silver Chest,1,16 +chest_hildir3,False,False,100,50,1,Hildir's Bronze Chest,1,16 +ChickenEgg,True,False,100,50,20,Egg,1,16 +ChickenMeat,True,False,100,50,20,Chicken Meat,1,1 +Chitin,True,False,100,50,50,Chitin,1,1 +Cloudberry,True,False,100,50,50,Cloudberries,1,2 +Club,True,True,100,50,1,Club,4,3 +Coal,True,False,100,50,50,Coal,1,1 +Coins,True,False,100,50,999,Coins,1,1 +CookedAsksvinMeat,True,False,100,50,20,Cooked Asksvin Tail,1,2 +CookedBjornMeat,True,False,100,50,20,Cooked Bear Meat,1,2 +CookedBoneMawSerpentMeat,True,False,100,50,50,Cooked Bonemaw Meat,1,2 +CookedBugMeat,True,False,100,50,20,Cooked Seeker Meat,1,2 +CookedChickenMeat,True,False,100,50,20,Cooked Chicken Meat,1,2 +CookedDeerMeat,True,False,100,50,20,Cooked Deer Meat,1,2 +CookedEgg,True,False,100,50,20,Cooked Egg,1,2 +CookedHareMeat,True,False,100,50,20,Cooked Hare Meat,1,2 +CookedLoxMeat,True,False,100,50,20,Cooked Lox Meat,1,2 +CookedMeat,True,False,100,50,20,Cooked Boar Meat,1,2 +CookedVoltureMeat,True,False,100,50,20,Cooked Volture Meat,1,2 +CookedWolfMeat,True,False,100,50,20,Cooked Wolf Meat,1,2 +Copper,False,False,100,50,30,Copper,1,1 +CopperOre,False,False,100,50,30,Copper Ore,1,1 +CopperScrap,False,False,100,50,30,Copper Scrap,1,1 +CrossbowArbalest,True,True,50,50,1,Arbalest,4,4 +CrossbowRipper,True,True,50,50,1,Ripper,4,4 +CrossbowRipperBlood,True,True,50,50,1,Wound Ripper,4,4 +CrossbowRipperLightning,True,True,50,50,1,Storm Ripper,4,4 +CrossbowRipperNature,True,True,50,50,1,Root Ripper,4,4 +CryptKey,True,False,100,50,1,Swamp Key,1,16 +Crystal,True,False,100,50,50,Crystal,1,1 +Cultivator,True,True,200,200,1,Cultivator,3,19 +CuredSquirrelHamstring,True,False,100,50,50,Cured Squirrel Hamstring,1,1 +Dandelion,True,False,100,50,50,Dandelion,1,1 +DeerHide,True,False,100,50,50,Deer Hide,1,1 +DeerMeat,True,False,100,50,20,Deer Meat,1,1 +DeerStew,True,False,100,50,10,Deer Stew,1,2 +Demister,True,False,100,50,1,Wisplight,1,18 +DevKitchen,True,False,100,50,1,Mushrooms Galore á la Mistlands,1,2 +DragonEgg,False,False,100,50,1,Dragon Egg,1,16 +DragonTear,True,False,100,50,50,Dragon Tear,1,16 +DvergerArbalest,True,True,50,50,1,Arbalest,4,18 +DvergerArbalest_shoot,True,True,50,50,1,Arbalest,4,3 +DvergerArbalest_shootAshlands,True,True,50,50,1,Arbalest,4,3 +DvergrKey,True,False,100,50,1,Sealbreaker,1,16 +DvergrKeyFragment,True,False,100,50,9,Sealbreaker Fragment,1,1 +DvergrNeedle,False,False,100,50,10,Dvergr Extractor,1,1 +DyrnwynBladeFragment,True,False,100,50,1,Dyrnwyn Blade Fragment,1,1 +DyrnwynHiltFragment,True,False,100,50,1,Dyrnwyn Hilt Fragment,1,1 +DyrnwynTipFragment,True,False,100,50,1,Dyrnwyn Tip Fragment,1,1 +Ectoplasm,True,False,100,50,50,Ectoplasm,1,1 +Eitr,True,False,100,50,30,Refined Eitr,1,1 +ElderBark,True,False,100,50,50,Ancient Bark,1,1 +Entrails,True,False,100,50,50,Entrails,1,1 +Eyescream,True,False,100,50,10,Eyescream,1,2 +FaderDrop,True,False,100,50,30,Fader Relic,1,1 +FeastAshlands,True,False,100,50,1,Ashlands Gourmet Bowl,1,2 +FeastAshlands_Material,True,False,100,50,5,Ashlands Gourmet Bowl,1,1 +FeastBlackforest,True,False,100,50,1,Black Forest Buffet Platter,1,2 +FeastBlackforest_Material,True,False,100,50,5,Black Forest Buffet Platter,1,1 +Feaster,True,True,100,100,1,Serving Tray,3,19 +FeastMeadows,True,False,100,50,1,Whole Roasted Meadow Boar,1,2 +FeastMeadows_Material,True,False,100,50,5,Whole Roasted Meadow Boar,1,1 +FeastMistlands,True,False,100,50,1,Mushrooms Galore á la Mistlands,1,2 +FeastMistlands_Material,True,False,100,50,5,Mushrooms Galore á la Mistlands,1,1 +FeastMountains,True,False,100,50,1,Hearty Mountain Logger's Stew,1,2 +FeastMountains_Material,True,False,100,50,5,Hearty Mountain Logger's Stew,1,1 +FeastOceans,True,False,100,50,1,Sailor's Bounty,1,2 +FeastOceans_Material,True,False,100,50,5,Sailor's Bounty,1,1 +FeastPlains,True,False,100,50,1,Plains Pie Picnic,1,2 +FeastPlains_Material,True,False,100,50,5,Plains Pie Picnic,1,1 +FeastSwamps,True,False,100,50,1,Swamp Dweller's Delight,1,2 +FeastSwamps_Material,True,False,100,50,5,Swamp Dweller's Delight,1,1 +Feathers,True,False,100,50,50,Feathers,1,1 +Fiddleheadfern,True,False,100,50,50,Fiddlehead,1,2 +FierySvinstew,True,False,100,50,10,Fiery Svinstew,1,2 +FineWood,True,False,100,50,50,Finewood,1,1 +FirCone,True,False,100,50,100,Fir Cone,1,1 +FireworksRocket_Blue,True,False,100,50,10,Blue Fireworks,1,1 +FireworksRocket_Cyan,True,False,100,50,10,Cyan Fireworks,1,1 +FireworksRocket_Green,True,False,100,50,10,Green Fireworks,1,1 +FireworksRocket_Purple,True,False,100,50,10,Purple Fireworks,1,1 +FireworksRocket_Red,True,False,100,50,10,Red Fireworks,1,1 +FireworksRocket_White,True,False,100,50,10,Basic Fireworks,1,1 +FireworksRocket_Yellow,True,False,100,50,10,Yellow Fireworks,1,1 +Fish1,True,False,100,50,10,Perch,5,21 +Fish10,True,False,100,50,10,Northern Salmon,5,21 +Fish11,True,False,100,50,10,Magmafish,5,21 +Fish12,True,False,100,50,10,Pufferfish,5,21 +Fish2,True,False,100,50,10,Pike,5,21 +Fish3,True,False,100,50,10,Tuna,5,21 +Fish4_cave,True,False,100,50,10,Tetra,5,21 +Fish5,True,False,100,50,10,Trollfish,5,21 +Fish6,True,False,100,50,10,Giant Herring,5,21 +Fish7,True,False,100,50,10,Grouper,5,21 +Fish8,True,False,100,50,10,Coral Cod,5,21 +Fish9,True,False,100,50,10,Anglerfish,5,21 +FishAndBread,True,False,100,50,10,Fish 'n' Bread,1,2 +FishAndBreadUncooked,True,False,100,50,10,Uncooked Fish 'n' Bread,1,1 +FishAnglerRaw,True,False,100,50,20,Raw Fish,1,1 +FishCooked,True,False,100,50,20,Cooked Fish,1,2 +FishingBait,True,False,100,50,100,Fishing Bait,1,9 +FishingBaitAshlands,True,False,100,50,100,Hot Fishing Bait,1,9 +FishingBaitCave,True,False,100,50,100,Cold Fishing Bait,1,9 +FishingBaitDeepNorth,True,False,100,50,100,Frosty Fishing Bait,1,9 +FishingBaitForest,True,False,100,50,100,Mossy Fishing Bait,1,9 +FishingBaitMistlands,True,False,100,50,100,Misty Fishing Bait,1,9 +FishingBaitOcean,True,False,100,50,100,Heavy Fishing Bait,1,9 +FishingBaitPlains,True,False,100,50,100,Stingy Fishing Bait,1,9 +FishingBaitSwamp,True,False,100,50,100,Sticky Fishing Bait,1,9 +FishingRod,True,False,100,50,1,Fishing Rod,1,14 +FishRaw,True,False,100,50,20,Raw Fish,1,1 +FishWraps,True,False,100,50,10,Fish Wraps,1,2 +FistBjornClaw,True,True,300,50,1,Paws of the Bear,4,14 +FistBjornUndeadClaw,True,True,300,50,1,Vilebone Maulclaws,4,14 +FistFenrirClaw,True,True,300,50,1,Flesh Rippers,4,14 +Flametal,False,False,100,50,30,Ancient Metal,1,1 +FlametalNew,False,False,100,50,30,Flametal,1,1 +FlametalOre,False,False,100,50,30,Glowing Metal Ore,1,1 +FlametalOreNew,False,False,100,50,30,Flametal Ore,1,1 +Flax,True,False,100,50,100,Flax,1,1 +Flint,True,False,100,50,30,Flint,1,1 +FragrantBundle,True,False,100,50,50,Fragrant Bundle,1,1 +FreezeGland,True,False,100,50,50,Freeze Gland,1,1 +FreshSeaweed,True,False,100,50,50,Fresh Seaweed,1,1 +GemstoneBlue,True,False,100,50,50,Iolite,1,1 +GemstoneGreen,True,False,100,50,50,Jade,1,1 +GemstoneRed,True,False,100,50,50,Bloodstone,1,1 +GiantBloodSack,True,False,100,50,50,Blood Clot,1,1 +GoblinTotem,True,False,100,50,30,Fuling Totem,1,16 +Grausten,True,False,100,50,50,Grausten,1,1 +GreydwarfEye,True,False,100,50,50,Greydwarf Eye,1,1 +Guck,True,False,100,50,50,Guck,1,1 +Hair1,True,False,100,50,1,Windswept,1,10 +Hair10,True,False,100,50,1,Side Swept,1,10 +Hair10_2,True,False,100,50,1,Long and Loose,1,10 +Hair11,True,False,100,50,1,Long Braid,1,10 +Hair11_2,True,False,100,50,1,Long and Loose,1,10 +Hair11_3,True,False,100,50,1,Long and Loose,1,10 +Hair12,True,False,100,50,1,Matronly,1,10 +Hair12_2,True,False,100,50,1,Long and Loose,1,10 +Hair13,True,False,100,50,1,Twin Braids,1,10 +Hair13_2,True,False,100,50,1,Long and Loose,1,10 +Hair13_3,True,False,100,50,1,Long and Loose,1,10 +Hair14,True,False,100,50,1,Speed Demon,1,10 +Hair14_2,True,False,100,50,1,Long and Loose,1,10 +Hair15,True,False,100,50,1,Pulled Back Curls,1,10 +Hair15_2,True,False,100,50,1,Long and Loose,1,10 +Hair15_3,True,False,100,50,1,Long and Loose,1,10 +Hair16,True,False,100,50,1,Gathered Braids,1,10 +Hair16_2,True,False,100,50,1,Long and Loose,1,10 +Hair17,True,False,100,50,1,Neat Braids,1,10 +Hair17_2,True,False,100,50,1,Long and Loose,1,10 +Hair18,True,False,100,50,1,Royal Braids,1,10 +Hair18_2,True,False,100,50,1,Long and Loose,1,10 +Hair19,True,False,100,50,1,Painter Curls,1,10 +Hair2,True,False,100,50,1,High Ponytail,1,10 +Hair20,True,False,100,50,1,Tidy Curls,1,10 +Hair21,True,False,100,50,1,Twin Buns,1,10 +Hair21_2,True,False,100,50,1,Long and Loose,1,10 +Hair22,True,False,100,50,1,Single Bun,1,10 +Hair22_2,True,False,100,50,1,Long and Loose,1,10 +Hair23,True,False,100,50,1,Short Curls,1,10 +Hair24,True,False,100,50,1,Shaved and Braided,1,10 +Hair24_2,True,False,100,50,1,Long and Loose,1,10 +Hair24_3,True,False,100,50,1,Long and Loose,1,10 +Hair25,True,False,100,50,1,Knot,1,10 +Hair26,True,False,100,50,1,Short Locs,1,10 +Hair27,True,False,100,50,1,Braids of Strength,1,10 +Hair27_2,True,False,100,50,1,Long and Loose,1,10 +Hair27_3,True,False,100,50,1,Long and Loose,1,10 +Hair28,True,False,100,50,1,Merchant's Braid,1,10 +Hair28_2,True,False,100,50,1,Long and Loose,1,10 +Hair28_3,True,False,100,50,1,Long and Loose,1,10 +Hair29,True,False,100,50,1,Tucked Back,1,10 +Hair29_2,True,False,100,50,1,Long and Loose,1,10 +Hair3,True,False,100,50,1,Pigtails,1,10 +Hair30,True,False,100,50,1,Loose Waves,1,10 +Hair30_2,True,False,100,50,1,Long and Loose,1,10 +Hair30_3,True,False,100,50,1,Long and Loose,1,10 +Hair31,True,False,100,50,1,Gathered Locs,1,10 +Hair31_2,True,False,100,50,1,Long and Loose,1,10 +Hair31_3,True,False,100,50,1,Long and Loose,1,10 +Hair32,True,False,100,50,1,Mullet,1,10 +Hair32_2,True,False,100,50,1,Long and Loose,1,10 +Hair32_3,True,False,100,50,1,Long and Loose,1,10 +Hair33,True,False,100,50,1,Vinland Shave,1,10 +Hair33_2,True,False,100,50,1,Long and Loose,1,10 +Hair34,True,False,100,50,1,Castellan,1,10 +Hair34_2,True,False,100,50,1,Long and Loose,1,10 +Hair34_3,True,False,100,50,1,Long and Loose,1,10 +Hair3_2,True,False,100,50,1,Pigtails,1,10 +Hair3_3,True,False,100,50,1,Pigtails,1,10 +Hair4,True,False,100,50,1,Low Ponytail,1,10 +Hair4_2,True,False,100,50,1,Pigtails,1,10 +Hair4_3,True,False,100,50,1,Pigtails,1,10 +Hair5,True,False,100,50,1,Short,1,10 +Hair5_2,True,False,100,50,1,Pigtails,1,10 +Hair6,True,False,100,50,1,Long and Loose,1,10 +Hair6_2,True,False,100,50,1,Long and Loose,1,10 +Hair6_3,True,False,100,50,1,Long and Loose,1,10 +Hair7,True,False,100,50,1,Dragonslayer,1,10 +Hair7_2,True,False,100,50,1,Long and Loose,1,10 +Hair8,True,False,100,50,1,Parted,1,10 +Hair8_2,True,False,100,50,1,Long and Loose,1,10 +Hair9,True,False,100,50,1,Old One-Eye,1,10 +Hair9_2,True,False,100,50,1,Long and Loose,1,10 +HairNone,True,False,100,50,1,No Hair,1,10 +Hammer,True,True,100,100,1,Hammer,3,19 +HardAntler,True,False,100,50,50,Hard Antler,1,1 +HareMeat,True,False,100,50,20,Hare Meat,1,1 +HelmetAshlandsMediumHood,True,True,1000,200,1,Hood of Ask,4,6 +HelmetBerserkerHood,True,True,1000,200,1,Headdress of the Bear,4,6 +HelmetBerserkerUndead,True,True,1000,200,1,Vilebone Visage,4,6 +HelmetBronze,True,True,1000,200,1,Bronze Helmet,4,6 +HelmetCarapace,True,True,1200,200,1,Carapace Helmet,4,6 +HelmetDrake,True,True,1000,200,1,Drake Helmet,4,6 +HelmetDverger,True,False,1000,100,1,Dverger Circlet,1,6 +HelmetFenring,True,True,1000,200,1,Fenris Hood,4,6 +HelmetFishingHat,True,True,1000,200,1,Fishing Hat,4,6 +HelmetFlametal,True,True,800,100,1,Flametal Helmet,4,6 +HelmetHat1,True,True,800,100,1,Blue Tied Headscarf,4,6 +HelmetHat10,True,True,800,100,1,Simple Purple Cap,4,6 +HelmetHat2,True,True,800,100,1,Green Twisted Headscarf,4,6 +HelmetHat3,True,True,800,100,1,Brown Fur Cap,4,6 +HelmetHat4,True,True,800,100,1,Extravagant Green Cap,4,6 +HelmetHat5,True,True,800,100,1,Simple Red Cap,4,6 +HelmetHat6,True,True,800,100,1,Yellow Tied Headscarf,4,6 +HelmetHat7,True,True,800,100,1,Red Twisted Headscarf,4,6 +HelmetHat8,True,True,800,100,1,Grey Fur Cap,4,6 +HelmetHat9,True,True,800,100,1,Extravagant Orange Cap,4,6 +HelmetIron,True,True,1000,200,1,Iron Helmet,4,6 +HelmetLeather,True,True,400,100,1,Leather Helmet,4,6 +HelmetMage,True,True,1000,200,1,Eitr-weave Hood,4,6 +HelmetMage_Ashlands,True,True,1000,200,1,Hood of Embla,4,6 +HelmetMidsummerCrown,True,False,1000,50,1,Midsummer Crown,1,6 +HelmetOdin,True,True,300,100,1,Hood of Odin,4,6 +HelmetPadded,True,True,1000,200,1,Padded Helmet,4,6 +HelmetPointyHat,True,True,800,100,1,Pointy Hat,4,6 +HelmetRoot,True,True,800,100,1,Root Mask,4,6 +HelmetStrawHat,True,True,800,100,1,Straw Hat,4,6 +HelmetSweatBand,True,True,1000,200,1,Headband,4,6 +HelmetTrollLeather,True,True,500,200,1,Troll Leather Hood,4,6 +HelmetYule,True,False,1000,50,1,Yule Hat,1,6 +HildirKey_forestcrypt,True,False,100,50,1,Hildir's Brass Key,1,16 +HildirKey_mountaincave,True,False,100,50,1,Hildir's Silver Key,1,16 +HildirKey_plainsfortress,True,False,100,50,1,Hildir's Bronze Key,1,16 +Hoe,True,True,200,200,1,Hoe,3,19 +Honey,True,False,100,50,50,Honey,1,2 +HoneyGlazedChicken,True,False,100,50,10,Honey Glazed Chicken,1,2 +HoneyGlazedChickenUncooked,True,False,100,50,10,Uncooked Honey Glazed Chicken,1,1 +Iron,False,False,100,50,30,Iron,1,1 +IronNails,True,False,100,50,100,Iron Nails,1,1 +IronOre,False,False,100,50,30,Iron Ore,1,1 +Ironpit,False,False,100,50,10,Iron Pit,1,1 +IronScrap,False,False,100,50,30,Scrap Iron,1,1 +JuteBlue,True,False,100,50,50,Blue Jute,1,1 +JuteRed,True,False,100,50,50,Red Jute,1,1 +KnifeBlackMetal,True,True,200,50,1,Black Metal Knife,4,3 +KnifeButcher,True,True,200,50,1,Butcher Knife,1,3 +KnifeChitin,True,True,200,50,1,Abyssal Razor,4,3 +KnifeCopper,True,True,200,50,1,Copper Knife,4,3 +KnifeFlint,True,True,200,50,1,Flint Knife,4,3 +KnifeSilver,True,True,200,50,1,Silver Knife,4,3 +KnifeSkollAndHati,True,True,200,50,1,Skoll and Hati,4,14 +KnifeWood,True,True,200,50,1,Wooden Knife,4,3 +Lantern,True,False,0,0,1,Dvergr Lantern,1,15 +LeatherScraps,True,False,100,50,50,Leather Scraps,1,1 +LinenThread,True,False,100,50,50,Linen Thread,1,1 +LoxMeat,True,False,100,50,20,Lox Meat,1,1 +LoxPelt,True,False,100,50,50,Lox Pelt,1,1 +LoxPie,True,False,100,50,10,Lox Meat Pie,1,2 +LoxPieUncooked,True,False,100,50,10,Unbaked Lox Pie,1,1 +MaceBronze,True,True,200,50,1,Bronze Mace,4,3 +MaceEldner,True,True,150,50,1,Flametal Mace,4,3 +MaceEldnerBlood,True,True,150,50,1,Bloodgeon,4,3 +MaceEldnerLightning,True,True,150,50,1,Storm Star,4,3 +MaceEldnerNature,True,True,150,50,1,Klossen,4,3 +MaceIron,True,True,200,50,1,Iron Mace,4,3 +MaceNeedle,True,True,150,50,1,Porcupine,4,3 +MaceSilver,True,True,200,50,1,Frostner,4,3 +MaceWood,True,True,200,50,1,Wooden Mace,4,3 +MagicallyStuffedShroom,True,False,100,50,10,Stuffed Mushroom,1,2 +MagicallyStuffedShroomUncooked,True,False,100,50,10,Uncooked Stuffed Mushroom,1,1 +Mandible,True,False,100,50,50,Mandible,1,1 +MarinatedGreens,True,False,100,50,10,Marinated Greens,1,2 +MashedMeat,True,False,100,50,10,Mashed Meat,1,2 +MeadBaseBugRepellent,True,False,100,50,1,Mead Base: Anti-Sting,1,1 +MeadBaseBzerker,True,False,100,50,1,Mead base: Berserkir,1,1 +MeadBaseEitrLingering,True,False,100,50,1,Mead Base: Lingering Eitr,1,1 +MeadBaseEitrMinor,True,False,100,50,1,Mead Base: Minor Eitr,1,1 +MeadBaseFrostResist,True,False,100,50,1,Mead Base: Frost Resistance,1,1 +MeadBaseHasty,True,False,100,50,1,Mead base: Ratatosk,1,1 +MeadBaseHealthLingering,True,False,100,50,1,Mead Base: Lingering Health,1,1 +MeadBaseHealthMajor,True,False,100,50,1,Mead Base: Major Healing,1,1 +MeadBaseHealthMedium,True,False,100,50,1,Mead Base: Medium Healing,1,1 +MeadBaseHealthMinor,True,False,100,50,1,Mead Base: Minor Healing,1,1 +MeadBaseLightFoot,True,False,100,50,1,Mead Base: Lightfoot,1,1 +MeadBasePoisonResist,True,False,100,50,1,Mead Base: Poison Resistance,1,1 +MeadBaseStaminaLingering,True,False,100,50,1,Mead Base: Lingering Stamina,1,1 +MeadBaseStaminaMedium,True,False,100,50,1,Mead Base: Medium Stamina,1,1 +MeadBaseStaminaMinor,True,False,100,50,1,Mead Base: Minor Stamina,1,1 +MeadBaseStrength,True,False,100,50,1,Mead Base: Troll Endurance,1,1 +MeadBaseSwimmer,True,False,100,50,1,Mead Base: Vananidir,1,1 +MeadBaseTamer,True,False,100,50,1,Mead Base: Animal Whispers,1,1 +MeadBaseTasty,True,False,100,50,1,Mead Base: Tasty,1,1 +MeadBugRepellent,True,False,100,50,10,Anti-Sting Concoction,1,2 +MeadBzerker,True,False,100,50,10,Berserkir Mead,1,2 +MeadEitrLingering,True,False,100,50,10,Lingering Eitr Mead,1,2 +MeadEitrMinor,True,False,100,50,10,Minor Eitr Mead,1,2 +MeadFrostResist,True,False,100,50,10,Frost Resistance Mead,1,2 +MeadHasty,True,False,100,50,10,Tonic of Ratatosk,1,2 +MeadHealthLingering,True,False,100,50,10,Lingering Healing Mead,1,2 +MeadHealthMajor,True,False,100,50,10,Major Healing Mead,1,2 +MeadHealthMedium,True,False,100,50,10,Medium Healing Mead,1,2 +MeadHealthMinor,True,False,100,50,10,Minor Healing Mead,1,2 +MeadLightfoot,True,False,100,50,10,Lightfoot Mead,1,2 +MeadPoisonResist,True,False,100,50,10,Poison Resistance Mead,1,2 +MeadStaminaLingering,True,False,100,50,10,Lingering Stamina Mead,1,2 +MeadStaminaMedium,True,False,100,50,10,Medium Stamina Mead,1,2 +MeadStaminaMinor,True,False,100,50,10,Minor Stamina Mead,1,2 +MeadStrength,True,False,100,50,10,Mead of Troll Endurance,1,2 +MeadSwimmer,True,False,100,50,10,Draught of Vananidir,1,2 +MeadTamer,True,False,100,50,10,Brew of Animal Whispers,1,2 +MeadTasty,True,False,100,50,10,Tasty Mead,1,2 +MeadTrollPheromones,True,False,100,50,10,Love Potion,1,2 +MeatPlatterUncooked,True,False,100,50,10,Uncooked Meat Platter,1,1 +MeatPlatter,True,False,100,50,10,Meat Platter,1,2 +MechanicalSpring,False,False,100,50,10,Mechanical Spring,1,1 +MinceMeatSauce,True,False,100,50,10,Minced Meat Sauce,1,2 +MisthareSupreme,True,False,100,50,10,Misthare Supreme,1,2 +MisthareSupremeUncooked,True,False,100,50,10,Uncooked Misthare Supreme,1,1 +MoltenCore,True,False,100,50,20,Molten Core,1,1 +MorgenHeart,True,False,100,50,50,Morgen Heart,1,1 +MorgenSinew,True,False,100,50,50,Morgen Sinew,1,1 +Mushroom,True,False,100,50,50,Mushroom,1,2 +MushroomBlue,True,False,100,50,50,Blue Mushroom,1,2 +MushroomBzerker,True,False,100,50,50,Toadstool,1,2 +MushroomJotunPuffs,True,False,100,50,50,Jotun Puffs,1,2 +MushroomMagecap,True,False,100,50,50,Magecap,1,2 +MushroomOmelette,True,False,100,50,10,Mushroom Omelette,1,2 +MushroomSmokePuff,True,False,100,50,50,Smoke Puff,1,2 +MushroomYellow,True,False,100,50,50,Yellow Mushroom,1,2 +NeckTail,True,False,100,50,50,Neck Tail,1,1 +NeckTailGrilled,True,False,100,50,20,Grilled Neck Tail,1,2 +Needle,True,False,100,50,50,Needle,1,1 +Obsidian,True,False,100,50,50,Obsidian,1,1 +Onion,True,False,100,50,50,Onion,1,2 +OnionSeeds,True,False,100,50,100,Onion Seeds,1,1 +OnionSoup,True,False,100,50,10,Onion Soup,1,2 +Ooze,True,False,100,50,50,Ooze,1,1 +PickaxeAntler,True,True,100,50,1,Antler Pickaxe,1,14 +PickaxeBlackMetal,True,True,210,50,1,Black Metal Pickaxe,4,14 +PickaxeBronze,True,True,120,50,1,Bronze Pickaxe,4,14 +PickaxeIron,True,True,150,50,1,Iron Pickaxe,4,14 +PickaxeStone,True,True,100,50,1,Stone Pickaxe,1,14 +PineCone,True,False,100,50,100,Pine Cone,1,1 +PiquantPie,True,False,100,50,10,Piquant Pie,1,2 +PiquantPieUncooked,True,False,100,50,10,Uncooked Piquant Pie,1,1 +Pot_Shard_Green,True,False,100,50,50,Pot Shard,1,1 +PowderedDragonEgg,True,False,100,50,50,Powdered Dragon Eggshells,1,1 +ProustitePowder,True,False,100,50,50,Proustite Powder,1,1 +Pukeberries,True,False,100,50,50,Bukeperries,1,2 +PungentPebbles,True,False,100,50,50,Pungent Pebbles,1,1 +QueenBee,True,False,100,50,20,Queen Bee,1,1 +QueenDrop,True,False,100,50,30,Majestic Carapace,1,1 +QueensJam,True,False,100,50,10,Queen's Jam,1,2 +Raspberry,True,False,100,50,50,Raspberries,1,2 +RawMeat,True,False,100,50,20,Boar Meat,1,1 +Resin,True,False,100,50,50,Resin,1,1 +RoastedCrustPie,True,False,100,50,10,Roasted Crust Pie,1,2 +RoastedCrustPieUncooked,True,False,100,50,10,Uncooked Roasted Crust Pie,1,1 +Root,True,False,100,50,50,Root,1,1 +RottenMeat,True,False,100,50,20,Rotten Meat,1,2 +RoundLog,True,False,100,50,50,Corewood,1,1 +RoyalJelly,True,False,100,50,50,Royal Jelly,1,2 +Ruby,True,False,100,50,20,Ruby,1,1 +SaddleAsksvin,True,False,100,50,1,Asksvin Saddle,1,16 +SaddleLox,True,False,100,50,1,Lox Saddle,1,16 +Salad,True,False,100,50,10,Salad,1,2 +Sap,True,False,100,50,50,Sap,1,1 +Sausages,True,False,100,50,20,Sausages,1,2 +ScaleHide,True,False,100,50,50,Scale Hide,1,1 +ScorchingMedley,True,False,100,50,10,Scorching Medley,1,2 +ScytheHandle,True,False,100,50,20,Scythe Handle,1,16 +Scythe,True,True,200,200,1,Scythe,3,14 +SeekerAspic,True,False,100,50,10,Seeker Aspic,1,2 +SerpentMeat,True,False,100,50,50,Serpent Meat,1,1 +SerpentMeatCooked,True,False,100,50,50,Cooked Serpent Meat,1,2 +SerpentScale,True,False,100,50,50,Serpent Scale,1,1 +SerpentStew,True,False,100,50,10,Serpent Stew,1,2 +SharpeningStone,True,False,100,50,20,Sharpening Stone,1,1 +ShieldBanded,True,True,200,50,1,Banded Shield,3,5 +ShieldBlackmetal,True,True,200,50,1,Black Metal Shield,3,5 +ShieldBlackmetalTower,True,True,200,50,1,Black Metal Tower Shield,3,5 +ShieldBoneTower,True,True,200,50,1,Bone Tower Shield,3,5 +ShieldBronzeBuckler,True,True,200,50,1,Bronze Buckler,3,5 +ShieldCarapace,True,True,200,50,1,Carapace Shield,3,5 +ShieldCarapaceBuckler,True,True,200,50,1,Carapace Buckler,3,5 +ShieldCore,True,False,100,50,20,Shield Core,1,1 +ShieldFlametal,True,True,200,50,1,Flametal Shield,3,5 +ShieldFlametalTower,True,True,200,50,1,Flametal Tower Shield,3,5 +ShieldIronBuckler,True,True,200,50,1,Iron Buckler,3,5 +ShieldIronSquare,True,True,200,50,1,Iron Shield,3,5 +ShieldIronTower,True,True,200,50,1,Iron Tower Shield,3,5 +ShieldKnight,True,True,100,50,1,Knight shield UNUSED,1,5 +ShieldSerpentscale,True,True,250,50,1,Serpent Scale Shield,3,5 +ShieldSilver,True,True,200,50,1,Silver Shield,3,5 +ShieldWood,True,True,200,50,1,Wood Shield,3,5 +ShieldWoodTower,True,True,200,50,1,Wood Tower Shield,3,5 +ShocklateSmoothie,True,False,100,50,10,Muckshake,1,2 +Silver,False,False,100,50,30,Silver,1,1 +SilverNecklace,True,False,100,50,20,Silver Necklace,1,1 +SilverOre,False,False,100,50,30,Silver Ore,1,1 +SizzlingBerryBroth,True,False,100,50,10,Sizzling Berry Broth,1,2 +SledgeDemolisher,True,True,100,50,1,Demolisher,4,14 +SledgeIron,True,True,100,50,1,Iron Sledge,4,14 +SledgeStagbreaker,True,True,100,50,1,Stagbreaker,4,14 +SledgeWood,True,True,100,50,1,Wooden Sledge,4,14 +Softtissue,True,False,100,50,40,Soft Tissue,1,1 +Sparkler,True,True,8,0,1,Sparkler,1,15 +SparklingShroomshake,True,False,100,50,10,Sparkling Shroomshake,1,2 +SpearBronze,True,True,100,50,1,Bronze Spear,4,3 +SpearCarapace,True,True,100,50,1,Carapace Spear,4,3 +SpearChitin,True,True,50,50,1,Abyssal Harpoon,1,3 +SpearElderbark,True,True,100,50,1,Ancient Bark Spear,4,3 +SpearFlint,True,True,100,50,1,Flint Spear,4,3 +SpearSplitner,True,True,100,50,1,Splitnir,4,3 +SpearSplitner_Blood,True,True,100,50,1,Splitnir the Bleeding,4,3 +SpearSplitner_Lightning,True,True,100,50,1,Splitnir the Storming,4,3 +SpearSplitner_Nature,True,True,100,50,1,Splitnir the Primal,4,3 +SpearWolfFang,True,True,100,50,1,Fang Spear,4,3 +SpearWood,True,True,100,50,1,Wooden Spear,4,3 +SpiceAshlands,True,False,100,50,100,Fiery Spice Powder,1,1 +SpiceForests,True,False,100,50,100,Woodland Herb Blend,1,1 +SpiceMistlands,True,False,100,50,100,Herbs of the Hidden Hills,1,1 +SpiceMountains,True,False,100,50,100,Mountain Peak Pepper Powder,1,1 +SpiceOceans,True,False,100,50,100,Seafarer's Herbs,1,1 +SpicePlains,True,False,100,50,100,Grasslands Herbalist Harvest,1,1 +SpicyMarmalade,True,False,100,50,10,Spicy Marmalade,1,2 +StaffClusterbomb,True,True,200,50,1,Staff of Fracturing,4,14 +StaffFireball,True,True,200,50,1,Staff of Embers,4,14 +StaffGreenRoots,True,True,200,50,1,Staff of the Wild,4,14 +StaffIceShards,True,True,200,50,1,Staff of Frost,4,14 +StaffLightning,True,True,200,50,1,Dundr,4,14 +StaffRedTroll,True,True,200,50,1,Trollstav,4,14 +StaffShield,True,True,200,50,1,Staff of Protection,4,14 +StaffSkeleton,True,True,200,50,1,Dead Raiser,4,22 +Stone,True,False,100,50,50,Stone,1,1 +StoneRock,True,False,100,50,50,Rock,1,1 +SulfurStone,True,False,100,50,50,Sulfur,1,1 +SurtlingCore,True,False,100,50,10,Surtling Core,1,1 +SwordBlackmetal,True,True,200,50,1,Black Metal Sword,4,3 +SwordBronze,True,True,200,50,1,Bronze Sword,4,3 +SwordDyrnwyn,True,True,200,50,1,Dyrnwyn,4,3 +SwordIron,True,True,200,50,1,Iron Sword,4,3 +SwordIronFire,True,True,200,50,1,Dyrnwyn,4,3 +SwordMistwalker,True,True,200,50,1,Mistwalker,4,3 +SwordNiedhogg,True,True,200,50,1,Nidhögg,4,3 +SwordNiedhoggBlood,True,True,200,50,1,Nidhögg the Bleeding,4,3 +SwordNiedhoggLightning,True,True,200,50,1,Nidhögg the Thundering,4,3 +SwordNiedhoggNature,True,True,200,50,1,Nidhögg the Primal,4,3 +SwordSilver,True,True,200,50,1,Silver Sword,4,3 +SwordWood,True,True,200,50,1,Wooden Sword,4,3 +Tankard,True,False,100,50,1,Tankard,1,3 +TankardAnniversary,True,False,100,50,1,Horn of Celebration,1,3 +TankardOdin,True,False,100,50,1,Mead Horn of Odin,1,3 +Tankard_dvergr,True,False,100,50,1,Dvergr Tankard,1,3 +Tar,True,False,100,50,50,Tar,1,1 +Thistle,True,False,100,50,50,Thistle,1,1 +THSwordKrom,True,True,200,50,1,Krom,4,14 +THSwordSlayer,True,True,200,50,1,Slayer,4,14 +THSwordSlayerBlood,True,True,200,50,1,Brutal Slayer,4,14 +THSwordSlayerLightning,True,True,200,50,1,Scourging Slayer,4,14 +THSwordSlayerNature,True,True,200,50,1,Primal Slayer,4,14 +THSwordWood,True,True,200,50,1,Wooden Greatsword,4,14 +Thunderstone,True,False,100,50,20,Thunder Stone,1,1 +Tin,False,False,100,50,30,Tin,1,1 +TinOre,False,False,100,50,30,Tin Ore,1,1 +Torch,True,True,20,50,1,Torch,1,15 +TrinketBlackDamageHealth,True,False,100,50,1,Bracelets of the Brave,1,24 +TrinketBlackStamina,True,False,100,50,1,Evasion Mantle,1,24 +TrinketBronzeHealth,True,False,100,50,1,Heart of the Forest,1,24 +TrinketBronzeStamina,True,False,100,50,1,Bronze Pendant,1,24 +TrinketCarapaceEitr,True,False,100,50,1,Pulsating Earrings,1,24 +TrinketChitinSwim,True,False,100,50,1,Fins of Destiny,1,24 +TrinketFlametalEitr,True,False,100,50,1,"Jörmundling ",1,24 +TrinketFlametalStaminaHealth,True,False,100,50,1,Brimstone,1,24 +TrinketIronHealth,True,False,100,50,1,Iron Brooch,1,24 +TrinketIronStamina,True,False,100,50,1,Nimble Anklet,1,24 +TrinketScaleStaminaDamage,True,False,100,50,1,Resounding Shackle,1,24 +TrinketSilverDamage,True,False,100,50,1,Wolf Sight,1,24 +TrinketSilverResist,True,False,100,50,1,Crystal Heart,1,24 +TrollHide,True,False,100,50,20,Troll Hide,1,1 +TrophyAbomination,True,False,100,50,20,Abomination Trophy,1,13 +TrophyAsksvin,True,False,100,50,20,Asksvin Trophy,1,13 +TrophyBjorn,True,False,100,50,20,Bear Trophy,1,13 +TrophyBjornUndead,True,False,100,50,20,Vile Trophy,1,13 +TrophyBlob,True,False,100,50,20,Blob Trophy,1,13 +TrophyBoar,True,False,100,50,20,Boar Trophy,1,13 +TrophyBonemass,True,False,100,50,20,Bonemass Trophy,1,13 +TrophyBonemawSerpent,True,False,100,50,20,Bonemaw Trophy,1,13 +TrophyCharredArcher,True,False,100,50,20,Marksman Trophy,1,13 +TrophyCharredMage,True,False,100,50,20,Warlock Trophy,1,13 +TrophyCharredMelee,True,False,100,50,20,Warrior Trophy,1,13 +TrophyCultist,True,False,100,50,20,Cultist Trophy,1,13 +TrophyCultist_Hildir,True,False,100,50,20,Geirrhafa Trophy,1,13 +TrophyDeathsquito,True,False,100,50,20,Deathsquito Trophy,1,13 +TrophyDeer,True,False,100,50,20,Deer Trophy,1,13 +TrophyDragonQueen,True,False,100,50,20,Moder Trophy,1,13 +TrophyDraugr,True,False,100,50,20,Draugr Trophy,1,13 +TrophyDraugrElite,True,False,100,50,20,Draugr Elite Trophy,1,13 +TrophyDraugrFem,True,False,100,50,20,Draugr Trophy,1,13 +TrophyDvergr,True,False,100,50,20,Dvergr Trophy,1,13 +TrophyEikthyr,True,False,100,50,20,Eikthyr Trophy,1,13 +TrophyFader,True,False,100,50,20,Fader Trophy,1,13 +TrophyFallenValkyrie,True,False,100,50,20,Fallen Valkyrie Trophy,1,13 +TrophyFenring,True,False,100,50,20,Fenring Trophy,1,13 +TrophyForestTroll,True,False,100,50,20,Troll Trophy,1,13 +TrophyFrostTroll,True,False,100,50,20,Troll Trophy,1,13 +TrophyGhost,True,False,100,50,20,Ghost Trophy,1,13 +TrophyGjall,True,False,100,50,20,Gjall Trophy,1,13 +TrophyGoblin,True,False,100,50,20,Fuling Trophy,1,13 +TrophyGoblinBrute,True,False,100,50,20,Fuling Berserker Trophy,1,13 +TrophyGoblinBruteBrosBrute,True,False,100,50,20,Thungr Trophy,1,13 +TrophyGoblinBruteBrosShaman,True,False,100,50,20,Zil Trophy,1,13 +TrophyGoblinKing,True,False,100,50,20,Yagluth Trophy,1,13 +TrophyGoblinShaman,True,False,100,50,20,Fuling Shaman Trophy,1,13 +TrophyGreydwarf,True,False,100,50,20,Greydwarf Trophy,1,13 +TrophyGreydwarfBrute,True,False,100,50,20,Greydwarf Brute Trophy,1,13 +TrophyGreydwarfShaman,True,False,100,50,20,Greydwarf Shaman Trophy,1,13 +TrophyGrowth,True,False,100,50,20,Growth Trophy,1,13 +TrophyHare,True,False,100,50,20,Hare Trophy,1,13 +TrophyHatchling,True,False,100,50,20,Drake Trophy,1,13 +TrophyKvastur,True,False,100,50,20,Kvastur,1,13 +TrophyLeech,True,False,100,50,20,Leech Trophy,1,13 +TrophyLox,True,False,100,50,20,Lox Trophy,1,13 +TrophyMorgen,True,False,100,50,20,Morgen Trophy,1,13 +TrophyNeck,True,False,100,50,20,Neck Trophy,1,13 +TrophySeeker,True,False,100,50,20,Seeker Trophy,1,13 +TrophySeekerBrute,True,False,100,50,20,Seeker Soldier Trophy,1,13 +TrophySeekerQueen,True,False,100,50,20,The Queen Trophy,1,13 +TrophySerpent,True,False,100,50,20,Serpent Trophy,1,13 +TrophySGolem,True,False,100,50,20,Stone Golem Trophy,1,13 +TrophySkeleton,True,False,100,50,20,Skeleton Trophy,1,13 +TrophySkeletonHildir,True,False,100,50,20,Brenna Trophy,1,13 +TrophySkeletonPoison,True,False,100,50,20,Rancid Remains Trophy,1,13 +TrophySurtling,True,False,100,50,20,Surtling Trophy,1,13 +TrophyTheElder,True,False,100,50,20,The Elder Trophy,1,13 +TrophyTick,True,False,100,50,20,Tick Trophy,1,13 +TrophyUlv,True,False,100,50,20,Ulv Trophy,1,13 +TrophyVolture,True,False,100,50,20,Volture Trophy,1,13 +TrophyWolf,True,False,100,50,20,Wolf Trophy,1,13 +TrophyWraith,True,False,100,50,20,Wraith Trophy,1,13 +TurnipSeeds,True,False,100,50,100,Turnip Seeds,1,1 +TurnipStew,True,False,100,50,10,Turnip Stew,1,2 +Turnip,True,False,100,50,50,Turnip,1,1 +TurretBolt,True,False,100,50,100,Black Metal Missile,1,23 +TurretBoltFlametal,True,False,100,50,100,Flametal Missile,1,23 +TurretBoltWood,True,False,100,50,100,Wooden Missile,1,23 +UndeadBjornRibcage,True,False,100,50,50,Vile Ribcage,1,1 +Vineberry,True,False,100,50,50,Vineberry Cluster,1,2 +VineberrySeeds,True,False,100,50,100,Vineberry Seeds,1,1 +VineGreenSeeds,True,False,100,50,100,Ivy Seeds,1,1 +VoltureEgg,True,False,100,50,20,Volture Egg,1,16 +VoltureMeat,True,False,100,50,20,Volture Meat,1,1 +Wishbone,True,False,100,50,1,Wishbone,1,18 +Wisp,True,False,100,50,50,Wisp,1,1 +WitheredBone,True,False,100,50,30,Withered Bone,1,1 +WolfClaw,True,False,100,50,20,Fenris Claw,1,1 +WolfFang,True,False,100,50,50,Wolf Fang,1,1 +WolfHairBundle,True,False,100,50,50,Fenris Hair,1,1 +WolfJerky,True,False,100,50,20,Wolf Jerky,1,2 +WolfMeat,True,False,100,50,20,Wolf Meat,1,1 +WolfMeatSkewer,True,False,100,50,20,Wolf Skewer,1,2 +WolfPelt,True,False,100,50,50,Wolf Pelt,1,1 +Wood,True,False,100,50,50,Wood,1,1 +YagluthDrop,True,False,100,50,30,Torn Spirit,1,16 +YggdrasilPorridge,True,False,100,50,10,Yggdrasil Porridge,1,2 +YggdrasilWood,True,False,100,50,50,Yggdrasil Wood,1,1 +YmirRemains,True,False,100,50,50,Ymir Flesh,1,1 diff --git a/Loki/Skill.cs b/Loki/Skill.cs index 421b0f9..d32fec3 100644 --- a/Loki/Skill.cs +++ b/Loki/Skill.cs @@ -31,23 +31,22 @@ private static string GetSkillName(SkillType type) SkillType.Blocking => Properties.Resources.Blocking, SkillType.Axes => Properties.Resources.Axes, SkillType.Bows => Properties.Resources.Bows, - SkillType.FireMagic => Properties.Resources.FireMagic, - SkillType.FrostMagic => Properties.Resources.FrostMagic, + SkillType.ElementalMagic => Properties.Resources.ElementalMagic, + SkillType.BloodMagic => Properties.Resources.BloodMagic, SkillType.Unarmed => Properties.Resources.Unarmed, SkillType.Pickaxes => Properties.Resources.Pickaxes, SkillType.WoodCutting => Properties.Resources.Wood_Cutting, + SkillType.Crossbows => Properties.Resources.Crossbow, SkillType.Jump => Properties.Resources.Jump, SkillType.Sneak => Properties.Resources.Sneak, SkillType.Run => Properties.Resources.Run, SkillType.Swim => Properties.Resources.Swim, + SkillType.Fishing => Properties.Resources.Fishing, + SkillType.Cooking => Properties.Resources.Cooking, + SkillType.Farming => Properties.Resources.Farming, + SkillType.Crafting => Properties.Resources.Crafting, + SkillType.Dodge => Properties.Resources.Dodge, SkillType.Ride => Properties.Resources.Riding, - SkillType.VL_Discipline => Properties.Resources.VL_Discipline, - SkillType.VL_Abjuration => Properties.Resources.VL_Abjuration, - SkillType.VL_Alteration => Properties.Resources.VL_Alteration, - SkillType.VL_Conjuration => Properties.Resources.VL_Conjuration, - SkillType.VL_Evocation => Properties.Resources.VL_Evocation, - SkillType.VL_Illusion => Properties.Resources.VL_Illusion, - SkillType.PP_Alchemy => Properties.Resources.PP_Alchemy, SkillType.All => Properties.Resources.All, //_ => throw new ArgumentOutOfRangeException(nameof(type), type, "Unrecognised skill type"), _ => Properties.Resources.Unknown, diff --git a/Loki/SkillType.cs b/Loki/SkillType.cs index 28c5d00..85a1936 100644 --- a/Loki/SkillType.cs +++ b/Loki/SkillType.cs @@ -2,32 +2,31 @@ { public enum SkillType { - None = 0, - Swords = 1, - Knives = 2, - Clubs = 3, - Polearms = 4, - Spears = 5, - Blocking = 6, - Axes = 7, - Bows = 8, - FireMagic = 9, - FrostMagic = 10, - Unarmed = 11, - Pickaxes = 12, - WoodCutting = 13, + None, + Swords, + Knives, + Clubs, + Polearms, + Spears, + Blocking, + Axes, + Bows, + ElementalMagic, + BloodMagic, + Unarmed, + Pickaxes, + WoodCutting, + Crossbows, Jump = 100, - Sneak = 101, - Run = 102, - Swim = 103, + Sneak, + Run, + Swim, + Fishing, + Cooking, + Farming, + Crafting, + Dodge, Ride = 110, - VL_Discipline = 781, - VL_Abjuration = 791, - VL_Alteration = 792, - VL_Conjuration = 793, - VL_Evocation = 794, - VL_Illusion = 795, - PP_Alchemy = 2015031201, All = 999 } } diff --git a/Loki/Version.cs b/Loki/Version.cs index eed8c37..f0b6216 100644 --- a/Loki/Version.cs +++ b/Loki/Version.cs @@ -8,13 +8,19 @@ internal static class Version /// /// Version of PlayerProfile .fch data. This is the version of the saved file. /// - public const int ProfileVersion = 37; + public const int ProfileVersion = 42; /// /// These legacy versions are also considered compatible, in addition to /// private static readonly int[] CompatibleProfileVersions = { + 42, + 41, + 40, + 39, + 38, + 37, 36, 35, 34, diff --git a/readme.md b/readme.md index 445ba3e..cae25b5 100644 --- a/readme.md +++ b/readme.md @@ -1,3 +1,8 @@ +# NOTE: This is a fork of the official repo + +- Updates to add compatibility with newer Valheim patches based on fork https://github.com/jensbrak/Loki/tree/master +- Ability to move inventory items via drag&drop (https://github.com/Wufflez/Loki/pull/37) + # Loki - Valheim Character Editor This program allows editing the character files for the game Valheim (.fch) @@ -50,11 +55,3 @@ It's recommended to leave the backup option enabled. Backups are created in `%LOCALAPPDATA%\TwoThreeSix\Loki\CharacterBackups` -## Coming Next - -- World Data management (e.g. trim out bloat from old worlds) -- More tooltips & in app help -- Installer -- Detect game running and warn user (game could save over file at any point) -- Dark theme to protect sensitive gamer eyes -- New application icon