From 55d979b7c0478feb16fbe9fd5e9241ab17032622 Mon Sep 17 00:00:00 2001 From: CakeAndBanana Date: Sun, 5 Oct 2025 15:41:52 +0200 Subject: [PATCH 1/9] Added a check if nameplate is visible to show the lightless text. --- LightlessSync/Services/NameplateHandler.cs | 128 +++++++++++---------- 1 file changed, 70 insertions(+), 58 deletions(-) diff --git a/LightlessSync/Services/NameplateHandler.cs b/LightlessSync/Services/NameplateHandler.cs index 762bc52..5cb2d3e 100644 --- a/LightlessSync/Services/NameplateHandler.cs +++ b/LightlessSync/Services/NameplateHandler.cs @@ -176,66 +176,78 @@ public unsafe class NameplateHandler : IMediatorSubscriber for (int i = 0; i < ui3DModule->NamePlateObjectInfoCount; ++i) { - var objectInfo = ui3DModule->NamePlateObjectInfoPointers[i].Value; - if (objectInfo == null || objectInfo->GameObject == null) - continue; - - var nameplateIndex = objectInfo->NamePlateIndex; - if (nameplateIndex < 0 || nameplateIndex >= AddonNamePlate.NumNamePlateObjects) - continue; - - var pNode = mTextNodes[nameplateIndex]; - if (pNode == null) - continue; - - var cid = DalamudUtilService.GetHashedCIDFromPlayerPointer((nint)objectInfo->GameObject); - - //_logger.LogInformation($"checking cid: {cid}", cid); - - if (cid == null || !_activeBroadcastingCids.Contains(cid)) + var pObjectInfo = ui3DModule->NamePlateObjectInfoPointers[i].Value; + if (pObjectInfo != null && + pObjectInfo->GameObject != null && + pObjectInfo->NamePlateIndex >= 0) { - pNode->AtkResNode.ToggleVisibility(false); - continue; + var objectInfo = ui3DModule->NamePlateObjectInfoPointers[i].Value; + if (objectInfo == null || objectInfo->GameObject == null) + continue; + + var nameplateIndex = objectInfo->NamePlateIndex; + if (nameplateIndex < 0 || nameplateIndex >= AddonNamePlate.NumNamePlateObjects) + continue; + + var pNode = mTextNodes[nameplateIndex]; + if (pNode == null) + continue; + + var cid = DalamudUtilService.GetHashedCIDFromPlayerPointer((nint)objectInfo->GameObject); + + //_logger.LogInformation($"checking cid: {cid}", cid); + + if (cid == null || !_activeBroadcastingCids.Contains(cid)) + { + pNode->AtkResNode.ToggleVisibility(false); + continue; + } + + + + var nameplateObject = mpNameplateAddon->NamePlateObjectArray[nameplateIndex]; + nameplateObject.RootComponentNode->Component->UldManager.UpdateDrawNodeList(); + + var pNameplateIconNode = nameplateObject.MarkerIcon; + var pNameplateResNode = nameplateObject.NameContainer; + var pNameplateTextNode = nameplateObject.NameText; + bool IsVisible = pNameplateIconNode->AtkResNode.IsVisible() || (pNameplateResNode->IsVisible() && pNameplateTextNode->AtkResNode.IsVisible()); + pNode->AtkResNode.ToggleVisibility(IsVisible); + + var nameContainer = nameplateObject.NameContainer; + var nameText = nameplateObject.NameText; + + var labelColor = UIColors.Get("LightlessPurple"); + var edgeColor = UIColors.Get("FullBlack"); + + var labelY = nameContainer->Height - nameplateObject.TextH - (int)(24 * nameText->AtkResNode.ScaleY); + + pNode->AtkResNode.SetPositionShort(58, (short)labelY); + pNode->AtkResNode.SetUseDepthBasedPriority(true); + pNode->AtkResNode.SetScale(0.5f, 0.5f); + + pNode->AtkResNode.Color.A = 255; + + pNode->TextColor.R = (byte)(labelColor.X * 255); + pNode->TextColor.G = (byte)(labelColor.Y * 255); + pNode->TextColor.B = (byte)(labelColor.Z * 255); + pNode->TextColor.A = (byte)(labelColor.W * 255); + + pNode->EdgeColor.R = (byte)(edgeColor.X * 255); + pNode->EdgeColor.G = (byte)(edgeColor.Y * 255); + pNode->EdgeColor.B = (byte)(edgeColor.Z * 255); + pNode->EdgeColor.A = (byte)(edgeColor.W * 255); + + pNode->FontSize = 24; + pNode->AlignmentType = AlignmentType.Center; + pNode->FontType = FontType.MiedingerMed; + pNode->LineSpacing = 24; + pNode->CharSpacing = 1; + + pNode->TextFlags = TextFlags.Edge | TextFlags.Glare; + + pNode->SetText("Lightfinder"); } - - pNode->AtkResNode.ToggleVisibility(true); - - var nameplateObject = mpNameplateAddon->NamePlateObjectArray[nameplateIndex]; - nameplateObject.RootComponentNode->Component->UldManager.UpdateDrawNodeList(); - - var nameContainer = nameplateObject.NameContainer; - var nameText = nameplateObject.NameText; - - var labelColor = UIColors.Get("LightlessPurple"); - var edgeColor = UIColors.Get("FullBlack"); - - var labelY = nameContainer->Height - nameplateObject.TextH - (int)(24 * nameText->AtkResNode.ScaleY); - - pNode->AtkResNode.SetPositionShort(58, (short)labelY); - pNode->AtkResNode.SetUseDepthBasedPriority(true); - pNode->AtkResNode.SetScale(0.5f, 0.5f); - - pNode->AtkResNode.Color.A = 255; - - pNode->TextColor.R = (byte)(labelColor.X * 255); - pNode->TextColor.G = (byte)(labelColor.Y * 255); - pNode->TextColor.B = (byte)(labelColor.Z * 255); - pNode->TextColor.A = (byte)(labelColor.W * 255); - - pNode->EdgeColor.R = (byte)(edgeColor.X * 255); - pNode->EdgeColor.G = (byte)(edgeColor.Y * 255); - pNode->EdgeColor.B = (byte)(edgeColor.Z * 255); - pNode->EdgeColor.A = (byte)(edgeColor.W * 255); - - pNode->FontSize = 24; - pNode->AlignmentType = AlignmentType.Center; - pNode->FontType = FontType.MiedingerMed; - pNode->LineSpacing = 24; - pNode->CharSpacing = 1; - - pNode->TextFlags = TextFlags.Edge | TextFlags.Glare; - - pNode->SetText("Lightfinder"); } } From 173e0aa7ae3d037da712366a962d0a998f3d3909 Mon Sep 17 00:00:00 2001 From: CakeAndBanana Date: Sun, 5 Oct 2025 15:43:48 +0200 Subject: [PATCH 2/9] Removed double variable. --- LightlessSync/Services/NameplateHandler.cs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/LightlessSync/Services/NameplateHandler.cs b/LightlessSync/Services/NameplateHandler.cs index 5cb2d3e..a8eb13b 100644 --- a/LightlessSync/Services/NameplateHandler.cs +++ b/LightlessSync/Services/NameplateHandler.cs @@ -176,12 +176,11 @@ public unsafe class NameplateHandler : IMediatorSubscriber for (int i = 0; i < ui3DModule->NamePlateObjectInfoCount; ++i) { - var pObjectInfo = ui3DModule->NamePlateObjectInfoPointers[i].Value; - if (pObjectInfo != null && - pObjectInfo->GameObject != null && - pObjectInfo->NamePlateIndex >= 0) + var objectInfo = ui3DModule->NamePlateObjectInfoPointers[i].Value; + if (objectInfo != null && + objectInfo->GameObject != null && + objectInfo->NamePlateIndex >= 0) { - var objectInfo = ui3DModule->NamePlateObjectInfoPointers[i].Value; if (objectInfo == null || objectInfo->GameObject == null) continue; From 19e42d34ff03593301c13d0ca61a1e64eacedb9f Mon Sep 17 00:00:00 2001 From: CakeAndBanana Date: Sun, 5 Oct 2025 15:45:32 +0200 Subject: [PATCH 3/9] Removal of blank space, me eepy --- LightlessSync/Services/NameplateHandler.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/LightlessSync/Services/NameplateHandler.cs b/LightlessSync/Services/NameplateHandler.cs index a8eb13b..5f01d5d 100644 --- a/LightlessSync/Services/NameplateHandler.cs +++ b/LightlessSync/Services/NameplateHandler.cs @@ -202,8 +202,6 @@ public unsafe class NameplateHandler : IMediatorSubscriber continue; } - - var nameplateObject = mpNameplateAddon->NamePlateObjectArray[nameplateIndex]; nameplateObject.RootComponentNode->Component->UldManager.UpdateDrawNodeList(); From fdfd5722c70f3008cc52e8e3daf7f7380e53606d Mon Sep 17 00:00:00 2001 From: CakeAndBanana Date: Sun, 5 Oct 2025 15:52:02 +0200 Subject: [PATCH 4/9] Changed admin to developer for pairs --- LightlessSync/UI/Components/DrawUserPair.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LightlessSync/UI/Components/DrawUserPair.cs b/LightlessSync/UI/Components/DrawUserPair.cs index fdd06e8..fa5022e 100644 --- a/LightlessSync/UI/Components/DrawUserPair.cs +++ b/LightlessSync/UI/Components/DrawUserPair.cs @@ -313,7 +313,7 @@ public class DrawUserPair using (ImRaii.PushColor(ImGuiCol.Text, roleColor)) { ImGui.TextUnformatted(_pair.UserData.IsAdmin - ? "Official Lightless Admin" + ? "Official Lightless Developer" : "Official Lightless Moderator"); } ImGui.EndTooltip(); From fd26d776a5b28b589e87cb6b34762248defd5f71 Mon Sep 17 00:00:00 2001 From: CakeAndBanana Date: Sun, 5 Oct 2025 16:22:01 +0200 Subject: [PATCH 5/9] Added command for lightfinder. --- LightlessSync/Services/CommandManagerService.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/LightlessSync/Services/CommandManagerService.cs b/LightlessSync/Services/CommandManagerService.cs index 3f22195..c101acf 100644 --- a/LightlessSync/Services/CommandManagerService.cs +++ b/LightlessSync/Services/CommandManagerService.cs @@ -42,7 +42,8 @@ public sealed class CommandManagerService : IDisposable "\t /light toggle on|off - Connects or disconnects to Lightless respectively" + Environment.NewLine + "\t /light gpose - Opens the Lightless Character Data Hub window" + Environment.NewLine + "\t /light analyze - Opens the Lightless Character Data Analysis window" + Environment.NewLine + - "\t /light settings - Opens the Lightless Settings window" + "\t /light settings - Opens the Lightless Settings window" + Environment.NewLine + + "\t /light settings - Opens the Lightfinder window" }); } @@ -122,5 +123,9 @@ public sealed class CommandManagerService : IDisposable { _mediator.Publish(new UiToggleMessage(typeof(SettingsUi))); } + else if (string.Equals(splitArgs[0], "lightfinder", StringComparison.OrdinalIgnoreCase)) + { + _mediator.Publish(new UiToggleMessage(typeof(BroadcastUI))); + } } } \ No newline at end of file From 98b9cc7fe7ffb26f93ec14958884f352952e5d5b Mon Sep 17 00:00:00 2001 From: CakeAndBanana Date: Sun, 5 Oct 2025 16:24:55 +0200 Subject: [PATCH 6/9] Fixed text from settings to lightfinder --- LightlessSync/Services/CommandManagerService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LightlessSync/Services/CommandManagerService.cs b/LightlessSync/Services/CommandManagerService.cs index c101acf..b2993d3 100644 --- a/LightlessSync/Services/CommandManagerService.cs +++ b/LightlessSync/Services/CommandManagerService.cs @@ -43,7 +43,7 @@ public sealed class CommandManagerService : IDisposable "\t /light gpose - Opens the Lightless Character Data Hub window" + Environment.NewLine + "\t /light analyze - Opens the Lightless Character Data Analysis window" + Environment.NewLine + "\t /light settings - Opens the Lightless Settings window" + Environment.NewLine + - "\t /light settings - Opens the Lightfinder window" + "\t /light lightfinder - Opens the Lightfinder window" }); } From afc3b4534c4d12b3a43c7ce55dc2bcf5f0680e64 Mon Sep 17 00:00:00 2001 From: CakeAndBanana Date: Sun, 5 Oct 2025 16:31:55 +0200 Subject: [PATCH 7/9] Fixed so the option to use the right click menu will disable pair button if disabled --- LightlessSync/Services/ContextMenuService.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/LightlessSync/Services/ContextMenuService.cs b/LightlessSync/Services/ContextMenuService.cs index b03ef28..12dae60 100644 --- a/LightlessSync/Services/ContextMenuService.cs +++ b/LightlessSync/Services/ContextMenuService.cs @@ -24,6 +24,7 @@ internal class ContextMenuService : IHostedService private readonly PairRequestService _pairRequestService; private readonly ApiController _apiController; private readonly IObjectTable _objectTable; + private readonly LightlessConfigService _configService; public ContextMenuService( IContextMenu contextMenu, @@ -45,6 +46,7 @@ internal class ContextMenuService : IHostedService _dalamudUtil = dalamudUtil; _apiController = apiController; _objectTable = objectTable; + _configService = configService; _pairManager = pairManager; _pairRequestService = pairRequestService; _clientState = clientState; @@ -108,6 +110,9 @@ internal class ContextMenuService : IHostedService var world = GetWorld(target.TargetHomeWorld.RowId); if (!IsWorldValid(world)) return; + + if (!_configService.Current.EnableRightClickMenus) + return; args.AddMenuItem(new MenuItem { From fec2e4d380c5d975180e11b4f14207c7ad759a7e Mon Sep 17 00:00:00 2001 From: CakeAndBanana Date: Sun, 5 Oct 2025 16:33:17 +0200 Subject: [PATCH 8/9] Fixed description --- LightlessSync/UI/SettingsUi.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LightlessSync/UI/SettingsUi.cs b/LightlessSync/UI/SettingsUi.cs index cb34877..799f350 100644 --- a/LightlessSync/UI/SettingsUi.cs +++ b/LightlessSync/UI/SettingsUi.cs @@ -940,7 +940,7 @@ public class SettingsUi : WindowMediatorSubscriberBase _configService.Current.EnableRightClickMenus = enableRightClickMenu; _configService.Save(); } - _uiShared.DrawHelpText("This will add Lightless related right click menu entries in the game UI on paired players."); + _uiShared.DrawHelpText("This will add all Lightless related right click menu entries in the game UI."); if (ImGui.Checkbox("Display status and visible pair count in Server Info Bar", ref enableDtrEntry)) { From 15798e675308c6859a62e6834d4aa0b54ce0886d Mon Sep 17 00:00:00 2001 From: CakeAndBanana Date: Sun, 5 Oct 2025 20:13:36 +0200 Subject: [PATCH 9/9] Removed commented logging --- LightlessSync/Services/NameplateHandler.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/LightlessSync/Services/NameplateHandler.cs b/LightlessSync/Services/NameplateHandler.cs index 5f01d5d..9fbdf8e 100644 --- a/LightlessSync/Services/NameplateHandler.cs +++ b/LightlessSync/Services/NameplateHandler.cs @@ -194,8 +194,6 @@ public unsafe class NameplateHandler : IMediatorSubscriber var cid = DalamudUtilService.GetHashedCIDFromPlayerPointer((nint)objectInfo->GameObject); - //_logger.LogInformation($"checking cid: {cid}", cid); - if (cid == null || !_activeBroadcastingCids.Contains(cid)) { pNode->AtkResNode.ToggleVisibility(false);