diff --git a/Libraries/Core/Helpers/Dialogue/Commando/SptCommands/GiveCommand/GiveSptCommand.cs b/Libraries/Core/Helpers/Dialogue/Commando/SptCommands/GiveCommand/GiveSptCommand.cs index 58692352..298b5f03 100644 --- a/Libraries/Core/Helpers/Dialogue/Commando/SptCommands/GiveCommand/GiveSptCommand.cs +++ b/Libraries/Core/Helpers/Dialogue/Commando/SptCommands/GiveCommand/GiveSptCommand.cs @@ -134,13 +134,12 @@ public class GiveSptCommand( .Select( i => new { - Match = StringSimilarity.Match(item.ToLower(), i.ToLower()), + Match = StringSimilarity.Match(item, i, 2, true), ItemName = i } ).ToList(); - - - closestItemsMatchedByName.Sort((a1, a2) => (int)a2.Match - (int)a1.Match); // We need to find a similar system to string-similarity-js + + closestItemsMatchedByName.Sort((a1, a2) => a2.Match.CompareTo(a1.Match)); if (closestItemsMatchedByName[0].Match >= _acceptableConfidence) { item = closestItemsMatchedByName[0].ItemName; @@ -149,7 +148,7 @@ public class GiveSptCommand( var slicedItems = closestItemsMatchedByName.Slice(0, 10); // max 10 item names and map them var itemList = slicedItems - .Select(match => $"{i++}. {match.ItemName} (conf: ${Math.Round(match.Match * 100), 2})"); + .Select(match => $"{i++}. {match.ItemName} (conf: {Math.Round(match.Match * 100d), 2})"); _savedCommand.Add( sessionId, new SavedCommand( @@ -159,7 +158,7 @@ public class GiveSptCommand( _mailSendService.SendUserMessageToPlayer( sessionId, commandHandler, - $"Could not find exact match. Closest matches are:\n\n{itemList}\n\nUse 'spt give [number]' to select one."); + $"Could not find exact match. Closest are:\n{string.Join("\n", itemList)}\n\nUse 'spt give [above number]' to select one."); return request.DialogId; } @@ -172,7 +171,7 @@ public class GiveSptCommand( var tplId = isItemName ? _itemHelper .GetItems() - .Where(i => IsItemAllowed(i)) + .Where(IsItemAllowed) .FirstOrDefault(i => (localizedGlobal[$"{i?.Id} Name"]?.ToLower() ?? i.Properties.Name) == item).Id : item; @@ -258,7 +257,8 @@ public class GiveSptCommand( templateItem.Id, [ BaseClasses.HIDEOUT_AREA_CONTAINER, BaseClasses.LOOT_CONTAINER, - BaseClasses.RANDOM_LOOT_CONTAINER, BaseClasses.MOB_CONTAINER + BaseClasses.RANDOM_LOOT_CONTAINER, BaseClasses.MOB_CONTAINER, + BaseClasses.BUILT_IN_INSERTS ] ); } diff --git a/Libraries/Core/Helpers/Dialogue/Commando/SptCommands/GiveCommand/StringSimilarity.cs b/Libraries/Core/Helpers/Dialogue/Commando/SptCommands/GiveCommand/StringSimilarity.cs index 472598d6..14de2da2 100644 --- a/Libraries/Core/Helpers/Dialogue/Commando/SptCommands/GiveCommand/StringSimilarity.cs +++ b/Libraries/Core/Helpers/Dialogue/Commando/SptCommands/GiveCommand/StringSimilarity.cs @@ -1,4 +1,6 @@ -namespace Core.Helpers.Dialogue.Commando.SptCommands.GiveCommand; +using static System.Runtime.InteropServices.JavaScript.JSType; + +namespace Core.Helpers.Dialogue.Commando.SptCommands.GiveCommand; public static class StringSimilarity { @@ -25,13 +27,14 @@ public static class StringSimilarity for (var j = 0; j < str2.Length - (substringLength - 1); j++) { var substr2 = str2.Substring(j, substringLength); var count = map.GetValueOrDefault(substr2, 0); - if (count > 0) { - map.Add(substr2, count - 1); + if (count > 0) + { + map[substr2] = count - 1; match++; } } - return match * 2D / (str1.Length + str2.Length - ((substringLength - 1D) * 2D)); + return match * 2d / (str1.Length + str2.Length - ((substringLength - 1d) * 2d)); } }