fix: show dps for cross world
This commit is contained in:
parent
1f85158c68
commit
13c004dbb2
126
Plugin.cs
126
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<string>();
|
||||
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) {
|
||||
|
Loading…
Reference in New Issue
Block a user