fix: handle cross-world correctly again
This commit is contained in:
parent
5e4e443e4f
commit
542c05524b
69
Plugin.cs
69
Plugin.cs
@ -348,6 +348,7 @@ public class Plugin : IDalamudPlugin {
|
||||
Mana = member.Object != null ? member.Object->Mana : null,
|
||||
PartyListIndex = i,
|
||||
ClassJob = member.Object != null ? member.Object->ClassJob : null,
|
||||
IsFullMember = member.Object != null,
|
||||
};
|
||||
|
||||
names.Add(info);
|
||||
@ -357,6 +358,11 @@ public class Plugin : IDalamudPlugin {
|
||||
var crossInfo = InfoProxyCrossRealm.Instance();
|
||||
if (crossInfo->IsInCrossRealmParty != 0) {
|
||||
var crossGroup = crossInfo->CrossRealmGroups[crossInfo->LocalPlayerGroupIndex];
|
||||
var fullMembers = AgentHUD.Instance()->PartyMembers;
|
||||
var fullMemberIds = new uint[fullMembers.Length];
|
||||
for (var i = 0; i < fullMembers.Length; i++) {
|
||||
fullMemberIds[i] = fullMembers[i].EntityId;
|
||||
}
|
||||
|
||||
for (var i = 0; i < crossGroup.GroupMemberCount && i < list->PartyMembers.Length; i++) {
|
||||
var member = crossGroup.GroupMembers[i];
|
||||
@ -380,6 +386,7 @@ public class Plugin : IDalamudPlugin {
|
||||
Mana = null,
|
||||
PartyListIndex = member.MemberIndex,
|
||||
ClassJob = member.ClassJobId,
|
||||
IsFullMember = Array.IndexOf(fullMemberIds, member.EntityId) != -1,
|
||||
};
|
||||
|
||||
names.Add(info);
|
||||
@ -410,7 +417,7 @@ public class Plugin : IDalamudPlugin {
|
||||
return false;
|
||||
}
|
||||
|
||||
private unsafe (Pointer<AtkTextNode>, Pointer<AtkTextNode>) GetTextNodes(AddonPartyList.PartyListMemberStruct unit) {
|
||||
private static unsafe (Pointer<AtkTextNode>, Pointer<AtkTextNode>) GetTextNodes(AddonPartyList.PartyListMemberStruct unit) {
|
||||
if (unit.MPGaugeBar == null) {
|
||||
return (null, null);
|
||||
}
|
||||
@ -427,8 +434,8 @@ public class Plugin : IDalamudPlugin {
|
||||
);
|
||||
}
|
||||
|
||||
private unsafe void ResetTextColour(AddonPartyList.PartyListMemberStruct unit) {
|
||||
var (left, right) = this.GetTextNodes(unit);
|
||||
private static unsafe void ResetTextColour(AddonPartyList.PartyListMemberStruct unit) {
|
||||
var (left, right) = GetTextNodes(unit);
|
||||
|
||||
if (left.Value == null) {
|
||||
return;
|
||||
@ -458,26 +465,33 @@ public class Plugin : IDalamudPlugin {
|
||||
right.Value->MultiplyBlue = left.Value->MultiplyBlue;
|
||||
}
|
||||
|
||||
private unsafe void ResetManaText(AddonPartyList.PartyListMemberStruct unit, uint? mana) {
|
||||
var (left, right) = this.GetTextNodes(unit);
|
||||
private static unsafe void ResetManaText(AddonPartyList.PartyListMemberStruct unit, uint? mana) {
|
||||
var (left, right) = GetTextNodes(unit);
|
||||
|
||||
if (left.Value == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
var manaString = mana == null
|
||||
? "???"
|
||||
: mana.Value.ToString(CultureInfo.InvariantCulture);
|
||||
if (right.Value != null) {
|
||||
if (manaString.Length <= 1) {
|
||||
if (mana == null) {
|
||||
if (right.Value != null) {
|
||||
left.Value->SetText("");
|
||||
right.Value->SetText(manaString);
|
||||
right.Value->SetText("???");
|
||||
} else {
|
||||
left.Value->SetText(manaString[..^2]);
|
||||
right.Value->SetText(manaString[^2..]);
|
||||
left.Value->SetText("???");
|
||||
}
|
||||
} else {
|
||||
left.Value->SetText(manaString);
|
||||
var manaString = mana.Value.ToString(CultureInfo.InvariantCulture);
|
||||
if (right.Value != null) {
|
||||
if (manaString.Length <= 1) {
|
||||
left.Value->SetText("");
|
||||
right.Value->SetText(manaString);
|
||||
} else {
|
||||
left.Value->SetText(manaString[..^2]);
|
||||
right.Value->SetText(manaString[^2..]);
|
||||
}
|
||||
} else {
|
||||
left.Value->SetText(manaString);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -521,8 +535,8 @@ public class Plugin : IDalamudPlugin {
|
||||
}
|
||||
}
|
||||
|
||||
this.ResetTextColour(unit);
|
||||
this.ResetManaText(unit, info.Mana);
|
||||
ResetTextColour(unit);
|
||||
ResetManaText(unit, info.Mana);
|
||||
}
|
||||
|
||||
private unsafe void ResetMembers(AddonPartyList* list) {
|
||||
@ -531,7 +545,7 @@ public class Plugin : IDalamudPlugin {
|
||||
member.TargetGlow->SetWidth(320);
|
||||
}
|
||||
|
||||
this.ResetTextColour(member);
|
||||
ResetTextColour(member);
|
||||
}
|
||||
|
||||
if (list->Chocobo.TargetGlow != null) {
|
||||
@ -669,7 +683,7 @@ public class Plugin : IDalamudPlugin {
|
||||
var hasTimer = chocoboTimer != null && chocoboTimer->IsVisible();
|
||||
var hasTimerIcon = chocoboTimerIcon != null && chocoboTimerIcon->IsVisible();
|
||||
|
||||
if (this.Config.Alternate && this.Config.AlternateChocobo && (!this.Config.OnlyAlternateInCombat || inCombat) && !this._showDps) {
|
||||
if (this.Config is { Alternate: true, AlternateChocobo: true } && (!this.Config.OnlyAlternateInCombat || inCombat) && !this._showDps) {
|
||||
this.ResetMember(list, info, false, false);
|
||||
} else {
|
||||
if (hasTimer) {
|
||||
@ -686,15 +700,17 @@ public class Plugin : IDalamudPlugin {
|
||||
if (this.Config.Mode == MeterMode.Mana && member.MPGaugeBar != null) {
|
||||
var left = (AtkTextNode*) member.MPGaugeBar->GetTextNodeById(2);
|
||||
var right = (AtkTextNode*) member.MPGaugeBar->GetTextNodeById(3);
|
||||
var hasLeft = left != null && left->IsVisible();
|
||||
var hasRight = right != null && right->IsVisible();
|
||||
if (!hasLeft) {
|
||||
if (left == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!left->ParentNode->IsVisible() && !info.IsChocobo && InfoProxyCrossRealm.Instance()->IsInCrossRealmParty != 0) {
|
||||
if (info is { IsFullMember: false, IsChocobo: false } && InfoProxyCrossRealm.Instance()->IsInCrossRealmParty != 0) {
|
||||
var gauge = left->ParentNode;
|
||||
gauge->ToggleVisibility(true);
|
||||
left->ToggleVisibility(true);
|
||||
if (right != null) {
|
||||
right->ToggleVisibility(true);
|
||||
}
|
||||
|
||||
for (var sibling = left->NextSiblingNode; sibling != null; sibling = sibling->NextSiblingNode) {
|
||||
if (sibling->NodeId is not (6 or 7)) {
|
||||
@ -705,8 +721,14 @@ public class Plugin : IDalamudPlugin {
|
||||
}
|
||||
}
|
||||
|
||||
var hasLeft = left->IsVisible();
|
||||
var hasRight = right != null && right->IsVisible();
|
||||
if (!hasLeft) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.Config.Alternate && (!this.Config.OnlyAlternateInCombat || inCombat) && !this._showDps && info.ClassJob is { } classJob) {
|
||||
var shouldAlternate = this.Config.AlternateJobs.Contains(classJob);
|
||||
var shouldAlternate = info.IsFullMember && this.Config.AlternateJobs.Contains(classJob);
|
||||
if (shouldAlternate) {
|
||||
this.ResetMember(list, info, false, false);
|
||||
return;
|
||||
@ -775,4 +797,5 @@ public class ListInfo {
|
||||
public required int PartyListIndex { get; set; }
|
||||
public required uint? Mana { get; init; }
|
||||
public required byte? ClassJob { get; init; }
|
||||
public required bool IsFullMember { get; init; }
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user