diff --git a/Deliveroo/Deliveroo.csproj b/Deliveroo/Deliveroo.csproj index 4279325..08796ae 100644 --- a/Deliveroo/Deliveroo.csproj +++ b/Deliveroo/Deliveroo.csproj @@ -1,6 +1,6 @@ - + - 5.5 + 6.0 dist diff --git a/Deliveroo/DeliverooPlugin.cs b/Deliveroo/DeliverooPlugin.cs index b9c3d5f..b82b557 100644 --- a/Deliveroo/DeliverooPlugin.cs +++ b/Deliveroo/DeliverooPlugin.cs @@ -218,11 +218,11 @@ public sealed partial class DeliverooPlugin : IDalamudPlugin { if (CharacterConfiguration.CachedPlayerName != _clientState.LocalPlayer!.Name.ToString() || CharacterConfiguration.CachedWorldName != - _clientState.LocalPlayer.HomeWorld.GameData!.Name.ToString()) + _clientState.LocalPlayer.HomeWorld.Value.Name.ToString()) { CharacterConfiguration.CachedPlayerName = _clientState.LocalPlayer!.Name.ToString(); CharacterConfiguration.CachedWorldName = - _clientState.LocalPlayer.HomeWorld.GameData!.Name.ToString(); + _clientState.LocalPlayer.HomeWorld.Value.Name.ToString(); CharacterConfiguration.Save(_pluginInterface); } @@ -242,7 +242,7 @@ public sealed partial class DeliverooPlugin : IDalamudPlugin } } - private void Logout() + private void Logout(int type, int code) { CharacterConfiguration = null; } diff --git a/Deliveroo/GameData/GameStrings.cs b/Deliveroo/GameData/GameStrings.cs index 21e84f2..81fc40d 100644 --- a/Deliveroo/GameData/GameStrings.cs +++ b/Deliveroo/GameData/GameStrings.cs @@ -1,13 +1,12 @@ -using System; -using System.Data; +using System.Data; using System.Diagnostics.CodeAnalysis; using System.Text.RegularExpressions; using Dalamud.Game.Text; using Dalamud.Plugin.Services; using LLib; using Lumina.Excel; -using Lumina.Excel.CustomSheets; -using Lumina.Excel.GeneratedSheets; +using Lumina.Excel.Sheets; +using Lumina.Text.ReadOnly; namespace Deliveroo.GameData; @@ -27,7 +26,7 @@ internal sealed class GameStrings dataManager.GetString(102434, addon => addon.Text, pluginLog)?.ReplaceLineEndings("") ?? throw new ConstraintException($"Unable to resolve {nameof(TradeHighQualityItem)}"); - var rankUpFc = dataManager.GetExcelSheet()!.GetRow(3123)!; + var rankUpFc = dataManager.GetExcelSheet().GetRow(3123); RankUpFc = rankUpFc.GetRegex(logMessage => logMessage.Text, pluginLog) ?? throw new ConstraintException($"Unable to resolve {nameof(RankUpFc)}"); RankUpFcType = (XivChatType)rankUpFc.LogKind; @@ -43,7 +42,14 @@ internal sealed class GameStrings [Sheet("custom/000/ComDefGrandCompanyOfficer_00073")] [SuppressMessage("Performance", "CA1812")] - private sealed class ComDefGrandCompanyOfficer : QuestDialogueText + private readonly struct ComDefGrandCompanyOfficer(ExcelPage page, uint offset, uint row) : IQuestDialogueText, IExcelRow { - } + public uint RowId => row; + + public ReadOnlySeString Key => page.ReadString(offset, offset); + public ReadOnlySeString Value => page.ReadString(offset + 4, offset); + + static ComDefGrandCompanyOfficer IExcelRow.Create(ExcelPage page, uint offset, uint row) => + new(page, offset, row); +} } diff --git a/Deliveroo/GameData/GcRewardsCache.cs b/Deliveroo/GameData/GcRewardsCache.cs index a310b3e..b568174 100644 --- a/Deliveroo/GameData/GcRewardsCache.cs +++ b/Deliveroo/GameData/GcRewardsCache.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using System.Linq; using Dalamud.Plugin.Services; -using Lumina.Excel.GeneratedSheets; +using Lumina.Excel.Sheets; using GrandCompany = FFXIVClientStructs.FFXIV.Client.UI.Agent.GrandCompany; namespace Deliveroo.GameData; @@ -10,31 +10,32 @@ internal sealed class GcRewardsCache { public GcRewardsCache(IDataManager dataManager) { - var categories = dataManager.GetExcelSheet()! + var categories = dataManager.GetExcelSheet() .Where(x => x.RowId > 0) .ToDictionary(x => x.RowId, x => - (GrandCompany: (GrandCompany)x.GrandCompany.Row, + (GrandCompany: (GrandCompany)x.GrandCompany.RowId, Tier: (RewardTier)x.Tier, SubCategory: (RewardSubCategory)x.SubCategory)); - Rewards = dataManager.GetExcelSheet()! - .Where(x => x.RowId > 0 && x.Item.Row > 0) + Rewards = dataManager.GetSubrowExcelSheet() + .SelectMany(x => x) + .Where(x => x.RowId > 0 && x.Item.RowId > 0) .GroupBy(item => { var category = categories[item.RowId]; return new { - ItemId = item.Item.Row, - Name = item.Item.Value!.Name.ToString(), - IconId = item.Item.Row == ItemIds.Venture ? 25917 : item.Item.Value!.Icon, + ItemId = item.Item.RowId, + Name = item.Item.Value.Name.ToString(), + IconId = item.Item.RowId == ItemIds.Venture ? 25917 : item.Item.Value.Icon, category.Tier, category.SubCategory, - RequiredRank = item.RequiredGrandCompanyRank.Row, - item.Item!.Value.StackSize, + RequiredRank = item.RequiredGrandCompanyRank.RowId, + item.Item.Value.StackSize, SealCost = item.CostGCSeals, - InventoryLimit = item.Item.Value!.IsUnique ? 1 - : item.Item.Row == ItemIds.Venture ? item.Item.Value!.StackSize + InventoryLimit = item.Item.Value.IsUnique ? 1 + : item.Item.RowId == ItemIds.Venture ? item.Item.Value.StackSize : int.MaxValue, }; }) diff --git a/Deliveroo/GameData/ItemCache.cs b/Deliveroo/GameData/ItemCache.cs index 4a9fcdb..a340722 100644 --- a/Deliveroo/GameData/ItemCache.cs +++ b/Deliveroo/GameData/ItemCache.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; using Dalamud.Plugin.Services; -using Lumina.Excel.GeneratedSheets; +using Lumina.Excel.Sheets; namespace Deliveroo.GameData; @@ -10,7 +10,7 @@ internal sealed class ItemCache public ItemCache(IDataManager dataManager) { - foreach (var item in dataManager.GetExcelSheet()!) + foreach (var item in dataManager.GetExcelSheet()) { string name = item.Name.ToString(); if (string.IsNullOrWhiteSpace(name)) @@ -19,7 +19,7 @@ internal sealed class ItemCache if (_itemNamesToIds.TryGetValue(name, out HashSet? itemIds)) itemIds.Add(item.RowId); else - _itemNamesToIds.Add(name, new HashSet{item.RowId}); + _itemNamesToIds.Add(name, [item.RowId]); } } diff --git a/Deliveroo/GameFunctions.cs b/Deliveroo/GameFunctions.cs index a8cf5a3..cd23632 100644 --- a/Deliveroo/GameFunctions.cs +++ b/Deliveroo/GameFunctions.cs @@ -15,8 +15,10 @@ 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.Excel; using Lumina.Excel; -using Lumina.Excel.GeneratedSheets; +using Lumina.Excel.Sheets; +using Lumina.Text.ReadOnly; using GrandCompany = FFXIVClientStructs.FFXIV.Client.UI.Agent.GrandCompany; namespace Deliveroo; @@ -41,7 +43,7 @@ internal sealed class GameFunctions : IDisposable _pluginLog = pluginLog; - _gcRankInfo = dataManager.GetExcelSheet()!.Where(x => x.RowId > 0) + _gcRankInfo = dataManager.GetExcelSheet().Where(x => x.RowId > 0) .ToDictionary(x => x.RowId, x => new GcRankInfo { NameTwinAddersMale = ExtractRankName(dataManager, x.RowId, r => r.Singular), @@ -53,7 +55,7 @@ internal sealed class GameFunctions : IDisposable ExtractRankName(dataManager, x.RowId, r => r.Singular), MaxSeals = x.MaxSeals, RequiredSeals = x.RequiredSeals, - RequiredHuntingLog = x.Unknown10, + RequiredHuntingLog = x.Unknown0, }) .AsReadOnly(); @@ -61,14 +63,14 @@ internal sealed class GameFunctions : IDisposable _clientState.TerritoryChanged += TerritoryChanged; } - private static string ExtractRankName(IDataManager dataManager, uint rankId, Func func) - where T : ExcelRow + private static string ExtractRankName(IDataManager dataManager, uint rankId, Func func) + where T : struct, IExcelRow { - return func(dataManager.GetExcelSheet()!.GetRow(rankId)!).ToString(); + return func(dataManager.GetExcelSheet().GetRow(rankId)).ToString(); } - private void Logout() + private void Logout(int type, int code) { _retainerItemCache.Clear(); } diff --git a/Deliveroo/Windows/ConfigWindow.cs b/Deliveroo/Windows/ConfigWindow.cs index b380a17..406d48e 100644 --- a/Deliveroo/Windows/ConfigWindow.cs +++ b/Deliveroo/Windows/ConfigWindow.cs @@ -103,66 +103,66 @@ internal sealed class ConfigWindow : LWindow, IPersistableWindowConfig _configuration.ItemsAvailableToPurchase.Count == 1 && purchaseOption.ItemId == ItemIds.Venture); var item = _itemLookup[purchaseOption.ItemId]; - var icon = _iconCache.GetIcon(item.IconId); - Vector2 pos = ImGui.GetCursorPos(); - Vector2 iconSize = new Vector2(ImGui.GetTextLineHeight() + ImGui.GetStyle().ItemSpacing.Y); - - icon.TryGetWrap(out IDalamudTextureWrap? wrap, out _); - if (wrap != null) + using (var icon = _iconCache.GetIcon(item.IconId)) { - ImGui.SetCursorPos(pos + new Vector2(iconSize.X + ImGui.GetStyle().FramePadding.X, - ImGui.GetStyle().ItemSpacing.Y / 2)); - } + Vector2 pos = ImGui.GetCursorPos(); + Vector2 iconSize = new Vector2(ImGui.GetTextLineHeight() + ImGui.GetStyle().ItemSpacing.Y); - ImGui.Selectable($"{item.Name}{(item.Limited ? $" {SeIconChar.Hyadelyn.ToIconString()}" : "")}{(purchaseOption.SameQuantityForAllLists ? $" {((SeIconChar)57412).ToIconString()} (Limit: {purchaseOption.GlobalLimit:N0})" : "")}", - false, ImGuiSelectableFlags.SpanAllColumns); - - if (ImGui.BeginDragDropSource()) - { - ImGui.SetDragDropPayload("DeliverooDragDrop", nint.Zero, 0); - _dragDropSource = purchaseOption; - - ImGui.EndDragDropSource(); - } - - if (ImGui.BeginDragDropTarget()) - { - if (_dragDropSource != null && - ImGui.AcceptDragDropPayload("DeliverooDragDrop").NativePtr != null) + if (icon != null) { - itemToAdd = _dragDropSource; - indexToAdd = i; - - _dragDropSource = null; + ImGui.SetCursorPos(pos + new Vector2(iconSize.X + ImGui.GetStyle().FramePadding.X, + ImGui.GetStyle().ItemSpacing.Y / 2)); } - ImGui.EndDragDropTarget(); - } + ImGui.Selectable( + $"{item.Name}{(item.Limited ? $" {SeIconChar.Hyadelyn.ToIconString()}" : "")}{(purchaseOption.SameQuantityForAllLists ? $" {((SeIconChar)57412).ToIconString()} (Limit: {purchaseOption.GlobalLimit:N0})" : "")}", + false, ImGuiSelectableFlags.SpanAllColumns); - ImGui.OpenPopupOnItemClick($"###ctx{i}", ImGuiPopupFlags.MouseButtonRight); - if (ImGui.BeginPopup($"###ctx{i}")) - { - bool sameQuantityForAllLists = purchaseOption.SameQuantityForAllLists; - if (ImGui.MenuItem("Use same quantity for global and character-specific lists", null, - ref sameQuantityForAllLists)) + if (ImGui.BeginDragDropSource()) { - purchaseOption.SameQuantityForAllLists = sameQuantityForAllLists; - Save(); + ImGui.SetDragDropPayload("DeliverooDragDrop", nint.Zero, 0); + _dragDropSource = purchaseOption; + + ImGui.EndDragDropSource(); } - if (ImGui.MenuItem($"Remove {_itemLookup[purchaseOption.ItemId].Name}")) - itemToRemove = purchaseOption; + if (ImGui.BeginDragDropTarget()) + { + if (_dragDropSource != null && + ImGui.AcceptDragDropPayload("DeliverooDragDrop").NativePtr != null) + { + itemToAdd = _dragDropSource; + indexToAdd = i; - ImGui.EndPopup(); - } + _dragDropSource = null; + } - if (wrap != null) - { - ImGui.SameLine(0, 0); - ImGui.SetCursorPos(pos); - ImGui.Image(wrap.ImGuiHandle, iconSize); + ImGui.EndDragDropTarget(); + } - wrap.Dispose(); + ImGui.OpenPopupOnItemClick($"###ctx{i}", ImGuiPopupFlags.MouseButtonRight); + if (ImGui.BeginPopup($"###ctx{i}")) + { + bool sameQuantityForAllLists = purchaseOption.SameQuantityForAllLists; + if (ImGui.MenuItem("Use same quantity for global and character-specific lists", null, + ref sameQuantityForAllLists)) + { + purchaseOption.SameQuantityForAllLists = sameQuantityForAllLists; + Save(); + } + + if (ImGui.MenuItem($"Remove {_itemLookup[purchaseOption.ItemId].Name}")) + itemToRemove = purchaseOption; + + ImGui.EndPopup(); + } + + if (icon != null) + { + ImGui.SameLine(0, 0); + ImGui.SetCursorPos(pos); + ImGui.Image(icon.ImGuiHandle, iconSize); + } } ImGui.EndDisabled(); @@ -202,14 +202,14 @@ internal sealed class ConfigWindow : LWindow, IPersistableWindowConfig foreach (var item in comboValues.Where(x => x.Name.Contains(_searchString, StringComparison.OrdinalIgnoreCase))) { - var icon = _iconCache.GetIcon(item.IconId); - if (icon.TryGetWrap(out IDalamudTextureWrap? wrap, out _)) + using (var icon = _iconCache.GetIcon(item.IconId)) { - ImGui.Image(wrap.ImGuiHandle, new Vector2(ImGui.GetFrameHeight())); - ImGui.SameLine(); - ImGui.SetCursorPosY(ImGui.GetCursorPosY() + ImGui.GetStyle().FramePadding.X); - - wrap.Dispose(); + if (icon != null) + { + ImGui.Image(icon.ImGuiHandle, new Vector2(ImGui.GetFrameHeight())); + ImGui.SameLine(); + ImGui.SetCursorPosY(ImGui.GetCursorPosY() + ImGui.GetStyle().FramePadding.X); + } } bool addThis = @@ -217,7 +217,8 @@ internal sealed class ConfigWindow : LWindow, IPersistableWindowConfig $"{item.Name}{(item.Limited ? $" {SeIconChar.Hyadelyn.ToIconString()}" : "")}##SelectVenture{item.IconId}"); if (addThis || addFirst) { - _configuration.ItemsAvailableToPurchase.Add(new Configuration.PurchaseOption { ItemId = item.ItemId }); + _configuration.ItemsAvailableToPurchase.Add(new Configuration.PurchaseOption + { ItemId = item.ItemId }); if (addFirst) { @@ -243,7 +244,7 @@ internal sealed class ConfigWindow : LWindow, IPersistableWindowConfig if (_clientState is { IsLoggedIn: true, LocalContentId: > 0 }) { string currentCharacterName = _clientState.LocalPlayer!.Name.ToString(); - string currentWorldName = _clientState.LocalPlayer.HomeWorld.GameData!.Name.ToString(); + string currentWorldName = _clientState.LocalPlayer.HomeWorld.Value.Name.ToString(); ImGui.Text($"Current Character: {currentCharacterName} @ {currentWorldName}"); ImGui.Spacing(); ImGui.Separator(); diff --git a/Deliveroo/Windows/TurnInWindow.cs b/Deliveroo/Windows/TurnInWindow.cs index e70d538..3cd35d9 100644 --- a/Deliveroo/Windows/TurnInWindow.cs +++ b/Deliveroo/Windows/TurnInWindow.cs @@ -126,7 +126,7 @@ internal sealed class TurnInWindow : LWindow, IPersistableWindowConfig private bool IsOnHomeWorld => _clientState.LocalPlayer == null || - _clientState.LocalPlayer.HomeWorld.Id == _clientState.LocalPlayer.CurrentWorld.Id; + _clientState.LocalPlayer.HomeWorld.RowId == _clientState.LocalPlayer.CurrentWorld.RowId; private IItemsToPurchase ItemsWrapper => UseCharacterSpecificItemsToPurchase ? new CharacterSpecificItemsToPurchase(_plugin.CharacterConfiguration!, _pluginInterface) @@ -516,13 +516,13 @@ internal sealed class TurnInWindow : LWindow, IPersistableWindowConfig } var comboItem = comboValues[comboValueIndex]; - var icon = _iconCache.GetIcon(comboItem.Item.IconId); - if (icon.TryGetWrap(out IDalamudTextureWrap? wrap, out _)) + using (var icon = _iconCache.GetIcon(comboItem.Item.IconId)) { - ImGui.Image(wrap.ImGuiHandle, new Vector2(ImGui.GetFrameHeight())); - ImGui.SameLine(0, 3); - - wrap.Dispose(); + if (icon != null) + { + ImGui.Image(icon.ImGuiHandle, new Vector2(ImGui.GetFrameHeight())); + ImGui.SameLine(0, 3); + } } indentX = ImGui.GetCursorPosX() - indentX; diff --git a/Deliveroo/packages.lock.json b/Deliveroo/packages.lock.json index f5ad582..f6a8acd 100644 --- a/Deliveroo/packages.lock.json +++ b/Deliveroo/packages.lock.json @@ -4,9 +4,9 @@ "net8.0-windows7.0": { "DalamudPackager": { "type": "Direct", - "requested": "[2.1.13, )", - "resolved": "2.1.13", - "contentHash": "rMN1omGe8536f4xLMvx9NwfvpAc9YFFfeXJ1t4P4PE6Gu8WCIoFliR1sh07hM+bfODmesk/dvMbji7vNI+B/pQ==" + "requested": "[11.0.0, )", + "resolved": "11.0.0", + "contentHash": "bjT7XUlhIJSmsE/O76b7weUX+evvGQctbQB8aKXt94o+oPWxHpCepxAGMs7Thow3AzCyqWs7cOpp9/2wcgRRQA==" }, "DotNet.ReproducibleBuilds": { "type": "Direct", @@ -79,7 +79,7 @@ "llib": { "type": "Project", "dependencies": { - "DalamudPackager": "[2.1.13, )" + "DalamudPackager": "[11.0.0, )" } } } diff --git a/LLib b/LLib index 7027d29..538329a 160000 --- a/LLib +++ b/LLib @@ -1 +1 @@ -Subproject commit 7027d291efbbff6a55944dd521d3907210ddecbe +Subproject commit 538329a1e80acbcd09e28bd6dd459c35b5563c0a