fix: show dps for cross world
This commit is contained in:
parent
1f85158c68
commit
13c004dbb2
108
Plugin.cs
108
Plugin.cs
@ -106,7 +106,8 @@ public class Plugin : IDalamudPlugin {
|
|||||||
this.SaveConfig();
|
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.ContextMenu!.OnMenuOpened += this.MenuOpened;
|
||||||
|
|
||||||
this.GameInteropProvider!.InitializeFromAttributes(this);
|
this.GameInteropProvider!.InitializeFromAttributes(this);
|
||||||
@ -114,7 +115,8 @@ public class Plugin : IDalamudPlugin {
|
|||||||
|
|
||||||
public void Dispose() {
|
public void Dispose() {
|
||||||
this.ContextMenu.OnMenuOpened -= this.MenuOpened;
|
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.Commands.Dispose();
|
||||||
this.Ui.Dispose();
|
this.Ui.Dispose();
|
||||||
this.Client.Dispose();
|
this.Client.Dispose();
|
||||||
@ -393,7 +395,6 @@ public class Plugin : IDalamudPlugin {
|
|||||||
names.Sort((a, b) => a.PartyListIndex.CompareTo(b.PartyListIndex));
|
names.Sort((a, b) => a.PartyListIndex.CompareTo(b.PartyListIndex));
|
||||||
for (var i = 0; i < names.Count; i++) {
|
for (var i = 0; i < names.Count; i++) {
|
||||||
var info = names[i];
|
var info = names[i];
|
||||||
Plugin.Log.Info($"{info.Name} at {info.PartyListIndex}");
|
|
||||||
var lookupName = info.Name == playerName
|
var lookupName = info.Name == playerName
|
||||||
? "YOU"
|
? "YOU"
|
||||||
: info.Name;
|
: info.Name;
|
||||||
@ -522,56 +523,67 @@ public class Plugin : IDalamudPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private unsafe void ResetMembers(AddonPartyList* list) {
|
private unsafe void ResetMembers(AddonPartyList* list) {
|
||||||
var members = AgentHUD.Instance()->PartyMembers;
|
foreach (var member in list->PartyMembers) {
|
||||||
for (var i = 0; i < members.Length && i < list->PartyMembers.Length; i++) {
|
if (member.TargetGlow != null) {
|
||||||
var member = members[i];
|
member.TargetGlow->SetWidth(320);
|
||||||
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 {
|
if (list->Chocobo.TargetGlow != null) {
|
||||||
Name = name,
|
list->Chocobo.TargetGlow->SetWidth(220);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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) {
|
private unsafe string[] GetPartyNames(bool alliance) {
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var group = GroupManager.Instance()->GetGroup();
|
var group = GroupManager.Instance()->GetGroup();
|
||||||
if (group == null) {
|
if (group == null) {
|
||||||
return [];
|
return names.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
var length = group->PartyMembers.Length;
|
foreach (var member in group->PartyMembers) {
|
||||||
if (alliance) {
|
names.Add(member.NameString);
|
||||||
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) {
|
if (alliance) {
|
||||||
for (var j = 0; j < group->AllianceMembers.Length; j++) {
|
foreach (var member in group->AllianceMembers) {
|
||||||
var member = group->AllianceMembers[j];
|
names.Add(member.NameString);
|
||||||
members[i + j] = member.NameString;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return members;
|
return names.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
private unsafe void UpdateMember(
|
private unsafe void UpdateMember(
|
||||||
@ -632,10 +644,15 @@ public class Plugin : IDalamudPlugin {
|
|||||||
member.TargetGlow->PartId = 3;
|
member.TargetGlow->PartId = 3;
|
||||||
// member.TargetGlow->SetWidth(320);
|
// member.TargetGlow->SetWidth(320);
|
||||||
member.TargetGlow->SetWidth(
|
member.TargetGlow->SetWidth(
|
||||||
(ushort) Math.Round(320 * (denominator == 0
|
(ushort) Math.Clamp(
|
||||||
|
Math.Round(320 * (denominator == 0
|
||||||
? 1
|
? 1
|
||||||
: combatant.EncDps / denominator))
|
: combatant.EncDps / denominator)),
|
||||||
|
10,
|
||||||
|
320
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
member.TargetGlow->SetPositionShort(47, 21);
|
||||||
}
|
}
|
||||||
|
|
||||||
var inCombat = this.Condition[ConditionFlag.InCombat];
|
var inCombat = this.Condition[ConditionFlag.InCombat];
|
||||||
@ -670,6 +687,19 @@ public class Plugin : IDalamudPlugin {
|
|||||||
return;
|
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) {
|
if (this.Config.Alternate && (!this.Config.OnlyAlternateInCombat || inCombat) && !this._showDps && info.ClassJob is { } classJob) {
|
||||||
var shouldAlternate = this.Config.AlternateJobs.Contains(classJob);
|
var shouldAlternate = this.Config.AlternateJobs.Contains(classJob);
|
||||||
if (shouldAlternate) {
|
if (shouldAlternate) {
|
||||||
|
Loading…
Reference in New Issue
Block a user