Skip to content

Commit 5c48db8

Browse files
authored
Merge pull request #849 from Sidekick-Poe/feature/foulborn
Added support for grafts, wombgifts, foulborn items and mutated modifiers
2 parents 0f2832b + 6e87f8e commit 5c48db8

40 files changed

+263
-57
lines changed

Game Localization.xlsm

18 KB
Binary file not shown.

src/Sidekick.Apis.Poe.Trade/Filters/FilterProvider.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ IInvariantFilterProvider invariantFilterProvider
3232

3333
public ApiFilter? Mirrored { get; private set; }
3434

35+
public ApiFilter? Foulborn { get; private set; }
36+
3537
public ApiFilter? Sanctified { get; private set; }
3638

3739
public ApiFilterCategory? RequirementsCategory { get; private set; }
@@ -86,6 +88,11 @@ public async Task Initialize()
8688
Mirrored = GetApiFilter(invariantFilterProvider.MirroredDefinition.CategoryId, invariantFilterProvider.MirroredDefinition.FilterId);
8789
}
8890

91+
if (invariantFilterProvider.FoulbornDefinition != null)
92+
{
93+
Foulborn = GetApiFilter(invariantFilterProvider.FoulbornDefinition.CategoryId, invariantFilterProvider.FoulbornDefinition.FilterId);
94+
}
95+
8996
if (invariantFilterProvider.SanctifiedDefinition != null)
9097
{
9198
Sanctified = GetApiFilter(invariantFilterProvider.SanctifiedDefinition.CategoryId, invariantFilterProvider.SanctifiedDefinition.FilterId);

src/Sidekick.Apis.Poe.Trade/Filters/IFilterProvider.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public interface IFilterProvider : IInitializableService
1212
ApiFilter? Veiled { get; }
1313
ApiFilter? Fractured { get; }
1414
ApiFilter? Mirrored { get; }
15+
ApiFilter? Foulborn { get; }
1516
ApiFilter? Sanctified { get; }
1617
ApiFilterCategory? RequirementsCategory { get; }
1718
ApiFilterCategory? MiscellaneousCategory { get; }

src/Sidekick.Apis.Poe.Trade/Filters/IInvariantFilterProvider.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@ public interface IInvariantFilterProvider : IInitializableService
99
FilterDefinition? VeiledDefinition { get; }
1010
FilterDefinition? FracturedDefinition { get; }
1111
FilterDefinition? MirroredDefinition { get; }
12+
FilterDefinition? FoulbornDefinition { get; }
1213
FilterDefinition? SanctifiedDefinition { get; }
1314
}

src/Sidekick.Apis.Poe.Trade/Filters/InvariantFilterProvider.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ IGameLanguageProvider gameLanguageProvider
2121
public FilterDefinition? VeiledDefinition { get; private set; }
2222
public FilterDefinition? FracturedDefinition { get; private set; }
2323
public FilterDefinition? MirroredDefinition { get; private set; }
24+
public FilterDefinition? FoulbornDefinition { get; private set; }
2425
public FilterDefinition? SanctifiedDefinition { get; private set; }
2526

2627
/// <inheritdoc/>
@@ -82,6 +83,15 @@ public async Task Initialize()
8283
};
8384
}
8485

86+
if (category.Id == "misc_filters" && filter.Id == "foulborn_item")
87+
{
88+
FoulbornDefinition = new FilterDefinition()
89+
{
90+
CategoryId = category.Id,
91+
FilterId = filter.Id,
92+
};
93+
}
94+
8595
if (category.Id == "misc_filters" && filter.Id == "sanctified")
8696
{
8797
SanctifiedDefinition = new FilterDefinition()

src/Sidekick.Apis.Poe.Trade/Items/ApiItemConstants.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ public class ApiItemConstants
2323
{ "tincture", Category.Tincture },
2424
{ "corpse", Category.Corpse },
2525
{ "idol", Category.Idol },
26+
{ "graft", Category.Graft },
27+
{ "wombgift", Category.Wombgift },
2628
};
2729

2830
public static readonly Dictionary<string, Category> Poe2Categories = new()

