Add config to enable/disable recommendations when entering GC area

This commit is contained in:
Liza 2024-06-17 21:54:44 +02:00
parent 21e3f7c0a9
commit 6dd5148599
Signed by: liza
GPG Key ID: 7199F8D727D55F67
4 changed files with 67 additions and 6 deletions

View File

@ -8,6 +8,7 @@ internal sealed class Configuration : IPluginConfiguration
{ {
public int Version { get; set; } = 1; public int Version { get; set; } = 1;
public bool ShowRecommendationsWhenEnteringGcArea { get; set; } = true;
public List<EBaseParam> StatPriorityTanks { get; set; } = new(); public List<EBaseParam> StatPriorityTanks { get; set; } = new();
public List<EBaseParam> StatPriorityHealer { get; set; } = new(); public List<EBaseParam> StatPriorityHealer { get; set; } = new();
public List<EBaseParam> StatPriorityMelee { get; set; } = new(); public List<EBaseParam> StatPriorityMelee { get; set; } = new();

View File

@ -16,6 +16,7 @@ using Gearsetter.GameData;
using Gearsetter.Model; using Gearsetter.Model;
using Gearsetter.Windows; using Gearsetter.Windows;
using Lumina.Excel.GeneratedSheets; using Lumina.Excel.GeneratedSheets;
using GrandCompany = FFXIVClientStructs.FFXIV.Client.UI.Agent.GrandCompany;
namespace Gearsetter; namespace Gearsetter;
@ -32,6 +33,7 @@ public sealed class GearsetterPlugin : IDalamudPlugin
private readonly Configuration _configuration; private readonly Configuration _configuration;
private readonly GameDataHolder _gameDataHolder; private readonly GameDataHolder _gameDataHolder;
private readonly EquipmentBrowserWindow _equipmentBrowserWindow; private readonly EquipmentBrowserWindow _equipmentBrowserWindow;
private readonly ConfigWindow _configWindow;
private readonly IReadOnlyDictionary<byte, DalamudLinkPayload> _linkPayloads; private readonly IReadOnlyDictionary<byte, DalamudLinkPayload> _linkPayloads;
private readonly Dictionary<EClassJob, byte> _classJobToArrayIndex; private readonly Dictionary<EClassJob, byte> _classJobToArrayIndex;
@ -59,6 +61,8 @@ public sealed class GearsetterPlugin : IDalamudPlugin
_gameDataHolder = new GameDataHolder(dataManager, _configuration); _gameDataHolder = new GameDataHolder(dataManager, _configuration);
_equipmentBrowserWindow = new EquipmentBrowserWindow(this, _gameDataHolder, _clientState, _chatGui); _equipmentBrowserWindow = new EquipmentBrowserWindow(this, _gameDataHolder, _clientState, _chatGui);
_windowSystem.AddWindow(_equipmentBrowserWindow); _windowSystem.AddWindow(_equipmentBrowserWindow);
_configWindow = new ConfigWindow(_pluginInterface, _configuration);
_windowSystem.AddWindow(_configWindow);
_commandManager.AddHandler("/gup", new CommandInfo(ShowUpgrades) _commandManager.AddHandler("/gup", new CommandInfo(ShowUpgrades)
{ {
@ -72,17 +76,33 @@ public sealed class GearsetterPlugin : IDalamudPlugin
.ToDictionary(x => (byte)x, x => _pluginInterface.AddChatLinkHandler((byte)x, ChangeGearset)).AsReadOnly(); .ToDictionary(x => (byte)x, x => _pluginInterface.AddChatLinkHandler((byte)x, ChangeGearset)).AsReadOnly();
_clientState.TerritoryChanged += TerritoryChanged; _clientState.TerritoryChanged += TerritoryChanged;
_pluginInterface.UiBuilder.Draw += _windowSystem.Draw; _pluginInterface.UiBuilder.Draw += _windowSystem.Draw;
_pluginInterface.UiBuilder.OpenMainUi += _equipmentBrowserWindow.Toggle;
_pluginInterface.UiBuilder.OpenConfigUi += _configWindow.Toggle;
_classJobToArrayIndex = dataManager.GetExcelSheet<ClassJob>()! _classJobToArrayIndex = dataManager.GetExcelSheet<ClassJob>()!
.Where(x => x.RowId > 0 && Enum.IsDefined(typeof(EClassJob), x.RowId)) .Where(x => x.RowId > 0 && Enum.IsDefined(typeof(EClassJob), x.RowId))
.ToDictionary(x => (EClassJob)x.RowId, x => (byte)x.ExpArrayIndex); .ToDictionary(x => (EClassJob)x.RowId, x => (byte)x.ExpArrayIndex);
} }
private void TerritoryChanged(ushort territory) private unsafe void TerritoryChanged(ushort territory)
{ {
if (territory == 128) try
{
var playerState = PlayerState.Instance();
if (playerState == null)
return;
var grandCompany = (GrandCompany)playerState->GrandCompany;
if ((grandCompany == GrandCompany.Maelstrom && territory == 128) ||
(grandCompany == GrandCompany.TwinAdder && territory == 132) ||
(grandCompany == GrandCompany.ImmortalFlames && territory == 130))
ShowUpgrades(); ShowUpgrades();
} }
catch (Exception e)
{
_pluginLog.Warning(e, "Could not show upgrades when entering Grand Company area.");
}
}
private void ToggleEquipmentBrowser(string command, string arguments) private void ToggleEquipmentBrowser(string command, string arguments)
@ -312,6 +332,8 @@ public sealed class GearsetterPlugin : IDalamudPlugin
public void Dispose() public void Dispose()
{ {
_pluginInterface.UiBuilder.OpenConfigUi -= _configWindow.Toggle;
_pluginInterface.UiBuilder.OpenMainUi -= _equipmentBrowserWindow.Toggle;
_pluginInterface.UiBuilder.Draw -= _windowSystem.Draw; _pluginInterface.UiBuilder.Draw -= _windowSystem.Draw;
_clientState.TerritoryChanged -= TerritoryChanged; _clientState.TerritoryChanged -= TerritoryChanged;
_pluginInterface.RemoveChatLinkHandler(); _pluginInterface.RemoveChatLinkHandler();

View File

@ -20,9 +20,18 @@ internal sealed record EquipmentItem(Item Item, bool Hq)
public int PrimaryStat { get; init; } = -1; public int PrimaryStat { get; init; } = -1;
public int Damage => ClassJob.DealsMagicDamage() public int Damage
? Item.DamageMag + Stats.Get(EBaseParam.DamageMag) {
: Item.DamagePhys + Stats.Get(EBaseParam.DamagePhys); get
{
if (ClassJob.DealsMagicDamage())
return Item.DamageMag + Stats.Get(EBaseParam.DamageMag);
else if (ClassJob.DealsPhysicalDamage())
return Item.DamagePhys + Stats.Get(EBaseParam.DamagePhys);
else
return 0;
}
}
public bool HasAnyStat(params EBaseParam[] substats) public bool HasAnyStat(params EBaseParam[] substats)
{ {

View File

@ -0,0 +1,29 @@
using Dalamud.Interface.Windowing;
using Dalamud.Plugin;
using ImGuiNET;
namespace Gearsetter.Windows;
internal sealed class ConfigWindow : Window
{
private readonly DalamudPluginInterface _pluginInterface;
private readonly Configuration _configuration;
public ConfigWindow(DalamudPluginInterface pluginInterface, Configuration configuration)
: base("Gearsetter - Config###GearsetterConfig", ImGuiWindowFlags.AlwaysAutoResize)
{
_pluginInterface = pluginInterface;
_configuration = configuration;
}
public override void Draw()
{
bool showRecommendationsWhenEnteringGcArea = _configuration.ShowRecommendationsWhenEnteringGcArea;
if (ImGui.Checkbox("Show recommendations when entering Grand Company area",
ref showRecommendationsWhenEnteringGcArea))
{
_configuration.ShowRecommendationsWhenEnteringGcArea = showRecommendationsWhenEnteringGcArea;
_pluginInterface.SavePluginConfig(_configuration);
}
}
}