From 9a23663c6780185c0a7d7182069e61b6389024f2 Mon Sep 17 00:00:00 2001 From: Liza Carvelli Date: Sat, 16 Sep 2023 16:19:08 +0200 Subject: [PATCH] Improve some conditions --- ARDiscard/GameData/ItemCache.cs | 14 +++++++++++++- ARDiscard/Windows/ConfigWindow.cs | 5 +++-- ARDiscard/Windows/DiscardWindow.cs | 2 +- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/ARDiscard/GameData/ItemCache.cs b/ARDiscard/GameData/ItemCache.cs index eda64d1..bd5172b 100644 --- a/ARDiscard/GameData/ItemCache.cs +++ b/ARDiscard/GameData/ItemCache.cs @@ -23,6 +23,7 @@ public sealed class ItemCache Rarity = item.Rarity, IsUnique = item.IsUnique, IsUntradable = item.IsUntradable, + IsIndisposable = item.IsIndisposable, Level = item.LevelEquip, UiCategory = item.ItemUICategory.Row, }; @@ -31,7 +32,12 @@ public sealed class ItemCache public IEnumerable AllItems => _items.Values; - public CachedItemInfo? GetItem(uint itemId) => _items[itemId]; + public CachedItemInfo? GetItem(uint itemId) + { + if (_items.TryGetValue(itemId, out var item)) + return item; + return null; + } public string GetItemName(uint itemId) { @@ -49,6 +55,12 @@ public sealed class ItemCache public required byte Rarity { get; init; } public required bool IsUnique { get; init; } public required bool IsUntradable { get; init; } + + /// + /// Whether this item can be discarded at all. "Discard" is greyed out e.g. for the preorder EXP earrings. + /// + public required bool IsIndisposable { get; init; } + public required uint UiCategory { get; init; } } } diff --git a/ARDiscard/Windows/ConfigWindow.cs b/ARDiscard/Windows/ConfigWindow.cs index 5d8639c..3678c70 100644 --- a/ARDiscard/Windows/ConfigWindow.cs +++ b/ARDiscard/Windows/ConfigWindow.cs @@ -65,7 +65,8 @@ public sealed class ConfigWindow : Window } ImGui.SameLine(ImGui.GetWindowWidth() - 115 * ImGuiHelpers.GlobalScale); - ImGui.BeginDisabled(!_clientState.IsLoggedIn || !_condition[ConditionFlag.NormalConditions] || + ImGui.BeginDisabled(!_clientState.IsLoggedIn || + !(_condition[ConditionFlag.NormalConditions] || _condition[ConditionFlag.Mounted]) || DiscardNowClicked == null); if (ImGui.Button("Preview Discards")) DiscardNowClicked!.Invoke(this, EventArgs.Empty); @@ -343,7 +344,7 @@ public sealed class ConfigWindow : Window if (_allItems == null) { _allItems = _itemCache.AllItems - .Where(x => !x.IsUnique && !x.IsUntradable) + .Where(x => x is { IsUnique: false, IsUntradable: false, IsIndisposable: false }) .Where(x => x.UiCategory != UiCategories.Currency && x.UiCategory != UiCategories.Crystals && x.UiCategory != UiCategories.Unobtainable) .Select(x => (x.ItemId, x.Name.ToString())) diff --git a/ARDiscard/Windows/DiscardWindow.cs b/ARDiscard/Windows/DiscardWindow.cs index ae3030d..c49879c 100644 --- a/ARDiscard/Windows/DiscardWindow.cs +++ b/ARDiscard/Windows/DiscardWindow.cs @@ -80,7 +80,7 @@ public sealed class DiscardWindow : Window ImGui.SameLine(ImGui.GetWindowWidth() - 160 * ImGuiHelpers.GlobalScale); ImGui.BeginDisabled(Locked || !_clientState.IsLoggedIn || - !_condition[ConditionFlag.NormalConditions] || + !(_condition[ConditionFlag.NormalConditions] || _condition[ConditionFlag.Mounted]) || _displayedItems.Count(x => x.Selected) == 0 || DiscardAllClicked == null); if (ImGui.Button("Discard all selected items"))