src/Sidekick.Apis.Poe.Trade/Items/ApiItemProvider.cs

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public class ApiItemProvider
2424
IApiStaticDataProvider apiStaticDataProvider
2525
) : IApiItemProvider
2626
{
27-
public Dictionary<string, List<(Regex Regex, ItemApiInformation Item)>> NameDictionary { get; private set; } = [];
27+
public List<(Regex Regex, ItemApiInformation Item)> NamePatterns { get; private set; } = [];
2828

2929
public List<(Regex Regex, ItemApiInformation Item)> TypePatterns { get; private set; } = [];
3030

@@ -45,8 +45,7 @@ public async Task Initialize()
4545
if (result == null) throw new SidekickException("Could not fetch items from the trade API.");
4646

4747
InitializeItems(game, result);
48-
UniqueItems = NameDictionary.SelectMany(x => x.Value)
49-
.Select(x => x.Item)
48+
UniqueItems = NamePatterns.Select(x => x.Item)
5049
.Where(x => x.IsUnique)
5150
.OrderByDescending(x => x.Name?.Length)
5251
.ToList();
@@ -57,7 +56,7 @@ public async Task Initialize()
5756

5857
private void InitializeItems(GameType game, FetchResult<ApiCategory> result)
5958
{
60-
NameDictionary.Clear();
59+
NamePatterns.Clear();
6160
TypePatterns.Clear();
6261
TextPatterns.Clear();
6362

@@ -100,13 +99,8 @@ private void FillCategoryItems(List<ApiCategory> categories, string categoryId,
10099

101100
if (!string.IsNullOrEmpty(information.Name))
102101
{
103-
if (!NameDictionary.TryGetValue(information.Name, out var namePatterns))
104-
{
105-
namePatterns = new List<(Regex Regex, ItemApiInformation Item)>();
106-
NameDictionary.Add(information.Name, namePatterns);
107-
}
108-
109-
namePatterns.Add((new Regex(Regex.Escape(information.Name)), information));
102+
var regex = $"^{Regex.Escape(information.Name)}|{Regex.Escape(information.Name)}$";
103+
NamePatterns.Add((new Regex(regex), information));
110104
}
111105

112106
if (!string.IsNullOrEmpty(information.Type) && !information.IsUnique)

src/Sidekick.Apis.Poe.Trade/Items/IApiItemProvider.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace Sidekick.Apis.Poe.Trade.Items;
66

77
public interface IApiItemProvider : IInitializableService
88
{
9-
Dictionary<string, List<(Regex Regex, ItemApiInformation Item)>> NameDictionary { get; }
9+
List<(Regex Regex, ItemApiInformation Item)> NamePatterns { get; }
1010

1111
List<(Regex Regex, ItemApiInformation Item)> TypePatterns { get; }
1212

src/Sidekick.Apis.Poe.Trade/Models/Items/ApiItem.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,9 @@ public class ApiItem
9797
[JsonPropertyName("sanctumMods")]
9898
public List<string> SanctumMods { get; set; } = [];
9999

100+
[JsonPropertyName("mutatedMods")]
101+
public List<string> MutatedMods { get; set; } = [];
102+
100103
public List<string> GemSockets { get; set; } = [];
101104

102105
public List<ApiItemSocket> Sockets { get; set; } = [];
@@ -137,5 +140,5 @@ public int? MaxLinks
137140
return value.Value.GetInt32();
138141
}
139142

140-
public bool HasModifiers => !Identified || ImplicitMods.Count > 0 || CraftedMods.Count > 0 || ExplicitMods.Count > 0 || UtilityMods.Count > 0 || PseudoMods.Count > 0 || EnchantMods.Count > 0 || RuneMods.Count > 0 || FracturedMods.Count > 0 || DesecratedMods.Count > 0 || ScourgeMods.Count > 0 || SanctumMods.Count > 0 || LogbookMods.Count > 0;
143+
public bool HasModifiers => !Identified || ImplicitMods.Count > 0 || CraftedMods.Count > 0 || ExplicitMods.Count > 0 || UtilityMods.Count > 0 || PseudoMods.Count > 0 || EnchantMods.Count > 0 || RuneMods.Count > 0 || FracturedMods.Count > 0 || DesecratedMods.Count > 0 || ScourgeMods.Count > 0 || SanctumMods.Count > 0 || LogbookMods.Count > 0 || MutatedMods.Count > 0;
141144
}

src/Sidekick.Apis.Poe.Trade/Modifiers/ModifierProvider.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ private Regex ComputePattern(string text, ModifierCategory? category = null, str
150150
ModifierCategory.Crafted => @"\ \(crafted\)",
151151
ModifierCategory.Fractured => @"\ \(fractured\)",
152152
ModifierCategory.Desecrated => @"\ \(desecrated\)",
153+
ModifierCategory.Explicit => @"(?:\ \(mutated\))?",
153154
_ => "",
154155
};
155156

0 commit comments

Comments
 (0)