From af52ebd8bd396878023a6d5171a0562975fc0b3e Mon Sep 17 00:00:00 2001 From: Anna Date: Mon, 6 Jun 2022 16:35:29 -0400 Subject: [PATCH] feat: use new context menus --- RoleplayersToolbox/Plugin.cs | 6 ++- RoleplayersToolbox/RoleplayersToolbox.csproj | 6 +-- RoleplayersToolbox/RoleplayersToolbox.yaml | 1 + .../Tools/Housing/HousingDistances.cs | 3 ++ .../Tools/Housing/HousingTool.cs | 40 +++++++++++++------ 5 files changed, 39 insertions(+), 17 deletions(-) diff --git a/RoleplayersToolbox/Plugin.cs b/RoleplayersToolbox/Plugin.cs index 8a6da10..cf5fa9f 100755 --- a/RoleplayersToolbox/Plugin.cs +++ b/RoleplayersToolbox/Plugin.cs @@ -6,6 +6,7 @@ using Dalamud.Game.ClientState; using Dalamud.Game.ClientState.Objects; using Dalamud.Game.Command; using Dalamud.Game.Gui; +using Dalamud.Game.Gui.ContextMenus; using Dalamud.IoC; using Dalamud.Plugin; using RoleplayersToolbox.Tools; @@ -37,6 +38,9 @@ namespace RoleplayersToolbox { [PluginService] internal CommandManager CommandManager { get; init; } = null!; + + [PluginService] + internal ContextMenu ContextMenu { get; init; } = null!; [PluginService] internal DataManager DataManager { get; init; } = null!; @@ -61,7 +65,7 @@ namespace RoleplayersToolbox { public Plugin() { this.Config = this.Interface.GetPluginConfig() as Configuration ?? new Configuration(); - this.Common = new XivCommonBase(Hooks.ContextMenu | Hooks.PartyFinderListings); + this.Common = new XivCommonBase(Hooks.PartyFinderListings); this.Tools.Add(new HousingTool(this)); this.Tools.Add(new TargetingTool(this)); diff --git a/RoleplayersToolbox/RoleplayersToolbox.csproj b/RoleplayersToolbox/RoleplayersToolbox.csproj index 5a1a5c0..a332292 100755 --- a/RoleplayersToolbox/RoleplayersToolbox.csproj +++ b/RoleplayersToolbox/RoleplayersToolbox.csproj @@ -53,8 +53,8 @@ - - - + + + diff --git a/RoleplayersToolbox/RoleplayersToolbox.yaml b/RoleplayersToolbox/RoleplayersToolbox.yaml index 8729e33..40b7ad0 100755 --- a/RoleplayersToolbox/RoleplayersToolbox.yaml +++ b/RoleplayersToolbox/RoleplayersToolbox.yaml @@ -1,5 +1,6 @@ name: The Roleplayer's Toolbox author: ascclemens +punchline: "The Roleplayer's Toolbox" description: |- A collection of useful tools for roleplayers. diff --git a/RoleplayersToolbox/Tools/Housing/HousingDistances.cs b/RoleplayersToolbox/Tools/Housing/HousingDistances.cs index d145711..e38c853 100755 --- a/RoleplayersToolbox/Tools/Housing/HousingDistances.cs +++ b/RoleplayersToolbox/Tools/Housing/HousingDistances.cs @@ -14,6 +14,9 @@ namespace RoleplayersToolbox.Tools.Housing { [HousingArea.Goblet] = new() { [4] = 1966113, // Goblet Exchange }, + [HousingArea.Mist] = new() { + [46] = 1966095, // Central Mist Subdivision + }, [HousingArea.Shirogane] = new() { [5] = 1966135, // Southern Shirogane }, diff --git a/RoleplayersToolbox/Tools/Housing/HousingTool.cs b/RoleplayersToolbox/Tools/Housing/HousingTool.cs index fc7cf86..b381d7c 100755 --- a/RoleplayersToolbox/Tools/Housing/HousingTool.cs +++ b/RoleplayersToolbox/Tools/Housing/HousingTool.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Runtime.InteropServices; using Dalamud.Game; using Dalamud.Game.Command; +using Dalamud.Game.Gui.ContextMenus; using Dalamud.Game.Text.SeStringHandling; using Dalamud.Game.Text.SeStringHandling.Payloads; using FFXIVClientStructs.FFXIV.Client.UI; @@ -10,7 +11,6 @@ using FFXIVClientStructs.FFXIV.Client.UI.Agent; using FFXIVClientStructs.FFXIV.Component.GUI; using ImGuiNET; using Lumina.Excel.GeneratedSheets; -using XivCommon.Functions.ContextMenu; namespace RoleplayersToolbox.Tools.Housing { internal class HousingTool : BaseTool, IDisposable { @@ -58,7 +58,7 @@ namespace RoleplayersToolbox.Tools.Housing { this._addonMapHide = Marshal.GetDelegateForFunctionPointer(addonMapHidePtr); } - this.Plugin.Common.Functions.ContextMenu.OpenContextMenu += this.OnContextMenu; + this.Plugin.ContextMenu.ContextMenuOpened += this.OnContextMenu; this.Plugin.Framework.Update += this.OnFramework; this.Plugin.CommandManager.AddHandler("/route", new CommandInfo(this.OnRouteCommand) { HelpMessage = "Extract housing information from the given text and open the routing window", @@ -72,7 +72,7 @@ namespace RoleplayersToolbox.Tools.Housing { this.Plugin.CommandManager.RemoveHandler("/bookmarks"); this.Plugin.CommandManager.RemoveHandler("/route"); this.Plugin.Framework.Update -= this.OnFramework; - this.Plugin.Common.Functions.ContextMenu.OpenContextMenu -= this.OnContextMenu; + this.Plugin.ContextMenu.ContextMenuOpened -= this.OnContextMenu; } public override void DrawSettings(ref bool anyChanged) { @@ -198,19 +198,26 @@ namespace RoleplayersToolbox.Tools.Housing { this.BookmarksUi.ShouldDraw ^= true; } - private void OnContextMenu(ContextMenuOpenArgs args) { - if (args.ParentAddonName != "LookingForGroup" || args.ContentIdLower == 0) { + private void OnContextMenu(ContextMenuOpenedArgs args) { + if (args.ParentAddonName != "LookingForGroup" || args.GameObjectContext?.ContentId is null or 0) { return; } - args.Items.Add(new NormalContextSubMenuItem("Roleplayer's Toolbox", args => { - args.Items.Add(new NormalContextMenuItem("Select as Destination", this.SelectDestination)); - args.Items.Add(new NormalContextMenuItem("Add Bookmark", this.AddBookmark)); - })); + args.AddCustomSubMenu("Roleplayer's Toolbox", args => { + args.AddCustomItem("Select as Destination", this.SelectDestination); + args.AddCustomItem("Add Bookmark", this.AddBookmark); + }); } - private void SelectDestination(ContextMenuItemSelectedArgs args) { - var listing = this.Plugin.Common.Functions.PartyFinder.CurrentListings.Values.FirstOrDefault(listing => listing.ContentIdLower == args.ContentIdLower); + private void SelectDestination(CustomContextMenuItemSelectedArgs args) { + var contentId = args.ContextMenuOpenedArgs.GameObjectContext?.ContentId; + if (contentId is null or 0) { + return; + } + + var contentIdLower = contentId & 0xFFFFFFFF; + + var listing = this.Plugin.Common.Functions.PartyFinder.CurrentListings.Values.FirstOrDefault(listing => listing.ContentIdLower == contentIdLower); if (listing == null) { return; } @@ -219,8 +226,15 @@ namespace RoleplayersToolbox.Tools.Housing { this.Destination = InfoExtractor.Extract(listing.Description.TextValue, listing.World.Value.DataCenter.Row, this.Plugin.DataManager, this.Info); } - private void AddBookmark(ContextMenuItemSelectedArgs args) { - var listing = this.Plugin.Common.Functions.PartyFinder.CurrentListings.Values.FirstOrDefault(listing => listing.ContentIdLower == args.ContentIdLower); + private void AddBookmark(CustomContextMenuItemSelectedArgs args) { + var contentId = args.ContextMenuOpenedArgs.GameObjectContext?.ContentId; + if (contentId is null or 0) { + return; + } + + var contentIdLower = contentId & 0xFFFFFFFF; + + var listing = this.Plugin.Common.Functions.PartyFinder.CurrentListings.Values.FirstOrDefault(listing => listing.ContentIdLower == contentIdLower); if (listing == null) { return; }