Add option for a (lower) reserved seal cap at max GC rank
This commit is contained in:
parent
afd7cab940
commit
fc31d8041c
@ -11,7 +11,9 @@ internal sealed class Configuration : IPluginConfiguration
|
||||
public List<uint> ItemsAvailableForPurchase { get; set; } = new();
|
||||
public List<PurchasePriority> ItemsToPurchase { get; set; } = new();
|
||||
|
||||
public int ReservedSealCount { get; set; } = 0;
|
||||
public int ReservedSealCount { get; set; }
|
||||
public bool ReserveDifferentSealCountAtMaxRank { get; set; }
|
||||
public int ReservedSealCountAtMaxRank { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// A config-only setting, not exposed in the UI.
|
||||
|
@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net7.0-windows</TargetFramework>
|
||||
<Version>2.11</Version>
|
||||
<Version>2.12</Version>
|
||||
<LangVersion>11.0</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
|
||||
|
@ -11,7 +11,7 @@ partial class DeliverooPlugin
|
||||
{
|
||||
private void InteractWithQuartermaster(GameObject personnelOfficer, GameObject quartermaster)
|
||||
{
|
||||
if (GetCurrentSealCount() < _configuration.ReservedSealCount)
|
||||
if (GetCurrentSealCount() < EffectiveReservedSealCount)
|
||||
{
|
||||
CurrentStage = Stage.RequestStop;
|
||||
return;
|
||||
@ -132,7 +132,7 @@ partial class DeliverooPlugin
|
||||
if (itemId == item.ItemId)
|
||||
{
|
||||
_pluginLog.Information($"Selecting item {itemId}, {i}");
|
||||
long toBuy = (GetCurrentSealCount() - _configuration.ReservedSealCount) / item.SealCost;
|
||||
long toBuy = (GetCurrentSealCount() - EffectiveReservedSealCount) / item.SealCost;
|
||||
toBuy = Math.Min(toBuy, item.EffectiveLimit - GetItemCount(item.ItemId));
|
||||
|
||||
if (item.ItemId != ItemIds.Venture && !_configuration.IgnoreCertainLimitations)
|
||||
|
@ -11,7 +11,6 @@ using FFXIVClientStructs.FFXIV.Client.Game.Control;
|
||||
using FFXIVClientStructs.FFXIV.Client.Game.UI;
|
||||
using FFXIVClientStructs.FFXIV.Client.UI.Agent;
|
||||
using FFXIVClientStructs.FFXIV.Common.Math;
|
||||
using FFXIVClientStructs.FFXIV.Component.GUI;
|
||||
|
||||
namespace Deliveroo;
|
||||
|
||||
@ -96,6 +95,8 @@ partial class DeliverooPlugin
|
||||
|
||||
private uint GetSealCap() => _sealCaps.TryGetValue(GetGrandCompanyRank(), out var cap) ? cap : 0;
|
||||
|
||||
public uint GetMaxSealCap() => _sealCaps[11];
|
||||
|
||||
public unsafe int GetItemCount(uint itemId)
|
||||
{
|
||||
InventoryManager* inventoryManager = InventoryManager.Instance();
|
||||
|
@ -86,8 +86,7 @@ partial class DeliverooPlugin
|
||||
_turnInWindow.State = false;
|
||||
CurrentStage = Stage.RequestStop;
|
||||
}
|
||||
else if (GetCurrentSealCount() <=
|
||||
_configuration.ReservedSealCount + GetNextItemToPurchase()!.SealCost)
|
||||
else if (GetCurrentSealCount() <= EffectiveReservedSealCount + GetNextItemToPurchase()!.SealCost)
|
||||
{
|
||||
_turnInWindow.State = false;
|
||||
CurrentStage = Stage.RequestStop;
|
||||
|
@ -31,7 +31,7 @@ partial class DeliverooPlugin
|
||||
addonSelectYesNo->AtkUnitBase.FireCallbackInt(0);
|
||||
|
||||
var nextItem = GetNextItemToPurchase(item);
|
||||
if (nextItem != null && GetCurrentSealCount() >= _configuration.ReservedSealCount + nextItem.SealCost)
|
||||
if (nextItem != null && GetCurrentSealCount() >= EffectiveReservedSealCount + nextItem.SealCost)
|
||||
CurrentStage = Stage.SelectRewardTier;
|
||||
else
|
||||
CurrentStage = Stage.CloseGcExchange;
|
||||
|
@ -118,6 +118,11 @@ public sealed partial class DeliverooPlugin : IDalamudPlugin
|
||||
}
|
||||
}
|
||||
|
||||
public int EffectiveReservedSealCount =>
|
||||
_configuration.ReserveDifferentSealCountAtMaxRank && GetSealCap() == GetMaxSealCap()
|
||||
? _configuration.ReservedSealCountAtMaxRank
|
||||
: _configuration.ReservedSealCount;
|
||||
|
||||
private void Login()
|
||||
{
|
||||
try
|
||||
@ -205,7 +210,7 @@ public sealed partial class DeliverooPlugin : IDalamudPlugin
|
||||
|
||||
|
||||
var nextItem = GetNextItemToPurchase();
|
||||
if (nextItem != null && GetCurrentSealCount() >= _configuration.ReservedSealCount + nextItem.SealCost)
|
||||
if (nextItem != null && GetCurrentSealCount() >= EffectiveReservedSealCount + nextItem.SealCost)
|
||||
CurrentStage = Stage.TargetQuartermaster;
|
||||
|
||||
if (_gameGui.TryGetAddonByName<AddonGrandCompanySupplyList>("GrandCompanySupplyList", out var gcSupplyList) &&
|
||||
|
@ -39,12 +39,12 @@ internal sealed class ConfigWindow : Window
|
||||
|
||||
_itemLookup = _gcRewardsCache.RewardLookup;
|
||||
|
||||
Size = new Vector2(420, 300);
|
||||
SizeCondition = ImGuiCond.Appearing;
|
||||
Size = new Vector2(440, 300);
|
||||
SizeCondition = ImGuiCond.FirstUseEver;
|
||||
|
||||
SizeConstraints = new WindowSizeConstraints
|
||||
{
|
||||
MinimumSize = new Vector2(420, 300),
|
||||
MinimumSize = new Vector2(440, 300),
|
||||
MaximumSize = new Vector2(9999, 9999),
|
||||
};
|
||||
}
|
||||
@ -261,14 +261,36 @@ internal sealed class ConfigWindow : Window
|
||||
{
|
||||
if (ImGui.BeginTabItem("Additional Settings"))
|
||||
{
|
||||
ImGui.SetNextItemWidth(ImGuiHelpers.GlobalScale * 100);
|
||||
ImGui.SetNextItemWidth(ImGuiHelpers.GlobalScale * 120);
|
||||
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(90_000, reservedSealCount));
|
||||
_configuration.ReservedSealCount = Math.Max(0, Math.Min((int)_plugin.GetMaxSealCap(), reservedSealCount));
|
||||
Save();
|
||||
}
|
||||
|
||||
ImGui.BeginDisabled(reservedSealCount <= 0);
|
||||
bool reserveDifferentSealCountAtMaxRank = _configuration.ReserveDifferentSealCountAtMaxRank;
|
||||
if (ImGui.Checkbox("Use a different amount at max rank", ref reserveDifferentSealCountAtMaxRank))
|
||||
{
|
||||
_configuration.ReserveDifferentSealCountAtMaxRank = reserveDifferentSealCountAtMaxRank;
|
||||
Save();
|
||||
}
|
||||
|
||||
if (reserveDifferentSealCountAtMaxRank)
|
||||
{
|
||||
ImGui.Indent();
|
||||
ImGui.SetNextItemWidth(ImGuiHelpers.GlobalScale * 100);
|
||||
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));
|
||||
Save();
|
||||
}
|
||||
ImGui.Unindent();
|
||||
}
|
||||
ImGui.EndDisabled();
|
||||
|
||||
ImGui.EndTabItem();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user