Add options what to do when not on Home World

This commit is contained in:
Liza 2023-12-02 13:52:55 +01:00
parent 1cd1a2ede4
commit 576baf0175
Signed by: liza
GPG Key ID: 7199F8D727D55F67
4 changed files with 54 additions and 8 deletions

View File

@ -15,6 +15,7 @@ internal sealed class Configuration : IPluginConfiguration
public bool ReserveDifferentSealCountAtMaxRank { get; set; }
public int ReservedSealCountAtMaxRank { get; set; }
public int PauseAtRank { get; set; }
public EBehaviorOnOtherWorld BehaviorOnOtherWorld { get; set; } = EBehaviorOnOtherWorld.Warning;
/// <summary>
/// A config-only setting, not exposed in the UI.
@ -40,4 +41,11 @@ internal sealed class Configuration : IPluginConfiguration
return false;
}
public enum EBehaviorOnOtherWorld
{
None,
Warning,
DisableTurnIn,
}
}

View File

@ -82,7 +82,7 @@ public sealed partial class DeliverooPlugin : IDalamudPlugin
_iconCache = new IconCache(textureProvider);
_configWindow = new ConfigWindow(_pluginInterface, this, _configuration, _gcRewardsCache, _clientState, _pluginLog, _iconCache);
_windowSystem.AddWindow(_configWindow);
_turnInWindow = new TurnInWindow(this, _pluginInterface, _configuration, _condition, _gcRewardsCache, _configWindow, _iconCache);
_turnInWindow = new TurnInWindow(this, _pluginInterface, _configuration, _condition, _clientState, _gcRewardsCache, _configWindow, _iconCache);
_windowSystem.AddWindow(_turnInWindow);
_sealCaps = dataManager.GetExcelSheet<GrandCompanyRank>()!.Where(x => x.RowId > 0)
.ToDictionary(x => x.RowId, x => x.MaxSeals);

View File

@ -170,7 +170,9 @@ internal sealed class ConfigWindow : LImGui.LWindow
ImGui.SetCursorPosY(ImGui.GetCursorPosY() + 3);
}
bool addThis = ImGui.Selectable($"{item.Name}{(item.Limited ? $" {SeIconChar.Hyadelyn.ToIconString()}" : "")}##SelectVenture{item.IconId}");
bool addThis =
ImGui.Selectable(
$"{item.Name}{(item.Limited ? $" {SeIconChar.Hyadelyn.ToIconString()}" : "")}##SelectVenture{item.IconId}");
if (addThis || addFirst)
{
_configuration.ItemsAvailableForPurchase.Add(item.ItemId);
@ -244,7 +246,8 @@ internal sealed class ConfigWindow : LImGui.LWindow
}
ImGui.SameLine();
ImGuiComponents.HelpMarker("The default filter for all characters is 'Hide Gear Set Items', but you may want to override this to hide all Armoury Chest items (regardless of whether they're part of a gear set) e.g. for your main character.");
ImGuiComponents.HelpMarker(
"The default filter for all characters is 'Hide Gear Set Items', but you may want to override this to hide all Armoury Chest items (regardless of whether they're part of a gear set) e.g. for your main character.");
bool ignoreMinimumSealsToKeep = charConfiguration.IgnoreMinimumSealsToKeep;
if (ImGui.Checkbox("Ignore 'Minimum Seals to keep' setting", ref ignoreMinimumSealsToKeep))
@ -254,7 +257,8 @@ internal sealed class ConfigWindow : LImGui.LWindow
}
ImGui.SameLine();
ImGuiComponents.HelpMarker("When enabled, all GC seals will be spent. This is effectively the same as setting 'Minimum Seals to keep' to 0.");
ImGuiComponents.HelpMarker(
"When enabled, all GC seals will be spent. This is effectively the same as setting 'Minimum Seals to keep' to 0.");
ImGui.EndDisabled();
ImGui.Spacing();
@ -309,7 +313,8 @@ internal sealed class ConfigWindow : LImGui.LWindow
int reservedSealCount = _configuration.ReservedSealCount;
if (ImGui.InputInt("Minimum Seals to keep (e.g. for Squadron Missions)", ref reservedSealCount, 1000))
{
_configuration.ReservedSealCount = Math.Max(0, Math.Min((int)_plugin.GetMaxSealCap(), reservedSealCount));
_configuration.ReservedSealCount =
Math.Max(0, Math.Min((int)_plugin.GetMaxSealCap(), reservedSealCount));
Save();
}
@ -328,11 +333,14 @@ internal sealed class ConfigWindow : LImGui.LWindow
int reservedSealCountAtMaxRank = _configuration.ReservedSealCountAtMaxRank;
if (ImGui.InputInt("Minimum seals to keep at max rank", ref reservedSealCountAtMaxRank))
{
_configuration.ReservedSealCountAtMaxRank = Math.Max(0, Math.Min((int)_plugin.GetMaxSealCap(), reservedSealCountAtMaxRank));
_configuration.ReservedSealCountAtMaxRank = Math.Max(0,
Math.Min((int)_plugin.GetMaxSealCap(), reservedSealCountAtMaxRank));
Save();
}
ImGui.Unindent();
}
ImGui.EndDisabled();
ImGui.SetNextItemWidth(ImGuiHelpers.GlobalScale * 120);
@ -340,13 +348,24 @@ internal sealed class ConfigWindow : LImGui.LWindow
.Select(x => x == 1 ? (0, "---") : (x, $"Rank {x}"))
.ToList();
int pauseAtRank = Math.Max(rankUpComboValues.FindIndex(x => x.Rank == _configuration.PauseAtRank), 0);
if (ImGui.Combo("Pause when reaching selected FC Rank", ref pauseAtRank, rankUpComboValues.Select(x => x.Name).ToArray(),
if (ImGui.Combo("Pause when reaching selected FC Rank", ref pauseAtRank,
rankUpComboValues.Select(x => x.Name).ToArray(),
rankUpComboValues.Count))
{
_configuration.PauseAtRank = rankUpComboValues[pauseAtRank].Rank;
Save();
}
ImGui.SetNextItemWidth(ImGuiHelpers.GlobalScale * 120);
string[] behaviorOnOtherWorldNames = { "---", "Show Warning", "Disable Turn-In" };
int behaviorOnOtherWorld = (int)_configuration.BehaviorOnOtherWorld;
if (ImGui.Combo("Behavior when not on Home World", ref behaviorOnOtherWorld,
behaviorOnOtherWorldNames, behaviorOnOtherWorldNames.Length))
{
_configuration.BehaviorOnOtherWorld = (Configuration.EBehaviorOnOtherWorld)behaviorOnOtherWorld;
Save();
}
ImGui.EndTabItem();
}
}

