From 4048c634e4f4371f5aba557e50dda0f3ef76a16a Mon Sep 17 00:00:00 2001 From: Jos Demmers Date: Mon, 21 Nov 2022 12:35:48 +0100 Subject: [PATCH] Added extended tooltip (work in progress). Added storage Brimstone Sands - New Corsica Fixed price overlay for new nwmarketprices API. Updated game data. --- .../StorageLocationConstants.cs | 1 + .../CraftingRecipeJson.cs | 26 + .../MasterItemDefinitionsJson.cs | 4 + .../NwmarketpriceJson.cs | 60 +- .../PersistableOverlayResource.cs | 20 + NewWorldCompanion.Entities/SettingsNWC.cs | 1 + NewWorldCompanion.Helpers/DoubleConverter.cs | 4 +- NewWorldCompanion.Helpers/IntConverter.cs | 29 + .../INewWorldDataStore.cs | 3 + .../IRelatedPriceManager.cs | 20 + .../Data/CraftingRecipes.json | 1821 ++++++++++++++++- .../Data/HouseItems.json | 174 ++ .../Data/MasterItemDefinitions_Common.json | 846 ++++++++ .../Data/MasterItemDefinitions_Crafting.json | 384 ++++ .../Data/MasterItemDefinitions_Loot.json | 93 + .../Data/javelindata_housingitems.loc.xml | 8 + ...javelindata_itemdefinitions_master.loc.xml | 101 +- .../NewWorldDataStore.cs | 79 +- NewWorldCompanion.Services/OverlayHandler.cs | 34 +- NewWorldCompanion.Services/PriceManager.cs | 4 +- .../RelatedPriceManager.cs | 115 ++ NewWorldCompanion/App.xaml.cs | 4 +- .../Tabs/Config/ConfigOverlayViewModel.cs | 213 +- .../ViewModels/Tabs/CraftingViewModel.cs | 66 +- .../ViewModels/Tabs/StorageViewModel.cs | 8 + .../Views/Tabs/Config/ConfigOverlayView.xaml | 88 +- .../Tabs/Config/ConfigOverlayView.xaml.cs | 13 + .../Views/Tabs/CraftingView.xaml | 214 +- NewWorldCompanion/common.props | 4 +- 29 files changed, 4244 insertions(+), 193 deletions(-) create mode 100644 NewWorldCompanion.Entities/PersistableOverlayResource.cs create mode 100644 NewWorldCompanion.Helpers/IntConverter.cs create mode 100644 NewWorldCompanion.Interfaces/IRelatedPriceManager.cs create mode 100644 NewWorldCompanion.Services/RelatedPriceManager.cs diff --git a/NewWorldCompanion.Constants/StorageLocationConstants.cs b/NewWorldCompanion.Constants/StorageLocationConstants.cs index d21c07d..3806f60 100644 --- a/NewWorldCompanion.Constants/StorageLocationConstants.cs +++ b/NewWorldCompanion.Constants/StorageLocationConstants.cs @@ -3,6 +3,7 @@ public class StorageLocationConstants { public const string Brightwood = "Brightwood"; + public const string BrimstoneSandsNewCorsica = "Brimstone Sands - New Corsica"; public const string CutlassKeys = "Cutlass Keys"; public const string EbonscaleReach = "Ebonscale Reach"; public const string EdengroveLastStand = "Edengrove - Last Stand"; diff --git a/NewWorldCompanion.Entities/CraftingRecipeJson.cs b/NewWorldCompanion.Entities/CraftingRecipeJson.cs index df4f5f3..1d78444 100644 --- a/NewWorldCompanion.Entities/CraftingRecipeJson.cs +++ b/NewWorldCompanion.Entities/CraftingRecipeJson.cs @@ -4,8 +4,34 @@ namespace NewWorldCompanion.Entities { public class CraftingRecipeJson { + /// Crafted item Category + public string CraftingCategory { get; set; } = string.Empty; + /// Crafted item ItemId + public string ItemID { get; set; } = string.Empty; /// Matches SalvageAchievement from MasterItemDefinitionsCraftingJson public string RequiredAchievementID { get; set; } = string.Empty; public string Tradeskill { get; set; } = string.Empty; + + public string Ingredient1 { get; set; } = string.Empty; + public string Ingredient2 { get; set; } = string.Empty; + public string Ingredient3 { get; set; } = string.Empty; + public string Ingredient4 { get; set; } = string.Empty; + public string Ingredient5 { get; set; } = string.Empty; + public string Ingredient6 { get; set; } = string.Empty; + public string Ingredient7 { get; set; } = string.Empty; + public string Type1 { get; set; } = string.Empty; + public string Type2 { get; set; } = string.Empty; + public string Type3 { get; set; } = string.Empty; + public string Type4 { get; set; } = string.Empty; + public string Type5 { get; set; } = string.Empty; + public string Type6 { get; set; } = string.Empty; + public string Type7 { get; set; } = string.Empty; + public int Qty1 { get; set; } = 0; + public int Qty2 { get; set; } = 0; + public int Qty3 { get; set; } = 0; + public int Qty4 { get; set; } = 0; + public int Qty5 { get; set; } = 0; + public int Qty6 { get; set; } = 0; + public int Qty7 { get; set; } = 0; } } \ No newline at end of file diff --git a/NewWorldCompanion.Entities/MasterItemDefinitionsJson.cs b/NewWorldCompanion.Entities/MasterItemDefinitionsJson.cs index 132cc79..159bfd4 100644 --- a/NewWorldCompanion.Entities/MasterItemDefinitionsJson.cs +++ b/NewWorldCompanion.Entities/MasterItemDefinitionsJson.cs @@ -14,5 +14,9 @@ public class MasterItemDefinitionsJson : ItemDefinition public string SalvageAchievement { get; set; } = string.Empty; /// Used as Tradeskill value for MusicSheets in CraftingRecipe public string TradingFamily { get; set; } = string.Empty; + /// Item category. Used to categorise, filter, and sort resources. + public string ItemClass { get; set; } = string.Empty; + /// Item tier. Used to sort resources. + public int Tier { get; set; } = 0; } } diff --git a/NewWorldCompanion.Entities/NwmarketpriceJson.cs b/NewWorldCompanion.Entities/NwmarketpriceJson.cs index b5ef18d..aca5266 100644 --- a/NewWorldCompanion.Entities/NwmarketpriceJson.cs +++ b/NewWorldCompanion.Entities/NwmarketpriceJson.cs @@ -7,43 +7,77 @@ using System.Text.Json.Nodes; using System.Text.Json.Serialization; using System.Threading.Tasks; +using System.Windows; namespace NewWorldCompanion.Entities { public class NwmarketpriceJson { public string item_name { get; set; } = string.Empty; - public string last_checked { get; set; } = string.Empty; - //public string recent_lowest_price { get; set; } = string.Empty; + public DateTime last_checked { get; set; } = DateTime.MinValue; public double recent_lowest_price { get; set; } = 0.0; - public List avg_graph_data { get; set; } = new List(); + public List price_graph_data { get; set; } = new List(); + public int price_change { get; set; } + + [JsonIgnore] + public string last_checked_string + { + get + { + return last_checked.ToString(); + } + } [JsonIgnore] public string RecentLowestPriceAvg { - get + get { string price = string.Empty; - //NumberStyles style = NumberStyles.AllowDecimalPoint; try { - if (avg_graph_data.Count() > 0) + if (price_graph_data.Count() > 0) { - AvgGraph priceData = avg_graph_data.Last(); - price = priceData.price.ToString("F2"); + GrapData priceData = price_graph_data.Last(); + price = priceData.RollingAverage.ToString("F2"); } } - catch (Exception){} - + catch (Exception) { } + return price; } } } - public class AvgGraph + public class GrapData { - public DateTime datetime { get; set; } - public double price { get; set; } + /* + // Is the total available of that day. All listings. + [JsonPropertyName("avail")] + public int Avail { get; set; } + [JsonPropertyName("date_only")] + public string DateOnly { get; set; } = string.Empty; + [JsonPropertyName("price_date")] + public DateTime PriceDate { get; set; } = DateTime.MinValue; + // Lowest price seen that day of any scan. + [JsonPropertyName("lowest_price")] + public double LowestPrice { get; set; } + // The available of the lowest price on the server that day. + [JsonPropertyName("single_price_avail")] + public int SinglePriceAvail { get; set; } + // Average price of the lowest 10 prices of the last scan. + [JsonPropertyName("avg_price")] + public double AvgPrice { get; set; } + // Average available of the lowest 10 prices of the last scan + [JsonPropertyName("avg_qty")] + public double AvgQty { get; set; } + */ + + /// + /// The exponential moving average of the lowest prices seen each day for the past 15 days. + /// + [JsonPropertyName("rolling_average")] + public double RollingAverage { get; set; } } } diff --git a/NewWorldCompanion.Entities/PersistableOverlayResource.cs b/NewWorldCompanion.Entities/PersistableOverlayResource.cs new file mode 100644 index 0000000..aa95345 --- /dev/null +++ b/NewWorldCompanion.Entities/PersistableOverlayResource.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NewWorldCompanion.Entities +{ + public class PersistableOverlayResource + { + public string ItemId { get; set; } = string.Empty; + public List PersistableOverlayResourceRecipes { get; set; } = new List { }; + } + + public class PersistableOverlayResourceRecipe + { + public string ItemId { get; set; } = string.Empty; + public bool IsVisible { get; set; } = false; + } +} diff --git a/NewWorldCompanion.Entities/SettingsNWC.cs b/NewWorldCompanion.Entities/SettingsNWC.cs index 15a1273..40dab32 100644 --- a/NewWorldCompanion.Entities/SettingsNWC.cs +++ b/NewWorldCompanion.Entities/SettingsNWC.cs @@ -12,6 +12,7 @@ public class SettingsNWC public bool DebugModeActive { get; set; } = false; // Overlay + public bool ExtendedTooltipEnabled { get; set; } = false; public int PriceServerId { get; set; } = 1; // Shape detection diff --git a/NewWorldCompanion.Helpers/DoubleConverter.cs b/NewWorldCompanion.Helpers/DoubleConverter.cs index b43e49b..e08fa4a 100644 --- a/NewWorldCompanion.Helpers/DoubleConverter.cs +++ b/NewWorldCompanion.Helpers/DoubleConverter.cs @@ -16,9 +16,9 @@ public override void Write(Utf8JsonWriter writer, double value, JsonSerializerOp public override double Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) => reader.TokenType switch { - JsonTokenType.True => 0.00, + JsonTokenType.True => 1.00, JsonTokenType.False => 0.00, - JsonTokenType.String => double.TryParse(reader.GetString(), out var b) ? b : 0.00, + JsonTokenType.String => double.TryParse(reader.GetString(), out var d) ? d : 0.00, JsonTokenType.Number => reader.TryGetDouble(out double d) ? d : 0.00, JsonTokenType.Null => 0.00, _ => throw new JsonException(), diff --git a/NewWorldCompanion.Helpers/IntConverter.cs b/NewWorldCompanion.Helpers/IntConverter.cs new file mode 100644 index 0000000..aa8c2e2 --- /dev/null +++ b/NewWorldCompanion.Helpers/IntConverter.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.Threading.Tasks; + +namespace NewWorldCompanion.Helpers +{ + public class IntConverter : JsonConverter + { + public override void Write(Utf8JsonWriter writer, int value, JsonSerializerOptions options) => + writer.WriteNumberValue(value); + + public override int Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) => + reader.TokenType switch + { + JsonTokenType.True => 1, + JsonTokenType.False => 0, + JsonTokenType.String => int.TryParse(reader.GetString(), out var i) ? i : 0, + JsonTokenType.Number => reader.GetInt32(), + JsonTokenType.Null => 0, + _ => throw new JsonException(), + }; + + + } +} \ No newline at end of file diff --git a/NewWorldCompanion.Interfaces/INewWorldDataStore.cs b/NewWorldCompanion.Interfaces/INewWorldDataStore.cs index b0c0b89..9835203 100644 --- a/NewWorldCompanion.Interfaces/INewWorldDataStore.cs +++ b/NewWorldCompanion.Interfaces/INewWorldDataStore.cs @@ -14,5 +14,8 @@ public interface INewWorldDataStore string GetItemId(string itemName); ItemDefinition? GetItem(string itemId); string GetLevenshteinItemName(string itemName); + List GetOverlayResources(); + string GetItemLocalisation(string itemMasterName); + List GetRelatedRecipes(string itemId); } } diff --git a/NewWorldCompanion.Interfaces/IRelatedPriceManager.cs b/NewWorldCompanion.Interfaces/IRelatedPriceManager.cs new file mode 100644 index 0000000..fba278d --- /dev/null +++ b/NewWorldCompanion.Interfaces/IRelatedPriceManager.cs @@ -0,0 +1,20 @@ +using NewWorldCompanion.Entities; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace NewWorldCompanion.Interfaces +{ + public interface IRelatedPriceManager + { + List PersistableOverlayResources + { + get; + } + + void SaveRelatedPricesConfig(); + void SetRawResourceRecipeVisibility(string itemIDRawResource, string itemID, bool isVisible); + } +} diff --git a/NewWorldCompanion.Services/Data/CraftingRecipes.json b/NewWorldCompanion.Services/Data/CraftingRecipes.json index 0663900..833b045 100644 --- a/NewWorldCompanion.Services/Data/CraftingRecipes.json +++ b/NewWorldCompanion.Services/Data/CraftingRecipes.json @@ -9005,6 +9005,1823 @@ "PerkCost": null, "GemSlotCost": null }, + { + "RecipeID": "CS_CastGypsum_Head", + "FirstCraftAchievementId": "", + "RecipeNameOverride": "", + "CraftingCategory": "GypsumCasting", + "CraftingGroup": "OverchargedCasts", + "AdditionalFilterText": "@Metal_CategoryName", + "RecipeTags": "", + "DisplayIngredients": "OverchargedOrb", + "bKnownByDefault": false, + "bListedByDefault": true, + "CraftAll": true, + "IsRefining": true, + "IsProcedural": false, + "MaxPerkItemsAllowed": null, + "PerkItemsBucketPush": null, + "ExpertiseBumpChanceOverride": null, + "IsExpertiseBasedGS": null, + "HWMProgressionID": "", + "IsTemporary": false, + "CraftingFee": 500, + "UseCraftingTax": 1, + "Tradeskill": "", + "RecipeLevel": 0, + "StationType1": "gypsumstation1", + "StationType2": "", + "StationType3": "", + "StationType4": "", + "CraftingTime": 1, + "OutputQty": 1, + "ItemID": "CastGypsum_Head", + "SkipGrantItems": null, + "SkipGrantItemsDesc": "", + "SkipGrantItemsTitle": "", + "SkipGrantItemsBody": "", + "BaseGearScore": null, + "BaseTier": null, + "ProceduralTierID1": "", + "ProceduralTierID2": "", + "ProceduralTierID3": "", + "ProceduralTierID4": "", + "ProceduralTierID5": "", + "RequiredAchievementID": "", + "UnlockedAchievementID": "", + "UnlockedAchievementBlocksRecrafting": null, + "Ingredient1": "OverchargedOrb", + "Type1": "Item", + "Ingredient2": "", + "Type2": "", + "Ingredient3": "", + "Type3": "", + "Ingredient4": "", + "Type4": "", + "Ingredient5": "", + "Type5": "", + "Ingredient6": "", + "Type6": "", + "Ingredient7": "", + "Type7": "", + "Qty1": 1, + "Qty2": null, + "Qty3": null, + "Qty4": null, + "Qty5": null, + "Qty6": null, + "Qty7": null, + "GameEventID": "", + "Game Event Validation": true, + "CooldownSeconds": null, + "CooldownQuantity": 1, + "GearScoreBonus": "", + "GearScoreReduction": "", + "BonusItemChance": null, + "BonusItemChanceIncrease": "", + "BonusItemChanceDecrease": "", + "AttributeCost": null, + "PerkCost": null, + "GemSlotCost": null + }, + { + "RecipeID": "CS_CastGypsum_Chest", + "FirstCraftAchievementId": "", + "RecipeNameOverride": "", + "CraftingCategory": "GypsumCasting", + "CraftingGroup": "OverchargedCasts", + "AdditionalFilterText": "@Metal_CategoryName", + "RecipeTags": "", + "DisplayIngredients": "OverchargedOrb", + "bKnownByDefault": false, + "bListedByDefault": true, + "CraftAll": true, + "IsRefining": true, + "IsProcedural": false, + "MaxPerkItemsAllowed": null, + "PerkItemsBucketPush": null, + "ExpertiseBumpChanceOverride": null, + "IsExpertiseBasedGS": null, + "HWMProgressionID": "", + "IsTemporary": false, + "CraftingFee": 500, + "UseCraftingTax": 1, + "Tradeskill": "", + "RecipeLevel": 0, + "StationType1": "gypsumstation1", + "StationType2": "", + "StationType3": "", + "StationType4": "", + "CraftingTime": 1, + "OutputQty": 1, + "ItemID": "CastGypsum_Chest", + "SkipGrantItems": null, + "SkipGrantItemsDesc": "", + "SkipGrantItemsTitle": "", + "SkipGrantItemsBody": "", + "BaseGearScore": null, + "BaseTier": null, + "ProceduralTierID1": "", + "ProceduralTierID2": "", + "ProceduralTierID3": "", + "ProceduralTierID4": "", + "ProceduralTierID5": "", + "RequiredAchievementID": "", + "UnlockedAchievementID": "", + "UnlockedAchievementBlocksRecrafting": null, + "Ingredient1": "OverchargedOrb", + "Type1": "Item", + "Ingredient2": "", + "Type2": "", + "Ingredient3": "", + "Type3": "", + "Ingredient4": "", + "Type4": "", + "Ingredient5": "", + "Type5": "", + "Ingredient6": "", + "Type6": "", + "Ingredient7": "", + "Type7": "", + "Qty1": 1, + "Qty2": null, + "Qty3": null, + "Qty4": null, + "Qty5": null, + "Qty6": null, + "Qty7": null, + "GameEventID": "", + "Game Event Validation": true, + "CooldownSeconds": null, + "CooldownQuantity": 1, + "GearScoreBonus": "", + "GearScoreReduction": "", + "BonusItemChance": null, + "BonusItemChanceIncrease": "", + "BonusItemChanceDecrease": "", + "AttributeCost": null, + "PerkCost": null, + "GemSlotCost": null + }, + { + "RecipeID": "CS_CastGypsum_Hands", + "FirstCraftAchievementId": "", + "RecipeNameOverride": "", + "CraftingCategory": "GypsumCasting", + "CraftingGroup": "OverchargedCasts", + "AdditionalFilterText": "@Metal_CategoryName", + "RecipeTags": "", + "DisplayIngredients": "OverchargedOrb", + "bKnownByDefault": false, + "bListedByDefault": true, + "CraftAll": true, + "IsRefining": true, + "IsProcedural": false, + "MaxPerkItemsAllowed": null, + "PerkItemsBucketPush": null, + "ExpertiseBumpChanceOverride": null, + "IsExpertiseBasedGS": null, + "HWMProgressionID": "", + "IsTemporary": false, + "CraftingFee": 500, + "UseCraftingTax": 1, + "Tradeskill": "", + "RecipeLevel": 0, + "StationType1": "gypsumstation1", + "StationType2": "", + "StationType3": "", + "StationType4": "", + "CraftingTime": 1, + "OutputQty": 1, + "ItemID": "CastGypsum_Hands", + "SkipGrantItems": null, + "SkipGrantItemsDesc": "", + "SkipGrantItemsTitle": "", + "SkipGrantItemsBody": "", + "BaseGearScore": null, + "BaseTier": null, + "ProceduralTierID1": "", + "ProceduralTierID2": "", + "ProceduralTierID3": "", + "ProceduralTierID4": "", + "ProceduralTierID5": "", + "RequiredAchievementID": "", + "UnlockedAchievementID": "", + "UnlockedAchievementBlocksRecrafting": null, + "Ingredient1": "OverchargedOrb", + "Type1": "Item", + "Ingredient2": "", + "Type2": "", + "Ingredient3": "", + "Type3": "", + "Ingredient4": "", + "Type4": "", + "Ingredient5": "", + "Type5": "", + "Ingredient6": "", + "Type6": "", + "Ingredient7": "", + "Type7": "", + "Qty1": 1, + "Qty2": null, + "Qty3": null, + "Qty4": null, + "Qty5": null, + "Qty6": null, + "Qty7": null, + "GameEventID": "", + "Game Event Validation": true, + "CooldownSeconds": null, + "CooldownQuantity": 1, + "GearScoreBonus": "", + "GearScoreReduction": "", + "BonusItemChance": null, + "BonusItemChanceIncrease": "", + "BonusItemChanceDecrease": "", + "AttributeCost": null, + "PerkCost": null, + "GemSlotCost": null + }, + { + "RecipeID": "CS_CastGypsum_Legs", + "FirstCraftAchievementId": "", + "RecipeNameOverride": "", + "CraftingCategory": "GypsumCasting", + "CraftingGroup": "OverchargedCasts", + "AdditionalFilterText": "@Metal_CategoryName", + "RecipeTags": "", + "DisplayIngredients": "OverchargedOrb", + "bKnownByDefault": false, + "bListedByDefault": true, + "CraftAll": true, + "IsRefining": true, + "IsProcedural": false, + "MaxPerkItemsAllowed": null, + "PerkItemsBucketPush": null, + "ExpertiseBumpChanceOverride": null, + "IsExpertiseBasedGS": null, + "HWMProgressionID": "", + "IsTemporary": false, + "CraftingFee": 500, + "UseCraftingTax": 1, + "Tradeskill": "", + "RecipeLevel": 0, + "StationType1": "gypsumstation1", + "StationType2": "", + "StationType3": "", + "StationType4": "", + "CraftingTime": 1, + "OutputQty": 1, + "ItemID": "CastGypsum_Legs", + "SkipGrantItems": null, + "SkipGrantItemsDesc": "", + "SkipGrantItemsTitle": "", + "SkipGrantItemsBody": "", + "BaseGearScore": null, + "BaseTier": null, + "ProceduralTierID1": "", + "ProceduralTierID2": "", + "ProceduralTierID3": "", + "ProceduralTierID4": "", + "ProceduralTierID5": "", + "RequiredAchievementID": "", + "UnlockedAchievementID": "", + "UnlockedAchievementBlocksRecrafting": null, + "Ingredient1": "OverchargedOrb", + "Type1": "Item", + "Ingredient2": "", + "Type2": "", + "Ingredient3": "", + "Type3": "", + "Ingredient4": "", + "Type4": "", + "Ingredient5": "", + "Type5": "", + "Ingredient6": "", + "Type6": "", + "Ingredient7": "", + "Type7": "", + "Qty1": 1, + "Qty2": null, + "Qty3": null, + "Qty4": null, + "Qty5": null, + "Qty6": null, + "Qty7": null, + "GameEventID": "", + "Game Event Validation": true, + "CooldownSeconds": null, + "CooldownQuantity": 1, + "GearScoreBonus": "", + "GearScoreReduction": "", + "BonusItemChance": null, + "BonusItemChanceIncrease": "", + "BonusItemChanceDecrease": "", + "AttributeCost": null, + "PerkCost": null, + "GemSlotCost": null + }, + { + "RecipeID": "CS_CastGypsum_Feet", + "FirstCraftAchievementId": "", + "RecipeNameOverride": "", + "CraftingCategory": "GypsumCasting", + "CraftingGroup": "OverchargedCasts", + "AdditionalFilterText": "@Metal_CategoryName", + "RecipeTags": "", + "DisplayIngredients": "OverchargedOrb", + "bKnownByDefault": false, + "bListedByDefault": true, + "CraftAll": true, + "IsRefining": true, + "IsProcedural": false, + "MaxPerkItemsAllowed": null, + "PerkItemsBucketPush": null, + "ExpertiseBumpChanceOverride": null, + "IsExpertiseBasedGS": null, + "HWMProgressionID": "", + "IsTemporary": false, + "CraftingFee": 500, + "UseCraftingTax": 1, + "Tradeskill": "", + "RecipeLevel": 0, + "StationType1": "gypsumstation1", + "StationType2": "", + "StationType3": "", + "StationType4": "", + "CraftingTime": 1, + "OutputQty": 1, + "ItemID": "CastGypsum_Feet", + "SkipGrantItems": null, + "SkipGrantItemsDesc": "", + "SkipGrantItemsTitle": "", + "SkipGrantItemsBody": "", + "BaseGearScore": null, + "BaseTier": null, + "ProceduralTierID1": "", + "ProceduralTierID2": "", + "ProceduralTierID3": "", + "ProceduralTierID4": "", + "ProceduralTierID5": "", + "RequiredAchievementID": "", + "UnlockedAchievementID": "", + "UnlockedAchievementBlocksRecrafting": null, + "Ingredient1": "OverchargedOrb", + "Type1": "Item", + "Ingredient2": "", + "Type2": "", + "Ingredient3": "", + "Type3": "", + "Ingredient4": "", + "Type4": "", + "Ingredient5": "", + "Type5": "", + "Ingredient6": "", + "Type6": "", + "Ingredient7": "", + "Type7": "", + "Qty1": 1, + "Qty2": null, + "Qty3": null, + "Qty4": null, + "Qty5": null, + "Qty6": null, + "Qty7": null, + "GameEventID": "", + "Game Event Validation": true, + "CooldownSeconds": null, + "CooldownQuantity": 1, + "GearScoreBonus": "", + "GearScoreReduction": "", + "BonusItemChance": null, + "BonusItemChanceIncrease": "", + "BonusItemChanceDecrease": "", + "AttributeCost": null, + "PerkCost": null, + "GemSlotCost": null + }, + { + "RecipeID": "CS_CastGypsum_Sword", + "FirstCraftAchievementId": "", + "RecipeNameOverride": "", + "CraftingCategory": "GypsumCasting", + "CraftingGroup": "OverchargedCasts", + "AdditionalFilterText": "@Metal_CategoryName", + "RecipeTags": "", + "DisplayIngredients": "OverchargedOrb", + "bKnownByDefault": false, + "bListedByDefault": true, + "CraftAll": true, + "IsRefining": true, + "IsProcedural": false, + "MaxPerkItemsAllowed": null, + "PerkItemsBucketPush": null, + "ExpertiseBumpChanceOverride": null, + "IsExpertiseBasedGS": null, + "HWMProgressionID": "", + "IsTemporary": false, + "CraftingFee": 500, + "UseCraftingTax": 1, + "Tradeskill": "", + "RecipeLevel": 0, + "StationType1": "gypsumstation1", + "StationType2": "", + "StationType3": "", + "StationType4": "", + "CraftingTime": 1, + "OutputQty": 1, + "ItemID": "CastGypsum_Sword", + "SkipGrantItems": null, + "SkipGrantItemsDesc": "", + "SkipGrantItemsTitle": "", + "SkipGrantItemsBody": "", + "BaseGearScore": null, + "BaseTier": null, + "ProceduralTierID1": "", + "ProceduralTierID2": "", + "ProceduralTierID3": "", + "ProceduralTierID4": "", + "ProceduralTierID5": "", + "RequiredAchievementID": "", + "UnlockedAchievementID": "", + "UnlockedAchievementBlocksRecrafting": null, + "Ingredient1": "OverchargedOrb", + "Type1": "Item", + "Ingredient2": "", + "Type2": "", + "Ingredient3": "", + "Type3": "", + "Ingredient4": "", + "Type4": "", + "Ingredient5": "", + "Type5": "", + "Ingredient6": "", + "Type6": "", + "Ingredient7": "", + "Type7": "", + "Qty1": 1, + "Qty2": null, + "Qty3": null, + "Qty4": null, + "Qty5": null, + "Qty6": null, + "Qty7": null, + "GameEventID": "", + "Game Event Validation": true, + "CooldownSeconds": null, + "CooldownQuantity": 1, + "GearScoreBonus": "", + "GearScoreReduction": "", + "BonusItemChance": null, + "BonusItemChanceIncrease": "", + "BonusItemChanceDecrease": "", + "AttributeCost": null, + "PerkCost": null, + "GemSlotCost": null + }, + { + "RecipeID": "CS_CastGypsum_GreatAxe", + "FirstCraftAchievementId": "", + "RecipeNameOverride": "", + "CraftingCategory": "GypsumCasting", + "CraftingGroup": "OverchargedCasts", + "AdditionalFilterText": "@Metal_CategoryName", + "RecipeTags": "", + "DisplayIngredients": "OverchargedOrb", + "bKnownByDefault": false, + "bListedByDefault": true, + "CraftAll": true, + "IsRefining": true, + "IsProcedural": false, + "MaxPerkItemsAllowed": null, + "PerkItemsBucketPush": null, + "ExpertiseBumpChanceOverride": null, + "IsExpertiseBasedGS": null, + "HWMProgressionID": "", + "IsTemporary": false, + "CraftingFee": 500, + "UseCraftingTax": 1, + "Tradeskill": "", + "RecipeLevel": 0, + "StationType1": "gypsumstation1", + "StationType2": "", + "StationType3": "", + "StationType4": "", + "CraftingTime": 1, + "OutputQty": 1, + "ItemID": "CastGypsum_GreatAxe", + "SkipGrantItems": null, + "SkipGrantItemsDesc": "", + "SkipGrantItemsTitle": "", + "SkipGrantItemsBody": "", + "BaseGearScore": null, + "BaseTier": null, + "ProceduralTierID1": "", + "ProceduralTierID2": "", + "ProceduralTierID3": "", + "ProceduralTierID4": "", + "ProceduralTierID5": "", + "RequiredAchievementID": "", + "UnlockedAchievementID": "", + "UnlockedAchievementBlocksRecrafting": null, + "Ingredient1": "OverchargedOrb", + "Type1": "Item", + "Ingredient2": "", + "Type2": "", + "Ingredient3": "", + "Type3": "", + "Ingredient4": "", + "Type4": "", + "Ingredient5": "", + "Type5": "", + "Ingredient6": "", + "Type6": "", + "Ingredient7": "", + "Type7": "", + "Qty1": 1, + "Qty2": null, + "Qty3": null, + "Qty4": null, + "Qty5": null, + "Qty6": null, + "Qty7": null, + "GameEventID": "", + "Game Event Validation": true, + "CooldownSeconds": null, + "CooldownQuantity": 1, + "GearScoreBonus": "", + "GearScoreReduction": "", + "BonusItemChance": null, + "BonusItemChanceIncrease": "", + "BonusItemChanceDecrease": "", + "AttributeCost": null, + "PerkCost": null, + "GemSlotCost": null + }, + { + "RecipeID": "CS_CastGypsum_WarHammer", + "FirstCraftAchievementId": "", + "RecipeNameOverride": "", + "CraftingCategory": "GypsumCasting", + "CraftingGroup": "OverchargedCasts", + "AdditionalFilterText": "@Metal_CategoryName", + "RecipeTags": "", + "DisplayIngredients": "OverchargedOrb", + "bKnownByDefault": false, + "bListedByDefault": true, + "CraftAll": true, + "IsRefining": true, + "IsProcedural": false, + "MaxPerkItemsAllowed": null, + "PerkItemsBucketPush": null, + "ExpertiseBumpChanceOverride": null, + "IsExpertiseBasedGS": null, + "HWMProgressionID": "", + "IsTemporary": false, + "CraftingFee": 500, + "UseCraftingTax": 1, + "Tradeskill": "", + "RecipeLevel": 0, + "StationType1": "gypsumstation1", + "StationType2": "", + "StationType3": "", + "StationType4": "", + "CraftingTime": 1, + "OutputQty": 1, + "ItemID": "CastGypsum_WarHammer", + "SkipGrantItems": null, + "SkipGrantItemsDesc": "", + "SkipGrantItemsTitle": "", + "SkipGrantItemsBody": "", + "BaseGearScore": null, + "BaseTier": null, + "ProceduralTierID1": "", + "ProceduralTierID2": "", + "ProceduralTierID3": "", + "ProceduralTierID4": "", + "ProceduralTierID5": "", + "RequiredAchievementID": "", + "UnlockedAchievementID": "", + "UnlockedAchievementBlocksRecrafting": null, + "Ingredient1": "OverchargedOrb", + "Type1": "Item", + "Ingredient2": "", + "Type2": "", + "Ingredient3": "", + "Type3": "", + "Ingredient4": "", + "Type4": "", + "Ingredient5": "", + "Type5": "", + "Ingredient6": "", + "Type6": "", + "Ingredient7": "", + "Type7": "", + "Qty1": 1, + "Qty2": null, + "Qty3": null, + "Qty4": null, + "Qty5": null, + "Qty6": null, + "Qty7": null, + "GameEventID": "", + "Game Event Validation": true, + "CooldownSeconds": null, + "CooldownQuantity": 1, + "GearScoreBonus": "", + "GearScoreReduction": "", + "BonusItemChance": null, + "BonusItemChanceIncrease": "", + "BonusItemChanceDecrease": "", + "AttributeCost": null, + "PerkCost": null, + "GemSlotCost": null + }, + { + "RecipeID": "CS_CastGypsum_GreatSword", + "FirstCraftAchievementId": "", + "RecipeNameOverride": "", + "CraftingCategory": "GypsumCasting", + "CraftingGroup": "OverchargedCasts", + "AdditionalFilterText": "@Metal_CategoryName", + "RecipeTags": "", + "DisplayIngredients": "OverchargedOrb", + "bKnownByDefault": false, + "bListedByDefault": true, + "CraftAll": true, + "IsRefining": true, + "IsProcedural": false, + "MaxPerkItemsAllowed": null, + "PerkItemsBucketPush": null, + "ExpertiseBumpChanceOverride": null, + "IsExpertiseBasedGS": null, + "HWMProgressionID": "", + "IsTemporary": false, + "CraftingFee": 500, + "UseCraftingTax": 1, + "Tradeskill": "", + "RecipeLevel": 0, + "StationType1": "gypsumstation1", + "StationType2": "", + "StationType3": "", + "StationType4": "", + "CraftingTime": 1, + "OutputQty": 1, + "ItemID": "CastGypsum_GreatSword", + "SkipGrantItems": null, + "SkipGrantItemsDesc": "", + "SkipGrantItemsTitle": "", + "SkipGrantItemsBody": "", + "BaseGearScore": null, + "BaseTier": null, + "ProceduralTierID1": "", + "ProceduralTierID2": "", + "ProceduralTierID3": "", + "ProceduralTierID4": "", + "ProceduralTierID5": "", + "RequiredAchievementID": "", + "UnlockedAchievementID": "", + "UnlockedAchievementBlocksRecrafting": null, + "Ingredient1": "OverchargedOrb", + "Type1": "Item", + "Ingredient2": "", + "Type2": "", + "Ingredient3": "", + "Type3": "", + "Ingredient4": "", + "Type4": "", + "Ingredient5": "", + "Type5": "", + "Ingredient6": "", + "Type6": "", + "Ingredient7": "", + "Type7": "", + "Qty1": 1, + "Qty2": null, + "Qty3": null, + "Qty4": null, + "Qty5": null, + "Qty6": null, + "Qty7": null, + "GameEventID": "", + "Game Event Validation": true, + "CooldownSeconds": null, + "CooldownQuantity": 1, + "GearScoreBonus": "", + "GearScoreReduction": "", + "BonusItemChance": null, + "BonusItemChanceIncrease": "", + "BonusItemChanceDecrease": "", + "AttributeCost": null, + "PerkCost": null, + "GemSlotCost": null + }, + { + "RecipeID": "CS_CastGypsum_Rapier", + "FirstCraftAchievementId": "", + "RecipeNameOverride": "", + "CraftingCategory": "GypsumCasting", + "CraftingGroup": "OverchargedCasts", + "AdditionalFilterText": "@Metal_CategoryName", + "RecipeTags": "", + "DisplayIngredients": "OverchargedOrb", + "bKnownByDefault": false, + "bListedByDefault": true, + "CraftAll": true, + "IsRefining": true, + "IsProcedural": false, + "MaxPerkItemsAllowed": null, + "PerkItemsBucketPush": null, + "ExpertiseBumpChanceOverride": null, + "IsExpertiseBasedGS": null, + "HWMProgressionID": "", + "IsTemporary": false, + "CraftingFee": 500, + "UseCraftingTax": 1, + "Tradeskill": "", + "RecipeLevel": 0, + "StationType1": "gypsumstation1", + "StationType2": "", + "StationType3": "", + "StationType4": "", + "CraftingTime": 1, + "OutputQty": 1, + "ItemID": "CastGypsum_Rapier", + "SkipGrantItems": null, + "SkipGrantItemsDesc": "", + "SkipGrantItemsTitle": "", + "SkipGrantItemsBody": "", + "BaseGearScore": null, + "BaseTier": null, + "ProceduralTierID1": "", + "ProceduralTierID2": "", + "ProceduralTierID3": "", + "ProceduralTierID4": "", + "ProceduralTierID5": "", + "RequiredAchievementID": "", + "UnlockedAchievementID": "", + "UnlockedAchievementBlocksRecrafting": null, + "Ingredient1": "OverchargedOrb", + "Type1": "Item", + "Ingredient2": "", + "Type2": "", + "Ingredient3": "", + "Type3": "", + "Ingredient4": "", + "Type4": "", + "Ingredient5": "", + "Type5": "", + "Ingredient6": "", + "Type6": "", + "Ingredient7": "", + "Type7": "", + "Qty1": 1, + "Qty2": null, + "Qty3": null, + "Qty4": null, + "Qty5": null, + "Qty6": null, + "Qty7": null, + "GameEventID": "", + "Game Event Validation": true, + "CooldownSeconds": null, + "CooldownQuantity": 1, + "GearScoreBonus": "", + "GearScoreReduction": "", + "BonusItemChance": null, + "BonusItemChanceIncrease": "", + "BonusItemChanceDecrease": "", + "AttributeCost": null, + "PerkCost": null, + "GemSlotCost": null + }, + { + "RecipeID": "CS_CastGypsum_Hatchet", + "FirstCraftAchievementId": "", + "RecipeNameOverride": "", + "CraftingCategory": "GypsumCasting", + "CraftingGroup": "OverchargedCasts", + "AdditionalFilterText": "@Metal_CategoryName", + "RecipeTags": "", + "DisplayIngredients": "OverchargedOrb", + "bKnownByDefault": false, + "bListedByDefault": true, + "CraftAll": true, + "IsRefining": true, + "IsProcedural": false, + "MaxPerkItemsAllowed": null, + "PerkItemsBucketPush": null, + "ExpertiseBumpChanceOverride": null, + "IsExpertiseBasedGS": null, + "HWMProgressionID": "", + "IsTemporary": false, + "CraftingFee": 500, + "UseCraftingTax": 1, + "Tradeskill": "", + "RecipeLevel": 0, + "StationType1": "gypsumstation1", + "StationType2": "", + "StationType3": "", + "StationType4": "", + "CraftingTime": 1, + "OutputQty": 1, + "ItemID": "CastGypsum_Hatchet", + "SkipGrantItems": null, + "SkipGrantItemsDesc": "", + "SkipGrantItemsTitle": "", + "SkipGrantItemsBody": "", + "BaseGearScore": null, + "BaseTier": null, + "ProceduralTierID1": "", + "ProceduralTierID2": "", + "ProceduralTierID3": "", + "ProceduralTierID4": "", + "ProceduralTierID5": "", + "RequiredAchievementID": "", + "UnlockedAchievementID": "", + "UnlockedAchievementBlocksRecrafting": null, + "Ingredient1": "OverchargedOrb", + "Type1": "Item", + "Ingredient2": "", + "Type2": "", + "Ingredient3": "", + "Type3": "", + "Ingredient4": "", + "Type4": "", + "Ingredient5": "", + "Type5": "", + "Ingredient6": "", + "Type6": "", + "Ingredient7": "", + "Type7": "", + "Qty1": 1, + "Qty2": null, + "Qty3": null, + "Qty4": null, + "Qty5": null, + "Qty6": null, + "Qty7": null, + "GameEventID": "", + "Game Event Validation": true, + "CooldownSeconds": null, + "CooldownQuantity": 1, + "GearScoreBonus": "", + "GearScoreReduction": "", + "BonusItemChance": null, + "BonusItemChanceIncrease": "", + "BonusItemChanceDecrease": "", + "AttributeCost": null, + "PerkCost": null, + "GemSlotCost": null + }, + { + "RecipeID": "CS_CastGypsum_Bow", + "FirstCraftAchievementId": "", + "RecipeNameOverride": "", + "CraftingCategory": "GypsumCasting", + "CraftingGroup": "OverchargedCasts", + "AdditionalFilterText": "@Metal_CategoryName", + "RecipeTags": "", + "DisplayIngredients": "OverchargedOrb", + "bKnownByDefault": false, + "bListedByDefault": true, + "CraftAll": true, + "IsRefining": true, + "IsProcedural": false, + "MaxPerkItemsAllowed": null, + "PerkItemsBucketPush": null, + "ExpertiseBumpChanceOverride": null, + "IsExpertiseBasedGS": null, + "HWMProgressionID": "", + "IsTemporary": false, + "CraftingFee": 500, + "UseCraftingTax": 1, + "Tradeskill": "", + "RecipeLevel": 0, + "StationType1": "gypsumstation1", + "StationType2": "", + "StationType3": "", + "StationType4": "", + "CraftingTime": 1, + "OutputQty": 1, + "ItemID": "CastGypsum_Bow", + "SkipGrantItems": null, + "SkipGrantItemsDesc": "", + "SkipGrantItemsTitle": "", + "SkipGrantItemsBody": "", + "BaseGearScore": null, + "BaseTier": null, + "ProceduralTierID1": "", + "ProceduralTierID2": "", + "ProceduralTierID3": "", + "ProceduralTierID4": "", + "ProceduralTierID5": "", + "RequiredAchievementID": "", + "UnlockedAchievementID": "", + "UnlockedAchievementBlocksRecrafting": null, + "Ingredient1": "OverchargedOrb", + "Type1": "Item", + "Ingredient2": "", + "Type2": "", + "Ingredient3": "", + "Type3": "", + "Ingredient4": "", + "Type4": "", + "Ingredient5": "", + "Type5": "", + "Ingredient6": "", + "Type6": "", + "Ingredient7": "", + "Type7": "", + "Qty1": 1, + "Qty2": null, + "Qty3": null, + "Qty4": null, + "Qty5": null, + "Qty6": null, + "Qty7": null, + "GameEventID": "", + "Game Event Validation": true, + "CooldownSeconds": null, + "CooldownQuantity": 1, + "GearScoreBonus": "", + "GearScoreReduction": "", + "BonusItemChance": null, + "BonusItemChanceIncrease": "", + "BonusItemChanceDecrease": "", + "AttributeCost": null, + "PerkCost": null, + "GemSlotCost": null + }, + { + "RecipeID": "CS_CastGypsum_Musket", + "FirstCraftAchievementId": "", + "RecipeNameOverride": "", + "CraftingCategory": "GypsumCasting", + "CraftingGroup": "OverchargedCasts", + "AdditionalFilterText": "@Metal_CategoryName", + "RecipeTags": "", + "DisplayIngredients": "OverchargedOrb", + "bKnownByDefault": false, + "bListedByDefault": true, + "CraftAll": true, + "IsRefining": true, + "IsProcedural": false, + "MaxPerkItemsAllowed": null, + "PerkItemsBucketPush": null, + "ExpertiseBumpChanceOverride": null, + "IsExpertiseBasedGS": null, + "HWMProgressionID": "", + "IsTemporary": false, + "CraftingFee": 500, + "UseCraftingTax": 1, + "Tradeskill": "", + "RecipeLevel": 0, + "StationType1": "gypsumstation1", + "StationType2": "", + "StationType3": "", + "StationType4": "", + "CraftingTime": 1, + "OutputQty": 1, + "ItemID": "CastGypsum_Musket", + "SkipGrantItems": null, + "SkipGrantItemsDesc": "", + "SkipGrantItemsTitle": "", + "SkipGrantItemsBody": "", + "BaseGearScore": null, + "BaseTier": null, + "ProceduralTierID1": "", + "ProceduralTierID2": "", + "ProceduralTierID3": "", + "ProceduralTierID4": "", + "ProceduralTierID5": "", + "RequiredAchievementID": "", + "UnlockedAchievementID": "", + "UnlockedAchievementBlocksRecrafting": null, + "Ingredient1": "OverchargedOrb", + "Type1": "Item", + "Ingredient2": "", + "Type2": "", + "Ingredient3": "", + "Type3": "", + "Ingredient4": "", + "Type4": "", + "Ingredient5": "", + "Type5": "", + "Ingredient6": "", + "Type6": "", + "Ingredient7": "", + "Type7": "", + "Qty1": 1, + "Qty2": null, + "Qty3": null, + "Qty4": null, + "Qty5": null, + "Qty6": null, + "Qty7": null, + "GameEventID": "", + "Game Event Validation": true, + "CooldownSeconds": null, + "CooldownQuantity": 1, + "GearScoreBonus": "", + "GearScoreReduction": "", + "BonusItemChance": null, + "BonusItemChanceIncrease": "", + "BonusItemChanceDecrease": "", + "AttributeCost": null, + "PerkCost": null, + "GemSlotCost": null + }, + { + "RecipeID": "CS_CastGypsum_Blunerbuss", + "FirstCraftAchievementId": "", + "RecipeNameOverride": "", + "CraftingCategory": "GypsumCasting", + "CraftingGroup": "OverchargedCasts", + "AdditionalFilterText": "@Metal_CategoryName", + "RecipeTags": "", + "DisplayIngredients": "OverchargedOrb", + "bKnownByDefault": false, + "bListedByDefault": true, + "CraftAll": true, + "IsRefining": true, + "IsProcedural": false, + "MaxPerkItemsAllowed": null, + "PerkItemsBucketPush": null, + "ExpertiseBumpChanceOverride": null, + "IsExpertiseBasedGS": null, + "HWMProgressionID": "", + "IsTemporary": false, + "CraftingFee": 500, + "UseCraftingTax": 1, + "Tradeskill": "", + "RecipeLevel": 0, + "StationType1": "gypsumstation1", + "StationType2": "", + "StationType3": "", + "StationType4": "", + "CraftingTime": 1, + "OutputQty": 1, + "ItemID": "CastGypsum_Blunderbuss", + "SkipGrantItems": null, + "SkipGrantItemsDesc": "", + "SkipGrantItemsTitle": "", + "SkipGrantItemsBody": "", + "BaseGearScore": null, + "BaseTier": null, + "ProceduralTierID1": "", + "ProceduralTierID2": "", + "ProceduralTierID3": "", + "ProceduralTierID4": "", + "ProceduralTierID5": "", + "RequiredAchievementID": "", + "UnlockedAchievementID": "", + "UnlockedAchievementBlocksRecrafting": null, + "Ingredient1": "OverchargedOrb", + "Type1": "Item", + "Ingredient2": "", + "Type2": "", + "Ingredient3": "", + "Type3": "", + "Ingredient4": "", + "Type4": "", + "Ingredient5": "", + "Type5": "", + "Ingredient6": "", + "Type6": "", + "Ingredient7": "", + "Type7": "", + "Qty1": 1, + "Qty2": null, + "Qty3": null, + "Qty4": null, + "Qty5": null, + "Qty6": null, + "Qty7": null, + "GameEventID": "", + "Game Event Validation": true, + "CooldownSeconds": null, + "CooldownQuantity": 1, + "GearScoreBonus": "", + "GearScoreReduction": "", + "BonusItemChance": null, + "BonusItemChanceIncrease": "", + "BonusItemChanceDecrease": "", + "AttributeCost": null, + "PerkCost": null, + "GemSlotCost": null + }, + { + "RecipeID": "CS_CastGypsum_LifeStaff", + "FirstCraftAchievementId": "", + "RecipeNameOverride": "", + "CraftingCategory": "GypsumCasting", + "CraftingGroup": "OverchargedCasts", + "AdditionalFilterText": "@Metal_CategoryName", + "RecipeTags": "", + "DisplayIngredients": "OverchargedOrb", + "bKnownByDefault": false, + "bListedByDefault": true, + "CraftAll": true, + "IsRefining": true, + "IsProcedural": false, + "MaxPerkItemsAllowed": null, + "PerkItemsBucketPush": null, + "ExpertiseBumpChanceOverride": null, + "IsExpertiseBasedGS": null, + "HWMProgressionID": "", + "IsTemporary": false, + "CraftingFee": 500, + "UseCraftingTax": 1, + "Tradeskill": "", + "RecipeLevel": 0, + "StationType1": "gypsumstation1", + "StationType2": "", + "StationType3": "", + "StationType4": "", + "CraftingTime": 1, + "OutputQty": 1, + "ItemID": "CastGypsum_LifeStaff", + "SkipGrantItems": null, + "SkipGrantItemsDesc": "", + "SkipGrantItemsTitle": "", + "SkipGrantItemsBody": "", + "BaseGearScore": null, + "BaseTier": null, + "ProceduralTierID1": "", + "ProceduralTierID2": "", + "ProceduralTierID3": "", + "ProceduralTierID4": "", + "ProceduralTierID5": "", + "RequiredAchievementID": "", + "UnlockedAchievementID": "", + "UnlockedAchievementBlocksRecrafting": null, + "Ingredient1": "OverchargedOrb", + "Type1": "Item", + "Ingredient2": "", + "Type2": "", + "Ingredient3": "", + "Type3": "", + "Ingredient4": "", + "Type4": "", + "Ingredient5": "", + "Type5": "", + "Ingredient6": "", + "Type6": "", + "Ingredient7": "", + "Type7": "", + "Qty1": 1, + "Qty2": null, + "Qty3": null, + "Qty4": null, + "Qty5": null, + "Qty6": null, + "Qty7": null, + "GameEventID": "", + "Game Event Validation": true, + "CooldownSeconds": null, + "CooldownQuantity": 1, + "GearScoreBonus": "", + "GearScoreReduction": "", + "BonusItemChance": null, + "BonusItemChanceIncrease": "", + "BonusItemChanceDecrease": "", + "AttributeCost": null, + "PerkCost": null, + "GemSlotCost": null + }, + { + "RecipeID": "CS_CastGypsum_FireStaff", + "FirstCraftAchievementId": "", + "RecipeNameOverride": "", + "CraftingCategory": "GypsumCasting", + "CraftingGroup": "OverchargedCasts", + "AdditionalFilterText": "@Metal_CategoryName", + "RecipeTags": "", + "DisplayIngredients": "OverchargedOrb", + "bKnownByDefault": false, + "bListedByDefault": true, + "CraftAll": true, + "IsRefining": true, + "IsProcedural": false, + "MaxPerkItemsAllowed": null, + "PerkItemsBucketPush": null, + "ExpertiseBumpChanceOverride": null, + "IsExpertiseBasedGS": null, + "HWMProgressionID": "", + "IsTemporary": false, + "CraftingFee": 500, + "UseCraftingTax": 1, + "Tradeskill": "", + "RecipeLevel": 0, + "StationType1": "gypsumstation1", + "StationType2": "", + "StationType3": "", + "StationType4": "", + "CraftingTime": 1, + "OutputQty": 1, + "ItemID": "CastGypsum_FireStaff", + "SkipGrantItems": null, + "SkipGrantItemsDesc": "", + "SkipGrantItemsTitle": "", + "SkipGrantItemsBody": "", + "BaseGearScore": null, + "BaseTier": null, + "ProceduralTierID1": "", + "ProceduralTierID2": "", + "ProceduralTierID3": "", + "ProceduralTierID4": "", + "ProceduralTierID5": "", + "RequiredAchievementID": "", + "UnlockedAchievementID": "", + "UnlockedAchievementBlocksRecrafting": null, + "Ingredient1": "OverchargedOrb", + "Type1": "Item", + "Ingredient2": "", + "Type2": "", + "Ingredient3": "", + "Type3": "", + "Ingredient4": "", + "Type4": "", + "Ingredient5": "", + "Type5": "", + "Ingredient6": "", + "Type6": "", + "Ingredient7": "", + "Type7": "", + "Qty1": 1, + "Qty2": null, + "Qty3": null, + "Qty4": null, + "Qty5": null, + "Qty6": null, + "Qty7": null, + "GameEventID": "", + "Game Event Validation": true, + "CooldownSeconds": null, + "CooldownQuantity": 1, + "GearScoreBonus": "", + "GearScoreReduction": "", + "BonusItemChance": null, + "BonusItemChanceIncrease": "", + "BonusItemChanceDecrease": "", + "AttributeCost": null, + "PerkCost": null, + "GemSlotCost": null + }, + { + "RecipeID": "CS_CastGypsum_IceGauntlet", + "FirstCraftAchievementId": "", + "RecipeNameOverride": "", + "CraftingCategory": "GypsumCasting", + "CraftingGroup": "OverchargedCasts", + "AdditionalFilterText": "@Metal_CategoryName", + "RecipeTags": "", + "DisplayIngredients": "OverchargedOrb", + "bKnownByDefault": false, + "bListedByDefault": true, + "CraftAll": true, + "IsRefining": true, + "IsProcedural": false, + "MaxPerkItemsAllowed": null, + "PerkItemsBucketPush": null, + "ExpertiseBumpChanceOverride": null, + "IsExpertiseBasedGS": null, + "HWMProgressionID": "", + "IsTemporary": false, + "CraftingFee": 500, + "UseCraftingTax": 1, + "Tradeskill": "", + "RecipeLevel": 0, + "StationType1": "gypsumstation1", + "StationType2": "", + "StationType3": "", + "StationType4": "", + "CraftingTime": 1, + "OutputQty": 1, + "ItemID": "CastGypsum_IceGauntlet", + "SkipGrantItems": null, + "SkipGrantItemsDesc": "", + "SkipGrantItemsTitle": "", + "SkipGrantItemsBody": "", + "BaseGearScore": null, + "BaseTier": null, + "ProceduralTierID1": "", + "ProceduralTierID2": "", + "ProceduralTierID3": "", + "ProceduralTierID4": "", + "ProceduralTierID5": "", + "RequiredAchievementID": "", + "UnlockedAchievementID": "", + "UnlockedAchievementBlocksRecrafting": null, + "Ingredient1": "OverchargedOrb", + "Type1": "Item", + "Ingredient2": "", + "Type2": "", + "Ingredient3": "", + "Type3": "", + "Ingredient4": "", + "Type4": "", + "Ingredient5": "", + "Type5": "", + "Ingredient6": "", + "Type6": "", + "Ingredient7": "", + "Type7": "", + "Qty1": 1, + "Qty2": null, + "Qty3": null, + "Qty4": null, + "Qty5": null, + "Qty6": null, + "Qty7": null, + "GameEventID": "", + "Game Event Validation": true, + "CooldownSeconds": null, + "CooldownQuantity": 1, + "GearScoreBonus": "", + "GearScoreReduction": "", + "BonusItemChance": null, + "BonusItemChanceIncrease": "", + "BonusItemChanceDecrease": "", + "AttributeCost": null, + "PerkCost": null, + "GemSlotCost": null + }, + { + "RecipeID": "CS_CastGypsum_VoidGauntlet", + "FirstCraftAchievementId": "", + "RecipeNameOverride": "", + "CraftingCategory": "GypsumCasting", + "CraftingGroup": "OverchargedCasts", + "AdditionalFilterText": "@Metal_CategoryName", + "RecipeTags": "", + "DisplayIngredients": "OverchargedOrb", + "bKnownByDefault": false, + "bListedByDefault": true, + "CraftAll": true, + "IsRefining": true, + "IsProcedural": false, + "MaxPerkItemsAllowed": null, + "PerkItemsBucketPush": null, + "ExpertiseBumpChanceOverride": null, + "IsExpertiseBasedGS": null, + "HWMProgressionID": "", + "IsTemporary": false, + "CraftingFee": 500, + "UseCraftingTax": 1, + "Tradeskill": "", + "RecipeLevel": 0, + "StationType1": "gypsumstation1", + "StationType2": "", + "StationType3": "", + "StationType4": "", + "CraftingTime": 1, + "OutputQty": 1, + "ItemID": "CastGypsum_VoidGauntlet", + "SkipGrantItems": null, + "SkipGrantItemsDesc": "", + "SkipGrantItemsTitle": "", + "SkipGrantItemsBody": "", + "BaseGearScore": null, + "BaseTier": null, + "ProceduralTierID1": "", + "ProceduralTierID2": "", + "ProceduralTierID3": "", + "ProceduralTierID4": "", + "ProceduralTierID5": "", + "RequiredAchievementID": "", + "UnlockedAchievementID": "", + "UnlockedAchievementBlocksRecrafting": null, + "Ingredient1": "OverchargedOrb", + "Type1": "Item", + "Ingredient2": "", + "Type2": "", + "Ingredient3": "", + "Type3": "", + "Ingredient4": "", + "Type4": "", + "Ingredient5": "", + "Type5": "", + "Ingredient6": "", + "Type6": "", + "Ingredient7": "", + "Type7": "", + "Qty1": 1, + "Qty2": null, + "Qty3": null, + "Qty4": null, + "Qty5": null, + "Qty6": null, + "Qty7": null, + "GameEventID": "", + "Game Event Validation": true, + "CooldownSeconds": null, + "CooldownQuantity": 1, + "GearScoreBonus": "", + "GearScoreReduction": "", + "BonusItemChance": null, + "BonusItemChanceIncrease": "", + "BonusItemChanceDecrease": "", + "AttributeCost": null, + "PerkCost": null, + "GemSlotCost": null + }, + { + "RecipeID": "CS_CastGypsum_Shield", + "FirstCraftAchievementId": "", + "RecipeNameOverride": "", + "CraftingCategory": "GypsumCasting", + "CraftingGroup": "OverchargedCasts", + "AdditionalFilterText": "@Metal_CategoryName", + "RecipeTags": "", + "DisplayIngredients": "OverchargedOrb", + "bKnownByDefault": false, + "bListedByDefault": true, + "CraftAll": true, + "IsRefining": true, + "IsProcedural": false, + "MaxPerkItemsAllowed": null, + "PerkItemsBucketPush": null, + "ExpertiseBumpChanceOverride": null, + "IsExpertiseBasedGS": null, + "HWMProgressionID": "", + "IsTemporary": false, + "CraftingFee": 500, + "UseCraftingTax": 1, + "Tradeskill": "", + "RecipeLevel": 0, + "StationType1": "gypsumstation1", + "StationType2": "", + "StationType3": "", + "StationType4": "", + "CraftingTime": 1, + "OutputQty": 1, + "ItemID": "CastGypsum_Shield", + "SkipGrantItems": null, + "SkipGrantItemsDesc": "", + "SkipGrantItemsTitle": "", + "SkipGrantItemsBody": "", + "BaseGearScore": null, + "BaseTier": null, + "ProceduralTierID1": "", + "ProceduralTierID2": "", + "ProceduralTierID3": "", + "ProceduralTierID4": "", + "ProceduralTierID5": "", + "RequiredAchievementID": "", + "UnlockedAchievementID": "", + "UnlockedAchievementBlocksRecrafting": null, + "Ingredient1": "OverchargedOrb", + "Type1": "Item", + "Ingredient2": "", + "Type2": "", + "Ingredient3": "", + "Type3": "", + "Ingredient4": "", + "Type4": "", + "Ingredient5": "", + "Type5": "", + "Ingredient6": "", + "Type6": "", + "Ingredient7": "", + "Type7": "", + "Qty1": 1, + "Qty2": null, + "Qty3": null, + "Qty4": null, + "Qty5": null, + "Qty6": null, + "Qty7": null, + "GameEventID": "", + "Game Event Validation": true, + "CooldownSeconds": null, + "CooldownQuantity": 1, + "GearScoreBonus": "", + "GearScoreReduction": "", + "BonusItemChance": null, + "BonusItemChanceIncrease": "", + "BonusItemChanceDecrease": "", + "AttributeCost": null, + "PerkCost": null, + "GemSlotCost": null + }, + { + "RecipeID": "CS_CastGypsum_Spear", + "FirstCraftAchievementId": "", + "RecipeNameOverride": "", + "CraftingCategory": "GypsumCasting", + "CraftingGroup": "OverchargedCasts", + "AdditionalFilterText": "@Metal_CategoryName", + "RecipeTags": "", + "DisplayIngredients": "OverchargedOrb", + "bKnownByDefault": false, + "bListedByDefault": true, + "CraftAll": true, + "IsRefining": true, + "IsProcedural": false, + "MaxPerkItemsAllowed": null, + "PerkItemsBucketPush": null, + "ExpertiseBumpChanceOverride": null, + "IsExpertiseBasedGS": null, + "HWMProgressionID": "", + "IsTemporary": false, + "CraftingFee": 500, + "UseCraftingTax": 1, + "Tradeskill": "", + "RecipeLevel": 0, + "StationType1": "gypsumstation1", + "StationType2": "", + "StationType3": "", + "StationType4": "", + "CraftingTime": 1, + "OutputQty": 1, + "ItemID": "CastGypsum_Spear", + "SkipGrantItems": null, + "SkipGrantItemsDesc": "", + "SkipGrantItemsTitle": "", + "SkipGrantItemsBody": "", + "BaseGearScore": null, + "BaseTier": null, + "ProceduralTierID1": "", + "ProceduralTierID2": "", + "ProceduralTierID3": "", + "ProceduralTierID4": "", + "ProceduralTierID5": "", + "RequiredAchievementID": "", + "UnlockedAchievementID": "", + "UnlockedAchievementBlocksRecrafting": null, + "Ingredient1": "OverchargedOrb", + "Type1": "Item", + "Ingredient2": "", + "Type2": "", + "Ingredient3": "", + "Type3": "", + "Ingredient4": "", + "Type4": "", + "Ingredient5": "", + "Type5": "", + "Ingredient6": "", + "Type6": "", + "Ingredient7": "", + "Type7": "", + "Qty1": 1, + "Qty2": null, + "Qty3": null, + "Qty4": null, + "Qty5": null, + "Qty6": null, + "Qty7": null, + "GameEventID": "", + "Game Event Validation": true, + "CooldownSeconds": null, + "CooldownQuantity": 1, + "GearScoreBonus": "", + "GearScoreReduction": "", + "BonusItemChance": null, + "BonusItemChanceIncrease": "", + "BonusItemChanceDecrease": "", + "AttributeCost": null, + "PerkCost": null, + "GemSlotCost": null + }, + { + "RecipeID": "CS_CastGypsum_Ring", + "FirstCraftAchievementId": "", + "RecipeNameOverride": "", + "CraftingCategory": "GypsumCasting", + "CraftingGroup": "OverchargedCasts", + "AdditionalFilterText": "@Metal_CategoryName", + "RecipeTags": "", + "DisplayIngredients": "OverchargedOrb", + "bKnownByDefault": false, + "bListedByDefault": true, + "CraftAll": true, + "IsRefining": true, + "IsProcedural": false, + "MaxPerkItemsAllowed": null, + "PerkItemsBucketPush": null, + "ExpertiseBumpChanceOverride": null, + "IsExpertiseBasedGS": null, + "HWMProgressionID": "", + "IsTemporary": false, + "CraftingFee": 500, + "UseCraftingTax": 1, + "Tradeskill": "", + "RecipeLevel": 0, + "StationType1": "gypsumstation1", + "StationType2": "", + "StationType3": "", + "StationType4": "", + "CraftingTime": 1, + "OutputQty": 1, + "ItemID": "CastGypsum_Ring", + "SkipGrantItems": null, + "SkipGrantItemsDesc": "", + "SkipGrantItemsTitle": "", + "SkipGrantItemsBody": "", + "BaseGearScore": null, + "BaseTier": null, + "ProceduralTierID1": "", + "ProceduralTierID2": "", + "ProceduralTierID3": "", + "ProceduralTierID4": "", + "ProceduralTierID5": "", + "RequiredAchievementID": "", + "UnlockedAchievementID": "", + "UnlockedAchievementBlocksRecrafting": null, + "Ingredient1": "OverchargedOrb", + "Type1": "Item", + "Ingredient2": "", + "Type2": "", + "Ingredient3": "", + "Type3": "", + "Ingredient4": "", + "Type4": "", + "Ingredient5": "", + "Type5": "", + "Ingredient6": "", + "Type6": "", + "Ingredient7": "", + "Type7": "", + "Qty1": 1, + "Qty2": null, + "Qty3": null, + "Qty4": null, + "Qty5": null, + "Qty6": null, + "Qty7": null, + "GameEventID": "", + "Game Event Validation": true, + "CooldownSeconds": null, + "CooldownQuantity": 1, + "GearScoreBonus": "", + "GearScoreReduction": "", + "BonusItemChance": null, + "BonusItemChanceIncrease": "", + "BonusItemChanceDecrease": "", + "AttributeCost": null, + "PerkCost": null, + "GemSlotCost": null + }, + { + "RecipeID": "CS_CastGypsum_Amulet", + "FirstCraftAchievementId": "", + "RecipeNameOverride": "", + "CraftingCategory": "GypsumCasting", + "CraftingGroup": "OverchargedCasts", + "AdditionalFilterText": "@Metal_CategoryName", + "RecipeTags": "", + "DisplayIngredients": "OverchargedOrb", + "bKnownByDefault": false, + "bListedByDefault": true, + "CraftAll": true, + "IsRefining": true, + "IsProcedural": false, + "MaxPerkItemsAllowed": null, + "PerkItemsBucketPush": null, + "ExpertiseBumpChanceOverride": null, + "IsExpertiseBasedGS": null, + "HWMProgressionID": "", + "IsTemporary": false, + "CraftingFee": 500, + "UseCraftingTax": 1, + "Tradeskill": "", + "RecipeLevel": 0, + "StationType1": "gypsumstation1", + "StationType2": "", + "StationType3": "", + "StationType4": "", + "CraftingTime": 1, + "OutputQty": 1, + "ItemID": "CastGypsum_Amulet", + "SkipGrantItems": null, + "SkipGrantItemsDesc": "", + "SkipGrantItemsTitle": "", + "SkipGrantItemsBody": "", + "BaseGearScore": null, + "BaseTier": null, + "ProceduralTierID1": "", + "ProceduralTierID2": "", + "ProceduralTierID3": "", + "ProceduralTierID4": "", + "ProceduralTierID5": "", + "RequiredAchievementID": "", + "UnlockedAchievementID": "", + "UnlockedAchievementBlocksRecrafting": null, + "Ingredient1": "OverchargedOrb", + "Type1": "Item", + "Ingredient2": "", + "Type2": "", + "Ingredient3": "", + "Type3": "", + "Ingredient4": "", + "Type4": "", + "Ingredient5": "", + "Type5": "", + "Ingredient6": "", + "Type6": "", + "Ingredient7": "", + "Type7": "", + "Qty1": 1, + "Qty2": null, + "Qty3": null, + "Qty4": null, + "Qty5": null, + "Qty6": null, + "Qty7": null, + "GameEventID": "", + "Game Event Validation": true, + "CooldownSeconds": null, + "CooldownQuantity": 1, + "GearScoreBonus": "", + "GearScoreReduction": "", + "BonusItemChance": null, + "BonusItemChanceIncrease": "", + "BonusItemChanceDecrease": "", + "AttributeCost": null, + "PerkCost": null, + "GemSlotCost": null + }, + { + "RecipeID": "CS_CastGypsum_Earring", + "FirstCraftAchievementId": "", + "RecipeNameOverride": "", + "CraftingCategory": "GypsumCasting", + "CraftingGroup": "OverchargedCasts", + "AdditionalFilterText": "@Metal_CategoryName", + "RecipeTags": "", + "DisplayIngredients": "OverchargedOrb", + "bKnownByDefault": false, + "bListedByDefault": true, + "CraftAll": true, + "IsRefining": true, + "IsProcedural": false, + "MaxPerkItemsAllowed": null, + "PerkItemsBucketPush": null, + "ExpertiseBumpChanceOverride": null, + "IsExpertiseBasedGS": null, + "HWMProgressionID": "", + "IsTemporary": false, + "CraftingFee": 500, + "UseCraftingTax": 1, + "Tradeskill": "", + "RecipeLevel": 0, + "StationType1": "gypsumstation1", + "StationType2": "", + "StationType3": "", + "StationType4": "", + "CraftingTime": 1, + "OutputQty": 1, + "ItemID": "CastGypsum_Earring", + "SkipGrantItems": null, + "SkipGrantItemsDesc": "", + "SkipGrantItemsTitle": "", + "SkipGrantItemsBody": "", + "BaseGearScore": null, + "BaseTier": null, + "ProceduralTierID1": "", + "ProceduralTierID2": "", + "ProceduralTierID3": "", + "ProceduralTierID4": "", + "ProceduralTierID5": "", + "RequiredAchievementID": "", + "UnlockedAchievementID": "", + "UnlockedAchievementBlocksRecrafting": null, + "Ingredient1": "OverchargedOrb", + "Type1": "Item", + "Ingredient2": "", + "Type2": "", + "Ingredient3": "", + "Type3": "", + "Ingredient4": "", + "Type4": "", + "Ingredient5": "", + "Type5": "", + "Ingredient6": "", + "Type6": "", + "Ingredient7": "", + "Type7": "", + "Qty1": 1, + "Qty2": null, + "Qty3": null, + "Qty4": null, + "Qty5": null, + "Qty6": null, + "Qty7": null, + "GameEventID": "", + "Game Event Validation": true, + "CooldownSeconds": null, + "CooldownQuantity": 1, + "GearScoreBonus": "", + "GearScoreReduction": "", + "BonusItemChance": null, + "BonusItemChanceIncrease": "", + "BonusItemChanceDecrease": "", + "AttributeCost": null, + "PerkCost": null, + "GemSlotCost": null + }, { "RecipeID": "Perk Item Conversion", "FirstCraftAchievementId": "", @@ -319541,7 +321358,7 @@ "Qty5": null, "Qty6": null, "Qty7": null, - "GameEventID": "Craft_ArcanaT1", + "GameEventID": "", "Game Event Validation": true, "CooldownSeconds": null, "CooldownQuantity": null, @@ -319620,7 +321437,7 @@ "Qty5": 1, "Qty6": null, "Qty7": null, - "GameEventID": "Craft_ArcanaT2", + "GameEventID": "", "Game Event Validation": true, "CooldownSeconds": null, "CooldownQuantity": null, diff --git a/NewWorldCompanion.Services/Data/HouseItems.json b/NewWorldCompanion.Services/Data/HouseItems.json index 4869770..61e95fd 100644 --- a/NewWorldCompanion.Services/Data/HouseItems.json +++ b/NewWorldCompanion.Services/Data/HouseItems.json @@ -16007,6 +16007,64 @@ "AudioDestroyed": "", "Notes": "" }, + { + "HouseItemID": "House_HousingItem_Buff_SPECIAL_Food_TurkeyTerror_T1", + "ExcludeFromGame": 0, + "PrefabPath": "Housing/Items/Buff_Trophies/HousingItem_Buff_SPECIAL_Food_TurkeyTerror_T1", + "DEV-FurnitureSet": "NA-Buffs", + "UIHousingCategory": "Trophies", + "ItemTypeDisplayName": "", + "HousingTag1 Placed": "OnWall", + "HousingTag2 Points": "+IsTrophyBuff", + "HousingTag3 Limiter": "", + "HousingTag5 Buffs": "+OtherFoodTimeBonus", + "HousingTags": "OnWall+IsTrophyBuff+OtherFoodTimeBonus", + "IsEntitlement": "0", + "AttributionId": "TurkeyTerror_2022", + "HowToOptain (Primarily)": "Loot Drop - Legendary", + "ItemRarity": "Legendary", + "ForceRarity": 4, + "RankingPointsDuplicateLimit": 1, + "RankingPointsNegativeLimit": 2, + "PointModifier": 0, + "RankingPoints": 0.2, + "MaxPotentialPoints": 0.2, + "HousingStatusEffect": "TurkeyTerror_FoodEffectDurationBonus", + "StorageBonus": null, + "InteractionAnimationID": "", + "Name": "@House_HousingItem_Buff_SPECIAL_Food_TurkeyTerror_T1_MasterName", + "Description": "@House_HousingItem_Buff_SPECIAL_Food_TurkeyTerror_T1_Description", + "IconPath": "lyshineui/images/icons/items/HousingItem/House_HousingItem_Buff_SPECIAL_Food_TurkeyTerror_T1.png", + "HiResIconPath": "lyshineui/images/icons/items_hires/House_HousingItem_Buff_SPECIAL_Food_TurkeyTerror_T1.png", + "Weight": 10, + "TradingCategory": "", + "TradingFamily": "", + "TradingGroup": "", + "IconCaptureGroup": "", + "ItemType": "HousingItem", + "UiItemClass": "UI_Furniture", + "Tier": 5, + "IsSalvageable": false, + "SalvageResources": false, + "IsRepairable": false, + "BindOnPickup": true, + "CraftingRecipe": "", + "RepairRecipe": "", + "SalvageRecipe": "", + "SalvageGameEventID": "", + "RepairDustModifier": 0, + "ConfirmBeforeUse": false, + "ConsumeOnUse": false, + "MaxStackSize": 1, + "DeathDropPercentage": 0, + "Nonremovable": false, + "AudioPickup": "Play_UI_Pickup_Generic", + "AudioPlace": "Play_UI_Drop_Generic", + "AudioUse": "Play_UI_Use_Generic", + "AudioCreated": "Play_UI_Created_Generic", + "AudioDestroyed": "", + "Notes": "" + }, { "HouseItemID": "House_HousingItem_ExploreVista_Painting_EastBrimstone01", "ExcludeFromGame": 0, @@ -23663,6 +23721,64 @@ "AudioDestroyed": "", "Notes": "" }, + { + "HouseItemID": "House_HousingItem_Chair_HolidayTurkey2022_EggStool01", + "ExcludeFromGame": 0, + "PrefabPath": "Housing/Items/InGame_Rewards/TurkeyTerrorEvent/HousingItem_Chair_HolidayTurkey2022_EggStool01", + "DEV-FurnitureSet": "Pack-03-HolidayFall", + "UIHousingCategory": "Chairs", + "ItemTypeDisplayName": "", + "HousingTag1 Placed": "OnFloor", + "HousingTag2 Points": "+IsChairOther", + "HousingTag3 Limiter": "", + "HousingTag5 Buffs": "", + "HousingTags": "OnFloor+IsChairOther", + "IsEntitlement": "0", + "AttributionId": "TurkeyTerror_2022", + "HowToOptain (Primarily)": "Loot Drop - Rare", + "ItemRarity": "Rare", + "ForceRarity": 2, + "RankingPointsDuplicateLimit": 6, + "RankingPointsNegativeLimit": 12, + "PointModifier": 0, + "RankingPoints": 0.11, + "MaxPotentialPoints": 0.66, + "HousingStatusEffect": "", + "StorageBonus": null, + "InteractionAnimationID": "HousingItemSitOnChair", + "Name": "@House_HousingItem_Chair_HolidayTurkey2022_EggStool01_MasterName", + "Description": "@House_HousingItem_Chair_HolidayTurkey2022_EggStool01_Description", + "IconPath": "lyshineui/images/icons/items/HousingItem/House_HousingItem_Chair_HolidayTurkey2022_EggStool01.png", + "HiResIconPath": "lyshineui/images/icons/items_hires/House_HousingItem_Chair_HolidayTurkey2022_EggStool01.png", + "Weight": 5, + "TradingCategory": "", + "TradingFamily": "", + "TradingGroup": "", + "IconCaptureGroup": "", + "ItemType": "HousingItem", + "UiItemClass": "UI_Furniture", + "Tier": 3, + "IsSalvageable": false, + "SalvageResources": false, + "IsRepairable": false, + "BindOnPickup": true, + "CraftingRecipe": "", + "RepairRecipe": "", + "SalvageRecipe": "", + "SalvageGameEventID": "", + "RepairDustModifier": 0, + "ConfirmBeforeUse": false, + "ConsumeOnUse": false, + "MaxStackSize": 6, + "DeathDropPercentage": 0, + "Nonremovable": false, + "AudioPickup": "Play_UI_Pickup_Generic", + "AudioPlace": "Play_UI_Drop_Generic", + "AudioUse": "Play_UI_Use_Generic", + "AudioCreated": "Play_UI_Created_Generic", + "AudioDestroyed": "", + "Notes": "" + }, { "HouseItemID": "House_HousingItem_Pet_Holiday_Pumpklin_Orange", "ExcludeFromGame": 0, @@ -23721,6 +23837,64 @@ "AudioDestroyed": "", "Notes": "" }, + { + "HouseItemID": "House_HousingItem_Pet_Holiday_Turkey_Pilgrim", + "ExcludeFromGame": 0, + "PrefabPath": "Housing/Items/InGame_Rewards/TurkeyTerrorEvent/HousingItem_Pet_HolidayTurkey2022_Turkey_Pilgrim", + "DEV-FurnitureSet": "Pack-03-HolidayFall", + "UIHousingCategory": "Pets", + "ItemTypeDisplayName": "", + "HousingTag1 Placed": "OnFloor", + "HousingTag2 Points": "+IsAnimal", + "HousingTag3 Limiter": "+IsAnimated", + "HousingTag5 Buffs": "+NoStacking", + "HousingTags": "OnFloor+IsAnimal+IsAnimated+NoStacking", + "IsEntitlement": "0", + "AttributionId": "TurkeyTerror_2022", + "HowToOptain (Primarily)": "Loot Drop - Elite", + "ItemRarity": "Epic", + "ForceRarity": 3, + "RankingPointsDuplicateLimit": 1, + "RankingPointsNegativeLimit": 2, + "PointModifier": 0, + "RankingPoints": 0.16, + "MaxPotentialPoints": 0.16, + "HousingStatusEffect": "", + "StorageBonus": null, + "InteractionAnimationID": "HousingItemFeedBird", + "Name": "@House_HousingItem_Pet_Holiday_Turkey_Pilgrim_MasterName", + "Description": "@House_HousingItem_Pet_Holiday_Turkey_Pilgrim_Description", + "IconPath": "lyshineui/images/icons/items/HousingItem/House_HousingItem_Pet_Holiday_Turkey_Pilgrim.png", + "HiResIconPath": "lyshineui/images/icons/items_hires/House_HousingItem_Pet_Holiday_Turkey_Pilgrim.png", + "Weight": 10, + "TradingCategory": "", + "TradingFamily": "", + "TradingGroup": "", + "IconCaptureGroup": "", + "ItemType": "HousingItem", + "UiItemClass": "UI_Furniture", + "Tier": 4, + "IsSalvageable": false, + "SalvageResources": false, + "IsRepairable": false, + "BindOnPickup": true, + "CraftingRecipe": "", + "RepairRecipe": "", + "SalvageRecipe": "", + "SalvageGameEventID": "", + "RepairDustModifier": 0, + "ConfirmBeforeUse": false, + "ConsumeOnUse": false, + "MaxStackSize": 1, + "DeathDropPercentage": 0, + "Nonremovable": false, + "AudioPickup": "Play_UI_Pickup_Generic", + "AudioPlace": "Play_UI_Drop_Generic", + "AudioUse": "Play_UI_Use_Generic", + "AudioCreated": "Play_UI_Created_Generic", + "AudioDestroyed": "", + "Notes": "" + }, { "HouseItemID": "House_HousingItem_Bed_Settler_Bed01_A", "ExcludeFromGame": 0, diff --git a/NewWorldCompanion.Services/Data/MasterItemDefinitions_Common.json b/NewWorldCompanion.Services/Data/MasterItemDefinitions_Common.json index 2372aac..ca5b5cf 100644 --- a/NewWorldCompanion.Services/Data/MasterItemDefinitions_Common.json +++ b/NewWorldCompanion.Services/Data/MasterItemDefinitions_Common.json @@ -6673,6 +6673,852 @@ "EventId": "", "AttributionId": "" }, + { + "ItemID": "TurkeyTerrorCoinBag", + "Name": "@TurkeyTerrorCoinBag_MasterName", + "ItemType": "Resource", + "ItemTypeDisplayName": "@ui_itemtypedescription_resource", + "Description": "@TurkeyTerrorCoinBag_Description", + "ItemClass": "Resource+LootContainer", + "TradingCategory": "", + "TradingFamily": "", + "TradingGroup": "", + "BindOnPickup": 1, + "BindOnEquip": null, + "GearScoreOverride": null, + "MinGearScore": null, + "MaxGearScore": null, + "Tier": 3, + "ItemStatsRef": "", + "GrantsHWMBump": "", + "IgnoreNameChanges": null, + "IgnoreHWMScaling": "", + "CanHavePerks": 0, + "CanReplaceGem": null, + "Perk1": "", + "Perk2": "", + "Perk3": "", + "Perk4": "", + "Perk5": "", + "PerkBucket1": "", + "PerkBucket2": "", + "PerkBucket3": "", + "PerkBucket4": "", + "PerkBucket5": "", + "ForceRarity": 1, + "RequiredLevel": null, + "UseTypeAffix": 0, + "UseMaterialAffix": 0, + "UseMagicAffix": 0, + "IconCaptureGroup": "", + "UiItemClass": "UI_Rewards", + "ArmorAppearanceM": "", + "ArmorAppearanceF": "", + "WeaponAppearanceOverride": "", + "ConfirmDestroy": "", + "ConfirmBeforeUse": 0, + "ConsumeOnUse": 0, + "PrefabPath": "", + "HousingTags": "", + "IconPath": "lyshineui/images/icons/items/Resource/SeedPouchT1.png", + "HiResIconPath": "lyshineui/images/icons/items_hires/SeedPouchT1.png", + "MaxStackSize": 10000, + "DeathDropPercentage": 0, + "Nonremovable": null, + "IsMissionItem": null, + "IsUniqueItem": "", + "ContainerLevel": null, + "ContainerGS": null, + "ExceedMinIndex": "", + "ExceedMaxIndex": "", + "IsSalvageable": 1, + "SalvageResources": 1, + "IsRepairable": 0, + "RepairDustModifier": null, + "RepairRecipe": "", + "CraftingRecipe": "", + "RepairGameEventID": "", + "SalvageGameEventID": "EventBagofJuniperBerries", + "SalvageLootTags": "", + "SalvageAchievement": "", + "RepairTypes": "", + "IngredientCategories": "", + "IngredientBonusPrimary": "", + "IngredientBonusSecondary": "", + "IngredientGearScoreBaseBonus": "", + "IngredientGearScoreMaxBonus": "", + "ExtraBonusItemChance": "", + "Durability": null, + "DurabilityDmgOnDeath": null, + "DestroyOnBreak": 0, + "Weight": 1, + "AcquisitionNotificationId": "", + "AudioPickup": "Play_UI_Pickup_Generic", + "AudioPlace": "Play_UI_Drop_Generic", + "AudioUse": "Play_UI_Use_Generic", + "AudioCreated": "Play_UI_Created_Generic", + "AudioDestroyed": "", + "MannequinTag": "", + "SoundTableID": "", + "WarboardGatherStat": "", + "WarboardDepositStat": "", + "Notes": "", + "HideInLootTicker": "", + "EventId": "", + "AttributionId": "TurkeyTerror_2022" + }, + { + "ItemID": "TurkeyTerrorCoinBagLVL1", + "Name": "@TurkeyTerrorCoinBag_MasterName", + "ItemType": "Resource", + "ItemTypeDisplayName": "@ui_itemtypedescription_resource", + "Description": "@TurkeyTerrorCoinBag_Description", + "ItemClass": "Resource+LootContainer", + "TradingCategory": "", + "TradingFamily": "", + "TradingGroup": "", + "BindOnPickup": 1, + "BindOnEquip": null, + "GearScoreOverride": null, + "MinGearScore": null, + "MaxGearScore": null, + "Tier": 3, + "ItemStatsRef": "", + "GrantsHWMBump": "", + "IgnoreNameChanges": null, + "IgnoreHWMScaling": "", + "CanHavePerks": 0, + "CanReplaceGem": null, + "Perk1": "", + "Perk2": "", + "Perk3": "", + "Perk4": "", + "Perk5": "", + "PerkBucket1": "", + "PerkBucket2": "", + "PerkBucket3": "", + "PerkBucket4": "", + "PerkBucket5": "", + "ForceRarity": 1, + "RequiredLevel": null, + "UseTypeAffix": 0, + "UseMaterialAffix": 0, + "UseMagicAffix": 0, + "IconCaptureGroup": "", + "UiItemClass": "UI_Rewards", + "ArmorAppearanceM": "", + "ArmorAppearanceF": "", + "WeaponAppearanceOverride": "", + "ConfirmDestroy": "", + "ConfirmBeforeUse": 0, + "ConsumeOnUse": 0, + "PrefabPath": "", + "HousingTags": "", + "IconPath": "lyshineui/images/icons/items/Resource/SeedPouchT1.png", + "HiResIconPath": "lyshineui/images/icons/items_hires/SeedPouchT1.png", + "MaxStackSize": 10000, + "DeathDropPercentage": 0, + "Nonremovable": null, + "IsMissionItem": null, + "IsUniqueItem": "", + "ContainerLevel": null, + "ContainerGS": null, + "ExceedMinIndex": "", + "ExceedMaxIndex": "", + "IsSalvageable": 1, + "SalvageResources": 1, + "IsRepairable": 0, + "RepairDustModifier": null, + "RepairRecipe": "", + "CraftingRecipe": "", + "RepairGameEventID": "", + "SalvageGameEventID": "EventBagofJuniperBerriesLVL1", + "SalvageLootTags": "", + "SalvageAchievement": "", + "RepairTypes": "", + "IngredientCategories": "", + "IngredientBonusPrimary": "", + "IngredientBonusSecondary": "", + "IngredientGearScoreBaseBonus": "", + "IngredientGearScoreMaxBonus": "", + "ExtraBonusItemChance": "", + "Durability": null, + "DurabilityDmgOnDeath": null, + "DestroyOnBreak": 0, + "Weight": 1, + "AcquisitionNotificationId": "", + "AudioPickup": "Play_UI_Pickup_Generic", + "AudioPlace": "Play_UI_Drop_Generic", + "AudioUse": "Play_UI_Use_Generic", + "AudioCreated": "Play_UI_Created_Generic", + "AudioDestroyed": "", + "MannequinTag": "", + "SoundTableID": "", + "WarboardGatherStat": "", + "WarboardDepositStat": "", + "Notes": "", + "HideInLootTicker": "", + "EventId": "", + "AttributionId": "TurkeyTerror_2022" + }, + { + "ItemID": "TurkeyTerrorCoinBagLVL10", + "Name": "@TurkeyTerrorCoinBag_MasterName", + "ItemType": "Resource", + "ItemTypeDisplayName": "@ui_itemtypedescription_resource", + "Description": "@TurkeyTerrorCoinBag_Description", + "ItemClass": "Resource+LootContainer", + "TradingCategory": "", + "TradingFamily": "", + "TradingGroup": "", + "BindOnPickup": 1, + "BindOnEquip": null, + "GearScoreOverride": null, + "MinGearScore": null, + "MaxGearScore": null, + "Tier": 3, + "ItemStatsRef": "", + "GrantsHWMBump": "", + "IgnoreNameChanges": null, + "IgnoreHWMScaling": "", + "CanHavePerks": 0, + "CanReplaceGem": null, + "Perk1": "", + "Perk2": "", + "Perk3": "", + "Perk4": "", + "Perk5": "", + "PerkBucket1": "", + "PerkBucket2": "", + "PerkBucket3": "", + "PerkBucket4": "", + "PerkBucket5": "", + "ForceRarity": 1, + "RequiredLevel": null, + "UseTypeAffix": 0, + "UseMaterialAffix": 0, + "UseMagicAffix": 0, + "IconCaptureGroup": "", + "UiItemClass": "UI_Rewards", + "ArmorAppearanceM": "", + "ArmorAppearanceF": "", + "WeaponAppearanceOverride": "", + "ConfirmDestroy": "", + "ConfirmBeforeUse": 0, + "ConsumeOnUse": 0, + "PrefabPath": "", + "HousingTags": "", + "IconPath": "lyshineui/images/icons/items/Resource/SeedPouchT1.png", + "HiResIconPath": "lyshineui/images/icons/items_hires/SeedPouchT1.png", + "MaxStackSize": 10000, + "DeathDropPercentage": 0, + "Nonremovable": null, + "IsMissionItem": null, + "IsUniqueItem": "", + "ContainerLevel": null, + "ContainerGS": null, + "ExceedMinIndex": "", + "ExceedMaxIndex": "", + "IsSalvageable": 1, + "SalvageResources": 1, + "IsRepairable": 0, + "RepairDustModifier": null, + "RepairRecipe": "", + "CraftingRecipe": "", + "RepairGameEventID": "", + "SalvageGameEventID": "EventBagofJuniperBerriesLVL10", + "SalvageLootTags": "", + "SalvageAchievement": "", + "RepairTypes": "", + "IngredientCategories": "", + "IngredientBonusPrimary": "", + "IngredientBonusSecondary": "", + "IngredientGearScoreBaseBonus": "", + "IngredientGearScoreMaxBonus": "", + "ExtraBonusItemChance": "", + "Durability": null, + "DurabilityDmgOnDeath": null, + "DestroyOnBreak": 0, + "Weight": 1, + "AcquisitionNotificationId": "", + "AudioPickup": "Play_UI_Pickup_Generic", + "AudioPlace": "Play_UI_Drop_Generic", + "AudioUse": "Play_UI_Use_Generic", + "AudioCreated": "Play_UI_Created_Generic", + "AudioDestroyed": "", + "MannequinTag": "", + "SoundTableID": "", + "WarboardGatherStat": "", + "WarboardDepositStat": "", + "Notes": "", + "HideInLootTicker": "", + "EventId": "", + "AttributionId": "TurkeyTerror_2022" + }, + { + "ItemID": "TurkeyTerrorCoinBagLVL20", + "Name": "@TurkeyTerrorCoinBag_MasterName", + "ItemType": "Resource", + "ItemTypeDisplayName": "@ui_itemtypedescription_resource", + "Description": "@TurkeyTerrorCoinBag_Description", + "ItemClass": "Resource+LootContainer", + "TradingCategory": "", + "TradingFamily": "", + "TradingGroup": "", + "BindOnPickup": 1, + "BindOnEquip": null, + "GearScoreOverride": null, + "MinGearScore": null, + "MaxGearScore": null, + "Tier": 3, + "ItemStatsRef": "", + "GrantsHWMBump": "", + "IgnoreNameChanges": null, + "IgnoreHWMScaling": "", + "CanHavePerks": 0, + "CanReplaceGem": null, + "Perk1": "", + "Perk2": "", + "Perk3": "", + "Perk4": "", + "Perk5": "", + "PerkBucket1": "", + "PerkBucket2": "", + "PerkBucket3": "", + "PerkBucket4": "", + "PerkBucket5": "", + "ForceRarity": 1, + "RequiredLevel": null, + "UseTypeAffix": 0, + "UseMaterialAffix": 0, + "UseMagicAffix": 0, + "IconCaptureGroup": "", + "UiItemClass": "UI_Rewards", + "ArmorAppearanceM": "", + "ArmorAppearanceF": "", + "WeaponAppearanceOverride": "", + "ConfirmDestroy": "", + "ConfirmBeforeUse": 0, + "ConsumeOnUse": 0, + "PrefabPath": "", + "HousingTags": "", + "IconPath": "lyshineui/images/icons/items/Resource/SeedPouchT1.png", + "HiResIconPath": "lyshineui/images/icons/items_hires/SeedPouchT1.png", + "MaxStackSize": 10000, + "DeathDropPercentage": 0, + "Nonremovable": null, + "IsMissionItem": null, + "IsUniqueItem": "", + "ContainerLevel": null, + "ContainerGS": null, + "ExceedMinIndex": "", + "ExceedMaxIndex": "", + "IsSalvageable": 1, + "SalvageResources": 1, + "IsRepairable": 0, + "RepairDustModifier": null, + "RepairRecipe": "", + "CraftingRecipe": "", + "RepairGameEventID": "", + "SalvageGameEventID": "EventBagofJuniperBerriesLVL20", + "SalvageLootTags": "", + "SalvageAchievement": "", + "RepairTypes": "", + "IngredientCategories": "", + "IngredientBonusPrimary": "", + "IngredientBonusSecondary": "", + "IngredientGearScoreBaseBonus": "", + "IngredientGearScoreMaxBonus": "", + "ExtraBonusItemChance": "", + "Durability": null, + "DurabilityDmgOnDeath": null, + "DestroyOnBreak": 0, + "Weight": 1, + "AcquisitionNotificationId": "", + "AudioPickup": "Play_UI_Pickup_Generic", + "AudioPlace": "Play_UI_Drop_Generic", + "AudioUse": "Play_UI_Use_Generic", + "AudioCreated": "Play_UI_Created_Generic", + "AudioDestroyed": "", + "MannequinTag": "", + "SoundTableID": "", + "WarboardGatherStat": "", + "WarboardDepositStat": "", + "Notes": "", + "HideInLootTicker": "", + "EventId": "", + "AttributionId": "TurkeyTerror_2022" + }, + { + "ItemID": "TurkeyTerrorCoinBagLVL30", + "Name": "@TurkeyTerrorCoinBag_MasterName", + "ItemType": "Resource", + "ItemTypeDisplayName": "@ui_itemtypedescription_resource", + "Description": "@TurkeyTerrorCoinBag_Description", + "ItemClass": "Resource+LootContainer", + "TradingCategory": "", + "TradingFamily": "", + "TradingGroup": "", + "BindOnPickup": 1, + "BindOnEquip": null, + "GearScoreOverride": null, + "MinGearScore": null, + "MaxGearScore": null, + "Tier": 3, + "ItemStatsRef": "", + "GrantsHWMBump": "", + "IgnoreNameChanges": null, + "IgnoreHWMScaling": "", + "CanHavePerks": 0, + "CanReplaceGem": null, + "Perk1": "", + "Perk2": "", + "Perk3": "", + "Perk4": "", + "Perk5": "", + "PerkBucket1": "", + "PerkBucket2": "", + "PerkBucket3": "", + "PerkBucket4": "", + "PerkBucket5": "", + "ForceRarity": 1, + "RequiredLevel": null, + "UseTypeAffix": 0, + "UseMaterialAffix": 0, + "UseMagicAffix": 0, + "IconCaptureGroup": "", + "UiItemClass": "UI_Rewards", + "ArmorAppearanceM": "", + "ArmorAppearanceF": "", + "WeaponAppearanceOverride": "", + "ConfirmDestroy": "", + "ConfirmBeforeUse": 0, + "ConsumeOnUse": 0, + "PrefabPath": "", + "HousingTags": "", + "IconPath": "lyshineui/images/icons/items/Resource/SeedPouchT1.png", + "HiResIconPath": "lyshineui/images/icons/items_hires/SeedPouchT1.png", + "MaxStackSize": 10000, + "DeathDropPercentage": 0, + "Nonremovable": null, + "IsMissionItem": null, + "IsUniqueItem": "", + "ContainerLevel": null, + "ContainerGS": null, + "ExceedMinIndex": "", + "ExceedMaxIndex": "", + "IsSalvageable": 1, + "SalvageResources": 1, + "IsRepairable": 0, + "RepairDustModifier": null, + "RepairRecipe": "", + "CraftingRecipe": "", + "RepairGameEventID": "", + "SalvageGameEventID": "EventBagofJuniperBerriesLVL30", + "SalvageLootTags": "", + "SalvageAchievement": "", + "RepairTypes": "", + "IngredientCategories": "", + "IngredientBonusPrimary": "", + "IngredientBonusSecondary": "", + "IngredientGearScoreBaseBonus": "", + "IngredientGearScoreMaxBonus": "", + "ExtraBonusItemChance": "", + "Durability": null, + "DurabilityDmgOnDeath": null, + "DestroyOnBreak": 0, + "Weight": 1, + "AcquisitionNotificationId": "", + "AudioPickup": "Play_UI_Pickup_Generic", + "AudioPlace": "Play_UI_Drop_Generic", + "AudioUse": "Play_UI_Use_Generic", + "AudioCreated": "Play_UI_Created_Generic", + "AudioDestroyed": "", + "MannequinTag": "", + "SoundTableID": "", + "WarboardGatherStat": "", + "WarboardDepositStat": "", + "Notes": "", + "HideInLootTicker": "", + "EventId": "", + "AttributionId": "TurkeyTerror_2022" + }, + { + "ItemID": "TurkeyTerrorCoinBagLVL40", + "Name": "@TurkeyTerrorCoinBag_MasterName", + "ItemType": "Resource", + "ItemTypeDisplayName": "@ui_itemtypedescription_resource", + "Description": "@TurkeyTerrorCoinBag_Description", + "ItemClass": "Resource+LootContainer", + "TradingCategory": "", + "TradingFamily": "", + "TradingGroup": "", + "BindOnPickup": 1, + "BindOnEquip": null, + "GearScoreOverride": null, + "MinGearScore": null, + "MaxGearScore": null, + "Tier": 3, + "ItemStatsRef": "", + "GrantsHWMBump": "", + "IgnoreNameChanges": null, + "IgnoreHWMScaling": "", + "CanHavePerks": 0, + "CanReplaceGem": null, + "Perk1": "", + "Perk2": "", + "Perk3": "", + "Perk4": "", + "Perk5": "", + "PerkBucket1": "", + "PerkBucket2": "", + "PerkBucket3": "", + "PerkBucket4": "", + "PerkBucket5": "", + "ForceRarity": 1, + "RequiredLevel": null, + "UseTypeAffix": 0, + "UseMaterialAffix": 0, + "UseMagicAffix": 0, + "IconCaptureGroup": "", + "UiItemClass": "UI_Rewards", + "ArmorAppearanceM": "", + "ArmorAppearanceF": "", + "WeaponAppearanceOverride": "", + "ConfirmDestroy": "", + "ConfirmBeforeUse": 0, + "ConsumeOnUse": 0, + "PrefabPath": "", + "HousingTags": "", + "IconPath": "lyshineui/images/icons/items/Resource/SeedPouchT1.png", + "HiResIconPath": "lyshineui/images/icons/items_hires/SeedPouchT1.png", + "MaxStackSize": 10000, + "DeathDropPercentage": 0, + "Nonremovable": null, + "IsMissionItem": null, + "IsUniqueItem": "", + "ContainerLevel": null, + "ContainerGS": null, + "ExceedMinIndex": "", + "ExceedMaxIndex": "", + "IsSalvageable": 1, + "SalvageResources": 1, + "IsRepairable": 0, + "RepairDustModifier": null, + "RepairRecipe": "", + "CraftingRecipe": "", + "RepairGameEventID": "", + "SalvageGameEventID": "EventBagofJuniperBerriesLVL40", + "SalvageLootTags": "", + "SalvageAchievement": "", + "RepairTypes": "", + "IngredientCategories": "", + "IngredientBonusPrimary": "", + "IngredientBonusSecondary": "", + "IngredientGearScoreBaseBonus": "", + "IngredientGearScoreMaxBonus": "", + "ExtraBonusItemChance": "", + "Durability": null, + "DurabilityDmgOnDeath": null, + "DestroyOnBreak": 0, + "Weight": 1, + "AcquisitionNotificationId": "", + "AudioPickup": "Play_UI_Pickup_Generic", + "AudioPlace": "Play_UI_Drop_Generic", + "AudioUse": "Play_UI_Use_Generic", + "AudioCreated": "Play_UI_Created_Generic", + "AudioDestroyed": "", + "MannequinTag": "", + "SoundTableID": "", + "WarboardGatherStat": "", + "WarboardDepositStat": "", + "Notes": "", + "HideInLootTicker": "", + "EventId": "", + "AttributionId": "TurkeyTerror_2022" + }, + { + "ItemID": "TurkeyTerrorCoinBagLVL50", + "Name": "@TurkeyTerrorCoinBag_MasterName", + "ItemType": "Resource", + "ItemTypeDisplayName": "@ui_itemtypedescription_resource", + "Description": "@TurkeyTerrorCoinBag_Description", + "ItemClass": "Resource+LootContainer", + "TradingCategory": "", + "TradingFamily": "", + "TradingGroup": "", + "BindOnPickup": 1, + "BindOnEquip": null, + "GearScoreOverride": null, + "MinGearScore": null, + "MaxGearScore": null, + "Tier": 3, + "ItemStatsRef": "", + "GrantsHWMBump": "", + "IgnoreNameChanges": null, + "IgnoreHWMScaling": "", + "CanHavePerks": 0, + "CanReplaceGem": null, + "Perk1": "", + "Perk2": "", + "Perk3": "", + "Perk4": "", + "Perk5": "", + "PerkBucket1": "", + "PerkBucket2": "", + "PerkBucket3": "", + "PerkBucket4": "", + "PerkBucket5": "", + "ForceRarity": 1, + "RequiredLevel": null, + "UseTypeAffix": 0, + "UseMaterialAffix": 0, + "UseMagicAffix": 0, + "IconCaptureGroup": "", + "UiItemClass": "UI_Rewards", + "ArmorAppearanceM": "", + "ArmorAppearanceF": "", + "WeaponAppearanceOverride": "", + "ConfirmDestroy": "", + "ConfirmBeforeUse": 0, + "ConsumeOnUse": 0, + "PrefabPath": "", + "HousingTags": "", + "IconPath": "lyshineui/images/icons/items/Resource/SeedPouchT1.png", + "HiResIconPath": "lyshineui/images/icons/items_hires/SeedPouchT1.png", + "MaxStackSize": 10000, + "DeathDropPercentage": 0, + "Nonremovable": null, + "IsMissionItem": null, + "IsUniqueItem": "", + "ContainerLevel": null, + "ContainerGS": null, + "ExceedMinIndex": "", + "ExceedMaxIndex": "", + "IsSalvageable": 1, + "SalvageResources": 1, + "IsRepairable": 0, + "RepairDustModifier": null, + "RepairRecipe": "", + "CraftingRecipe": "", + "RepairGameEventID": "", + "SalvageGameEventID": "EventBagofJuniperBerriesLVL50", + "SalvageLootTags": "", + "SalvageAchievement": "", + "RepairTypes": "", + "IngredientCategories": "", + "IngredientBonusPrimary": "", + "IngredientBonusSecondary": "", + "IngredientGearScoreBaseBonus": "", + "IngredientGearScoreMaxBonus": "", + "ExtraBonusItemChance": "", + "Durability": null, + "DurabilityDmgOnDeath": null, + "DestroyOnBreak": 0, + "Weight": 1, + "AcquisitionNotificationId": "", + "AudioPickup": "Play_UI_Pickup_Generic", + "AudioPlace": "Play_UI_Drop_Generic", + "AudioUse": "Play_UI_Use_Generic", + "AudioCreated": "Play_UI_Created_Generic", + "AudioDestroyed": "", + "MannequinTag": "", + "SoundTableID": "", + "WarboardGatherStat": "", + "WarboardDepositStat": "", + "Notes": "", + "HideInLootTicker": "", + "EventId": "", + "AttributionId": "TurkeyTerror_2022" + }, + { + "ItemID": "TurkeyTerrorCoinBagLVL60", + "Name": "@TurkeyTerrorCoinBag_MasterName", + "ItemType": "Resource", + "ItemTypeDisplayName": "@ui_itemtypedescription_resource", + "Description": "@TurkeyTerrorCoinBag_Description", + "ItemClass": "Resource+LootContainer", + "TradingCategory": "", + "TradingFamily": "", + "TradingGroup": "", + "BindOnPickup": 1, + "BindOnEquip": null, + "GearScoreOverride": null, + "MinGearScore": null, + "MaxGearScore": null, + "Tier": 3, + "ItemStatsRef": "", + "GrantsHWMBump": "", + "IgnoreNameChanges": null, + "IgnoreHWMScaling": "", + "CanHavePerks": 0, + "CanReplaceGem": null, + "Perk1": "", + "Perk2": "", + "Perk3": "", + "Perk4": "", + "Perk5": "", + "PerkBucket1": "", + "PerkBucket2": "", + "PerkBucket3": "", + "PerkBucket4": "", + "PerkBucket5": "", + "ForceRarity": 1, + "RequiredLevel": null, + "UseTypeAffix": 0, + "UseMaterialAffix": 0, + "UseMagicAffix": 0, + "IconCaptureGroup": "", + "UiItemClass": "UI_Rewards", + "ArmorAppearanceM": "", + "ArmorAppearanceF": "", + "WeaponAppearanceOverride": "", + "ConfirmDestroy": "", + "ConfirmBeforeUse": 0, + "ConsumeOnUse": 0, + "PrefabPath": "", + "HousingTags": "", + "IconPath": "lyshineui/images/icons/items/Resource/SeedPouchT1.png", + "HiResIconPath": "lyshineui/images/icons/items_hires/SeedPouchT1.png", + "MaxStackSize": 10000, + "DeathDropPercentage": 0, + "Nonremovable": null, + "IsMissionItem": null, + "IsUniqueItem": "", + "ContainerLevel": null, + "ContainerGS": null, + "ExceedMinIndex": "", + "ExceedMaxIndex": "", + "IsSalvageable": 1, + "SalvageResources": 1, + "IsRepairable": 0, + "RepairDustModifier": null, + "RepairRecipe": "", + "CraftingRecipe": "", + "RepairGameEventID": "", + "SalvageGameEventID": "EventBagofJuniperBerriesLVL60", + "SalvageLootTags": "", + "SalvageAchievement": "", + "RepairTypes": "", + "IngredientCategories": "", + "IngredientBonusPrimary": "", + "IngredientBonusSecondary": "", + "IngredientGearScoreBaseBonus": "", + "IngredientGearScoreMaxBonus": "", + "ExtraBonusItemChance": "", + "Durability": null, + "DurabilityDmgOnDeath": null, + "DestroyOnBreak": 0, + "Weight": 1, + "AcquisitionNotificationId": "", + "AudioPickup": "Play_UI_Pickup_Generic", + "AudioPlace": "Play_UI_Drop_Generic", + "AudioUse": "Play_UI_Use_Generic", + "AudioCreated": "Play_UI_Created_Generic", + "AudioDestroyed": "", + "MannequinTag": "", + "SoundTableID": "", + "WarboardGatherStat": "", + "WarboardDepositStat": "", + "Notes": "", + "HideInLootTicker": "", + "EventId": "", + "AttributionId": "TurkeyTerror_2022" + }, + { + "ItemID": "Skin_Feet_TurkeyTerror_Box", + "Name": "@Skin_Feet_TurkeyTerror_Box_MasterName", + "ItemType": "Armor", + "ItemTypeDisplayName": "", + "Description": "@Skin_Feet_TurkeyTerror_Box_Description", + "ItemClass": "Resource+LootContainer", + "TradingCategory": "", + "TradingFamily": "", + "TradingGroup": "", + "BindOnPickup": 1, + "BindOnEquip": null, + "GearScoreOverride": null, + "MinGearScore": null, + "MaxGearScore": null, + "Tier": null, + "ItemStatsRef": "GenericItemSkin", + "GrantsHWMBump": "", + "IgnoreNameChanges": null, + "IgnoreHWMScaling": "", + "CanHavePerks": null, + "CanReplaceGem": null, + "Perk1": "", + "Perk2": "", + "Perk3": "", + "Perk4": "", + "Perk5": "", + "PerkBucket1": "", + "PerkBucket2": "", + "PerkBucket3": "", + "PerkBucket4": "", + "PerkBucket5": "", + "ForceRarity": 4, + "RequiredLevel": null, + "UseTypeAffix": 0, + "UseMaterialAffix": 0, + "UseMagicAffix": 0, + "IconCaptureGroup": "", + "UiItemClass": "UI_Rewards", + "ArmorAppearanceM": "", + "ArmorAppearanceF": "", + "WeaponAppearanceOverride": "", + "ConfirmDestroy": "", + "ConfirmBeforeUse": 0, + "ConsumeOnUse": 0, + "PrefabPath": "", + "HousingTags": "", + "IconPath": "lyshineui/images/icons/items/armor/m_TurkeyTerror_feet.png", + "HiResIconPath": "lyshineui/images/icons/items_hires/m_TurkeyTerror_feet.png", + "MaxStackSize": 1, + "DeathDropPercentage": 0, + "Nonremovable": null, + "IsMissionItem": null, + "IsUniqueItem": "", + "ContainerLevel": null, + "ContainerGS": null, + "ExceedMinIndex": "", + "ExceedMaxIndex": "", + "IsSalvageable": 1, + "SalvageResources": 1, + "IsRepairable": 0, + "RepairDustModifier": null, + "RepairRecipe": "", + "CraftingRecipe": "", + "RepairGameEventID": "", + "SalvageGameEventID": "Award_Skin_Feet_TurkeyTerror", + "SalvageLootTags": "", + "SalvageAchievement": "", + "RepairTypes": "", + "IngredientCategories": "", + "IngredientBonusPrimary": "", + "IngredientBonusSecondary": "", + "IngredientGearScoreBaseBonus": "", + "IngredientGearScoreMaxBonus": "", + "ExtraBonusItemChance": "", + "Durability": null, + "DurabilityDmgOnDeath": null, + "DestroyOnBreak": 0, + "Weight": 1, + "AcquisitionNotificationId": "", + "AudioPickup": "Play_UI_Pickup_Generic", + "AudioPlace": "Play_UI_Drop_Generic", + "AudioUse": "Play_UI_Use_Generic", + "AudioCreated": "Play_UI_Created_Generic", + "AudioDestroyed": "", + "MannequinTag": "", + "SoundTableID": "", + "WarboardGatherStat": "", + "WarboardDepositStat": "", + "Notes": "", + "HideInLootTicker": "", + "EventId": "", + "AttributionId": "TurkeyTerror_2022" + }, { "ItemID": "RabbitSeasonTotem", "Name": "@RabbitSeasonTotem_MasterName", diff --git a/NewWorldCompanion.Services/Data/MasterItemDefinitions_Crafting.json b/NewWorldCompanion.Services/Data/MasterItemDefinitions_Crafting.json index 6118dd6..af4eac0 100644 --- a/NewWorldCompanion.Services/Data/MasterItemDefinitions_Crafting.json +++ b/NewWorldCompanion.Services/Data/MasterItemDefinitions_Crafting.json @@ -193535,6 +193535,102 @@ "EventId": "", "AttributionId": "" }, + { + "ItemID": "CoatingBeastTurkeyT5", + "Name": "@CoatingBeastTurkeyT5_MasterName", + "ItemType": "Consumable", + "ItemTypeDisplayName": "@ui_itemtypedescription_consumable", + "Description": "@CoatingBeastTurkeyT5_Description", + "HeartgemRuneTooltipTitle": "", + "ItemClass": "Consumable+WeaponOil", + "TradingCategory": "Utilities", + "TradingFamily": "Coating", + "TradingGroup": "CoatingLost", + "BindOnPickup": 1, + "BindOnEquip": null, + "GearScoreOverride": 500, + "MinGearScore": 500, + "MaxGearScore": 500, + "Tier": 5, + "ItemStatsRef": "", + "GrantsHWMBump": "", + "IgnoreNameChanges": null, + "IgnoreHWMScaling": "", + "CanHavePerks": 0, + "CanReplaceGem": null, + "Perk1": "", + "Perk2": "", + "Perk3": "", + "Perk4": "", + "Perk5": "", + "PerkBucket1": "", + "PerkBucket2": "", + "PerkBucket3": "", + "PerkBucket4": "", + "PerkBucket5": "", + "ForceRarity": null, + "RequiredLevel": 15, + "UseTypeAffix": 0, + "UseMaterialAffix": 0, + "UseMagicAffix": 0, + "IconCaptureGroup": "", + "UiItemClass": "UI_Consumable", + "ArmorAppearanceM": "", + "ArmorAppearanceF": "", + "WeaponAppearanceOverride": "", + "ConfirmDestroy": "", + "ConfirmBeforeUse": 0, + "ConsumeOnUse": 1, + "PrefabPath": "", + "HousingTags": "", + "IconPath": "lyshineui/images/icons/items/Consumable/CoatingTurkey.png", + "HiResIconPath": "lyshineui/images/icons/items_hires/CoatingTurkey.png", + "HeartgemTooltipBackgroundImage": "", + "MaxStackSize": 100, + "DeathDropPercentage": 0, + "Nonremovable": null, + "IsMissionItem": null, + "IsUniqueItem": "", + "ContainerLevel": null, + "ContainerGS": null, + "ExceedMinIndex": "", + "ExceedMaxIndex": "", + "IsSalvageable": 0, + "SalvageResources": null, + "IsRepairable": 0, + "RepairDustModifier": null, + "RepairRecipe": "", + "CraftingRecipe": "", + "RepairGameEventID": "", + "SalvageGameEventID": "", + "SalvageAchievement": "", + "RepairTypes": "", + "IngredientCategories": "", + "IngredientBonusPrimary": null, + "IngredientBonusSecondary": null, + "IngredientGearScoreBaseBonus": null, + "IngredientGearScoreMaxBonus": null, + "ExtraBonusItemChance": "", + "Durability": null, + "DurabilityDmgOnDeath": null, + "DestroyOnBreak": 1, + "Weight": 5, + "AcquisitionNotificationId": null, + "AudioPickup": "Play_UI_Pickup_Liquid", + "AudioPlace": "Play_UI_Drop_Liquid", + "AudioUse": "Play_UI_Use_Liquid", + "AudioCreated": "Play_UI_Created_Liquid", + "AudioDestroyed": "Play_UI_item_broken", + "MannequinTag": "HolyOil", + "SoundTableID": "", + "WarboardGatherStat": "", + "WarboardDepositStat": "", + "Notes": "", + "HideInLootTicker": "", + "HideFromRewardOpenPopup": null, + "EventId": "TurkeyTerror_2022", + "AttributionId": "" + }, { "ItemID": "CoatingLostT2", "Name": "@CoatingLostT2_MasterName", @@ -201983,6 +202079,102 @@ "EventId": "", "AttributionId": "" }, + { + "ItemID": "PotionFamilyWardBeastTurkeyT5", + "Name": "@PotionFamilyWardBeastTurkeyT5_MasterName", + "ItemType": "Consumable", + "ItemTypeDisplayName": "@ui_itemtypedescription_consumable", + "Description": "@PotionFamilyWardBeastTurkeyT5_Description", + "HeartgemRuneTooltipTitle": "", + "ItemClass": "Consumable+Potion", + "TradingCategory": "", + "TradingFamily": "", + "TradingGroup": "", + "BindOnPickup": 1, + "BindOnEquip": null, + "GearScoreOverride": 500, + "MinGearScore": 500, + "MaxGearScore": 500, + "Tier": 5, + "ItemStatsRef": "", + "GrantsHWMBump": "", + "IgnoreNameChanges": null, + "IgnoreHWMScaling": "", + "CanHavePerks": 0, + "CanReplaceGem": null, + "Perk1": "", + "Perk2": "", + "Perk3": "", + "Perk4": "", + "Perk5": "", + "PerkBucket1": "", + "PerkBucket2": "", + "PerkBucket3": "", + "PerkBucket4": "", + "PerkBucket5": "", + "ForceRarity": null, + "RequiredLevel": 15, + "UseTypeAffix": 0, + "UseMaterialAffix": 0, + "UseMagicAffix": 0, + "IconCaptureGroup": "", + "UiItemClass": "UI_Consumable", + "ArmorAppearanceM": "", + "ArmorAppearanceF": "", + "WeaponAppearanceOverride": "", + "ConfirmDestroy": "", + "ConfirmBeforeUse": 0, + "ConsumeOnUse": 1, + "PrefabPath": "", + "HousingTags": "", + "IconPath": "lyshineui/images/icons/items/Consumable/WardTurkey.png", + "HiResIconPath": "lyshineui/images/icons/items_hires/WardTurkey.png", + "HeartgemTooltipBackgroundImage": "", + "MaxStackSize": 100, + "DeathDropPercentage": 0, + "Nonremovable": null, + "IsMissionItem": null, + "IsUniqueItem": "", + "ContainerLevel": null, + "ContainerGS": null, + "ExceedMinIndex": "", + "ExceedMaxIndex": "", + "IsSalvageable": 0, + "SalvageResources": null, + "IsRepairable": 0, + "RepairDustModifier": null, + "RepairRecipe": "", + "CraftingRecipe": "", + "RepairGameEventID": "", + "SalvageGameEventID": "", + "SalvageAchievement": "", + "RepairTypes": "", + "IngredientCategories": "", + "IngredientBonusPrimary": null, + "IngredientBonusSecondary": null, + "IngredientGearScoreBaseBonus": null, + "IngredientGearScoreMaxBonus": null, + "ExtraBonusItemChance": "", + "Durability": null, + "DurabilityDmgOnDeath": null, + "DestroyOnBreak": 1, + "Weight": 5, + "AcquisitionNotificationId": null, + "AudioPickup": "Play_UI_Pickup_Liquid", + "AudioPlace": "Play_UI_Drop_Liquid", + "AudioUse": "Play_UI_Use_Liquid", + "AudioCreated": "Play_UI_Created_Liquid", + "AudioDestroyed": "Play_UI_item_broken", + "MannequinTag": "", + "SoundTableID": "", + "WarboardGatherStat": "", + "WarboardDepositStat": "", + "Notes": "", + "HideInLootTicker": "", + "HideFromRewardOpenPopup": null, + "EventId": "TurkeyTerror_2022", + "AttributionId": "" + }, { "ItemID": "PotionGypsumYellow", "Name": "@PotionGypsumYellow_MasterName", @@ -224639,6 +224831,102 @@ "EventId": "", "AttributionId": "" }, + { + "ItemID": "1hSkinningKnifeT5_TurkeyTerror", + "Name": "@1hSkinningKnifeT5_TurkeyTerror_MasterName", + "ItemType": "Weapon", + "ItemTypeDisplayName": "@ui_itemtypedescription_tool", + "Description": "@1hSkinningKnifeT5_TurkeyTerror_Description", + "HeartgemRuneTooltipTitle": "", + "ItemClass": "EquippableTool+Axe+SkinningKnife", + "TradingCategory": "Tools", + "TradingFamily": "GatheringTools", + "TradingGroup": "1hSkinningKnife", + "BindOnPickup": 1, + "BindOnEquip": null, + "GearScoreOverride": 510, + "MinGearScore": 500, + "MaxGearScore": 600, + "Tier": 5, + "ItemStatsRef": "1hSkinningKnifeT5", + "GrantsHWMBump": "", + "IgnoreNameChanges": null, + "IgnoreHWMScaling": "", + "CanHavePerks": 1, + "CanReplaceGem": 1, + "Perk1": "PerkID_Tools_SkinningTurkey", + "Perk2": "", + "Perk3": "", + "Perk4": "", + "Perk5": "", + "PerkBucket1": "", + "PerkBucket2": "", + "PerkBucket3": "", + "PerkBucket4": "", + "PerkBucket5": "", + "ForceRarity": 3, + "RequiredLevel": 15, + "UseTypeAffix": 1, + "UseMaterialAffix": 1, + "UseMagicAffix": 1, + "IconCaptureGroup": "SkinningKnife", + "UiItemClass": "UI_Tools", + "ArmorAppearanceM": "", + "ArmorAppearanceF": "", + "WeaponAppearanceOverride": "1hSkinningKnifeTurkeyTerrorT5", + "ConfirmDestroy": "", + "ConfirmBeforeUse": 0, + "ConsumeOnUse": 0, + "PrefabPath": "Items/Weapons/weapon", + "HousingTags": "", + "IconPath": "", + "HiResIconPath": "", + "HeartgemTooltipBackgroundImage": "", + "MaxStackSize": 1, + "DeathDropPercentage": 0, + "Nonremovable": null, + "IsMissionItem": null, + "IsUniqueItem": "", + "ContainerLevel": null, + "ContainerGS": null, + "ExceedMinIndex": "", + "ExceedMaxIndex": "", + "IsSalvageable": 0, + "SalvageResources": 0, + "IsRepairable": 0, + "RepairDustModifier": 4, + "RepairRecipe": "", + "CraftingRecipe": "", + "RepairGameEventID": "", + "SalvageGameEventID": "", + "SalvageAchievement": "", + "RepairTypes": "", + "IngredientCategories": "", + "IngredientBonusPrimary": null, + "IngredientBonusSecondary": null, + "IngredientGearScoreBaseBonus": null, + "IngredientGearScoreMaxBonus": null, + "ExtraBonusItemChance": "", + "Durability": 1500, + "DurabilityDmgOnDeath": 0, + "DestroyOnBreak": 0, + "Weight": 20, + "AcquisitionNotificationId": null, + "AudioPickup": "Play_UI_Pickup_Knife", + "AudioPlace": "Play_UI_Drop_Knife", + "AudioUse": "Play_UI_Use_Knife", + "AudioCreated": "Play_UI_Created_Knife", + "AudioDestroyed": "Play_UI_item_broken", + "MannequinTag": "", + "SoundTableID": "1H_Knife", + "WarboardGatherStat": "", + "WarboardDepositStat": "", + "Notes": "", + "HideInLootTicker": "", + "HideFromRewardOpenPopup": null, + "EventId": "TurkeyTerror_2022", + "AttributionId": "" + }, { "ItemID": "1hSickleT1", "Name": "@1hSickleT1_MasterName", @@ -350879,6 +351167,102 @@ "EventId": "", "AttributionId": "" }, + { + "ItemID": "OverchargedOrb", + "Name": "@OverchargedOrb_MasterName", + "ItemType": "Resource", + "ItemTypeDisplayName": "@ui_itemtypedescription_resource", + "Description": "@OverchargedOrb_Description", + "HeartgemRuneTooltipTitle": "", + "ItemClass": "Resource", + "TradingCategory": "", + "TradingFamily": "", + "TradingGroup": "", + "BindOnPickup": 1, + "BindOnEquip": null, + "GearScoreOverride": null, + "MinGearScore": null, + "MaxGearScore": null, + "Tier": 5, + "ItemStatsRef": "", + "GrantsHWMBump": "", + "IgnoreNameChanges": null, + "IgnoreHWMScaling": "", + "CanHavePerks": null, + "CanReplaceGem": null, + "Perk1": "", + "Perk2": "", + "Perk3": "", + "Perk4": "", + "Perk5": "", + "PerkBucket1": "", + "PerkBucket2": "", + "PerkBucket3": "", + "PerkBucket4": "", + "PerkBucket5": "", + "ForceRarity": 3, + "RequiredLevel": null, + "UseTypeAffix": 0, + "UseMaterialAffix": 0, + "UseMagicAffix": 0, + "IconCaptureGroup": "", + "UiItemClass": "UI_Rewards", + "ArmorAppearanceM": "", + "ArmorAppearanceF": "", + "WeaponAppearanceOverride": "", + "ConfirmDestroy": "", + "ConfirmBeforeUse": 0, + "ConsumeOnUse": 0, + "PrefabPath": "", + "HousingTags": "", + "IconPath": "lyshineui/images/icons/items/Resource/InfusedOrb.png", + "HiResIconPath": "lyshineui/images/icons/items_hires/InfusedOrb.png", + "HeartgemTooltipBackgroundImage": "", + "MaxStackSize": 10000, + "DeathDropPercentage": 0, + "Nonremovable": null, + "IsMissionItem": null, + "IsUniqueItem": "", + "ContainerLevel": null, + "ContainerGS": null, + "ExceedMinIndex": "", + "ExceedMaxIndex": "", + "IsSalvageable": 0, + "SalvageResources": null, + "IsRepairable": 0, + "RepairDustModifier": null, + "RepairRecipe": "", + "CraftingRecipe": "", + "RepairGameEventID": "", + "SalvageGameEventID": "", + "SalvageAchievement": "", + "RepairTypes": "", + "IngredientCategories": "", + "IngredientBonusPrimary": null, + "IngredientBonusSecondary": null, + "IngredientGearScoreBaseBonus": null, + "IngredientGearScoreMaxBonus": null, + "ExtraBonusItemChance": "", + "Durability": null, + "DurabilityDmgOnDeath": null, + "DestroyOnBreak": 0, + "Weight": 1, + "AcquisitionNotificationId": null, + "AudioPickup": "Play_UI_Pickup_Stone", + "AudioPlace": "Play_UI_Drop_Stone", + "AudioUse": "Play_UI_Use_Stone", + "AudioCreated": "Play_UI_Created_Stone", + "AudioDestroyed": "", + "MannequinTag": "", + "SoundTableID": "", + "WarboardGatherStat": "", + "WarboardDepositStat": "", + "Notes": "", + "HideInLootTicker": "", + "HideFromRewardOpenPopup": null, + "EventId": "", + "AttributionId": "" + }, { "ItemID": "CastGypsum_Head", "Name": "@CastGypsum_Head_MasterName", diff --git a/NewWorldCompanion.Services/Data/MasterItemDefinitions_Loot.json b/NewWorldCompanion.Services/Data/MasterItemDefinitions_Loot.json index 07ac424..144a305 100644 --- a/NewWorldCompanion.Services/Data/MasterItemDefinitions_Loot.json +++ b/NewWorldCompanion.Services/Data/MasterItemDefinitions_Loot.json @@ -403339,5 +403339,98 @@ "HideInLootTicker": "", "AttributionId": "", "SalvageEntitlementId": "" + }, + { + "ItemID": "CS_MGContainer", + "Name": "@CS_MGContainer_MasterName", + "ItemType": "Resource", + "ItemTypeDisplayName": "@ui_itemtypedescription_resource", + "Description": "@CS_MGContainer_Description", + "ItemClass": "Resource+LootContainer", + "TradingCategory": "", + "TradingFamily": "", + "TradingGroup": "", + "BindOnPickup": 1, + "BindOnEquip": null, + "GearScoreOverride": null, + "MinGearScore": null, + "MaxGearScore": null, + "Tier": null, + "ItemStatsRef": "", + "GrantsHWMBump": "", + "IgnoreNameChanges": null, + "IgnoreHWMScaling": "", + "CanHavePerks": null, + "CanReplaceGem": null, + "Perk1": "", + "Perk2": "", + "Perk3": "", + "Perk4": "", + "Perk5": "", + "PerkBucket1": "", + "PerkBucket2": "", + "PerkBucket3": "", + "PerkBucket4": "", + "PerkBucket5": "", + "ForceRarity": 2, + "RequiredLevel": null, + "UseTypeAffix": 0, + "UseMaterialAffix": 0, + "UseMagicAffix": 0, + "IconCaptureGroup": "", + "UiItemClass": "UI_Rewards", + "ArmorAppearanceM": "", + "ArmorAppearanceF": "", + "WeaponAppearanceOverride": "", + "ConfirmDestroy": "", + "ConfirmBeforeUse": 0, + "ConsumeOnUse": 0, + "PrefabPath": "", + "HousingTags": "", + "IconPath": "lyshineui/images/icons/items/Resource/MakeGoodContainer.png", + "HiResIconPath": "lyshineui/images/icons/items_hires/MakeGoodContainer.png", + "MaxStackSize": 10000, + "DeathDropPercentage": null, + "Nonremovable": null, + "IsMissionItem": null, + "IsUniqueItem": "", + "ContainerLevel": 59, + "ContainerGS": null, + "ExceedMinIndex": "", + "ExceedMaxIndex": "", + "IsSalvageable": 1, + "SalvageResources": 1, + "IsRepairable": 0, + "RepairDustModifier": null, + "RepairRecipe": "[LTID]CS_MakeGood", + "CraftingRecipe": "", + "RepairGameEventID": "", + "SalvageGameEventID": "", + "SalvageAchievement": "", + "RepairTypes": "", + "IngredientCategories": "", + "IngredientBonusPrimary": "", + "IngredientBonusSecondary": "", + "IngredientGearScoreBaseBonus": "", + "IngredientGearScoreMaxBonus": "", + "ExtraBonusItemChance": "", + "Durability": null, + "DurabilityDmgOnDeath": null, + "DestroyOnBreak": 0, + "Weight": 0, + "AcquisitionNotificationId": "", + "AudioPickup": "Play_UI_Pickup_Metal", + "AudioPlace": "Play_UI_Drop_Metal", + "AudioUse": "Play_UI_Use_Metal", + "AudioCreated": "Play_UI_Created_Metal", + "AudioDestroyed": "", + "MannequinTag": "", + "SoundTableID": "", + "WarboardGatherStat": "", + "WarboardDepositStat": "", + "Notes": "", + "HideInLootTicker": "", + "AttributionId": "", + "SalvageEntitlementId": "" } ] diff --git a/NewWorldCompanion.Services/Data/javelindata_housingitems.loc.xml b/NewWorldCompanion.Services/Data/javelindata_housingitems.loc.xml index fd22fac..6798226 100644 --- a/NewWorldCompanion.Services/Data/javelindata_housingitems.loc.xml +++ b/NewWorldCompanion.Services/Data/javelindata_housingitems.loc.xml @@ -660,6 +660,10 @@ Grants +1500 Skinning Luck when using a 'Skinning Knife' in the wilderness. Special Aeternum Sturgeon Fishing Trophy + A trophy obtained from the mighty Turkulon, Feathered Avenger of Death. It inspires you when you eat a meal. +Only works when placed in your home. +Grants +25% Food Buff Time when you eat beneficial food. + Feast-o-Plenty Food Trophy Built by the 19th Legion long ago, the now ruined aqueduct is teeming with wildlife, and treasure is rumored to be found amongst the treacherous rubble. Scenic Painting of Lycopolis Once a mighty Roman fortress and symbol of man's military power, the Acropolis now bends to nature; both natural and otherwise. @@ -920,6 +924,10 @@ Grants +10% Fishing Experience when using a 'Fishing Pole' in the wilderness.Summertime Holiday Torch Most rabbits do not care for water, and this one is no exception. But that won't stop it from wearing a super cute bathing suit and lounging in the sunshine. Summer Medley Beach Bunny + One of Turkulon's giant eggs. They usually explode, but this one was a dud. But if you were to sit on it long enough, would it hatch? + Turkulon Egg Seat + The true mastermind behind Turkulon, Feathered Avenger of Death. But with his creation defeated, it now begrudgingly lives with you and accepts your pathetic morsels. + Turkuless, Disgruntled Fowl An ash wood bunk bed crafted by artisan hands. Curl up on the blue comfy comforter and sleep in as late as you like. Cerulean Sheets Bunk Bed There's no moping in this maple wood bunk bed. The warm, red blankets lifts your spirits all the way to dream land. diff --git a/NewWorldCompanion.Services/Data/javelindata_itemdefinitions_master.loc.xml b/NewWorldCompanion.Services/Data/javelindata_itemdefinitions_master.loc.xml index 4fd3d79..46b7d9a 100644 --- a/NewWorldCompanion.Services/Data/javelindata_itemdefinitions_master.loc.xml +++ b/NewWorldCompanion.Services/Data/javelindata_itemdefinitions_master.loc.xml @@ -51,6 +51,10 @@ Schematic: Stone Mason Table A schematic that teaches you how to craft a piece of furniture. Learn the recipe for crafting. Schematic: Broken Chime Post + Nobles and monst'rs alike may conv'rge and conv'rse amongst the spirits and magics of a dusk spirit's pavillion. + Court of the Dusk Spirits + Thyne e'rie lant'rns attracteth flutt'ring spirits, and can draweth one's attention f'r most wondrous lengths, until rest and dreams ov'rtake thee. + Blue Lant'rn Abode A place for both scarabs and adventurers to find reprieve from the oppressive heat of Aeternum's deserts. Home of the Scarab This pyramid-like structure sports a chimney for warmth and if the cycle of death and rebirth is interrupted, it may just be your last night by the fire. @@ -5348,6 +5352,8 @@ Starmetal Skinning Knife 1-Handed. A Skinning Knife made of Orichalcum. Used to field dress most animals. Orichalcum Skinning Knife + Skinning turkeys has never been so ironic. + Turkulon's Claw The golden glint in the thief's eye hid the bronze. Pirated Longsword Raise the golden sword high and declare your victory. @@ -14957,6 +14963,8 @@ Powerful Beast Coating USE: Apply to currently drawn weapon. Gives a maximal bonus to damage against Beasts. Lasts for {[ConsumableItemDefinitions.CoatingBeastT5.DurationOverrides / 60]} minutes or upon unequip, whichever comes first. Only one Coating may be applied to a weapon at a time. Coatings stack with Weapon Traits. Infused Beast Coating + USE: Apply to currently drawn weapon. Gives a maximal bonus to damage against Turkulon and Beasts. Lasts for {[ConsumableItemDefinitions.CoatingBeastT5.DurationOverrides / 60]} minutes or upon unequip, whichever comes first. Only one Coating may be applied to a weapon at a time. Coatings stack with Weapon Traits. + Infused Turkey Coating USE: Apply to currently drawn weapon. Gives +9% damage against Corrupted. Lasts for {[ConsumableItemDefinitions.CoatingCorruptedT2.DurationOverrides / 60]} minutes or upon unequip, whichever comes first. Only one Coating may be applied to a weapon at a time. Coatings stack with Weapon Traits. Common Corrupted Coating USE: Apply to currently drawn weapon. Gives +11% damage against Corrupted. Lasts for {[ConsumableItemDefinitions.CoatingCorruptedT3.DurationOverrides / 60]} minutes or upon unequip, whichever comes first. Only one Coating may be applied to a weapon at a time. Coatings stack with Weapon Traits. @@ -29747,6 +29755,8 @@ Powerful Beast Ward Potion Increases damage absorption from Beasts by {[Type_StatusEffectData.PotionFamilyWardBeastT5.ABSVitalsCategory * 100]}% for {[Type_StatusEffectData.PotionFamilyWardBeastT5.BaseDuration]} seconds or after receiving damage {[Type_StatusEffectData.PotionFamilyWardBeastT5.StopOnHitCount]} times. Infused Beast Ward Potion + Increases damage absorption from Turkulon by 66% and Beasts by 15% for {[Type_StatusEffectData.PotionFamilyWardBeastT5.BaseDuration]} seconds or after receiving damage {[Type_StatusEffectData.PotionFamilyWardBeastT5.StopOnHitCount]} times. + Infused Turkey Ward Potion Increases damage absorption from Corrupted by {[Type_StatusEffectData.PotionFamilyWardCorruptedT3.ABSVitalsCategory * 100]}% for {[Type_StatusEffectData.PotionFamilyWardCorruptedT3.BaseDuration]} seconds or after receiving damage {[Type_StatusEffectData.PotionFamilyWardCorruptedT3.StopOnHitCount]} times. Strong Corrupted Ward Potion Increases damage absorption from Corrupted by {[Type_StatusEffectData.PotionFamilyWardCorruptedT4.ABSVitalsCategory * 100]}% for {[Type_StatusEffectData.PotionFamilyWardCorruptedT4.BaseDuration]} seconds or after receiving damage {[Type_StatusEffectData.PotionFamilyWardCorruptedT4.StopOnHitCount]} times. @@ -35381,7 +35391,7 @@ Slithering Skull Jack-o-Lantern's Smile The Pride of the Witch - Nadje Attack + Mandje Attack Four-Eyes Doublemaw Twisted Face @@ -35500,6 +35510,8 @@ Its sharp edges are perfect for carving rock from earth or, in a pinch, flesh from bone. This curved horn can slice through any fibers no matter their density. Still the knuckles of the beast retract and creak with age. + Turkulon's Juicy Calves + Big enough to replace your shoes and succulent enough to make you wish you'd cooked them. Dark Blaster a blunderbuss with some dark energy coming from it. Blade of Darkness @@ -35546,6 +35558,8 @@ Concealed Vault Finally the cauldron's coughing up. Cauldron's Coins + Such good fortune it is to receive a bag of coin from a common turkey + Turkey's Treasure Bronze Mutator Reward Cache Silver Mutator Reward Cache Gold Mutator Reward Cache @@ -35582,6 +35596,35 @@ A cache of Umbral Shards and Mutator Materia.\nAwarded for completion of a Difficulty 10 Mutated Expedition with Bronze rank. A cache of Umbral Shards and Mutator Materia.\nAwarded for completion of a Difficulty 10 Mutated Expedition with Silver rank. A cache of Umbral Shards and Mutator Materia.\nAwarded for completion of a Difficulty 10 Mutated Expedition with Gold rank. + Jester's Smile + Jester's Smile + Jester's Smile + Jester's Smile + Jester's Smile + Titania's Cloak + Titania's Crown + Titania's Tights + Titania's Boots + Titania's Claws + Oberon's Breastplate + Oberon's Crown + Oberon's Tights + Oberon's Boots + Oberon's Gauntlets + Dark Scion's Wings + Dark Scion's Helm + Dark Scion's Legguards + Dark Scion Boots + Dark Scion Gauntlets + Twisted Undine + Sleeping Spindle + Spiritgem + Nymph Smasher + Dusk Spirit Fire + Icesnap + Provocative Pipes + The Sylph Strings + Puck's Bass Fallen Spirit's Breastplate Fallen Spirit's Horns Fallen Spirit's Legplates @@ -35593,6 +35636,31 @@ Lone Gladiator's Boots Lone Gladiator's Gloves Desert Traveler's Chest + REPLACEME + Turn that frown upside-down! + Turn that frown upside-down! + Turn that frown upside-down! + Turn that frown upside-down! + Turn that frown upside-down! + Turn that frown upside-down! + Satin and opalescent inlays shimmer under the moonlight in the woods, seeking foolish mortals. + Satin and opalescent inlays shimmer under the moonlight in the woods, seeking foolish mortals. + Satin and opalescent inlays shimmer under the moonlight in the woods, seeking foolish mortals. + Satin and opalescent inlays shimmer under the moonlight in the woods, seeking foolish mortals. + Satin and opalescent inlays shimmer under the moonlight in the woods, seeking foolish mortals. + Protective layers fit for a King. + Protective layers fit for a King. + Protective layers fit for a King. + Protective layers fit for a King. + Protective layers fit for a King. + Shining with the power of moonlight, take your rightful place as ruler of the night. + Shining with the power of moonlight, take your rightful place as ruler of the night. + Shining with the power of moonlight, take your rightful place as ruler of the night. + Shining with the power of moonlight, take your rightful place as ruler of the night. + Shining with the power of moonlight, take your rightful place as ruler of the night. + Entrance and enthrall all with your lilting melodies. + Play as lightly and sprightly as a sylph theirself. + For the mischievous musician who wishes to play in sultry, dulcet tones. The fallen spirit creeps into your ego, not unlike moss consuming stone. The fallen spirit creeps into your ego, not unlike moss consuming stone. The fallen spirit creeps into your ego, not unlike moss consuming stone. @@ -35604,6 +35672,7 @@ The arena has long since gone unused, but the attire of a gladiator has become almost symbolic to the people in the sands. The arena has long since gone unused, but the attire of a gladiator has become almost symbolic to the people in the sands. A resource pack hand-crafted for a desert explorer. + REPLACEME A box containing Runeglass of every type. Omega Runeglass Box A box containing Runeglass made using Amber. @@ -35678,7 +35747,37 @@ An account of your deeds! This is a crafting material used to craft runes. Writ of Adventure An account of your deeds! This is a crafting material used to craft runes. + Bountiful Feast of the Hunt + A chest of rewards packed rich with protein. + Mysterious Musician's Solitary Strongbox + A chest of rewards for the musically-inclined Aeternian. + Turkulon's Juicy Calves Box + Open this box to claim the skin. Apply it from the Select Skin menu. Fruit of the Dunes Resource Chest A resource chest of items hand-selected from a land of sand. + Ever seen a dusk spirit with a gun? Now you have. + With one prick on the finger, this blade can put the innocent right to sleep. + The massive gem in the center of this hatchet was acquired from the hunt after a raucous game of charades. + It's been said that winged creatures make satisfying crunch when smacked out of the air. + Magical fire pours forth from this staff, heavy with purpose in an adventurer's hand. + With a snap of your fingers, sugarplum spirits scatter in fear. + Ichthus' Pole + A rather simple fishing pole for such fanciful folk. + Titania's Scepter + Used by the Eternal Queen herself for officiating ceremonies and foes alike. + Lumbertorrwr + A rare tool for the spirits, but it's important to trim the forest for its own health and protection. + Dusk Spirit Wings + A beautiful ornament for mining beautiful ores. You may find it refusing to mine iron though, so buyer beware. + Dove Wing + The peaceful aura from this tool relaxes the herbs as you gather them and enhances their flavors. + Oberon's Dagger + An ultimately ceremonial gift from a visitor to The Court. It was treasured by the receive + Overcharged Gypsum Orb + A more powerful form of Gypsum Orb. This is only given as a gift and can be used without limitations. + Gift Chest + A cache of items gifted to warriors of Aeternum. + Gift Chest + A cache of items gifted to warriors of Aeternum. diff --git a/NewWorldCompanion.Services/NewWorldDataStore.cs b/NewWorldCompanion.Services/NewWorldDataStore.cs index 7b38941..0603d81 100644 --- a/NewWorldCompanion.Services/NewWorldDataStore.cs +++ b/NewWorldCompanion.Services/NewWorldDataStore.cs @@ -71,6 +71,7 @@ private void UpdateStoreData() }; // register the converter options.Converters.Add(new BoolConverter()); + options.Converters.Add(new IntConverter()); masterItemDefinitionsJson = JsonSerializer.Deserialize>(stream, options) ?? new List(); _masterItemDefinitionsJson.AddRange(masterItemDefinitionsJson); @@ -92,6 +93,7 @@ private void UpdateStoreData() }; // register the converter options.Converters.Add(new BoolConverter()); + options.Converters.Add(new IntConverter()); masterItemDefinitionsJson = JsonSerializer.Deserialize>(stream, options) ?? new List(); _masterItemDefinitionsJson.AddRange(masterItemDefinitionsJson); @@ -113,6 +115,7 @@ private void UpdateStoreData() }; // register the converter options.Converters.Add(new BoolConverter()); + options.Converters.Add(new IntConverter()); masterItemDefinitionsJson = JsonSerializer.Deserialize>(stream, options) ?? new List(); _masterItemDefinitionsJson.AddRange(masterItemDefinitionsJson); @@ -134,6 +137,7 @@ private void UpdateStoreData() }; // register the converter options.Converters.Add(new BoolConverter()); + options.Converters.Add(new IntConverter()); masterItemDefinitionsJson = JsonSerializer.Deserialize>(stream, options) ?? new List(); _masterItemDefinitionsJson.AddRange(masterItemDefinitionsJson); @@ -148,8 +152,16 @@ private void UpdateStoreData() { if (stream != null) { - _craftingRecipesJson = JsonSerializer.Deserialize>(stream) ?? new List(); - _craftingRecipesJson.RemoveAll(r => string.IsNullOrWhiteSpace(r.RequiredAchievementID)); + // create the options + var options = new JsonSerializerOptions() + { + WriteIndented = true + }; + // register the converter + options.Converters.Add(new BoolConverter()); + options.Converters.Add(new IntConverter()); + + _craftingRecipesJson = JsonSerializer.Deserialize>(stream, options) ?? new List(); } } @@ -227,7 +239,7 @@ private void UpdateStoreData() public List GetCraftingRecipes() { List craftingRecipes = new List(); - foreach (var craftingRecipeJson in _craftingRecipesJson) + foreach (var craftingRecipeJson in _craftingRecipesJson.FindAll(recipe => !string.IsNullOrWhiteSpace(recipe.RequiredAchievementID))) { string id = craftingRecipeJson.RequiredAchievementID; string tradeskill = craftingRecipeJson.Tradeskill; @@ -274,6 +286,37 @@ public List GetCraftingRecipes() return craftingRecipes; } + public List GetOverlayResources() + { + var assembly = Assembly.GetExecutingAssembly(); + string resourcePath = string.Empty; + + // MasterItemDefinitions Crafting + var masterItemDefinitionsJson = new List(); + resourcePath = "MasterItemDefinitions_Crafting.json"; + resourcePath = assembly.GetManifestResourceNames().Single(str => str.EndsWith(resourcePath)); + using (Stream? stream = assembly.GetManifestResourceStream(resourcePath)) + { + if (stream != null) + { + // create the options + var options = new JsonSerializerOptions() + { + WriteIndented = true + }; + // register the converter + options.Converters.Add(new BoolConverter()); + options.Converters.Add(new IntConverter()); + + masterItemDefinitionsJson = JsonSerializer.Deserialize>(stream, options) ?? new List(); + } + } + + return masterItemDefinitionsJson.FindAll(items => items.TradingFamily.Equals("RawResources") && + items.ItemClass.Contains("+") && + !items.ItemClass.Contains("WeaponSchematic")); + } + public bool IsBindOnPickup(string itemName) { var localisationId = _itemDefinitionsLocalisation.FirstOrDefault(x => x.Value.Replace("\\n", " ").Equals(itemName, StringComparison.OrdinalIgnoreCase)).Key; @@ -343,6 +386,36 @@ public string GetLevenshteinItemName(string itemName) return currentDistance <= 3 ? currentItem : itemName; } + public string GetItemLocalisation(string itemMasterName) + { + return _itemDefinitionsLocalisation.GetValueOrDefault(itemMasterName.Trim(new char[] { '@' }).ToLower()) ?? itemMasterName.Trim(new char[] { '@' }); + } + + public List GetRelatedRecipes(string itemId) + { + // Note: The following recipes are ignored: + // - Empty recipe.ItemID strings because those are all from downgrade recipes. + // - Armor / weapons because results are random and we have no price data. + // - Crafting quest recipes. + return _craftingRecipesJson.FindAll(recipe => + !string.IsNullOrWhiteSpace(recipe.ItemID) && + !recipe.CraftingCategory.Equals("Armor") && + !recipe.CraftingCategory.Equals("CraftingQuestRecipe") && + !recipe.CraftingCategory.Equals("MagicStaves") && + !recipe.CraftingCategory.Equals("Tools") && + !recipe.CraftingCategory.Equals("Weapons") && + !recipe.CraftingCategory.StartsWith("Salvage") && + !recipe.CraftingCategory.StartsWith("TimelessShards") && + (recipe.Ingredient1.Equals(itemId) || + (recipe.Ingredient1.Equals(itemId.Substring(0,itemId.Length-2)) && recipe.Type1.Equals("Category_Only")) || + recipe.Ingredient2.Equals(itemId) || + recipe.Ingredient3.Equals(itemId) || + recipe.Ingredient4.Equals(itemId) || + recipe.Ingredient5.Equals(itemId) || + recipe.Ingredient6.Equals(itemId) || + recipe.Ingredient7.Equals(itemId))); + } + #endregion } diff --git a/NewWorldCompanion.Services/OverlayHandler.cs b/NewWorldCompanion.Services/OverlayHandler.cs index 1050e62..524a542 100644 --- a/NewWorldCompanion.Services/OverlayHandler.cs +++ b/NewWorldCompanion.Services/OverlayHandler.cs @@ -136,25 +136,17 @@ private void DrawGraphics(object? sender, DrawGraphicsEventArgs e) private void DrawGraphicsItem(DrawGraphicsEventArgs e, string itemName) { NwmarketpriceJson nwmarketpriceJson = _priceManager.GetPriceData(itemName); - NumberStyles style = NumberStyles.AllowDecimalPoint; string infoItemName = itemName; string infoPrice = "Loading..."; - string infoPriceAvg = string.Empty; + string infoPriceAvg = string.Empty; if (!string.IsNullOrWhiteSpace(nwmarketpriceJson.item_name)) { - string recentLowestPriceAvgList = nwmarketpriceJson.RecentLowestPriceAvg; - - //infoPrice = nwmarketpriceJson.recent_lowest_price.Equals(nwmarketpriceJson.last_checked) ? - // nwmarketpriceJson.recent_lowest_price : - // $"{nwmarketpriceJson.recent_lowest_price} lowest ({nwmarketpriceJson.last_checked})"; - infoPrice = nwmarketpriceJson.recent_lowest_price.Equals(nwmarketpriceJson.last_checked) ? - decimal.Parse(nwmarketpriceJson.recent_lowest_price.ToString(), style, CultureInfo.InvariantCulture).ToString("F2"): - $"{nwmarketpriceJson.recent_lowest_price.ToString("F2")} lowest ({nwmarketpriceJson.last_checked})"; - infoPriceAvg = string.IsNullOrWhiteSpace(recentLowestPriceAvgList) ? - infoPriceAvg : - $"{recentLowestPriceAvgList} lowest avg ({nwmarketpriceJson.last_checked})"; + var priceChange = nwmarketpriceJson.price_change >= 0 ? $"+{nwmarketpriceJson.price_change}" : $"{nwmarketpriceJson.price_change}"; + infoPrice = $"{nwmarketpriceJson.recent_lowest_price.ToString("F2")} ({priceChange}%) ({nwmarketpriceJson.last_checked_string})"; + infoPriceAvg = nwmarketpriceJson.RecentLowestPriceAvg; + infoPriceAvg = string.IsNullOrWhiteSpace(infoPriceAvg) ? infoPriceAvg : $"{infoPriceAvg} (15-day avg) ({nwmarketpriceJson.last_checked_string})"; } // Do not show Bind on pickup items. @@ -176,7 +168,6 @@ private void DrawGraphicsItem(DrawGraphicsEventArgs e, string itemName) private void DrawGraphicsRecipe(DrawGraphicsEventArgs e, CraftingRecipe craftingRecipe) { NwmarketpriceJson nwmarketpriceJson = _priceManager.GetPriceData(craftingRecipe.LocalisationUserFriendly); - NumberStyles style = NumberStyles.AllowDecimalPoint; bool learnedStatus = craftingRecipe.Learned; string infoItemName = craftingRecipe.LocalisationUserFriendly; @@ -186,17 +177,10 @@ private void DrawGraphicsRecipe(DrawGraphicsEventArgs e, CraftingRecipe crafting if (!string.IsNullOrWhiteSpace(nwmarketpriceJson.item_name)) { - string recentLowestPriceAvgList = nwmarketpriceJson.RecentLowestPriceAvg; - - //infoPrice = nwmarketpriceJson.recent_lowest_price.Equals(nwmarketpriceJson.last_checked) ? - // nwmarketpriceJson.recent_lowest_price : - // $"{nwmarketpriceJson.recent_lowest_price} lowest ({nwmarketpriceJson.last_checked})"; - infoPrice = nwmarketpriceJson.recent_lowest_price.Equals(nwmarketpriceJson.last_checked) ? - decimal.Parse(nwmarketpriceJson.recent_lowest_price.ToString(), style, CultureInfo.InvariantCulture).ToString("F2") : - $"{nwmarketpriceJson.recent_lowest_price.ToString("F2")} lowest ({nwmarketpriceJson.last_checked})"; - infoPriceAvg = string.IsNullOrWhiteSpace(recentLowestPriceAvgList) ? - infoPriceAvg : - $"{recentLowestPriceAvgList} lowest avg ({nwmarketpriceJson.last_checked})"; + var priceChange = nwmarketpriceJson.price_change >= 0 ? $"+{nwmarketpriceJson.price_change}" : $"{nwmarketpriceJson.price_change}"; + infoPrice = $"{nwmarketpriceJson.recent_lowest_price.ToString("F2")} ({priceChange}%) ({nwmarketpriceJson.last_checked_string})"; + infoPriceAvg = nwmarketpriceJson.RecentLowestPriceAvg; + infoPriceAvg = string.IsNullOrWhiteSpace(infoPriceAvg) ? infoPriceAvg : $"{infoPriceAvg} (15-day avg) ({nwmarketpriceJson.last_checked_string})"; } var gfx = e.Graphics; diff --git a/NewWorldCompanion.Services/PriceManager.cs b/NewWorldCompanion.Services/PriceManager.cs index 34c23c0..b8827d7 100644 --- a/NewWorldCompanion.Services/PriceManager.cs +++ b/NewWorldCompanion.Services/PriceManager.cs @@ -147,7 +147,7 @@ public void UpdatePriceData(string itemName) { Debug.WriteLine($"item_name: {nwmarketpriceJson.item_name}"); Debug.WriteLine($"recent_lowest_price: {nwmarketpriceJson.recent_lowest_price}"); - Debug.WriteLine($"last_checked: {nwmarketpriceJson.last_checked}"); + Debug.WriteLine($"last_checked: {nwmarketpriceJson.last_checked_string}"); nwmarketpriceJson.item_name = string.IsNullOrEmpty(nwmarketpriceJson.item_name) ? itemName : nwmarketpriceJson.item_name; @@ -161,7 +161,7 @@ public void UpdatePriceData(string itemName) { item_name = itemName, recent_lowest_price = 0.00, - last_checked = "no data" + last_checked = DateTime.MinValue, }; } } diff --git a/NewWorldCompanion.Services/RelatedPriceManager.cs b/NewWorldCompanion.Services/RelatedPriceManager.cs new file mode 100644 index 0000000..d715371 --- /dev/null +++ b/NewWorldCompanion.Services/RelatedPriceManager.cs @@ -0,0 +1,115 @@ +using NewWorldCompanion.Entities; +using NewWorldCompanion.Interfaces; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.Json; +using System.Threading.Tasks; + +namespace NewWorldCompanion.Services +{ + public class RelatedPriceManager : IRelatedPriceManager + { + private List _persistableOverlayResources = new List(); + + // Start of Constructor region + + #region Constructor + + public RelatedPriceManager() + { + // Init related prices config + LoadRelatedPricesConfig(); + } + + #endregion + + // Start of Properties region + + #region Properties + + public List PersistableOverlayResources { get => _persistableOverlayResources; } + + #endregion + + // Start of Events region + + #region Events + + #endregion + + // Start of Methods region + + #region Methods + + private void LoadRelatedPricesConfig() + { + _persistableOverlayResources.Clear(); + + string fileName = "Config/RelatedPrices.json"; + if (File.Exists(fileName)) + { + using FileStream stream = File.OpenRead(fileName); + _persistableOverlayResources = JsonSerializer.Deserialize>(stream) ?? new List(); + } + + SaveRelatedPricesConfig(); + } + + public void SaveRelatedPricesConfig() + { + string fileName = "Config/RelatedPrices.json"; + string path = Path.GetDirectoryName(fileName) ?? string.Empty; + Directory.CreateDirectory(path); + + using FileStream stream = File.Create(fileName); + var options = new JsonSerializerOptions { WriteIndented = true }; + JsonSerializer.Serialize(stream, PersistableOverlayResources, options); + } + + public void SetRawResourceRecipeVisibility(string itemIDRawResource, string itemID, bool isVisible) + { + if (PersistableOverlayResources.Any(resource => resource.ItemId.Equals(itemIDRawResource))) + { + // RawResource exists + var rawResource = PersistableOverlayResources.FirstOrDefault(resource => resource.ItemId.Equals(itemIDRawResource)); + if (rawResource.PersistableOverlayResourceRecipes.Any(resource => resource.ItemId.Equals(itemID))) + { + // Recipe resource exists + var recipe = rawResource.PersistableOverlayResourceRecipes.FirstOrDefault(resource => resource.ItemId.Equals(itemID)); + recipe.IsVisible = isVisible; + + } + else + { + // Recipe resource does net yet exists + rawResource?.PersistableOverlayResourceRecipes.Add(new PersistableOverlayResourceRecipe + { + ItemId = itemID, + IsVisible = isVisible + }); + } + } + else + { + // RawResource does not yet exists + PersistableOverlayResources.Add(new PersistableOverlayResource + { + ItemId = itemIDRawResource + }); + var rawResource = PersistableOverlayResources.FirstOrDefault(resource => resource.ItemId.Equals(itemIDRawResource)); + rawResource?.PersistableOverlayResourceRecipes.Add(new PersistableOverlayResourceRecipe + { + ItemId = itemID, + IsVisible = isVisible + }); + } + + SaveRelatedPricesConfig(); + } + + #endregion + } +} diff --git a/NewWorldCompanion/App.xaml.cs b/NewWorldCompanion/App.xaml.cs index dcbb5e6..6bc881a 100644 --- a/NewWorldCompanion/App.xaml.cs +++ b/NewWorldCompanion/App.xaml.cs @@ -1,5 +1,6 @@ using MahApps.Metro.Controls.Dialogs; using Microsoft.Extensions.DependencyInjection; +using NewWorldCompanion.Entities; using NewWorldCompanion.Interfaces; using NewWorldCompanion.Services; using NewWorldCompanion.Views; @@ -32,7 +33,8 @@ protected override void RegisterTypes(IContainerRegistry containerRegistry) containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); containerRegistry.RegisterSingleton(); - + containerRegistry.RegisterSingleton(); + // Register Metro containerRegistry.RegisterSingleton(); } diff --git a/NewWorldCompanion/ViewModels/Tabs/Config/ConfigOverlayViewModel.cs b/NewWorldCompanion/ViewModels/Tabs/Config/ConfigOverlayViewModel.cs index 84742b8..13b6148 100644 --- a/NewWorldCompanion/ViewModels/Tabs/Config/ConfigOverlayViewModel.cs +++ b/NewWorldCompanion/ViewModels/Tabs/Config/ConfigOverlayViewModel.cs @@ -1,6 +1,7 @@ using NewWorldCompanion.Entities; using NewWorldCompanion.Events; using NewWorldCompanion.Interfaces; +using NewWorldCompanion.Services; using Prism.Events; using Prism.Mvvm; using System; @@ -9,6 +10,8 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Windows; +using System.Windows.Data; namespace NewWorldCompanion.ViewModels.Tabs.Config { @@ -16,17 +19,23 @@ public class ConfigOverlayViewModel : BindableBase { private readonly IEventAggregator _eventAggregator; private readonly ISettingsManager _settingsManager; + private readonly INewWorldDataStore _newWorldDataStore; private readonly IPriceManager _priceManager; + private readonly IRelatedPriceManager _relatedPriceManager; private ObservableCollection _servers = new ObservableCollection(); + private ObservableCollection _overlayResources = new ObservableCollection(); + private OverlayResource _selectedOverlayResource = new OverlayResource(); + private bool _toggleExtendedTooltip = false; private int _serverIndex = 0; + private string _itemNameFilter = string.Empty; // Start of Constructor region #region Constructor - public ConfigOverlayViewModel(IEventAggregator eventAggregator, ISettingsManager settingsManager, IPriceManager priceManager) + public ConfigOverlayViewModel(IEventAggregator eventAggregator, ISettingsManager settingsManager, INewWorldDataStore newWorldDataStore, IPriceManager priceManager, IRelatedPriceManager relatedPriceManager) { // Init IEventAggregator _eventAggregator = eventAggregator; @@ -34,7 +43,15 @@ public ConfigOverlayViewModel(IEventAggregator eventAggregator, ISettingsManager // Init services _settingsManager = settingsManager; + _newWorldDataStore = newWorldDataStore; _priceManager = priceManager; + _relatedPriceManager = relatedPriceManager; + + // Init related prices + InitOverlayResources(); + + // Init filter views + CreateOverlayResourcesFilteredView(); } #endregion @@ -44,11 +61,34 @@ public ConfigOverlayViewModel(IEventAggregator eventAggregator, ISettingsManager #region Properties public ObservableCollection Servers { get => _servers; set => _servers = value; } + public ObservableCollection OverlayResources { get => _overlayResources; set => _overlayResources = value; } + public ListCollectionView? OverlayResourcesFiltered { get; private set; } + + public OverlayResource SelectedOverlayResource + { + get => _selectedOverlayResource; + set + { + SetProperty(ref _selectedOverlayResource, value, () => { RaisePropertyChanged(nameof(SelectedOverlayResource)); }); + } + } + + public bool ToggleExtendedTooltip + { + get => _toggleExtendedTooltip; + set + { + _toggleExtendedTooltip = value; + _settingsManager.Settings.ExtendedTooltipEnabled = value; + _settingsManager.SaveSettings(); + // TODO: Notify tooltip handler + } + } public int ServerIndex { - get - { + get + { return _serverIndex; } set @@ -64,6 +104,23 @@ public int ServerIndex } } + public string ItemNameFilter + { + get => _itemNameFilter; + set + { + _itemNameFilter = value; + RaisePropertyChanged(nameof(ItemNameFilter)); + + OverlayResourcesFiltered?.Refresh(); + + if (OverlayResourcesFiltered?.Count == 1) + { + SelectedOverlayResource = (OverlayResource)OverlayResourcesFiltered.GetItemAt(0); + } + } + } + #endregion // Start of Events region @@ -93,6 +150,156 @@ private void updateServerList() } } + private void CreateOverlayResourcesFilteredView() + { + // As the view is accessed by the UI it will need to be created on the UI thread + Application.Current?.Dispatcher?.Invoke(() => + { + OverlayResourcesFiltered = new ListCollectionView(OverlayResources) + { + Filter = FilterOverlayResources + }; + }); + } + + private bool FilterOverlayResources(object overlayResourceObj) + { + var allowed = false; + if (overlayResourceObj == null) return false; + + OverlayResource overlayResource = (OverlayResource)overlayResourceObj; + + allowed = overlayResource.Recipes.Any(); + if (allowed) + { + allowed = string.IsNullOrWhiteSpace(ItemNameFilter) ? true : overlayResource.RawResource.NameLocalised.ToLower().Contains(ItemNameFilter.ToLower()); + } + + return allowed; + } + + private void InitOverlayResources() + { + // Load extended tooltip toggle + ToggleExtendedTooltip = _settingsManager.Settings.ExtendedTooltipEnabled; + + // Get interesting resources for extended overlay + var overlayResources = _newWorldDataStore.GetOverlayResources(); + overlayResources.Sort((x, y) => + { + int result = string.Compare(x.ItemClass, y.ItemClass, StringComparison.Ordinal); + result = result != 0 ? result : x.Tier - y.Tier; + return result != 0 ? result : string.Compare(x.ItemID, y.ItemID, StringComparison.Ordinal); + }); + + foreach (var overlayResource in overlayResources) + { + _overlayResources.Add(new OverlayResource + { + RawResource = new RawResource { ItemID = overlayResource.ItemID, Name = overlayResource.Name } + }); + } + + // Add related recipes + foreach (var overlayResource in _overlayResources) + { + var relatedRecipes = _newWorldDataStore.GetRelatedRecipes(overlayResource.RawResource.ItemID); + foreach (var recipe in relatedRecipes) + { + overlayResource.Recipes.Add(new RawResourceRecipe + { + ItemID = recipe.ItemID, + ItemIDRawResource = overlayResource.RawResource.ItemID + }); + } + } + + // Load related recipes config + foreach (var persistableOverlayResource in _relatedPriceManager.PersistableOverlayResources) + { + var overlayResource = _overlayResources.FirstOrDefault(resource => resource.RawResource.ItemID.Equals(persistableOverlayResource.ItemId)); + if (overlayResource != null) + { + foreach (var persistableOverlayResourceRecipe in persistableOverlayResource.PersistableOverlayResourceRecipes) + { + var overlayResourceRecipe = overlayResource.Recipes.FirstOrDefault(recipe => recipe.ItemID.Equals(persistableOverlayResourceRecipe.ItemId)); + if (overlayResourceRecipe != null) + { + overlayResourceRecipe.IsVisible = persistableOverlayResourceRecipe.IsVisible; + } + } + } + } + } + #endregion } + + public class OverlayResource + { + public RawResource RawResource { get; set; } = new RawResource(); + public List Recipes { get; set; } = new List(); + } + + public class RawResource + { + private readonly INewWorldDataStore _newWorldDataStore; + + public RawResource() + { + _newWorldDataStore = (INewWorldDataStore)Prism.Ioc.ContainerLocator.Container.Resolve(typeof(INewWorldDataStore)); + } + + /// Unique identifier for items. Nwdb uses this to identify items + public string ItemID { get; set; } = string.Empty; + /// Contains master name for localisation + public string Name { get; set; } = string.Empty; + /// Localised name + public string NameLocalised + { + get + { + return _newWorldDataStore.GetItemLocalisation(Name); + } + } + } + + public class RawResourceRecipe + { + private readonly INewWorldDataStore _newWorldDataStore; + private readonly IRelatedPriceManager _relatedPriceManager; + + private bool _isVisible = false; + + public RawResourceRecipe() + { + _newWorldDataStore = (INewWorldDataStore)Prism.Ioc.ContainerLocator.Container.Resolve(typeof(INewWorldDataStore)); + _relatedPriceManager = (IRelatedPriceManager)Prism.Ioc.ContainerLocator.Container.Resolve(typeof(IRelatedPriceManager)); + } + + /// Show or hide recipe + public bool IsVisible + { + get => _isVisible; + set + { + _isVisible = value; + _relatedPriceManager.SetRawResourceRecipeVisibility(ItemIDRawResource, ItemID, IsVisible); + } + } + + /// Crafted item ItemId + public string ItemID { get; set; } = string.Empty; + /// RawResource ItemId of the RawResource linked to this recipe. + public string ItemIDRawResource { get; set; } = string.Empty; + /// Localised name + public string NameLocalised + { + get + { + return _newWorldDataStore.GetItemLocalisation($"@{ItemID}_MasterName"); + } + } + } + } diff --git a/NewWorldCompanion/ViewModels/Tabs/CraftingViewModel.cs b/NewWorldCompanion/ViewModels/Tabs/CraftingViewModel.cs index 29c26ac..759087b 100644 --- a/NewWorldCompanion/ViewModels/Tabs/CraftingViewModel.cs +++ b/NewWorldCompanion/ViewModels/Tabs/CraftingViewModel.cs @@ -63,7 +63,9 @@ public class CraftingViewModel : BindableBase private int _counterMusicSheets = 0; private string _itemNameFilter = string.Empty; private string _selectedCraftingRecipePrice = string.Empty; + private string _selectedCraftingRecipePriceTooltip = string.Empty; private string _selectedCraftingRecipePriceAvg = string.Empty; + private string _selectedCraftingRecipePriceAvgToolip = string.Empty; // Start of Constructor region @@ -144,7 +146,9 @@ public CraftingRecipe SelectedCraftingRecipe { SetProperty(ref _selectedCraftingRecipe, value, () => { RaisePropertyChanged(nameof(SelectedCraftingRecipe)); }); RaisePropertyChanged(nameof(SelectedCraftingRecipePrice)); + RaisePropertyChanged(nameof(SelectedCraftingRecipePriceTooltip)); RaisePropertyChanged(nameof(SelectedCraftingRecipePriceAvg)); + RaisePropertyChanged(nameof(SelectedCraftingRecipePriceAvgTooltip)); } } @@ -279,23 +283,36 @@ public string SelectedCraftingRecipePrice { _priceManager.UpdatePriceData(SelectedCraftingRecipe.LocalisationUserFriendly); NwmarketpriceJson nwmarketpriceJson = _priceManager.GetPriceData(SelectedCraftingRecipe.LocalisationUserFriendly); - NumberStyles style = NumberStyles.AllowDecimalPoint; if (!string.IsNullOrWhiteSpace(nwmarketpriceJson.item_name)) { - string recentLowestPriceAvgList = nwmarketpriceJson.RecentLowestPriceAvg; - - //_selectedCraftingRecipePrice = nwmarketpriceJson.recent_lowest_price.Equals(nwmarketpriceJson.last_checked) ? - // nwmarketpriceJson.recent_lowest_price : - // $"{nwmarketpriceJson.recent_lowest_price} lowest ({nwmarketpriceJson.last_checked})"; - _selectedCraftingRecipePrice = nwmarketpriceJson.recent_lowest_price.Equals(nwmarketpriceJson.last_checked) ? - decimal.Parse(nwmarketpriceJson.recent_lowest_price.ToString(), style, CultureInfo.InvariantCulture).ToString("F2") : - $"{nwmarketpriceJson.recent_lowest_price.ToString("F2")} lowest ({nwmarketpriceJson.last_checked})"; + var priceChange = nwmarketpriceJson.price_change >= 0 ? $"+{nwmarketpriceJson.price_change}" : $"{nwmarketpriceJson.price_change}"; + _selectedCraftingRecipePrice = $"{nwmarketpriceJson.recent_lowest_price.ToString("F2")} ({priceChange}%) ({nwmarketpriceJson.last_checked_string})"; } } return _selectedCraftingRecipePrice; } } + public string SelectedCraftingRecipePriceTooltip + { + get + { + _selectedCraftingRecipePriceTooltip = string.Empty; + + if (SelectedCraftingRecipe != null) + { + _priceManager.UpdatePriceData(SelectedCraftingRecipe.LocalisationUserFriendly); + NwmarketpriceJson nwmarketpriceJson = _priceManager.GetPriceData(SelectedCraftingRecipe.LocalisationUserFriendly); + if (!string.IsNullOrWhiteSpace(nwmarketpriceJson.item_name)) + { + var priceChange = nwmarketpriceJson.price_change >= 0 ? $"+{nwmarketpriceJson.price_change}" : $"{nwmarketpriceJson.price_change}"; + _selectedCraftingRecipePriceTooltip = $"The lowest price at ({nwmarketpriceJson.last_checked_string}) was {nwmarketpriceJson.recent_lowest_price.ToString("F2")} ({priceChange}%)"; + } + } + return _selectedCraftingRecipePriceTooltip; + } + } + public string SelectedCraftingRecipePriceAvg { get @@ -308,16 +325,38 @@ public string SelectedCraftingRecipePriceAvg NwmarketpriceJson nwmarketpriceJson = _priceManager.GetPriceData(SelectedCraftingRecipe.LocalisationUserFriendly); if (!string.IsNullOrWhiteSpace(nwmarketpriceJson.item_name)) { - string recentLowestPriceAvgList = nwmarketpriceJson.RecentLowestPriceAvg; - _selectedCraftingRecipePriceAvg = string.IsNullOrWhiteSpace(recentLowestPriceAvgList) ? + string recentLowestPriceAvg = nwmarketpriceJson.RecentLowestPriceAvg; + _selectedCraftingRecipePriceAvg = string.IsNullOrWhiteSpace(recentLowestPriceAvg) ? _selectedCraftingRecipePriceAvg : - $"{recentLowestPriceAvgList} lowest avg ({nwmarketpriceJson.last_checked})"; + $"{recentLowestPriceAvg} (15-day avg) ({nwmarketpriceJson.last_checked_string})"; } } return _selectedCraftingRecipePriceAvg; } } + public string SelectedCraftingRecipePriceAvgTooltip + { + get + { + _selectedCraftingRecipePriceAvgToolip = string.Empty; + + if (SelectedCraftingRecipe != null) + { + _priceManager.UpdatePriceData(SelectedCraftingRecipe.LocalisationUserFriendly); + NwmarketpriceJson nwmarketpriceJson = _priceManager.GetPriceData(SelectedCraftingRecipe.LocalisationUserFriendly); + if (!string.IsNullOrWhiteSpace(nwmarketpriceJson.item_name)) + { + string recentLowestPriceAvg = nwmarketpriceJson.RecentLowestPriceAvg; + _selectedCraftingRecipePriceAvgToolip = string.IsNullOrWhiteSpace(recentLowestPriceAvg) ? + _selectedCraftingRecipePriceAvgToolip : + $"The lowest 15-day average price at ({nwmarketpriceJson.last_checked_string}) was {recentLowestPriceAvg}"; + } + } + return _selectedCraftingRecipePriceAvgToolip; + } + } + #endregion // Start of Events region @@ -347,10 +386,11 @@ private void HandleOcrTextReadyEvent() private void HandlePriceCacheUpdatedEvent() { RaisePropertyChanged(nameof(SelectedCraftingRecipePrice)); + RaisePropertyChanged(nameof(SelectedCraftingRecipePriceTooltip)); RaisePropertyChanged(nameof(SelectedCraftingRecipePriceAvg)); + RaisePropertyChanged(nameof(SelectedCraftingRecipePriceAvgTooltip)); } - #endregion // Start of Methods region diff --git a/NewWorldCompanion/ViewModels/Tabs/StorageViewModel.cs b/NewWorldCompanion/ViewModels/Tabs/StorageViewModel.cs index 4ad2d94..d2c4c57 100644 --- a/NewWorldCompanion/ViewModels/Tabs/StorageViewModel.cs +++ b/NewWorldCompanion/ViewModels/Tabs/StorageViewModel.cs @@ -228,6 +228,9 @@ private bool FilterItems(object itemsObj) case StorageLocationConstants.Brightwood: allowed = Storages.FirstOrDefault(s => s.Name.Equals(item.Storage, StringComparison.OrdinalIgnoreCase))?.IsEnabled ?? false; break; + case StorageLocationConstants.BrimstoneSandsNewCorsica: + allowed = Storages.FirstOrDefault(s => s.Name.Equals(item.Storage, StringComparison.OrdinalIgnoreCase))?.IsEnabled ?? false; + break; case StorageLocationConstants.CutlassKeys: allowed = Storages.FirstOrDefault(s => s.Name.Equals(item.Storage, StringComparison.OrdinalIgnoreCase))?.IsEnabled ?? false; break; @@ -294,6 +297,11 @@ private void InitStorage() IsEnabled = true }); Storages.Add(new Storage() + { + Name = StorageLocationConstants.BrimstoneSandsNewCorsica, + IsEnabled = true + }); + Storages.Add(new Storage() { Name = StorageLocationConstants.CutlassKeys, IsEnabled = true diff --git a/NewWorldCompanion/Views/Tabs/Config/ConfigOverlayView.xaml b/NewWorldCompanion/Views/Tabs/Config/ConfigOverlayView.xaml index 27234fb..3d4ce09 100644 --- a/NewWorldCompanion/Views/Tabs/Config/ConfigOverlayView.xaml +++ b/NewWorldCompanion/Views/Tabs/Config/ConfigOverlayView.xaml @@ -3,27 +3,77 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" - xmlns:local="clr-namespace:NewWorldCompanion.Views.Tabs.Config" + xmlns:local="clr-namespace:NewWorldCompanion.Views.Tabs.Config" + xmlns:configvm="clr-namespace:NewWorldCompanion.ViewModels.Tabs.Config" + d:DataContext="{d:DesignInstance Type=configvm:ConfigOverlayViewModel}" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800"> - - - - - - - - - + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NewWorldCompanion/Views/Tabs/Config/ConfigOverlayView.xaml.cs b/NewWorldCompanion/Views/Tabs/Config/ConfigOverlayView.xaml.cs index 58bfa69..9bc298f 100644 --- a/NewWorldCompanion/Views/Tabs/Config/ConfigOverlayView.xaml.cs +++ b/NewWorldCompanion/Views/Tabs/Config/ConfigOverlayView.xaml.cs @@ -24,5 +24,18 @@ public ConfigOverlayView() { InitializeComponent(); } + + private void TextBoxFilter_GotFocus(object sender, RoutedEventArgs e) + { + TextBoxFilterWatermark.Visibility = Visibility.Collapsed; + } + + private void TextBoxFilter_LostFocus(object sender, RoutedEventArgs e) + { + if (string.IsNullOrWhiteSpace(TextBoxFilter.Text)) + { + TextBoxFilterWatermark.Visibility = Visibility.Visible; + } + } } } diff --git a/NewWorldCompanion/Views/Tabs/CraftingView.xaml b/NewWorldCompanion/Views/Tabs/CraftingView.xaml index a69d72f..95f29a1 100644 --- a/NewWorldCompanion/Views/Tabs/CraftingView.xaml +++ b/NewWorldCompanion/Views/Tabs/CraftingView.xaml @@ -9,129 +9,129 @@ xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800"> - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - + - - - - - + + + diff --git a/NewWorldCompanion/common.props b/NewWorldCompanion/common.props index 29ef384..6284b8b 100644 --- a/NewWorldCompanion/common.props +++ b/NewWorldCompanion/common.props @@ -1,7 +1,7 @@ - 1.0.8.2 - 1.0.8.2 + 1.0.9.0 + 1.0.9.0 Copyright © 2022 net6.0-windows