fix: handle nulls

This commit is contained in:
Anna 2024-07-25 20:02:46 -04:00
parent a01cc7deff
commit 5c4fb6d6d1
Signed by: anna
GPG Key ID: D0943384CD9F87D1

174
Plugin.cs
View File

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