Merge pull request #38 from Haselnussbomber/strip-soft-hyphen

Strip soft hyphens and resolve names via SeStringEvaluator
This commit is contained in:
Asriel
2025-04-29 14:40:11 -07:00
committed by GitHub
7 changed files with 38 additions and 20 deletions
-2
View File
@@ -16,13 +16,11 @@ public static class LuminaSheets
public static readonly ExcelSheet<ClassJob> ClassJobSheet = Module.GetSheet<ClassJob>(); public static readonly ExcelSheet<ClassJob> ClassJobSheet = Module.GetSheet<ClassJob>();
public static readonly ExcelSheet<Item> ItemSheet = Module.GetSheet<Item>(); public static readonly ExcelSheet<Item> ItemSheet = Module.GetSheet<Item>();
public static readonly ExcelSheet<Item> ItemSheetEnglish = Module.GetSheet<Item>(Language.English)!; public static readonly ExcelSheet<Item> ItemSheetEnglish = Module.GetSheet<Item>(Language.English)!;
public static readonly ExcelSheet<ENpcResident> ENpcResidentSheet = Module.GetSheet<ENpcResident>();
public static readonly ExcelSheet<Level> LevelSheet = Module.GetSheet<Level>(); public static readonly ExcelSheet<Level> LevelSheet = Module.GetSheet<Level>();
public static readonly ExcelSheet<Quest> QuestSheet = Module.GetSheet<Quest>(); public static readonly ExcelSheet<Quest> QuestSheet = Module.GetSheet<Quest>();
public static readonly ExcelSheet<Materia> MateriaSheet = Module.GetSheet<Materia>(); public static readonly ExcelSheet<Materia> MateriaSheet = Module.GetSheet<Materia>();
public static readonly ExcelSheet<BaseParam> BaseParamSheet = Module.GetSheet<BaseParam>(); public static readonly ExcelSheet<BaseParam> BaseParamSheet = Module.GetSheet<BaseParam>();
public static readonly ExcelSheet<ItemFood> ItemFoodSheet = Module.GetSheet<ItemFood>(); public static readonly ExcelSheet<ItemFood> ItemFoodSheet = Module.GetSheet<ItemFood>();
public static readonly SubrowExcelSheet<SatisfactionSupply> SatisfactionSupplySheet = Module.GetSubrowSheet<SatisfactionSupply>();
public static readonly ExcelSheet<WKSMissionToDoEvalutionRefin> WKSMissionToDoEvalutionRefinSheet = Module.GetSheet<WKSMissionToDoEvalutionRefin>(); public static readonly ExcelSheet<WKSMissionToDoEvalutionRefin> WKSMissionToDoEvalutionRefinSheet = Module.GetSheet<WKSMissionToDoEvalutionRefin>();
public static readonly ExcelSheet<RecipeLevelTable> RecipeLevelTableSheet = Module.GetSheet<RecipeLevelTable>(); public static readonly ExcelSheet<RecipeLevelTable> RecipeLevelTableSheet = Module.GetSheet<RecipeLevelTable>();
public static readonly ExcelSheet<GathererCrafterLvAdjustTable> GathererCrafterLvAdjustTableSheet = Module.GetSheet<GathererCrafterLvAdjustTable>(); public static readonly ExcelSheet<GathererCrafterLvAdjustTable> GathererCrafterLvAdjustTableSheet = Module.GetSheet<GathererCrafterLvAdjustTable>();
+3
View File
@@ -9,6 +9,8 @@ using Dalamud.Storage.Assets;
namespace Craftimizer.Plugin; namespace Craftimizer.Plugin;
#pragma warning disable SeStringEvaluator
public sealed class Service public sealed class Service
{ {
#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. #pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable.
@@ -27,6 +29,7 @@ public sealed class Service
[PluginService] public static IPluginLog PluginLog { get; private set; } [PluginService] public static IPluginLog PluginLog { get; private set; }
[PluginService] public static IGameInteropProvider GameInteropProvider { get; private set; } [PluginService] public static IGameInteropProvider GameInteropProvider { get; private set; }
[PluginService] public static INotificationManager NotificationManager { get; private set; } [PluginService] public static INotificationManager NotificationManager { get; private set; }
[PluginService] public static ISeStringEvaluator SeStringEvaluator { get; private set; }
public static Plugin Plugin { get; private set; } public static Plugin Plugin { get; private set; }
public static Configuration Configuration => Plugin.Configuration; public static Configuration Configuration => Plugin.Configuration;
+2 -2
View File
@@ -14,7 +14,7 @@ using Craftimizer.Utils;
using Lumina.Text.ReadOnly; using Lumina.Text.ReadOnly;
using Lumina.Text.Payloads; using Lumina.Text.Payloads;
using Lumina.Excel.Sheets; using Lumina.Excel.Sheets;
using FFXIVClientStructs.FFXIV.Client.Game.Event; using Dalamud.Utility;
namespace Craftimizer.Plugin; namespace Craftimizer.Plugin;
@@ -162,7 +162,7 @@ internal static class ClassJobUtils
public static string GetName(this ClassJob me) public static string GetName(this ClassJob me)
{ {
var job = LuminaSheets.ClassJobSheet.GetRow(me.GetClassJobIndex()); var job = LuminaSheets.ClassJobSheet.GetRow(me.GetClassJobIndex());
return job.Name.ExtractText().ToLowerInvariant(); return job.Name.ExtractCleanText();
} }
public static string GetNameArticle(this ClassJob me) public static string GetNameArticle(this ClassJob me)
@@ -0,0 +1,12 @@
using Dalamud.Utility;
using Lumina.Text.ReadOnly;
namespace Craftimizer.Utils;
public static class ReadOnlySeStringExtensions
{
public static string ExtractCleanText(this ReadOnlySeString self)
{
return self.ExtractText().StripSoftHyphen();
}
}
+6 -6
View File
@@ -572,7 +572,7 @@ public sealed class MacroEditor : Window, IDisposable
if (input.ItemId == 0) if (input.ItemId == 0)
return "None"; return "None";
var name = LuminaSheets.ItemSheet.GetRowOrDefault(input.ItemId)?.Name.ExtractText() ?? $"Unknown ({input.ItemId})"; var name = LuminaSheets.ItemSheet.GetRowOrDefault(input.ItemId)?.Name.ExtractCleanText() ?? $"Unknown ({input.ItemId})";
return input.IsHQ ? $"{name} (HQ)" : name; return input.IsHQ ? $"{name} (HQ)" : name;
} }
@@ -778,11 +778,11 @@ public sealed class MacroEditor : Window, IDisposable
searchableRecipes, searchableRecipes,
fontHandle, fontHandle,
ImGui.GetContentRegionAvail().X - rightSideWidth, ImGui.GetContentRegionAvail().X - rightSideWidth,
r => r.Recipe.ItemResult.Value.Name.ExtractText(), r => r.Recipe.ItemResult.Value.Name.ExtractCleanText(),
r => r.Recipe.RowId.ToString(), r => r.Recipe.RowId.ToString(),
r => r =>
{ {
ImGui.TextUnformatted($"{r.Recipe.ItemResult.Value.Name.ExtractText()}"); ImGui.TextUnformatted($"{r.Recipe.ItemResult.Value.Name.ExtractCleanText()}");
var classJob = (ClassJob)r.Recipe.CraftType.RowId; var classJob = (ClassJob)r.Recipe.CraftType.RowId;
var textLevel = SqText.LevelPrefix.ToIconChar() + SqText.ToLevelString(r.Recipe.RecipeLevelTable.Value!.ClassJobLevel); var textLevel = SqText.LevelPrefix.ToIconChar() + SqText.ToLevelString(r.Recipe.RecipeLevelTable.Value!.ClassJobLevel);
@@ -964,10 +964,10 @@ public sealed class MacroEditor : Window, IDisposable
{ {
var perItem = RecipeData.CalculateItemStartingQuality(idx, 1); var perItem = RecipeData.CalculateItemStartingQuality(idx, 1);
var total = RecipeData.CalculateItemStartingQuality(idx, hqCount); var total = RecipeData.CalculateItemStartingQuality(idx, hqCount);
ImGuiUtils.Tooltip($"{ingredient.Item.Name.ExtractText()} {SeIconChar.HighQuality.ToIconString()}\n+{perItem} Quality/Item{(total > 0 ? $"\n+{total} Quality" : "")}"); ImGuiUtils.Tooltip($"{ingredient.Item.Name.ExtractCleanText()} {SeIconChar.HighQuality.ToIconString()}\n+{perItem} Quality/Item{(total > 0 ? $"\n+{total} Quality" : "")}");
} }
else if (ingredient.Amount != 0) else if (ingredient.Amount != 0)
ImGuiUtils.Tooltip($"{ingredient.Item.Name.ExtractText()}"); ImGuiUtils.Tooltip($"{ingredient.Item.Name.ExtractCleanText()}");
} }
ImGui.SameLine(0, 5); ImGui.SameLine(0, 5);
ImGui.SetNextItemWidth(ImGui.GetContentRegionAvail().X - (5 + ImGui.CalcTextSize("/").X + 5 + ImGui.CalcTextSize($"99").X)); ImGui.SetNextItemWidth(ImGui.GetContentRegionAvail().X - (5 + ImGui.CalcTextSize("/").X + 5 + ImGui.CalcTextSize($"99").X));
@@ -1240,7 +1240,7 @@ public sealed class MacroEditor : Window, IDisposable
{ {
var status = effect.Status(); var status = effect.Status();
using var _reset = ImRaii.DefaultFont(); using var _reset = ImRaii.DefaultFont();
ImGuiUtils.Tooltip($"{status.Name.ExtractText()}\n{status.Description.ExtractText()}"); ImGuiUtils.Tooltip($"{status.Name.ExtractCleanText()}\n{status.Description.ExtractCleanText()}");
} }
ImGui.SameLine(); ImGui.SameLine();
} }
+14 -9
View File
@@ -3,6 +3,7 @@ using Craftimizer.Simulator;
using Craftimizer.Simulator.Actions; using Craftimizer.Simulator.Actions;
using Craftimizer.Solver; using Craftimizer.Solver;
using Craftimizer.Utils; using Craftimizer.Utils;
using Dalamud.Game.ClientState.Objects.Enums;
using Dalamud.Game.Text; using Dalamud.Game.Text;
using Dalamud.Game.Text.SeStringHandling.Payloads; using Dalamud.Game.Text.SeStringHandling.Payloads;
using Dalamud.Interface; using Dalamud.Interface;
@@ -17,12 +18,12 @@ using Dalamud.Utility;
using FFXIVClientStructs.FFXIV.Client.Game; using FFXIVClientStructs.FFXIV.Client.Game;
using FFXIVClientStructs.FFXIV.Client.Game.UI; using FFXIVClientStructs.FFXIV.Client.Game.UI;
using FFXIVClientStructs.FFXIV.Client.System.String; using FFXIVClientStructs.FFXIV.Client.System.String;
using FFXIVClientStructs.FFXIV.Client.UI;
using FFXIVClientStructs.FFXIV.Client.UI.Misc; using FFXIVClientStructs.FFXIV.Client.UI.Misc;
using FFXIVClientStructs.FFXIV.Component.GUI; using FFXIVClientStructs.FFXIV.Component.GUI;
using ImGuiNET; using ImGuiNET;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization;
using System.Linq; using System.Linq;
using System.Numerics; using System.Numerics;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
@@ -589,7 +590,7 @@ public sealed unsafe class RecipeNote : Window, IDisposable
if (ImGui.IsItemHovered()) if (ImGui.IsItemHovered())
ImGuiUtils.Tooltip("Open in map"); ImGuiUtils.Tooltip("Open in map");
ImGuiUtils.TextCentered($"{questTerritory} ({questLocation.X:0.0}, {questLocation.Y:0.0})"); ImGuiUtils.TextCentered($"{questTerritory} ({GetCoordinatesString(questLocation)})");
} }
break; break;
case CraftableStatus.WrongClassJob: case CraftableStatus.WrongClassJob:
@@ -624,13 +625,13 @@ public sealed unsafe class RecipeNote : Window, IDisposable
if (ImGui.IsItemHovered()) if (ImGui.IsItemHovered())
ImGuiUtils.Tooltip("Open in map"); ImGuiUtils.Tooltip("Open in map");
ImGuiUtils.TextCentered($"{vendorTerritory} ({vendorLoation.X:0.0}, {vendorLoation.Y:0.0})"); ImGuiUtils.TextCentered($"{vendorTerritory} ({GetCoordinatesString(vendorLoation)})");
} }
break; break;
case CraftableStatus.RequiredItem: case CraftableStatus.RequiredItem:
{ {
var item = RecipeData.Recipe.ItemRequired.Value!; var item = RecipeData.Recipe.ItemRequired.Value!;
var itemName = item.Name.ExtractText(); var itemName = item.Name.ExtractCleanText();
var imageSize = ImGui.GetFrameHeight(); var imageSize = ImGui.GetFrameHeight();
ImGuiUtils.TextCentered($"You are missing the required equipment."); ImGuiUtils.TextCentered($"You are missing the required equipment.");
@@ -644,7 +645,7 @@ public sealed unsafe class RecipeNote : Window, IDisposable
case CraftableStatus.RequiredStatus: case CraftableStatus.RequiredStatus:
{ {
var status = RecipeData.Recipe.StatusRequired.Value!; var status = RecipeData.Recipe.StatusRequired.Value!;
var statusName = status.Name.ExtractText(); var statusName = status.Name.ExtractCleanText();
var statusIcon = Service.IconManager.GetIconCached(status.Icon); var statusIcon = Service.IconManager.GetIconCached(status.Icon);
var imageSize = new Vector2(ImGui.GetFrameHeight() * (statusIcon.AspectRatio ?? 1), ImGui.GetFrameHeight()); var imageSize = new Vector2(ImGui.GetFrameHeight() * (statusIcon.AspectRatio ?? 1), ImGui.GetFrameHeight());
@@ -1158,10 +1159,10 @@ public sealed unsafe class RecipeNote : Window, IDisposable
private static (string NpcName, string Territory, Vector2 MapLocation, MapLinkPayload Payload) ResolveLevelData(uint levelRowId) private static (string NpcName, string Territory, Vector2 MapLocation, MapLinkPayload Payload) ResolveLevelData(uint levelRowId)
{ {
var level = LuminaSheets.LevelSheet.GetRow(levelRowId); var level = LuminaSheets.LevelSheet.GetRow(levelRowId);
var territory = level.Territory.Value.PlaceName.Value.Name.ExtractText(); var placeName = level.Territory.Value.PlaceName.Value.Name.ExtractCleanText();
var location = WorldToMap2(new(level.X, level.Z), level.Map.Value!); var location = WorldToMap2(new(level.X, level.Z), level.Map.Value!);
return (ResolveNpcResidentName(level.Object.RowId), territory, location, new(level.Territory.RowId, level.Map.RowId, location.X, location.Y)); return (ResolveNpcResidentName(level.Object.RowId), placeName, location, new(level.Territory.RowId, level.Map.RowId, location.X, location.Y));
} }
private static Vector2 WorldToMap2(Vector2 worldCoordinates, Lumina.Excel.Sheets.Map map) private static Vector2 WorldToMap2(Vector2 worldCoordinates, Lumina.Excel.Sheets.Map map)
@@ -1171,8 +1172,12 @@ public sealed unsafe class RecipeNote : Window, IDisposable
private static string ResolveNpcResidentName(uint npcRowId) private static string ResolveNpcResidentName(uint npcRowId)
{ {
var resident = LuminaSheets.ENpcResidentSheet.GetRow(npcRowId); return Service.SeStringEvaluator.EvaluateObjStr(ObjectKind.EventNpc, npcRowId);
return resident.Singular.ExtractText(); }
private static string GetCoordinatesString(Vector2 pos)
{
return $"{pos.X.ToString("0.0", CultureInfo.InvariantCulture)}, {pos.Y.ToString("0.0", CultureInfo.InvariantCulture)}";
} }
private static int? GetGearsetForJob(ClassJob job) private static int? GetGearsetForJob(ClassJob job)
+1 -1
View File
@@ -392,7 +392,7 @@ public sealed unsafe class SynthHelper : Window, IDisposable
{ {
var status = effect.Status(); var status = effect.Status();
using var _reset = ImRaii.DefaultFont(); using var _reset = ImRaii.DefaultFont();
ImGuiUtils.Tooltip($"{status.Name.ExtractText()}\n{status.Description.ExtractText()}"); ImGuiUtils.Tooltip($"{status.Name.ExtractCleanText()}\n{status.Description.ExtractCleanText()}");
} }
ImGui.SameLine(); ImGui.SameLine();
} }