diff --git a/PlayerTags/Configuration/PluginConfiguration.cs b/PlayerTags/Configuration/PluginConfiguration.cs
index 5340178..a0aabeb 100644
--- a/PlayerTags/Configuration/PluginConfiguration.cs
+++ b/PlayerTags/Configuration/PluginConfiguration.cs
@@ -284,7 +284,7 @@ namespace PlayerTags.Configuration
public NameplateFreeCompanyVisibility NameplateFreeCompanyVisibility = NameplateFreeCompanyVisibility.Default;
public NameplateTitleVisibility NameplateTitleVisibility = NameplateTitleVisibility.WhenHasTags;
public NameplateTitlePosition NameplateTitlePosition = NameplateTitlePosition.AlwaysAboveName;
-
+ public DeadPlayerHandling NameplateDeadPlayerHandling = DeadPlayerHandling.Include;
public bool IsApplyTagsToAllChatMessagesEnabled = true;
}
}
diff --git a/PlayerTags/Data/DeadPlayerHandling.cs b/PlayerTags/Data/DeadPlayerHandling.cs
new file mode 100644
index 0000000..9fd6883
--- /dev/null
+++ b/PlayerTags/Data/DeadPlayerHandling.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PlayerTags.Data
+{
+ public enum DeadPlayerHandling
+ {
+ Ignore,
+ Include,
+ GrayOut
+ }
+}
diff --git a/PlayerTags/Features/NameplateTagTargetFeature.cs b/PlayerTags/Features/NameplateTagTargetFeature.cs
index c73205f..32f10dc 100644
--- a/PlayerTags/Features/NameplateTagTargetFeature.cs
+++ b/PlayerTags/Features/NameplateTagTargetFeature.cs
@@ -2,6 +2,9 @@
using Dalamud.Game.ClientState.Objects.Types;
using Dalamud.Game.Text.SeStringHandling;
using Dalamud.Game.Text.SeStringHandling.Payloads;
+using FFXIVClientStructs.FFXIV.Client.Game.Character;
+using FFXIVClientStructs.FFXIV.Client.System.Memory;
+using FFXIVClientStructs.FFXIV.Component.GUI;
using Lumina.Excel.GeneratedSheets;
using Pilz.Dalamud.Icons;
using Pilz.Dalamud.Nameplates.Tools;
@@ -106,13 +109,37 @@ namespace PlayerTags.Features
return false;
}
- private void Nameplate_PlayerNameplateUpdated(PlayerNameplateUpdatedArgs args)
+ private unsafe void Nameplate_PlayerNameplateUpdated(PlayerNameplateUpdatedArgs args)
{
var beforeTitleBytes = args.Title.Encode();
var iconID = args.IconId;
var generalOptions = m_PluginConfiguration.GeneralOptions[ActivityContextManager.CurrentActivityContext.ActivityType];
+ var applyTags = false;
+ var grayOut = false;
+
+ if (args.PlayerCharacter != null)
+ {
+ if (args.PlayerCharacter.IsDead)
+ {
+ switch (generalOptions.NameplateDeadPlayerHandling)
+ {
+ case DeadPlayerHandling.Include:
+ applyTags = true;
+ break;
+ case DeadPlayerHandling.GrayOut:
+ grayOut = true;
+ break;
+ }
+ }
+ else
+ applyTags = true;
+ }
+
+ if (applyTags)
+ AddTagsToNameplate(args.PlayerCharacter, args.Name, args.Title, args.FreeCompany, ref iconID);
+ else if(grayOut)
+ GrayOutNameplate(args.PlayerCharacter, args.Name, args.Title, args.FreeCompany, ref iconID);
- AddTagsToNameplate(args.PlayerCharacter, args.Name, args.Title, args.FreeCompany, ref iconID);
args.IconId = iconID;
if (generalOptions.NameplateTitlePosition == NameplateTitlePosition.AlwaysAboveName)
@@ -150,6 +177,17 @@ namespace PlayerTags.Features
}
}
+ private NameplateChanges GenerateEmptyNameplateChanges(SeString name, SeString title, SeString freeCompany)
+ {
+ NameplateChanges nameplateChanges = new();
+
+ nameplateChanges.GetProps(NameplateElements.Name).Destination = name;
+ nameplateChanges.GetProps(NameplateElements.Title).Destination = title;
+ nameplateChanges.GetProps(NameplateElements.FreeCompany).Destination = freeCompany;
+
+ return nameplateChanges;
+ }
+
///
/// Adds tags to the nameplate of a game object.
///
@@ -160,10 +198,7 @@ namespace PlayerTags.Features
private void AddTagsToNameplate(GameObject gameObject, SeString name, SeString title, SeString freeCompany, ref int statusIcon)
{
int? newStatusIcon = null;
- NameplateChanges nameplateChanges = new();
- nameplateChanges.GetProps(NameplateElements.Name).Destination = name;
- nameplateChanges.GetProps(NameplateElements.Title).Destination = title;
- nameplateChanges.GetProps(NameplateElements.FreeCompany).Destination = freeCompany;
+ NameplateChanges nameplateChanges = GenerateEmptyNameplateChanges(name, title, freeCompany);
if (gameObject is PlayerCharacter playerCharacter)
{
@@ -244,6 +279,22 @@ namespace PlayerTags.Features
}
}
+ protected void GrayOutNameplate(GameObject gameObject, SeString name, SeString title, SeString freeCompany, ref int statusIcon)
+ {
+ if (gameObject is PlayerCharacter playerCharacter)
+ {
+ NameplateChanges nameplateChanges = GenerateEmptyNameplateChanges(name, title, freeCompany);
+
+ foreach (NameplateElements element in Enum.GetValues())
+ {
+ nameplateChanges.GetChange(element, StringPosition.Before).Payloads.Add(new UIForegroundPayload(3));
+ nameplateChanges.GetChange(element, StringPosition.After).Payloads.Add(new UIForegroundPayload(0));
+ }
+
+ ApplyNameplateChanges(nameplateChanges);
+ }
+ }
+
protected void ApplyNameplateChanges(NameplateChanges nameplateChanges)
{
var props = new NameplateChangesProps