From 13c004dbb26829a4e622b50566c3acb9a2780d86 Mon Sep 17 00:00:00 2001 From: Anna Date: Thu, 1 Aug 2024 17:39:23 -0400 Subject: [PATCH] fix: show dps for cross world --- Plugin.cs | 126 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 78 insertions(+), 48 deletions(-) diff --git a/Plugin.cs b/Plugin.cs index b337132..cded992 100644 --- a/Plugin.cs +++ b/Plugin.cs @@ -106,7 +106,8 @@ public class Plugin : IDalamudPlugin { this.SaveConfig(); } - this.AddonLifecycle!.RegisterListener(AddonEvent.PostUpdate, "_PartyList", this.UpdateList); + this.AddonLifecycle!.RegisterListener(AddonEvent.PostRequestedUpdate, "_PartyList", this.UpdateList); + this.AddonLifecycle!.RegisterListener(AddonEvent.PreDraw, "_PartyList", this.UpdateList); this.ContextMenu!.OnMenuOpened += this.MenuOpened; this.GameInteropProvider!.InitializeFromAttributes(this); @@ -114,7 +115,8 @@ public class Plugin : IDalamudPlugin { public void Dispose() { this.ContextMenu.OnMenuOpened -= this.MenuOpened; - this.AddonLifecycle.UnregisterListener(AddonEvent.PostUpdate, "_PartyList", this.UpdateList); + this.AddonLifecycle.UnregisterListener(AddonEvent.PreDraw, "_PartyList", this.UpdateList); + this.AddonLifecycle.UnregisterListener(AddonEvent.PostRequestedUpdate, "_PartyList", this.UpdateList); this.Commands.Dispose(); this.Ui.Dispose(); this.Client.Dispose(); @@ -393,7 +395,6 @@ public class Plugin : IDalamudPlugin { names.Sort((a, b) => a.PartyListIndex.CompareTo(b.PartyListIndex)); for (var i = 0; i < names.Count; i++) { var info = names[i]; - Plugin.Log.Info($"{info.Name} at {info.PartyListIndex}"); var lookupName = info.Name == playerName ? "YOU" : info.Name; @@ -522,56 +523,67 @@ public class Plugin : IDalamudPlugin { } private unsafe void ResetMembers(AddonPartyList* list) { - var members = AgentHUD.Instance()->PartyMembers; - for (var i = 0; i < members.Length && i < list->PartyMembers.Length; i++) { - var member = members[i]; - var name = MemoryHelper.ReadStringNullTerminated((nint) member.Name); - var isChocobo = member.Object != null - && this.ClientState.LocalPlayer is { } player - && member.Object->GetObjectKind() == ObjectKind.BattleNpc - && member.Object->CompanionOwnerId == player.GameObjectId; - if (isChocobo) { - name += " (YOU)"; + foreach (var member in list->PartyMembers) { + if (member.TargetGlow != null) { + member.TargetGlow->SetWidth(320); } - - var info = new ListInfo { - Name = name, - IsChocobo = isChocobo, - Mana = member.Object != null ? member.Object->Mana : null, - PartyListIndex = i, - ClassJob = member.Object != null ? member.Object->ClassJob : null, - }; - - this.ResetMember(list, info, true, false); } + + if (list->Chocobo.TargetGlow != null) { + list->Chocobo.TargetGlow->SetWidth(220); + } + + list->OnRequestedUpdate(AtkStage.Instance()->GetNumberArrayData(), AtkStage.Instance()->GetStringArrayData()); + // var members = AgentHUD.Instance()->PartyMembers; + // for (var i = 0; i < members.Length && i < list->PartyMembers.Length; i++) { + // var member = members[i]; + // var name = MemoryHelper.ReadStringNullTerminated((nint) member.Name); + // var isChocobo = member.Object != null + // && this.ClientState.LocalPlayer is { } player + // && member.Object->GetObjectKind() == ObjectKind.BattleNpc + // && member.Object->CompanionOwnerId == player.GameObjectId; + // if (isChocobo) { + // name += " (YOU)"; + // } + // + // var info = new ListInfo { + // Name = name, + // IsChocobo = isChocobo, + // Mana = member.Object != null ? member.Object->Mana : null, + // PartyListIndex = i, + // ClassJob = member.Object != null ? member.Object->ClassJob : null, + // }; + // + // this.ResetMember(list, info, true, false); + // } } private unsafe string[] GetPartyNames(bool alliance) { - var group = GroupManager.Instance()->GetGroup(); - if (group == null) { - return []; - } - - var length = group->PartyMembers.Length; - if (alliance) { - length += group->AllianceMembers.Length; - } - - var members = new string[length]; - int i; - for (i = 0; i < group->PartyMembers.Length; i++) { - var member = group->PartyMembers[i]; - members[i] = member.NameString; - } - - if (alliance) { - for (var j = 0; j < group->AllianceMembers.Length; j++) { - var member = group->AllianceMembers[j]; - members[i + j] = member.NameString; + var names = new HashSet(); + var cross = InfoProxyCrossRealm.Instance(); + if (cross->IsInCrossRealmParty != 0) { + var crossGroup = cross->CrossRealmGroups[cross->LocalPlayerGroupIndex]; + foreach (var member in crossGroup.GroupMembers) { + names.Add(member.NameString); } } - return members; + var group = GroupManager.Instance()->GetGroup(); + if (group == null) { + return names.ToArray(); + } + + foreach (var member in group->PartyMembers) { + names.Add(member.NameString); + } + + if (alliance) { + foreach (var member in group->AllianceMembers) { + names.Add(member.NameString); + } + } + + return names.ToArray(); } private unsafe void UpdateMember( @@ -632,10 +644,15 @@ public class Plugin : IDalamudPlugin { member.TargetGlow->PartId = 3; // member.TargetGlow->SetWidth(320); member.TargetGlow->SetWidth( - (ushort) Math.Round(320 * (denominator == 0 - ? 1 - : combatant.EncDps / denominator)) + (ushort) Math.Clamp( + Math.Round(320 * (denominator == 0 + ? 1 + : combatant.EncDps / denominator)), + 10, + 320 + ) ); + member.TargetGlow->SetPositionShort(47, 21); } var inCombat = this.Condition[ConditionFlag.InCombat]; @@ -670,6 +687,19 @@ public class Plugin : IDalamudPlugin { return; } + if (!left->ParentNode->IsVisible() && !info.IsChocobo && InfoProxyCrossRealm.Instance()->IsInCrossRealmParty != 0) { + var gauge = left->ParentNode; + gauge->ToggleVisibility(true); + + for (var sibling = left->NextSiblingNode; sibling != null; sibling = sibling->NextSiblingNode) { + if (sibling->NodeId is not (6 or 7)) { + continue; + } + + sibling->ToggleVisibility(false); + } + } + if (this.Config.Alternate && (!this.Config.OnlyAlternateInCombat || inCombat) && !this._showDps && info.ClassJob is { } classJob) { var shouldAlternate = this.Config.AlternateJobs.Contains(classJob); if (shouldAlternate) {