v1.0.8.6: Fix crafting action tooltips - use CraftAction.Description instead of ActionTransient
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1196,21 +1196,63 @@ namespace HSUI.Interface.GeneralElements
|
||||
LuminaAction? actionRow = null;
|
||||
|
||||
var actionSheet = Plugin.DataManager.GetExcelSheet<LuminaAction>();
|
||||
var actionRowOpt = actionSheet?.GetRow(slot.ActionId);
|
||||
if (actionRowOpt.HasValue)
|
||||
if (actionSheet != null)
|
||||
{
|
||||
actionRow = actionRowOpt.Value;
|
||||
}
|
||||
else if (slot.SlotType == RaptureHotbarModule.HotbarSlotType.CraftAction)
|
||||
{
|
||||
// Crafting actions: hotbar may store CraftAction sheet row ID (1-based). Action sheet uses 100000+ range (100001 = Basic Synthesis).
|
||||
const uint CraftActionToActionOffset = 100000;
|
||||
uint mappedId = slot.ActionId + CraftActionToActionOffset;
|
||||
var mappedRow = actionSheet?.GetRow(mappedId);
|
||||
if (mappedRow.HasValue)
|
||||
if (actionSheet.TryGetRow(slot.ActionId, out var actionRowOpt))
|
||||
{
|
||||
actionIdForLookup = mappedId;
|
||||
actionRow = mappedRow.Value;
|
||||
actionRow = actionRowOpt;
|
||||
}
|
||||
else if (slot.SlotType == RaptureHotbarModule.HotbarSlotType.CraftAction)
|
||||
{
|
||||
// Crafting actions: hotbar may store CraftAction sheet row ID (1-based). Action sheet uses 100000+ range (100001 = Basic Synthesis).
|
||||
const uint CraftActionToActionOffset = 100000;
|
||||
uint mappedId = slot.ActionId + CraftActionToActionOffset;
|
||||
if (actionSheet.TryGetRow(mappedId, out var mappedRow))
|
||||
{
|
||||
actionIdForLookup = mappedId;
|
||||
actionRow = mappedRow;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// CraftAction fallback: when Action sheet lookup failed, try CraftAction sheet directly (hotbar stores CraftAction row ID).
|
||||
if (!actionRow.HasValue && slot.SlotType == RaptureHotbarModule.HotbarSlotType.CraftAction)
|
||||
{
|
||||
var craftSheet = Plugin.DataManager.GetExcelSheet<Lumina.Excel.Sheets.CraftAction>();
|
||||
if (craftSheet != null && craftSheet.TryGetRow(slot.ActionId, out var craftRow))
|
||||
{
|
||||
try
|
||||
{
|
||||
var nameSe = craftRow.Name;
|
||||
string name = nameSe.ToString();
|
||||
if (string.IsNullOrWhiteSpace(name))
|
||||
name = nameSe.ToDalamudString().ToString();
|
||||
if (!string.IsNullOrWhiteSpace(name))
|
||||
{
|
||||
// CraftAction sheet has its own Description column with the full text
|
||||
string desc = "";
|
||||
try
|
||||
{
|
||||
var descSe = craftRow.Description;
|
||||
var descRaw = descSe.ToDalamudString().ToString();
|
||||
if (!string.IsNullOrEmpty(descRaw))
|
||||
{
|
||||
try
|
||||
{
|
||||
var evaluated = Plugin.SeStringEvaluator.Evaluate(descSe.AsSpan());
|
||||
desc = evaluated.ExtractText();
|
||||
if (string.IsNullOrEmpty(desc)) desc = descRaw;
|
||||
}
|
||||
catch { desc = descRaw; }
|
||||
if (!string.IsNullOrEmpty(desc))
|
||||
desc = EncryptedStringsHelper.GetString(desc);
|
||||
}
|
||||
}
|
||||
catch { /* ignore */ }
|
||||
return (name, desc);
|
||||
}
|
||||
}
|
||||
catch { /* ignore */ }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1219,28 +1261,57 @@ namespace HSUI.Interface.GeneralElements
|
||||
{
|
||||
string name = row.Value.Name.ToString();
|
||||
string desc = "";
|
||||
var descRow = Plugin.DataManager.GetExcelSheet<ActionTransient>()?.GetRow(actionIdForLookup);
|
||||
string descRaw = "";
|
||||
if (descRow.HasValue)
|
||||
// For CraftAction, use CraftAction.Description; ActionTransient returns the name instead of the full description
|
||||
if (slot.SlotType == RaptureHotbarModule.HotbarSlotType.CraftAction)
|
||||
{
|
||||
try
|
||||
var craftSheet = Plugin.DataManager.GetExcelSheet<Lumina.Excel.Sheets.CraftAction>();
|
||||
if (craftSheet != null && craftSheet.TryGetRow(actionIdForLookup, out var craftRow))
|
||||
{
|
||||
var descSeStr = descRow.Value.Description;
|
||||
descRaw = descRow.Value.Description.ToDalamudString().ToString();
|
||||
try
|
||||
{
|
||||
var evaluated = Plugin.SeStringEvaluator.Evaluate(descSeStr.AsSpan());
|
||||
desc = evaluated.ExtractText();
|
||||
if (string.IsNullOrEmpty(desc)) desc = descRaw;
|
||||
var descSe = craftRow.Description;
|
||||
var craftDescRaw = descSe.ToDalamudString().ToString();
|
||||
if (!string.IsNullOrEmpty(craftDescRaw))
|
||||
{
|
||||
try
|
||||
{
|
||||
var evaluated = Plugin.SeStringEvaluator.Evaluate(descSe.AsSpan());
|
||||
desc = evaluated.ExtractText();
|
||||
if (string.IsNullOrEmpty(desc)) desc = craftDescRaw;
|
||||
}
|
||||
catch { desc = craftDescRaw; }
|
||||
if (!string.IsNullOrEmpty(desc))
|
||||
desc = EncryptedStringsHelper.GetString(desc);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
desc = descRaw;
|
||||
}
|
||||
if (!string.IsNullOrEmpty(desc))
|
||||
desc = EncryptedStringsHelper.GetString(desc);
|
||||
catch { /* ignore */ }
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var descSheet = Plugin.DataManager.GetExcelSheet<ActionTransient>();
|
||||
if (descSheet != null && descSheet.TryGetRow(actionIdForLookup, out var descRow))
|
||||
{
|
||||
try
|
||||
{
|
||||
var descSeStr = descRow.Description;
|
||||
descRaw = descRow.Description.ToDalamudString().ToString();
|
||||
try
|
||||
{
|
||||
var evaluated = Plugin.SeStringEvaluator.Evaluate(descSeStr.AsSpan());
|
||||
desc = evaluated.ExtractText();
|
||||
if (string.IsNullOrEmpty(desc)) desc = descRaw;
|
||||
}
|
||||
catch
|
||||
{
|
||||
desc = descRaw;
|
||||
}
|
||||
if (!string.IsNullOrEmpty(desc))
|
||||
desc = EncryptedStringsHelper.GetString(desc);
|
||||
}
|
||||
catch { /* ignore */ }
|
||||
}
|
||||
catch { /* ignore */ }
|
||||
}
|
||||
bool isCombatAction = IsCombatAction(slot.SlotType, row.Value);
|
||||
int? potencyValue = isCombatAction ? TryGetPotencyValue(row.Value) : null;
|
||||
|
||||
Reference in New Issue
Block a user