View File

@ -44,17 +44,20 @@ internal sealed class TurnInWindow : LImGui.LWindow
private readonly DalamudPluginInterface _pluginInterface;
private readonly Configuration _configuration;
private readonly ICondition _condition;
private readonly IClientState _clientState;
private readonly GcRewardsCache _gcRewardsCache;
private readonly IconCache _iconCache;
public TurnInWindow(DeliverooPlugin plugin, DalamudPluginInterface pluginInterface, Configuration configuration,
ICondition condition, GcRewardsCache gcRewardsCache, ConfigWindow configWindow, IconCache iconCache)
ICondition condition, IClientState clientState, GcRewardsCache gcRewardsCache, ConfigWindow configWindow,
IconCache iconCache)
: base("GC Delivery###DeliverooTurnIn")
{
_plugin = plugin;
_pluginInterface = pluginInterface;
_configuration = configuration;
_condition = condition;
_clientState = clientState;
_gcRewardsCache = gcRewardsCache;
_iconCache = iconCache;
@ -93,6 +96,10 @@ internal sealed class TurnInWindow : LImGui.LWindow
private bool UseCharacterSpecificItemsToPurchase =>
_plugin.CharacterConfiguration is { OverrideItemsToPurchase: true };
private bool IsOnHomeWorld =>
_clientState.LocalPlayer == null ||
_clientState.LocalPlayer.HomeWorld.Id == _clientState.LocalPlayer.CurrentWorld.Id;
private IItemsToPurchase ItemsWrapper => UseCharacterSpecificItemsToPurchase
? new CharacterSpecificItemsToPurchase(_plugin.CharacterConfiguration!, _pluginInterface)
: new GlobalItemsToPurchase(_configuration, _pluginInterface);
@ -146,6 +153,12 @@ internal sealed class TurnInWindow : LImGui.LWindow
ImGui.TextColored(ImGuiColors.DalamudRed, "You do not have the required rank for Expert Delivery.");
return;
}
else if (_configuration.BehaviorOnOtherWorld == Configuration.EBehaviorOnOtherWorld.DisableTurnIn && !IsOnHomeWorld)
{
State = false;
ImGui.TextColored(ImGuiColors.DalamudRed, "You are not on your home world.");
return;
}
bool state = State;
if (ImGui.Checkbox("Handle GC turn ins/exchange automatically", ref state))
@ -160,6 +173,12 @@ internal sealed class TurnInWindow : LImGui.LWindow
}
else
{
if (_configuration.BehaviorOnOtherWorld == Configuration.EBehaviorOnOtherWorld.Warning && !IsOnHomeWorld)
{
ImGui.TextColored(ImGuiColors.DalamudRed,
"Turn-In disabled, you are not on your home world and will not earn FC points.");
}
if (Multiplier == 1m)
{
ImGui.TextColored(ImGuiColors.DalamudYellow, "You do not have an active seal buff.");