diff --git a/NHSE.Core/Editing/ItemRequest/ItemParser.cs b/NHSE.Core/Editing/ItemRequest/ItemParser.cs
index 612fde1..8e5ff08 100644
--- a/NHSE.Core/Editing/ItemRequest/ItemParser.cs
+++ b/NHSE.Core/Editing/ItemRequest/ItemParser.cs
@@ -257,8 +257,17 @@ private static Item FinalizeItem(int requestIndex, IConfigItem config, ItemDesti
/// Returns if no match found.
public static Item GetItem(string itemName, string lang = "en")
{
- var strings = GameInfo.GetStrings(lang).ItemDataSource;
- return GetItem(itemName, strings);
+ var gStrings = GameInfo.GetStrings(lang);
+ var strings = gStrings.ItemDataSource;
+ var parsedItem = GetItem(itemName, strings);
+ if (parsedItem != Item.NO_ITEM)
+ return parsedItem;
+
+ if (gStrings.HasAssociatedItems(itemName, out var items))
+ if (items != null && items.Count == 1)
+ return new Item((ushort)items[0].Value);
+
+ return Item.NO_ITEM;
}
///
diff --git a/NHSE.Core/Strings/GameStrings.cs b/NHSE.Core/Strings/GameStrings.cs
index 6d0f8b3..1bbd4a0 100644
--- a/NHSE.Core/Strings/GameStrings.cs
+++ b/NHSE.Core/Strings/GameStrings.cs
@@ -226,6 +226,24 @@ public List GetAssociatedItems(ushort id, out string baseItemName)
else
return new List();
}
+
+
+ public bool HasAssociatedItems(string baseName, out List? items)
+ {
+ if (string.IsNullOrWhiteSpace(baseName))
+ {
+ items = null;
+ return false;
+ }
+
+ baseName = baseName.Trim().ToLower();
+ if (!baseName.EndsWith(" "))
+ baseName += " ";
+ baseName += "(";
+
+ items = ItemDataSource.FindAll(x => x.Text.ToLower().StartsWith(baseName));
+ return items.Count > 0;
+ }
}
public interface IRemakeString
diff --git a/NHSE.Tests/ItemParsingTests.cs b/NHSE.Tests/ItemParsingTests.cs
index b518304..36c03cf 100644
--- a/NHSE.Tests/ItemParsingTests.cs
+++ b/NHSE.Tests/ItemParsingTests.cs
@@ -11,6 +11,7 @@ public static class ItemParsingTests
[InlineData("diner sofa", 0x102D)]
[InlineData("? block", 0x35FD)]
[InlineData("block", 0x35FE)]
+ [InlineData("dal apron", 0x2F5E)]
public static void ParseItem(string name, ushort id)
{
// single
@@ -33,6 +34,18 @@ public static void ParseItem(string name, ushort id)
}
}
+ [Theory]
+ [InlineData("royal Crown", 0x14BB)]
+ [InlineData("royal crown (red)", 0x14BB)]
+ [InlineData("bug aloha shirt ", 0x223C)]
+ [InlineData("quaint painting", 0xA)]
+ [InlineData("(none)", Item.NONE)]
+ public static void ParseAssociatedItem(string nameNoParenthesis, ushort id)
+ {
+ var parse = ItemParser.GetItem(nameNoParenthesis);
+ parse.ItemId.Should().Be(id);
+ }
+
private class ConfigWrapFake : IConfigItem
{
public bool WrapAllItems { get; } = true;