diff --git a/PlayerTags/Data/PluginData.cs b/PlayerTags/Data/PluginData.cs index 3fedeac..1adac08 100644 --- a/PlayerTags/Data/PluginData.cs +++ b/PlayerTags/Data/PluginData.cs @@ -1,6 +1,7 @@ using Dalamud.Game.ClientState.Objects.SubKinds; using Dalamud.Game.ClientState.Party; using Dalamud.Game.Text.SeStringHandling.Payloads; +using Dalamud.Logging; using PlayerTags.Configuration; using PlayerTags.GameInterface.ContextMenus; using PlayerTags.PluginStrings; @@ -281,23 +282,22 @@ namespace PlayerTags.Data { if (contextMenuOpenedArgs.GameObjectContext == null || contextMenuOpenedArgs.GameObjectContext.Name == null - || contextMenuOpenedArgs.GameObjectContext.WorldId == 0 - || contextMenuOpenedArgs.GameObjectContext.WorldId == 65535) + || contextMenuOpenedArgs.GameObjectContext.WorldId == null) { return null; } - return GetIdentity(contextMenuOpenedArgs.GameObjectContext.Name.TextValue, contextMenuOpenedArgs.GameObjectContext.WorldId); + return GetIdentity(contextMenuOpenedArgs.GameObjectContext.Name, contextMenuOpenedArgs.GameObjectContext.WorldId); } public Identity GetIdentity(PlayerCharacter playerCharacter) { - return GetIdentity(playerCharacter.Name.TextValue, playerCharacter.HomeWorld.GameData.RowId); + return GetIdentity(playerCharacter.Name.TextValue, playerCharacter.HomeWorld.Id); } public Identity GetIdentity(PartyMember partyMember) { - return GetIdentity(partyMember.Name.TextValue, partyMember.World.GameData.RowId); + return GetIdentity(partyMember.Name.TextValue, partyMember.World.Id); } public Identity GetIdentity(PlayerPayload playerPayload) diff --git a/PlayerTags/Features/ChatTagTargetFeature.cs b/PlayerTags/Features/ChatTagTargetFeature.cs index 116099c..ad3de03 100644 --- a/PlayerTags/Features/ChatTagTargetFeature.cs +++ b/PlayerTags/Features/ChatTagTargetFeature.cs @@ -184,7 +184,7 @@ namespace PlayerTags.Features if (stringMatch.GameObject is PlayerCharacter playerCharacter) { // Add the job tag - if (m_PluginData.JobTags.TryGetValue(playerCharacter.ClassJob.GameData.Abbreviation, out var jobTag)) + if (playerCharacter.ClassJob.GameData != null && m_PluginData.JobTags.TryGetValue(playerCharacter.ClassJob.GameData.Abbreviation, out var jobTag)) { if (jobTag.TagPositionInChat.InheritedValue != null) { @@ -260,7 +260,7 @@ namespace PlayerTags.Features if (stringMatch.GameObject is PlayerCharacter playerCharacter1) { - if (m_PluginData.JobTags.TryGetValue(playerCharacter1.ClassJob.GameData.Abbreviation, out var jobTag)) + if (playerCharacter1.ClassJob.GameData != null && m_PluginData.JobTags.TryGetValue(playerCharacter1.ClassJob.GameData.Abbreviation, out var jobTag)) { if (IsTagVisible(jobTag, stringMatch.GameObject)) { diff --git a/PlayerTags/Features/CustomTagsContextMenuFeature.cs b/PlayerTags/Features/CustomTagsContextMenuFeature.cs index a63f13f..bd73581 100644 --- a/PlayerTags/Features/CustomTagsContextMenuFeature.cs +++ b/PlayerTags/Features/CustomTagsContextMenuFeature.cs @@ -88,16 +88,6 @@ namespace PlayerTags.Features m_PluginConfiguration.Save(m_PluginData); }))); } - - newContextMenuItems.Add(new OpenSubContextMenuItem("1", (args) => - { - PluginLog.Debug("WOW1"); - args.Items.Add(new CustomContextMenuItem("2", (args2) => - { - PluginLog.Debug("WOW2"); - })); - })); - subContextMenuOpenedArgs.Items.InsertRange(0, newContextMenuItems); }))); } @@ -116,16 +106,6 @@ namespace PlayerTags.Features m_PluginConfiguration.Save(m_PluginData); }))); } - - newContextMenuItems.Add(new OpenSubContextMenuItem("1", (args) => - { - PluginLog.Debug("WOW1"); - args.Items.Add(new CustomContextMenuItem("2", (args2) => - { - PluginLog.Debug("WOW2"); - })); - })); - subContextMenuOpenedArgs.Items.InsertRange(0, newContextMenuItems); }))); } diff --git a/PlayerTags/Features/NameplateTagTargetFeature.cs b/PlayerTags/Features/NameplateTagTargetFeature.cs index cbb0705..9de7908 100644 --- a/PlayerTags/Features/NameplateTagTargetFeature.cs +++ b/PlayerTags/Features/NameplateTagTargetFeature.cs @@ -171,7 +171,7 @@ namespace PlayerTags.Features if (gameObject is PlayerCharacter playerCharacter) { // Add the job tags - if (m_PluginData.JobTags.TryGetValue(playerCharacter.ClassJob.GameData.Abbreviation, out var jobTag)) + if (playerCharacter.ClassJob.GameData != null && m_PluginData.JobTags.TryGetValue(playerCharacter.ClassJob.GameData.Abbreviation, out var jobTag)) { if (jobTag.TagTargetInNameplates.InheritedValue != null && jobTag.TagPositionInNameplates.InheritedValue != null) { @@ -280,7 +280,7 @@ namespace PlayerTags.Features } } - if (m_PluginData.JobTags.TryGetValue(playerCharacter1.ClassJob.GameData.Abbreviation, out var jobTag)) + if (playerCharacter1.ClassJob.GameData != null && m_PluginData.JobTags.TryGetValue(playerCharacter1.ClassJob.GameData.Abbreviation, out var jobTag)) { if (IsTagVisible(jobTag, gameObject)) { diff --git a/PlayerTags/GameInterface/ContextMenus/ContextMenu.cs b/PlayerTags/GameInterface/ContextMenus/ContextMenu.cs index 1ebfa48..ec3c52f 100644 --- a/PlayerTags/GameInterface/ContextMenus/ContextMenu.cs +++ b/PlayerTags/GameInterface/ContextMenus/ContextMenu.cs @@ -426,15 +426,41 @@ namespace PlayerTags.GameInterface.ContextMenus else { var agentContext = (AgentContext*)agentContextInterface; - if (agentContext->GameObjectContentId != 0 || agentContext->GameObjectWorldId != 0) - { - SeString objectName; - unsafe - { - objectName = GameInterfaceHelper.ReadSeString((IntPtr)agentContext->GameObjectName.StringPtr); - } - gameObjectContext = new GameObjectContext(agentContext->GameObjectId, agentContext->GameObjectContentId, objectName, agentContext->GameObjectWorldId); + uint? id = agentContext->GameObjectId; + if (id == 0) + { + id = null; + } + + ulong? contentId = agentContext->GameObjectContentId; + if (contentId == 0) + { + contentId = null; + } + + string? name; + unsafe + { + name = GameInterfaceHelper.ReadSeString((IntPtr)agentContext->GameObjectName.StringPtr).TextValue; + if (string.IsNullOrEmpty(name)) + { + name = null; + } + } + + ushort? worldId = agentContext->GameObjectWorldId; + if (worldId == 0) + { + worldId = null; + } + + if (id != null + || contentId != null + || name != null + || worldId != null) + { + gameObjectContext = new GameObjectContext(id, contentId, name, worldId); } } diff --git a/PlayerTags/GameInterface/ContextMenus/FFXIVClientStructs/FFXIV/Client/UI/AddonContextMenu.cs b/PlayerTags/GameInterface/ContextMenus/FFXIVClientStructs/FFXIV/Client/UI/AddonContextMenu.cs index 182afc5..96787b8 100644 --- a/PlayerTags/GameInterface/ContextMenus/FFXIVClientStructs/FFXIV/Client/UI/AddonContextMenu.cs +++ b/PlayerTags/GameInterface/ContextMenus/FFXIVClientStructs/FFXIV/Client/UI/AddonContextMenu.cs @@ -9,6 +9,6 @@ namespace FFXIVClientStructs.FFXIV.Client.UI [FieldOffset(0x0)] public unsafe AddonInterface AddonInterface; [FieldOffset(0x160)] public unsafe AtkValue* AtkValues; [FieldOffset(0x1CA)] public ushort AtkValuesCount; - [FieldOffset(0x690)] public /*long*/ bool IsInitialMenu; + [FieldOffset(0x690)] public bool IsInitialMenu; } } diff --git a/PlayerTags/GameInterface/ContextMenus/GameObjectContext.cs b/PlayerTags/GameInterface/ContextMenus/GameObjectContext.cs index 0b07072..c7e7318 100644 --- a/PlayerTags/GameInterface/ContextMenus/GameObjectContext.cs +++ b/PlayerTags/GameInterface/ContextMenus/GameObjectContext.cs @@ -10,22 +10,22 @@ namespace PlayerTags.GameInterface.ContextMenus /// /// The id of the game object. /// - public uint Id { get; } + public uint? Id { get; } /// /// The content id of the game object. /// - public ulong ContentId { get; } + public ulong? ContentId { get; } /// /// The name of the game object. /// - public SeString Name { get; } + public string? Name { get; } /// /// The world id of the game object. /// - public ushort WorldId { get; } + public ushort? WorldId { get; } /// /// Initializes a new instance of the class. @@ -34,7 +34,7 @@ namespace PlayerTags.GameInterface.ContextMenus /// The lower content id of the game object. /// The name of the game object. /// The world id of the game object. - public GameObjectContext(uint id, ulong contentId, SeString name, ushort worldId) + public GameObjectContext(uint? id, ulong? contentId, string? name, ushort? worldId) { Id = id; ContentId = contentId;