Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 57e4736e22 | |||
| bd9164c896 | |||
| 7c46a50b7e |
+3
-3
@@ -9,9 +9,9 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<AssemblyName>HSUI</AssemblyName>
|
<AssemblyName>HSUI</AssemblyName>
|
||||||
<AssemblyVersion>1.0.8.23</AssemblyVersion>
|
<AssemblyVersion>1.0.8.26</AssemblyVersion>
|
||||||
<FileVersion>1.0.8.23</FileVersion>
|
<FileVersion>1.0.8.26</FileVersion>
|
||||||
<InformationalVersion>1.0.8.23</InformationalVersion>
|
<InformationalVersion>1.0.8.26</InformationalVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"Author": "Knack117",
|
"Author": "Knack117",
|
||||||
"Name": "HSUI",
|
"Name": "HSUI",
|
||||||
"InternalName": "HSUI",
|
"InternalName": "HSUI",
|
||||||
"AssemblyVersion": "1.0.8.23",
|
"AssemblyVersion": "1.0.8.26",
|
||||||
"Description": "HSUI provides a highly configurable HUD replacement for FFXIV, recreated from DelvUI using KamiToolKit, FFXIVClientStructs, and Dalamud. Features unit frames, castbars, job gauges, nameplates, party frames, status effects, enemy list, configurable hotbars with drag-and-drop, and profiles.",
|
"Description": "HSUI provides a highly configurable HUD replacement for FFXIV, recreated from DelvUI using KamiToolKit, FFXIVClientStructs, and Dalamud. Features unit frames, castbars, job gauges, nameplates, party frames, status effects, enemy list, configurable hotbars with drag-and-drop, and profiles.",
|
||||||
"ApplicableVersion": "any",
|
"ApplicableVersion": "any",
|
||||||
"RepoUrl": "https://github.com/Knack117/HSUI",
|
"RepoUrl": "https://github.com/Knack117/HSUI",
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
using HSUI.Interface;
|
||||||
|
|
||||||
|
namespace HSUI.Helpers
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Tracks which HUD element currently has its context menu open, so visibility can be ignored for that element
|
||||||
|
/// while the menu is open (e.g. "hide unless hovered" would otherwise hide the element when the mouse moves to the menu).
|
||||||
|
/// </summary>
|
||||||
|
public static class ContextMenuVisibilityHelper
|
||||||
|
{
|
||||||
|
private static HudElement? _elementWithContextMenuOpen;
|
||||||
|
|
||||||
|
/// <summary>Call when opening a context menu for this element.</summary>
|
||||||
|
public static void SetContextMenuOpen(HudElement? element)
|
||||||
|
{
|
||||||
|
_elementWithContextMenuOpen = element;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>True if the given element currently has its context menu open.</summary>
|
||||||
|
public static bool IsContextMenuOpenFor(HudElement element)
|
||||||
|
{
|
||||||
|
return _elementWithContextMenuOpen != null && _elementWithContextMenuOpen == element;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -70,7 +70,7 @@ namespace HSUI.Helpers
|
|||||||
return questData.ClassJobLevel.FirstOrDefault();
|
return questData.ClassJobLevel.FirstOrDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Returns active duty list entries (quests with objectives).</summary>
|
/// <summary>Returns active duty list entries (quests with objectives). Prioritized/tracked quests appear at the top.</summary>
|
||||||
public static unsafe List<DutyListEntry> GetDutyListEntries()
|
public static unsafe List<DutyListEntry> GetDutyListEntries()
|
||||||
{
|
{
|
||||||
var result = new List<DutyListEntry>();
|
var result = new List<DutyListEntry>();
|
||||||
@@ -79,11 +79,15 @@ namespace HSUI.Helpers
|
|||||||
var questSheet = Plugin.DataManager.GetExcelSheet<Quest>();
|
var questSheet = Plugin.DataManager.GetExcelSheet<Quest>();
|
||||||
if (questSheet == null) return result;
|
if (questSheet == null) return result;
|
||||||
|
|
||||||
|
var priorityEntries = new List<DutyListEntry>();
|
||||||
|
var otherEntries = new List<DutyListEntry>();
|
||||||
|
|
||||||
var span = QuestManager.Instance()->NormalQuests;
|
var span = QuestManager.Instance()->NormalQuests;
|
||||||
for (int i = 0; i < span.Length; i++)
|
for (int i = 0; i < span.Length; i++)
|
||||||
{
|
{
|
||||||
ref var q = ref span[i];
|
ref var q = ref span[i];
|
||||||
if (q.QuestId == 0) continue;
|
if (q.QuestId == 0) continue;
|
||||||
|
if (q.IsHidden) continue; // Don't show quests the player hid in their journal
|
||||||
|
|
||||||
uint rowId = q.QuestId + 65536u;
|
uint rowId = q.QuestId + 65536u;
|
||||||
if (!questSheet.HasRow(rowId)) continue;
|
if (!questSheet.HasRow(rowId)) continue;
|
||||||
@@ -97,9 +101,16 @@ namespace HSUI.Helpers
|
|||||||
// Current objective text from Sequence
|
// Current objective text from Sequence
|
||||||
string objectiveText = GetObjectiveText(questData, q.Sequence);
|
string objectiveText = GetObjectiveText(questData, q.Sequence);
|
||||||
|
|
||||||
result.Add(new DutyListEntry(q.QuestId, q.Sequence, questName, objectiveText, iconId));
|
var entry = new DutyListEntry(q.QuestId, q.Sequence, questName, objectiveText, iconId);
|
||||||
|
if (q.IsPriority)
|
||||||
|
priorityEntries.Add(entry);
|
||||||
|
else
|
||||||
|
otherEntries.Add(entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
result.AddRange(priorityEntries);
|
||||||
|
result.AddRange(otherEntries);
|
||||||
|
|
||||||
// If Lumina didn't give objective text, try the game's ToDoList string array (same source as the default Duty List UI).
|
// If Lumina didn't give objective text, try the game's ToDoList string array (same source as the default Duty List UI).
|
||||||
TryFillObjectivesFromToDoListStringArray(result);
|
TryFillObjectivesFromToDoListStringArray(result);
|
||||||
// Do not read from _ToDoList addon text nodes: addon memory can be invalid when Duty Finder is open or when queuing, causing AccessViolationException in Utf8String.ToString().
|
// Do not read from _ToDoList addon text nodes: addon memory can be invalid when Duty Finder is open or when queuing, causing AccessViolationException in Utf8String.ToString().
|
||||||
@@ -113,6 +124,7 @@ namespace HSUI.Helpers
|
|||||||
{
|
{
|
||||||
ref var lq = ref leveSpan[i];
|
ref var lq = ref leveSpan[i];
|
||||||
if (lq.LeveId == 0) continue;
|
if (lq.LeveId == 0) continue;
|
||||||
|
if (lq.IsHidden) continue; // Don't show levequests the player hid in their journal
|
||||||
|
|
||||||
var leveData = leveSheet.GetRow(lq.LeveId);
|
var leveData = leveSheet.GetRow(lq.LeveId);
|
||||||
|
|
||||||
@@ -198,7 +210,7 @@ namespace HSUI.Helpers
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Read objective text from the game's ToDoList string array (same data the default Duty List UI uses). Layout: titles at 0..QuestCount-1, details at QuestCount..2*QuestCount-1.</summary>
|
/// <summary>Read objective text from the game's ToDoList string array (same data the default Duty List UI uses). Layout: titles at 0..QuestCount-1, details at QuestCount..2*QuestCount-1. Pairs only by quest name (or fuzzy match) so we never assign the wrong objective when array order differs from NormalQuests.</summary>
|
||||||
private static unsafe void TryFillObjectivesFromToDoListStringArray(List<DutyListEntry> result)
|
private static unsafe void TryFillObjectivesFromToDoListStringArray(List<DutyListEntry> result)
|
||||||
{
|
{
|
||||||
if (result.Count == 0) return;
|
if (result.Count == 0) return;
|
||||||
@@ -227,22 +239,35 @@ namespace HSUI.Helpers
|
|||||||
for (int i = 0; i < result.Count; i++)
|
for (int i = 0; i < result.Count; i++)
|
||||||
{
|
{
|
||||||
var entry = result[i];
|
var entry = result[i];
|
||||||
if (!string.IsNullOrWhiteSpace(entry.ObjectiveText)) continue;
|
|
||||||
|
|
||||||
string obj = "";
|
string obj = "";
|
||||||
if (i < questCount)
|
|
||||||
obj = ReadSlot(questCount + i).Trim();
|
|
||||||
if (string.IsNullOrWhiteSpace(obj))
|
|
||||||
{
|
|
||||||
int titleIdx = -1;
|
int titleIdx = -1;
|
||||||
|
var questNameTrim = entry.QuestName.Trim();
|
||||||
|
if (string.IsNullOrWhiteSpace(questNameTrim)) continue;
|
||||||
|
|
||||||
|
// Exact match first (case-insensitive)
|
||||||
for (int j = 0; j < questCount; j++)
|
for (int j = 0; j < questCount; j++)
|
||||||
{
|
{
|
||||||
if (string.Equals(ReadSlot(j).Trim(), entry.QuestName, StringComparison.OrdinalIgnoreCase))
|
var title = ReadSlot(j).Trim();
|
||||||
|
if (string.Equals(title, questNameTrim, StringComparison.OrdinalIgnoreCase))
|
||||||
{ titleIdx = j; break; }
|
{ titleIdx = j; break; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fuzzy match for truncated/abbreviated names: game may shorten the title in the array
|
||||||
|
if (titleIdx < 0)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < questCount; j++)
|
||||||
|
{
|
||||||
|
var title = ReadSlot(j).Trim();
|
||||||
|
if (string.IsNullOrWhiteSpace(title)) continue;
|
||||||
|
if (title.StartsWith(questNameTrim, StringComparison.OrdinalIgnoreCase) ||
|
||||||
|
questNameTrim.StartsWith(title, StringComparison.OrdinalIgnoreCase))
|
||||||
|
{ titleIdx = j; break; }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (titleIdx >= 0)
|
if (titleIdx >= 0)
|
||||||
obj = ReadSlot(questCount + titleIdx).Trim();
|
obj = ReadSlot(questCount + titleIdx).Trim();
|
||||||
}
|
|
||||||
if (string.IsNullOrWhiteSpace(obj)) continue;
|
if (string.IsNullOrWhiteSpace(obj)) continue;
|
||||||
result[i] = entry with { ObjectiveText = obj };
|
result[i] = entry with { ObjectiveText = obj };
|
||||||
}
|
}
|
||||||
@@ -529,7 +554,7 @@ namespace HSUI.Helpers
|
|||||||
catch { /* ignore */ }
|
catch { /* ignore */ }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Gets territory ID for a map (for SetFlagMapMarker). Returns 0 if not found.</summary>
|
/// <summary>Gets territory ID for a map (for opening the map). Returns 0 if not found.</summary>
|
||||||
private static uint GetTerritoryIdForMap(uint mapId)
|
private static uint GetTerritoryIdForMap(uint mapId)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -543,7 +568,7 @@ namespace HSUI.Helpers
|
|||||||
catch { return 0; }
|
catch { return 0; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Opens the Area Map centered on the quest's current objective location. Sets a flag marker when coordinates are available so the map centers on the objective.</summary>
|
/// <summary>Opens the Area Map to the quest's current objective location. Does not place a map flag; opens the map centered (no marker).</summary>
|
||||||
public static unsafe void OpenMapForQuestObjective(ushort questId, byte sequence)
|
public static unsafe void OpenMapForQuestObjective(ushort questId, byte sequence)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -564,40 +589,11 @@ namespace HSUI.Helpers
|
|||||||
if (territoryId == 0) return;
|
if (territoryId == 0) return;
|
||||||
|
|
||||||
var agent = AgentMap.Instance();
|
var agent = AgentMap.Instance();
|
||||||
(float x, float y)? coords = TryGetMapCoordinates(location.Value);
|
|
||||||
if (coords.HasValue)
|
|
||||||
{
|
|
||||||
agent->SetFlagMapMarker(territoryId, mapId, coords.Value.x, coords.Value.y);
|
|
||||||
agent->OpenMap(mapId, territoryId, null, FFXIVClientStructs.FFXIV.Client.UI.Agent.MapType.FlagMarker);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
agent->OpenMap(mapId, territoryId, null, FFXIVClientStructs.FFXIV.Client.UI.Agent.MapType.Centered);
|
agent->OpenMap(mapId, territoryId, null, FFXIVClientStructs.FFXIV.Client.UI.Agent.MapType.Centered);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
catch { /* ignore */ }
|
catch { /* ignore */ }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>Tries to get map X,Y from a Level/location row (Lumina column names may vary).</summary>
|
|
||||||
private static (float x, float y)? TryGetMapCoordinates(object? locationRow)
|
|
||||||
{
|
|
||||||
if (locationRow == null) return null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var type = locationRow.GetType();
|
|
||||||
var xProp = type.GetProperty("X") ?? type.GetProperty("MapX");
|
|
||||||
var yProp = type.GetProperty("Y") ?? type.GetProperty("MapY");
|
|
||||||
if (xProp == null || yProp == null) return null;
|
|
||||||
var xVal = xProp.GetValue(locationRow);
|
|
||||||
var yVal = yProp.GetValue(locationRow);
|
|
||||||
if (xVal == null || yVal == null) return null;
|
|
||||||
float x = Convert.ToSingle(xVal);
|
|
||||||
float y = Convert.ToSingle(yVal);
|
|
||||||
return (x, y);
|
|
||||||
}
|
|
||||||
catch { return null; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>Opens the Area Map to the quest's current objective (for scenario guide hints). Prefers current objective so MSQ and Job hints each open the correct map on first click; falls back to issuer location if quest is not in the duty list.</summary>
|
/// <summary>Opens the Area Map to the quest's current objective (for scenario guide hints). Prefers current objective so MSQ and Job hints each open the correct map on first click; falls back to issuer location if quest is not in the duty list.</summary>
|
||||||
public static unsafe void OpenMapForQuestIssuer(uint questRowId)
|
public static unsafe void OpenMapForQuestIssuer(uint questRowId)
|
||||||
{
|
{
|
||||||
@@ -628,20 +624,11 @@ namespace HSUI.Helpers
|
|||||||
if (territoryId != 0)
|
if (territoryId != 0)
|
||||||
{
|
{
|
||||||
var agent = AgentMap.Instance();
|
var agent = AgentMap.Instance();
|
||||||
(float x, float y)? coords = TryGetMapCoordinates(loc);
|
|
||||||
if (coords.HasValue)
|
|
||||||
{
|
|
||||||
agent->SetFlagMapMarker(territoryId, mapId, coords.Value.x, coords.Value.y);
|
|
||||||
agent->OpenMap(mapId, territoryId, null, FFXIVClientStructs.FFXIV.Client.UI.Agent.MapType.FlagMarker);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
agent->OpenMap(mapId, territoryId, null, FFXIVClientStructs.FFXIV.Client.UI.Agent.MapType.Centered);
|
agent->OpenMap(mapId, territoryId, null, FFXIVClientStructs.FFXIV.Client.UI.Agent.MapType.Centered);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
catch { /* ignore */ }
|
catch { /* ignore */ }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -124,6 +124,7 @@ namespace HSUI.Interface.GeneralElements
|
|||||||
if (subEntries != null && subEntries.Count > 0)
|
if (subEntries != null && subEntries.Count > 0)
|
||||||
{
|
{
|
||||||
_contextMenuEntries = subEntries;
|
_contextMenuEntries = subEntries;
|
||||||
|
Helpers.ContextMenuVisibilityHelper.SetContextMenuOpen(this);
|
||||||
ImGui.OpenPopup("HSUI_MainMenu_Context");
|
ImGui.OpenPopup("HSUI_MainMenu_Context");
|
||||||
ImGui.SetNextWindowPos(ImGui.GetMousePos());
|
ImGui.SetNextWindowPos(ImGui.GetMousePos());
|
||||||
}
|
}
|
||||||
@@ -182,6 +183,7 @@ namespace HSUI.Interface.GeneralElements
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
_contextMenuEntries = null;
|
_contextMenuEntries = null;
|
||||||
|
Helpers.ContextMenuVisibilityHelper.SetContextMenuOpen(null);
|
||||||
}
|
}
|
||||||
}, true);
|
}, true);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -126,6 +126,10 @@ namespace HSUI.Interface
|
|||||||
|
|
||||||
public bool IsElementHidden(HudElement element)
|
public bool IsElementHidden(HudElement element)
|
||||||
{
|
{
|
||||||
|
// When this element's context menu is open, ignore visibility so the element stays visible
|
||||||
|
if (ContextMenuVisibilityHelper.IsContextMenuOpenFor(element))
|
||||||
|
return false;
|
||||||
|
|
||||||
IHudElementWithVisibilityConfig? e = element as IHudElementWithVisibilityConfig;
|
IHudElementWithVisibilityConfig? e = element as IHudElementWithVisibilityConfig;
|
||||||
if (e == null || e.VisibilityConfig == null) { return false; }
|
if (e == null || e.VisibilityConfig == null) { return false; }
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,14 @@
|
|||||||
|
# 1.0.8.26
|
||||||
|
- **Duty List & Scenario Guide**: Hidden quests (hidden in journal) are no longer shown in the duty list. Prioritized/tracked quests appear at the top of the list.
|
||||||
|
- **Duty List & Scenario Guide**: Opening the map from a quest objective or scenario hint no longer places a map flag; map still opens to the correct map/area.
|
||||||
|
|
||||||
|
# 1.0.8.25
|
||||||
|
- **Duty List & Scenario Guide**: Duty list objectives fix — no longer use index-based pairing (which caused top entries to show wrong objectives). Always match by quest name (exact or fuzzy for truncated titles) and prefer the game's string array over Lumina so text matches the default duty list UI.
|
||||||
|
|
||||||
|
# 1.0.8.24
|
||||||
|
- **Visibility**: When a context menu is open for an element (e.g. Main Menu bar), visibility settings are ignored for that element so it stays visible while the menu is open.
|
||||||
|
- **Duty List & Scenario Guide**: Fixed wrong objectives for the top entries — objectives are now matched by quest name to the game's string array instead of by index, so each quest shows the correct objective text.
|
||||||
|
|
||||||
# 1.0.8.23
|
# 1.0.8.23
|
||||||
- **Main Menu**: New customizable main menu bar replacing the game's bar. Correct icons (Duty, Logs, Travel, Social) and context menus; Logs/Travel identified by submenu names. Background drawn only behind icons (no extra side padding). Crash fix when executing from context menu (RunOnFrameworkThread).
|
- **Main Menu**: New customizable main menu bar replacing the game's bar. Correct icons (Duty, Logs, Travel, Social) and context menus; Logs/Travel identified by submenu names. Background drawn only behind icons (no extra side padding). Crash fix when executing from context menu (RunOnFrameworkThread).
|
||||||
- **Duty List & Scenario Guide**: Background transparent by default; optional skip draw when fully transparent.
|
- **Duty List & Scenario Guide**: Background transparent by default; optional skip draw when fully transparent.
|
||||||
|
|||||||
+1
-1
@@ -1 +1 @@
|
|||||||
[{"Author":"Knack117","Name":"HSUI","Punchline":"A modern HUD replacement built for customization.","Description":"HSUI provides a highly configurable HUD replacement for FFXIV, recreated from DelvUI using KamiToolKit, FFXIVClientStructs, and Dalamud. Features unit frames, castbars, job gauges, nameplates, party frames, status effects, enemy list, configurable hotbars with drag-and-drop, and profiles.","Changelog":"1.0.8.23: Main Menu bar; Duty List & Scenario Guide transparent background. 1.0.8.22: Duty List hide-unless-hovered fix; tooltips job gauge costs. 1.0.8.21: Duty List in-duty info. 1.0.8.20: Fixed cooldown overlays showing through game UI (dialogue box) when Show HUD during dialogue enabled. 1.0.8.19: Hotbar visibility moved to per-hotbar menus; removed Visibility Hotbars tab. 1.0.8.18: Visibility \"Hide unless hovered\" option. 1.0.8.17: Controller hotbars (cross layout, separate storage, sync with game). 1.0.8.16: Show HUD during dialogue and interaction. 1.0.8.15: Tooltips game-style formatting. 1.0.8.14: Mouse GCD Indicator. 1.0.8.13: Item tooltips now show. 1.0.8.12: Item/HQ icons now draw on hotbar. 1.0.8.11: Hotbar tooltip crash fix. 1.0.8.10: Hotbar crash fix when dragging inventory items. 1.0.8.9: Gearset persists on slot. 1.0.8.8: Gearset drag-drop fix. 1.0.8.7: Fixed Gearset icon clearing. 1.0.8.6: Crafting action tooltips full description. 1.0.8.4: Alliance Frames 1 and 2 fix; Hide in duty no longer hides alliance frames. 1.0.8.3: Fix left-click staying broken after disable. 1.0.8.2: Charge icons stay lit until all charges spent.","InternalName":"HSUI","AssemblyVersion":"1.0.8.23","RepoUrl":"http://brassnet.ddns.net:33983/KnackAtNite/HSUI","ApplicableVersion":"any","Tags":["UI","HUD","Unit Frames","Nameplates","Party Frames","Hotbars"],"CategoryTags":["UI"],"DalamudApiLevel":14,"IconUrl":"http://brassnet.ddns.net:33983/KnackAtNite/HSUI/raw/branch/main/Media/Images/icon.png","ImageUrls":[],"DownloadLinkInstall":"http://brassnet.ddns.net:33983/KnackAtNite/HSUI/releases/download/v1.0.8.23/latest.zip","IsHide":false,"IsTestingExclusive":false,"DownloadLinkTesting":"http://brassnet.ddns.net:33983/KnackAtNite/HSUI/releases/download/v1.0.8.23/latest.zip","DownloadLinkUpdate":"http://brassnet.ddns.net:33983/KnackAtNite/HSUI/releases/download/v1.0.8.23/latest.zip","LastUpdate":"1772500800"}]
|
[{"Author":"Knack117","Name":"HSUI","Punchline":"A modern HUD replacement built for customization.","Description":"HSUI provides a highly configurable HUD replacement for FFXIV, recreated from DelvUI using KamiToolKit, FFXIVClientStructs, and Dalamud. Features unit frames, castbars, job gauges, nameplates, party frames, status effects, enemy list, configurable hotbars with drag-and-drop, and profiles.","Changelog":"1.0.8.26: Duty List hidden quests filtered; priority quests on top; no map flag on quest map open. 1.0.8.25: Duty List objectives — match by name only, prefer game string array; no index fallback. 1.0.8.24: Context menu keeps element visible; Duty List objectives fixed (match by quest name). 1.0.8.23: Main Menu bar; Duty List & Scenario Guide transparent background. 1.0.8.22: Duty List hide-unless-hovered fix; tooltips job gauge costs. 1.0.8.21: Duty List in-duty info. 1.0.8.20: Fixed cooldown overlays showing through game UI (dialogue box) when Show HUD during dialogue enabled. 1.0.8.19: Hotbar visibility moved to per-hotbar menus; removed Visibility Hotbars tab. 1.0.8.18: Visibility \"Hide unless hovered\" option. 1.0.8.17: Controller hotbars (cross layout, separate storage, sync with game). 1.0.8.16: Show HUD during dialogue and interaction. 1.0.8.15: Tooltips game-style formatting. 1.0.8.14: Mouse GCD Indicator. 1.0.8.13: Item tooltips now show. 1.0.8.12: Item/HQ icons now draw on hotbar. 1.0.8.11: Hotbar tooltip crash fix. 1.0.8.10: Hotbar crash fix when dragging inventory items. 1.0.8.9: Gearset persists on slot. 1.0.8.8: Gearset drag-drop fix. 1.0.8.7: Fixed Gearset icon clearing. 1.0.8.6: Crafting action tooltips full description. 1.0.8.4: Alliance Frames 1 and 2 fix; Hide in duty no longer hides alliance frames. 1.0.8.3: Fix left-click staying broken after disable. 1.0.8.2: Charge icons stay lit until all charges spent.","InternalName":"HSUI","AssemblyVersion":"1.0.8.26","RepoUrl":"http://brassnet.ddns.net:33983/KnackAtNite/HSUI","ApplicableVersion":"any","Tags":["UI","HUD","Unit Frames","Nameplates","Party Frames","Hotbars"],"CategoryTags":["UI"],"DalamudApiLevel":14,"IconUrl":"http://brassnet.ddns.net:33983/KnackAtNite/HSUI/raw/branch/main/Media/Images/icon.png","ImageUrls":[],"DownloadLinkInstall":"http://brassnet.ddns.net:33983/KnackAtNite/HSUI/releases/download/v1.0.8.26/latest.zip","IsHide":false,"IsTestingExclusive":false,"DownloadLinkTesting":"http://brassnet.ddns.net:33983/KnackAtNite/HSUI/releases/download/v1.0.8.26/latest.zip","DownloadLinkUpdate":"http://brassnet.ddns.net:33983/KnackAtNite/HSUI/releases/download/v1.0.8.26/latest.zip","LastUpdate":"1772932800"}]
|
||||||
|
|||||||
Reference in New Issue
Block a user