fix: handle nulls
This commit is contained in:
parent
a01cc7deff
commit
5c4fb6d6d1
174
Plugin.cs
174
Plugin.cs
@ -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}");
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 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);
|
||||||
|
// }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user