diff --git a/Models/RoadshopItem.cs b/Models/RoadshopItem.cs index 271a873..4fbe09d 100644 --- a/Models/RoadshopItem.cs +++ b/Models/RoadshopItem.cs @@ -4,46 +4,43 @@ namespace RoadshopEditor.Models { public sealed class RoadshopItem { - [Column("itemhash")] + [Column("id")] public int ItemHash { get; set; } - [Column("shoptype")] + [Column("shop_type")] public int? ShopType { get; set; } - [Column("shopid")] + [Column("shop_id")] public ShopCategory ShopId { get; set; } - [Column("itemid")] + [Column("item_id")] public int ItemId { get; set; } - [Column("points")] - public ushort? PointCost { get; set; } + [Column("cost")] + public int? PointCost { get; set; } - [Column("tradequantity")] + [Column("quantity")] public ushort? TradeQuantity { get; set; } - [Column("rankreqlow")] + [Column("min_hr")] public ushort? LowRankRequirement { get; set; } - [Column("rankreqhigh")] + [Column("min_sr")] public ushort? HighRankRequirement { get; set; } - [Column("rankreqg")] + [Column("min_gr")] public ushort? GRankRequirement { get; set; } - [Column("storelevelreq")] + [Column("store_level")] public ushort? StoreLevelRequirement { get; set; } - [Column("maximumquantity")] + [Column("max_quantity")] public ushort? MaxQuantity { get; set; } - [Column("boughtquantity")] - public ushort? QuantityBought { get; set; } - - [Column("roadfloorsrequired")] + [Column("road_floors")] public ushort? HuntingRoadLevelRequirement { get; set; } - [Column("weeklyfataliskills")] + [Column("road_fatalis")] public ushort? WeeklyFatalisKills { get; set; } [NotMapped] diff --git a/README.md b/README.md index c29245c..84233f3 100644 --- a/README.md +++ b/README.md @@ -12,10 +12,10 @@ Navigate to your folder where you have unpacked the archive and locate `appsetti "ConnectionStrings": { "RoadshopItemsDatabase": "Host=;Database=erupe;Username=;Password=" }, - "RoadshopItemsTable": "normal_shop_items" + "RoadshopItemsTable": "shop_items" } ``` -Put in the required information for ``, `` and `` and save the file. If your roadshop items tablename should differ from the one I put in, you can of course change it here too. +Put in the required information for ``, `` and `` and save the file. If your roadshop items tablename should differ from the one I put in, you can of course change it here too, provided that the schema stays the same. # Usage ### Adding items diff --git a/Services/Mapping/CsvConverters/ShopCategoryConverter.cs b/Services/Mapping/CsvConverters/ShopCategoryConverter.cs new file mode 100644 index 0000000..ef19c3d --- /dev/null +++ b/Services/Mapping/CsvConverters/ShopCategoryConverter.cs @@ -0,0 +1,44 @@ +using System; + +using CsvHelper; +using CsvHelper.Configuration; +using CsvHelper.TypeConversion; + +using RoadshopEditor.Models; + +namespace RoadshopEditor.Services.Mapping.CsvConverters; + +internal class ShopCategoryConverter : DefaultTypeConverter +{ + public override string? ConvertToString(object? value, IWriterRow row, MemberMapData memberMapData) + { + if (value is null) + { + return string.Empty; + } + + if (Enum.TryParse(value.ToString(), out ShopCategory result)) + { + return ((int)result).ToString(); + } + + return string.Empty; + } + + public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData) + { + if (text is null) + { + return (ShopCategory)0; + } + + var isValidId = int.TryParse(text, out int result); + + if (isValidId) + { + return (ShopCategory)result; + } + + return (ShopCategory)0; + } +} diff --git a/Services/Mapping/RoadshopClassMap.cs b/Services/Mapping/RoadshopClassMap.cs index 505a16a..a1bffd7 100644 --- a/Services/Mapping/RoadshopClassMap.cs +++ b/Services/Mapping/RoadshopClassMap.cs @@ -1,6 +1,7 @@ using CsvHelper.Configuration; using RoadshopEditor.Models; +using RoadshopEditor.Services.Mapping.CsvConverters; namespace RoadshopEditor.Services.Mapping; @@ -9,7 +10,7 @@ internal sealed class RoadshopClassMap : ClassMap internal RoadshopClassMap() { Map(m => m.ShopType).Name("shoptype"); - Map(m => m.ShopId).Name("shopid"); + Map(m => m.ShopId).Name("shopid").TypeConverter(); Map(m => m.ItemHash).Name("itemhash"); Map(m => m.ItemId).Name("itemid"); Map(m => m.PointCost).Name("points"); @@ -19,7 +20,6 @@ internal RoadshopClassMap() Map(m => m.GRankRequirement).Name("rankreqg"); Map(m => m.StoreLevelRequirement).Name("storelevelreq"); Map(m => m.MaxQuantity).Name("maximumquantity"); - Map(m => m.QuantityBought).Name("boughtquantity"); Map(m => m.HuntingRoadLevelRequirement).Name("roadfloorsrequired"); Map(m => m.WeeklyFatalisKills).Name("weeklyfataliskills"); } diff --git a/ViewModels/MainWindowViewModel.cs b/ViewModels/MainWindowViewModel.cs index da612fd..6c73cf5 100644 --- a/ViewModels/MainWindowViewModel.cs +++ b/ViewModels/MainWindowViewModel.cs @@ -102,9 +102,6 @@ public async Task AddItem() MaxQuantity = ushort.TryParse(MaxQuantity, out ushort maxQuantity) ? maxQuantity : (ushort)0, - QuantityBought = ushort.TryParse(BoughtQuantity, out ushort boughtQuantity) - ? boughtQuantity - : (ushort)0, HuntingRoadLevelRequirement = ushort.TryParse(FloorRequirement, out ushort storeLevelRequirement) ? storeLevelRequirement : (ushort)0, @@ -169,7 +166,7 @@ public void Import(string filePath) RoadshopItems.Clear(); foreach (var item in items) { - item.Name = AllItems[item.ItemId]; + item.Name = AllItems.GetValueOrDefault(item.ItemId) ?? string.Empty; RoadshopItems.Add(item); } } diff --git a/Views/MainWindow.axaml b/Views/MainWindow.axaml index 48238a5..51c21bf 100644 --- a/Views/MainWindow.axaml +++ b/Views/MainWindow.axaml @@ -85,7 +85,6 @@ -