diff --git a/Plugin.cs b/Plugin.cs index 2392281..e3e8dcc 100644 --- a/Plugin.cs +++ b/Plugin.cs @@ -15,6 +15,7 @@ using FFXIVClientStructs.FFXIV.Client.Graphics; using FFXIVClientStructs.FFXIV.Client.UI; using FFXIVClientStructs.FFXIV.Client.UI.Agent; using FFXIVClientStructs.FFXIV.Component.GUI; +using Lumina.Excel.GeneratedSheets2; namespace PartyDamage; @@ -264,7 +265,7 @@ public class Plugin : IDalamudPlugin { } var unit = list->PartyMembers[i]; - if (list->TargetedIndex != i) { + if (list->TargetedIndex != i && unit.TargetGlow != null) { unit.TargetGlow->SetAlpha(255); unit.TargetGlow->SetScaleX(0); unit.TargetGlow->AddRed = 0; @@ -278,16 +279,24 @@ public class Plugin : IDalamudPlugin { var left = (AtkTextNode*) unit.MPGaugeBar->GetTextNodeById(2); var right = (AtkTextNode*) unit.MPGaugeBar->GetTextNodeById(3); + var chara = member.Object; + + var hasRight = right != null; + var hasChara = chara != null; left->TextColor = new ByteColor { RGBA = 0xFFFFFFFF, }; - right->TextColor = left->TextColor; - - var manaString = member.Object->Mana.ToString(CultureInfo.InvariantCulture); - left->SetText(manaString[..^2]); - right->SetText(manaString[^2..]); + var manaString = hasChara + ? chara->Mana.ToString(CultureInfo.InvariantCulture) + : "???"; + if (hasRight) { + left->SetText(manaString[..^2]); + right->SetText(manaString[^2..]); + } else { + left->SetText(manaString); + } left->AddRed = 0; left->AddGreen = 0; @@ -295,34 +304,38 @@ public class Plugin : IDalamudPlugin { left->MultiplyRed = 100; left->MultiplyGreen = 100; left->MultiplyBlue = 100; - right->AddRed = left->AddRed; - right->AddGreen = left->AddGreen; - right->AddBlue = left->AddBlue; - right->MultiplyRed = left->MultiplyRed; - right->MultiplyGreen = left->MultiplyGreen; - right->MultiplyBlue = left->MultiplyBlue; - // fixme: need to figure out a way to get the game to repop - var defaultName = new StringBuilder("\ue06a"); - foreach (var digit in member.Object->Level.ToString(CultureInfo.InvariantCulture)) { - var offset = digit - '0'; - defaultName.Append((char) ('\ue060' + offset)); + if (hasRight) { + right->TextColor = left->TextColor; + right->AddRed = left->AddRed; + right->AddGreen = left->AddGreen; + right->AddBlue = left->AddBlue; + right->MultiplyRed = left->MultiplyRed; + right->MultiplyGreen = left->MultiplyGreen; + right->MultiplyBlue = left->MultiplyBlue; } - defaultName.Append(' '); - defaultName.Append(member.Object->NameString); + // fixme: need to figure out a way to get the game to repop + // var defaultName = new StringBuilder("\ue06a"); + // foreach (var digit in member.Object->Level.ToString(CultureInfo.InvariantCulture)) { + // var offset = digit - '0'; + // defaultName.Append((char) ('\ue060' + offset)); + // } - unit.Name->SetText(defaultName.ToString()); - unit.Name->TextColor = new ByteColor { - RGBA = 0xFFFFFFFF, - }; + // defaultName.Append(' '); + // defaultName.Append(member.Object->NameString); - unit.Name->AddRed = 0; - unit.Name->AddGreen = 0; - unit.Name->AddBlue = 0; - unit.Name->MultiplyRed = 100; - unit.Name->MultiplyGreen = 100; - unit.Name->MultiplyBlue = 100; + // unit.Name->SetText(defaultName.ToString()); + // unit.Name->TextColor = new ByteColor { + // RGBA = 0xFFFFFFFF, + // }; + + // unit.Name->AddRed = 0; + // unit.Name->AddGreen = 0; + // unit.Name->AddBlue = 0; + // unit.Name->MultiplyRed = 100; + // unit.Name->MultiplyGreen = 100; + // unit.Name->MultiplyBlue = 100; } } @@ -332,7 +345,7 @@ public class Plugin : IDalamudPlugin { Encounter encounter, Combatant combatant ) { - if (this.Config.UseDpsBar) { + if (this.Config.UseDpsBar && member.TargetGlow != null) { member.TargetGlow->ToggleVisibility(true); member.TargetGlow->SetAlpha((byte) Math.Round(this.Config.BarAlpha * 255)); member.TargetGlow->SetScaleX( @@ -351,14 +364,17 @@ public class Plugin : IDalamudPlugin { if (this.Config.Mode == MeterMode.Mana) { var left = (AtkTextNode*) member.MPGaugeBar->GetTextNodeById(2); var right = (AtkTextNode*) member.MPGaugeBar->GetTextNodeById(3); + var hasRight = right != null; + var hasChara = chara != null; if (this.Config.Alternate && !this._showDps) { - var isCaster = Array.IndexOf(this._manaUsers, chara->ClassJob) != -1; + var isCaster = hasChara + ? Array.IndexOf(this._manaUsers, chara->ClassJob) != -1 + : false; if (!this.Config.ManaModeAlternateOnlyManaUsers || isCaster) { left->TextColor = new ByteColor { RGBA = 0xFFFFFFFF, }; - right->TextColor = left->TextColor; left->AddRed = 0; left->AddGreen = 0; @@ -366,16 +382,26 @@ public class Plugin : IDalamudPlugin { left->MultiplyRed = 100; left->MultiplyGreen = 100; left->MultiplyBlue = 100; - right->AddRed = left->AddRed; - right->AddGreen = left->AddGreen; - right->AddBlue = left->AddBlue; - right->MultiplyRed = left->MultiplyRed; - right->MultiplyGreen = left->MultiplyGreen; - right->MultiplyBlue = left->MultiplyBlue; - var manaString = chara->Mana.ToString(CultureInfo.InvariantCulture); - left->SetText(manaString[..^2]); - right->SetText(manaString[^2..]); + if (hasRight) { + right->TextColor = left->TextColor; + right->AddRed = left->AddRed; + right->AddGreen = left->AddGreen; + right->AddBlue = left->AddBlue; + right->MultiplyRed = left->MultiplyRed; + right->MultiplyGreen = left->MultiplyGreen; + right->MultiplyBlue = left->MultiplyBlue; + } + + var manaString = hasChara + ? chara->Mana.ToString(CultureInfo.InvariantCulture) + : "???"; + if (hasRight) { + left->SetText(manaString[..^2]); + right->SetText(manaString[^2..]); + } else { + left->SetText(manaString); + } return; } @@ -384,72 +410,84 @@ public class Plugin : IDalamudPlugin { left->TextColor = new ByteColor { RGBA = this.Config.TextColour, }; - right->TextColor = left->TextColor; - left->AddRed = (byte) Math.Clamp(this.Config.TextAddRed, 0, 255); left->AddGreen = (byte) Math.Clamp(this.Config.TextAddGreen, 0, 255); left->AddBlue = (byte) Math.Clamp(this.Config.TextAddBlue, 0, 255); left->MultiplyRed = (byte) Math.Clamp(this.Config.TextMulRed, 0, 100); left->MultiplyGreen = (byte) Math.Clamp(this.Config.TextMulGreen, 0, 100); left->MultiplyBlue = (byte) Math.Clamp(this.Config.TextMulBlue, 0, 100); - right->AddRed = left->AddRed; - right->AddGreen = left->AddGreen; - right->AddBlue = left->AddBlue; - right->MultiplyRed = left->MultiplyRed; - right->MultiplyGreen = left->MultiplyGreen; - right->MultiplyBlue = left->MultiplyBlue; + + if (hasRight) { + right->TextColor = left->TextColor; + right->AddRed = left->AddRed; + right->AddGreen = left->AddGreen; + right->AddBlue = left->AddBlue; + right->MultiplyRed = left->MultiplyRed; + right->MultiplyGreen = left->MultiplyGreen; + right->MultiplyBlue = left->MultiplyBlue; + } + + string leftText, rightText; if (combatant.EncDps == 0 || float.IsInfinity(combatant.EncDps) || float.IsNaN(combatant.EncDps)) { - left->SetText("0."); - right->SetText("00"); + leftText = "0."; + rightText = "00"; } else if (combatant.EncDps < 1_000) { var dps = Math.Round(combatant.EncDps * 100).ToString(CultureInfo.InvariantCulture); - left->SetText($"{dps[..^2]}."); - right->SetText(dps[^2..]); + leftText = $"{dps[..^2]}."; + rightText = dps[^2..]; } else if (combatant.EncDps < 1_000_000) { var dps = Math.Round(combatant.EncDps / 100).ToString(CultureInfo.InvariantCulture); - left->SetText($"{dps[..^1]}."); - right->SetText($"{dps[^1..]}K"); + leftText = $"{dps[..^1]}."; + rightText = $"{dps[^1..]}K"; } else if (combatant.EncDps < 1_000_000_000) { var dps = Math.Round(combatant.EncDps / 100_000).ToString(CultureInfo.InvariantCulture); - left->SetText($"{dps[..^1]}."); - right->SetText($"{dps[^1..]}M"); + leftText = $"{dps[..^1]}."; + rightText = $"{dps[^1..]}M"; } else { var dps = Math.Round(combatant.EncDps / 100_000_000).ToString(CultureInfo.InvariantCulture); - left->SetText($"{dps[..^1]}."); - right->SetText($"{dps[^1..]}B"); - } - } else if (this.Config.Mode == MeterMode.Name) { - var dpsText = combatant.EncDps switch { - float.NaN => "0", - float.PositiveInfinity => "0", - float.NegativeInfinity => "0", - < 1_000 => $"{combatant.EncDps:N2}", - < 1_000_000 => $"{combatant.EncDps / 1_000:N2}K", - < 1_000_000_000 => $"{combatant.EncDps / 1_000_000:N2}M", - _ => $"{combatant.EncDps / 1_000_000_000:N2}B", - }; - - if (this.Config.Alternate && !this._showDps) { - member.Name->TextColor = new ByteColor { - RGBA = 0xFFFFFFFF, - }; - member.Name->SetText(chara->Name); - - return; + leftText = $"{dps[..^1]}."; + rightText = $"{dps[^1..]}B"; } - member.Name->SetText(dpsText); - member.Name->TextColor = new ByteColor { - RGBA = this.Config.TextColour, - }; - - member.Name->AddRed = (byte) Math.Clamp(this.Config.TextAddRed, 0, 255); - member.Name->AddGreen = (byte) Math.Clamp(this.Config.TextAddGreen, 0, 255); - member.Name->AddBlue = (byte) Math.Clamp(this.Config.TextAddBlue, 0, 255); - member.Name->MultiplyRed = (byte) Math.Clamp(this.Config.TextMulRed, 0, 100); - member.Name->MultiplyGreen = (byte) Math.Clamp(this.Config.TextMulGreen, 0, 100); - member.Name->MultiplyBlue = (byte) Math.Clamp(this.Config.TextMulBlue, 0, 100); + if (hasRight) { + left->SetText(leftText); + right->SetText(rightText); + } else { + left->SetText($"{leftText}{rightText}"); + } } + // else if (this.Config.Mode == MeterMode.Name) { + // var dpsText = combatant.EncDps switch { + // float.NaN => "0", + // float.PositiveInfinity => "0", + // float.NegativeInfinity => "0", + // < 1_000 => $"{combatant.EncDps:N2}", + // < 1_000_000 => $"{combatant.EncDps / 1_000:N2}K", + // < 1_000_000_000 => $"{combatant.EncDps / 1_000_000:N2}M", + // _ => $"{combatant.EncDps / 1_000_000_000:N2}B", + // }; + + // if (this.Config.Alternate && !this._showDps) { + // member.Name->TextColor = new ByteColor { + // RGBA = 0xFFFFFFFF, + // }; + // member.Name->SetText(chara->Name); + + // return; + // } + + // member.Name->SetText(dpsText); + // member.Name->TextColor = new ByteColor { + // RGBA = this.Config.TextColour, + // }; + + // member.Name->AddRed = (byte) Math.Clamp(this.Config.TextAddRed, 0, 255); + // member.Name->AddGreen = (byte) Math.Clamp(this.Config.TextAddGreen, 0, 255); + // member.Name->AddBlue = (byte) Math.Clamp(this.Config.TextAddBlue, 0, 255); + // member.Name->MultiplyRed = (byte) Math.Clamp(this.Config.TextMulRed, 0, 100); + // member.Name->MultiplyGreen = (byte) Math.Clamp(this.Config.TextMulGreen, 0, 100); + // member.Name->MultiplyBlue = (byte) Math.Clamp(this.Config.TextMulBlue, 0, 100); + // } } }