feat: allow specifying specific jobs to alternate
This commit is contained in:
parent
07b62ba03b
commit
5b9d07e1bb
@ -17,7 +17,9 @@ public class Configuration : IPluginConfiguration {
|
|||||||
public int BarMulBlue = 100;
|
public int BarMulBlue = 100;
|
||||||
public MeterMode Mode = MeterMode.Mana;
|
public MeterMode Mode = MeterMode.Mana;
|
||||||
public bool Alternate = true;
|
public bool Alternate = true;
|
||||||
|
public List<uint> AlternateJobs = [];
|
||||||
public bool ManaModeAlternateOnlyManaUsers = true;
|
public bool ManaModeAlternateOnlyManaUsers = true;
|
||||||
|
public bool AlternateChocobo = true;
|
||||||
public float AlternateSeconds = 3.0f;
|
public float AlternateSeconds = 3.0f;
|
||||||
public bool OnlyAlternateInCombat = true;
|
public bool OnlyAlternateInCombat = true;
|
||||||
public uint TextColour = 0xEDFFEC;
|
public uint TextColour = 0xEDFFEC;
|
||||||
|
14
Plugin.cs
14
Plugin.cs
@ -74,7 +74,7 @@ public class Plugin : IDalamudPlugin {
|
|||||||
[Signature("E8 ?? ?? ?? ?? E9 ?? ?? ?? ?? FE C2")]
|
[Signature("E8 ?? ?? ?? ?? E9 ?? ?? ?? ?? FE C2")]
|
||||||
internal unsafe delegate* unmanaged<byte*, byte, void> PlaySound;
|
internal unsafe delegate* unmanaged<byte*, byte, void> PlaySound;
|
||||||
|
|
||||||
private readonly byte[] _manaUsers = [
|
internal readonly byte[] ManaUsers = [
|
||||||
6, // cnj
|
6, // cnj
|
||||||
7, // thm
|
7, // thm
|
||||||
19, // pld
|
19, // pld
|
||||||
@ -100,6 +100,12 @@ public class Plugin : IDalamudPlugin {
|
|||||||
this.Ui = new PluginUi(this);
|
this.Ui = new PluginUi(this);
|
||||||
this.Commands = new Commands(this);
|
this.Commands = new Commands(this);
|
||||||
|
|
||||||
|
if (this.Config.ManaModeAlternateOnlyManaUsers) {
|
||||||
|
this.Config.ManaModeAlternateOnlyManaUsers = false;
|
||||||
|
this.Config.AlternateJobs.AddRange(this.ManaUsers.Select(cj => (uint) cj));
|
||||||
|
this.SaveConfig();
|
||||||
|
}
|
||||||
|
|
||||||
this.AddonLifecycle!.RegisterListener(AddonEvent.PostUpdate, "_PartyList", this.UpdateList);
|
this.AddonLifecycle!.RegisterListener(AddonEvent.PostUpdate, "_PartyList", this.UpdateList);
|
||||||
this.ContextMenu!.OnMenuOpened += this.MenuOpened;
|
this.ContextMenu!.OnMenuOpened += this.MenuOpened;
|
||||||
|
|
||||||
@ -630,7 +636,7 @@ public class Plugin : IDalamudPlugin {
|
|||||||
var hasTimer = chocoboTimer != null && chocoboTimer->IsVisible();
|
var hasTimer = chocoboTimer != null && chocoboTimer->IsVisible();
|
||||||
var hasTimerIcon = chocoboTimerIcon != null && chocoboTimerIcon->IsVisible();
|
var hasTimerIcon = chocoboTimerIcon != null && chocoboTimerIcon->IsVisible();
|
||||||
|
|
||||||
if (this.Config.Alternate && (!this.Config.OnlyAlternateInCombat || inCombat) && !this._showDps) {
|
if (this.Config.Alternate && this.Config.AlternateChocobo && (!this.Config.OnlyAlternateInCombat || inCombat) && !this._showDps) {
|
||||||
this.ResetMember(list, info, false, false);
|
this.ResetMember(list, info, false, false);
|
||||||
} else {
|
} else {
|
||||||
if (hasTimer) {
|
if (hasTimer) {
|
||||||
@ -654,8 +660,8 @@ public class Plugin : IDalamudPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
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 isCaster = Array.IndexOf(this._manaUsers, classJob) != -1;
|
var shouldAlternate = this.Config.AlternateJobs.Contains(classJob);
|
||||||
if (!this.Config.ManaModeAlternateOnlyManaUsers || isCaster) {
|
if (shouldAlternate) {
|
||||||
this.ResetMember(list, info, false, false);
|
this.ResetMember(list, info, false, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
51
PluginUi.cs
51
PluginUi.cs
@ -3,6 +3,7 @@ using System.Text;
|
|||||||
using Dalamud.Interface.Utility;
|
using Dalamud.Interface.Utility;
|
||||||
using FFXIVClientStructs.FFXIV.Client.UI;
|
using FFXIVClientStructs.FFXIV.Client.UI;
|
||||||
using ImGuiNET;
|
using ImGuiNET;
|
||||||
|
using Lumina.Excel.GeneratedSheets;
|
||||||
|
|
||||||
namespace PartyDamage;
|
namespace PartyDamage;
|
||||||
|
|
||||||
@ -10,9 +11,16 @@ public class PluginUi : IDisposable {
|
|||||||
private Plugin Plugin { get; }
|
private Plugin Plugin { get; }
|
||||||
internal bool Visible;
|
internal bool Visible;
|
||||||
|
|
||||||
|
private List<ClassJob> Jobs { get; }
|
||||||
|
|
||||||
public PluginUi(Plugin plugin) {
|
public PluginUi(Plugin plugin) {
|
||||||
this.Plugin = plugin;
|
this.Plugin = plugin;
|
||||||
|
|
||||||
|
this.Jobs = [.. this.Plugin.DataManager.GetExcelSheet<ClassJob>()!
|
||||||
|
.Where(cj => cj.RowId != 0 && !string.IsNullOrWhiteSpace(cj.Name))
|
||||||
|
.OrderBy(cj => cj.Role)
|
||||||
|
.ThenBy(cj => cj.RowId)];
|
||||||
|
|
||||||
this.Plugin.Interface.UiBuilder.Draw += this.Draw;
|
this.Plugin.Interface.UiBuilder.Draw += this.Draw;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,7 +127,48 @@ public class PluginUi : IDisposable {
|
|||||||
|
|
||||||
using (ImGuiHelper.DisabledUnless(this.Plugin.Config is { Alternate: true, Mode: MeterMode.Mana })) {
|
using (ImGuiHelper.DisabledUnless(this.Plugin.Config is { Alternate: true, Mode: MeterMode.Mana })) {
|
||||||
anyChanged |= ImGui.Checkbox("Only alternate when in combat", ref this.Plugin.Config.OnlyAlternateInCombat);
|
anyChanged |= ImGui.Checkbox("Only alternate when in combat", ref this.Plugin.Config.OnlyAlternateInCombat);
|
||||||
anyChanged |= ImGui.Checkbox("Only alternate on jobs that use mana", ref this.Plugin.Config.ManaModeAlternateOnlyManaUsers);
|
if (ImGui.TreeNodeEx("Jobs to alternate")) {
|
||||||
|
using var treePop = new OnDispose(ImGui.TreePop);
|
||||||
|
|
||||||
|
if (ImGui.Button("All")) {
|
||||||
|
anyChanged = true;
|
||||||
|
this.Plugin.Config.AlternateJobs.Clear();
|
||||||
|
this.Plugin.Config.AlternateChocobo = true;
|
||||||
|
this.Plugin.Config.AlternateJobs.AddRange(this.Jobs.Select(cj => cj.RowId));
|
||||||
|
}
|
||||||
|
|
||||||
|
ImGui.SameLine();
|
||||||
|
|
||||||
|
if (ImGui.Button("None")) {
|
||||||
|
this.Plugin.Config.AlternateJobs.Clear();
|
||||||
|
this.Plugin.Config.AlternateChocobo = false;
|
||||||
|
anyChanged = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
ImGui.SameLine();
|
||||||
|
|
||||||
|
if (ImGui.Button("Mana users")) {
|
||||||
|
this.Plugin.Config.AlternateJobs.Clear();
|
||||||
|
this.Plugin.Config.AlternateChocobo = false;
|
||||||
|
this.Plugin.Config.AlternateJobs.AddRange(this.Plugin.ManaUsers.Select(cj => (uint) cj));
|
||||||
|
anyChanged = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var job in this.Jobs) {
|
||||||
|
var alternate = this.Plugin.Config.AlternateJobs.Contains(job.RowId);
|
||||||
|
if (ImGui.Checkbox(job.Name, ref alternate)) {
|
||||||
|
anyChanged = true;
|
||||||
|
|
||||||
|
if (alternate && !this.Plugin.Config.AlternateJobs.Contains(job.RowId)) {
|
||||||
|
this.Plugin.Config.AlternateJobs.Add(job.RowId);
|
||||||
|
} else {
|
||||||
|
this.Plugin.Config.AlternateJobs.Remove(job.RowId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
anyChanged |= ImGui.Checkbox("Chocobo", ref this.Plugin.Config.AlternateChocobo);
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui.Spacing();
|
ImGui.Spacing();
|
||||||
|
Loading…
Reference in New Issue
Block a user