Add adventurer plate context option

This commit is contained in:
Infi
2024-04-06 03:01:32 +02:00
parent 5ceb327f3a
commit 40fd726519
7 changed files with 2178 additions and 1364 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<Version>1.19.2</Version> <Version>1.19.3</Version>
<TargetFramework>net8.0-windows</TargetFramework> <TargetFramework>net8.0-windows</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
+14
View File
@@ -273,6 +273,20 @@ internal unsafe class GameFunctions : IDisposable {
return this._inInstance() != 0; return this._inInstance() != 0;
} }
internal bool TryOpenAdventurerPlate(ulong playerId)
{
try
{
AgentCharaCard.Instance()->OpenCharaCard(playerId);
return true;
}
catch (Exception e)
{
Plugin.Log.Warning(e, "Unable to open adventurer plate");
return false;
}
}
internal void ClickNoviceNetworkButton() { internal void ClickNoviceNetworkButton() {
var agent = Framework.Instance()->GetUiModule()->GetAgentModule()->GetAgentByInternalId(AgentId.ChatLog); var agent = Framework.Instance()->GetUiModule()->GetAgentModule()->GetAgentByInternalId(AgentId.ChatLog);
// case 3 // case 3
+99 -91
View File
@@ -7,6 +7,7 @@ using Dalamud.Game.ClientState.Objects.SubKinds;
using Dalamud.Game.Text.SeStringHandling; using Dalamud.Game.Text.SeStringHandling;
using Dalamud.Game.Text.SeStringHandling.Payloads; using Dalamud.Game.Text.SeStringHandling.Payloads;
using Dalamud.Interface.Internal; using Dalamud.Interface.Internal;
using Dalamud.Interface.Internal.Notifications;
using Dalamud.Interface.Utility; using Dalamud.Interface.Utility;
using Dalamud.Utility; using Dalamud.Utility;
using ImGuiNET; using ImGuiNET;
@@ -31,30 +32,30 @@ internal sealed class PayloadHandler {
private uint _lastHoverCounter; private uint _lastHoverCounter;
internal PayloadHandler(PluginUi ui, ChatLog log) { internal PayloadHandler(PluginUi ui, ChatLog log) {
this.Ui = ui; Ui = ui;
this.Log = log; Log = log;
} }
internal void Draw() { internal void Draw() {
this.DrawPopups(); DrawPopups();
if (this._handleTooltips && ++this._hoverCounter - this._lastHoverCounter > 1) { if (_handleTooltips && ++_hoverCounter - _lastHoverCounter > 1) {
GameFunctions.GameFunctions.CloseItemTooltip(); GameFunctions.GameFunctions.CloseItemTooltip();
this._hoveredItem = 0; _hoveredItem = 0;
this._hoverCounter = this._lastHoverCounter = 0; _hoverCounter = _lastHoverCounter = 0;
this._handleTooltips = false; _handleTooltips = false;
} }
} }
private void DrawPopups() { private void DrawPopups() {
if (this.Popup == null) { if (Popup == null) {
return; return;
} }
var (chunk, payload) = this.Popup.Value; var (chunk, payload) = Popup.Value;
if (!ImGui.BeginPopup(PopupId)) { if (!ImGui.BeginPopup(PopupId)) {
this.Popup = null; Popup = null;
return; return;
} }
@@ -63,26 +64,26 @@ internal sealed class PayloadHandler {
var drawn = false; var drawn = false;
switch (payload) { switch (payload) {
case PlayerPayload player: { case PlayerPayload player: {
this.DrawPlayerPopup(chunk, player); DrawPlayerPopup(chunk, player);
drawn = true; drawn = true;
break; break;
} }
case ItemPayload item: { case ItemPayload item: {
this.DrawItemPopup(item); DrawItemPopup(item);
drawn = true; drawn = true;
break; break;
} }
} }
this.ContextFooter(drawn, chunk); ContextFooter(drawn, chunk);
this.Integrations(chunk, payload); Integrations(chunk, payload);
ImGui.PopID(); ImGui.PopID();
ImGui.EndPopup(); ImGui.EndPopup();
} }
private void Integrations(Chunk chunk, Payload? payload) { private void Integrations(Chunk chunk, Payload? payload) {
var registered = this.Ui.Plugin.Ipc.Registered; var registered = Ui.Plugin.Ipc.Registered;
if (registered.Count == 0) { if (registered.Count == 0) {
return; return;
} }
@@ -97,7 +98,7 @@ internal sealed class PayloadHandler {
foreach (var id in registered) { foreach (var id in registered) {
try { try {
this.Ui.Plugin.Ipc.Invoke(id, sender, contentId, payload, chunk.Message?.SenderSource, chunk.Message?.ContentSource); Ui.Plugin.Ipc.Invoke(id, sender, contentId, payload, chunk.Message?.SenderSource, chunk.Message?.ContentSource);
} catch (Exception ex) { } catch (Exception ex) {
Plugin.Log.Error(ex, "Error executing integration"); Plugin.Log.Error(ex, "Error executing integration");
} }
@@ -122,10 +123,10 @@ internal sealed class PayloadHandler {
return; return;
} }
ImGui.Checkbox(Language.Context_ScreenshotMode, ref this.Ui.ScreenshotMode); ImGui.Checkbox(Language.Context_ScreenshotMode, ref Ui.ScreenshotMode);
if (ImGui.Selectable(Language.Context_HideChat)) { if (ImGui.Selectable(Language.Context_HideChat)) {
this.Log.UserHide(); Log.UserHide();
} }
if (chunk.Message is { } message) { if (chunk.Message is { } message) {
@@ -148,9 +149,12 @@ internal sealed class PayloadHandler {
var col = ImGui.GetStyle().Colors[(int) ImGuiCol.TextDisabled]; var col = ImGui.GetStyle().Colors[(int) ImGuiCol.TextDisabled];
ImGui.PushStyleColor(ImGuiCol.Text, col); ImGui.PushStyleColor(ImGuiCol.Text, col);
try { try
{
ImGui.TextUnformatted(message.Code.Type.Name()); ImGui.TextUnformatted(message.Code.Type.Name());
} finally { }
finally
{
ImGui.PopStyleColor(); ImGui.PopStyleColor();
} }
} }
@@ -161,10 +165,10 @@ internal sealed class PayloadHandler {
internal void Click(Chunk chunk, Payload? payload, ImGuiMouseButton button) { internal void Click(Chunk chunk, Payload? payload, ImGuiMouseButton button) {
switch (button) { switch (button) {
case ImGuiMouseButton.Left: case ImGuiMouseButton.Left:
this.LeftClickPayload(chunk, payload); LeftClickPayload(chunk, payload);
break; break;
case ImGuiMouseButton.Right: case ImGuiMouseButton.Right:
this.RightClickPayload(chunk, payload); RightClickPayload(chunk, payload);
break; break;
} }
} }
@@ -174,25 +178,25 @@ internal sealed class PayloadHandler {
switch (payload) { switch (payload) {
case StatusPayload status: { case StatusPayload status: {
this.DoHover(() => this.HoverStatus(status), hoverSize); DoHover(() => HoverStatus(status), hoverSize);
break; break;
} }
case ItemPayload item: { case ItemPayload item: {
if (this.Ui.Plugin.Config.NativeItemTooltips) { if (Ui.Plugin.Config.NativeItemTooltips) {
GameFunctions.GameFunctions.OpenItemTooltip(item.RawItemId); GameFunctions.GameFunctions.OpenItemTooltip(item.RawItemId);
this._handleTooltips = true; _handleTooltips = true;
if (this._hoveredItem != item.RawItemId) { if (_hoveredItem != item.RawItemId) {
this._hoveredItem = item.RawItemId; _hoveredItem = item.RawItemId;
this._hoverCounter = this._lastHoverCounter = 0; _hoverCounter = _lastHoverCounter = 0;
} else { } else {
this._lastHoverCounter = this._hoverCounter; _lastHoverCounter = _hoverCounter;
} }
break; break;
} }
this.DoHover(() => this.HoverItem(item), hoverSize); DoHover(() => HoverItem(item), hoverSize);
break; break;
} }
} }
@@ -203,11 +207,14 @@ internal sealed class PayloadHandler {
ImGui.BeginTooltip(); ImGui.BeginTooltip();
ImGui.PushTextWrapPos(); ImGui.PushTextWrapPos();
ImGui.PushStyleColor(ImGuiCol.Text, Ui.DefaultText);
ImGui.PushStyleColor(ImGuiCol.Text, this.Ui.DefaultText); try
try { {
inside(); inside();
} finally { }
finally
{
ImGui.PopStyleColor(); ImGui.PopStyleColor();
ImGui.PopTextWrapPos(); ImGui.PopTextWrapPos();
ImGui.EndTooltip(); ImGui.EndTooltip();
@@ -225,21 +232,21 @@ internal sealed class PayloadHandler {
} }
private void HoverStatus(StatusPayload status) { private void HoverStatus(StatusPayload status) {
if (this.Ui.Plugin.TextureCache.GetStatus(status.Status) is { } icon) { if (Ui.Plugin.TextureCache.GetStatus(status.Status) is { } icon) {
InlineIcon(icon); InlineIcon(icon);
} }
var name = ChunkUtil.ToChunks(status.Status.Name.ToDalamudString(), ChunkSource.None, null); var name = ChunkUtil.ToChunks(status.Status.Name.ToDalamudString(), ChunkSource.None, null);
this.Log.DrawChunks(name.ToList()); Log.DrawChunks(name.ToList());
ImGui.Separator(); ImGui.Separator();
var desc = ChunkUtil.ToChunks(status.Status.Description.ToDalamudString(), ChunkSource.None, null); var desc = ChunkUtil.ToChunks(status.Status.Description.ToDalamudString(), ChunkSource.None, null);
this.Log.DrawChunks(desc.ToList()); Log.DrawChunks(desc.ToList());
} }
private void HoverItem(ItemPayload item) { private void HoverItem(ItemPayload item) {
if (item.Kind == ItemPayload.ItemKind.EventItem) { if (item.Kind == ItemPayload.ItemKind.EventItem) {
this.HoverEventItem(item); HoverEventItem(item);
return; return;
} }
@@ -247,16 +254,16 @@ internal sealed class PayloadHandler {
return; return;
} }
if (this.Ui.Plugin.TextureCache.GetItem(item.Item, item.IsHQ) is { } icon) { if (Ui.Plugin.TextureCache.GetItem(item.Item, item.IsHQ) is { } icon) {
InlineIcon(icon); InlineIcon(icon);
} }
var name = ChunkUtil.ToChunks(item.Item.Name.ToDalamudString(), ChunkSource.None, null); var name = ChunkUtil.ToChunks(item.Item.Name.ToDalamudString(), ChunkSource.None, null);
this.Log.DrawChunks(name.ToList()); Log.DrawChunks(name.ToList());
ImGui.Separator(); ImGui.Separator();
var desc = ChunkUtil.ToChunks(item.Item.Description.ToDalamudString(), ChunkSource.None, null); var desc = ChunkUtil.ToChunks(item.Item.Description.ToDalamudString(), ChunkSource.None, null);
this.Log.DrawChunks(desc.ToList()); Log.DrawChunks(desc.ToList());
} }
private void HoverEventItem(ItemPayload payload) { private void HoverEventItem(ItemPayload payload) {
@@ -265,18 +272,18 @@ internal sealed class PayloadHandler {
return; return;
} }
if (this.Ui.Plugin.TextureCache.GetEventItem(item) is { } icon) { if (Ui.Plugin.TextureCache.GetEventItem(item) is { } icon) {
InlineIcon(icon); InlineIcon(icon);
} }
var name = ChunkUtil.ToChunks(item.Name.ToDalamudString(), ChunkSource.None, null); var name = ChunkUtil.ToChunks(item.Name.ToDalamudString(), ChunkSource.None, null);
this.Log.DrawChunks(name.ToList()); Log.DrawChunks(name.ToList());
ImGui.Separator(); ImGui.Separator();
var help = Plugin.DataManager.GetExcelSheet<EventItemHelp>()?.GetRow(payload.RawItemId); var help = Plugin.DataManager.GetExcelSheet<EventItemHelp>()?.GetRow(payload.RawItemId);
if (help != null) { if (help != null) {
var desc = ChunkUtil.ToChunks(help.Description.ToDalamudString(), ChunkSource.None, null); var desc = ChunkUtil.ToChunks(help.Description.ToDalamudString(), ChunkSource.None, null);
this.Log.DrawChunks(desc.ToList()); Log.DrawChunks(desc.ToList());
} }
} }
@@ -287,28 +294,28 @@ internal sealed class PayloadHandler {
break; break;
} }
case QuestPayload quest: { case QuestPayload quest: {
this.Ui.Plugin.Common.Functions.Journal.OpenQuest(quest.Quest); Ui.Plugin.Common.Functions.Journal.OpenQuest(quest.Quest);
break; break;
} }
case DalamudLinkPayload link: { case DalamudLinkPayload link: {
this.ClickLinkPayload(chunk, payload, link); ClickLinkPayload(chunk, payload, link);
break; break;
} }
case DalamudPartyFinderPayload pf: { case DalamudPartyFinderPayload pf: {
if (pf.LinkType == DalamudPartyFinderPayload.PartyFinderLinkType.PartyFinderNotification) { if (pf.LinkType == DalamudPartyFinderPayload.PartyFinderLinkType.PartyFinderNotification) {
GameFunctions.GameFunctions.OpenPartyFinder(); GameFunctions.GameFunctions.OpenPartyFinder();
} else { } else {
this.Ui.Plugin.Functions.OpenPartyFinder(pf.ListingId); Ui.Plugin.Functions.OpenPartyFinder(pf.ListingId);
} }
break; break;
} }
case ChatTwoPartyFinderPayload pf: { case ChatTwoPartyFinderPayload pf: {
this.Ui.Plugin.Functions.OpenPartyFinder(pf.Id); Ui.Plugin.Functions.OpenPartyFinder(pf.Id);
break; break;
} }
case AchievementPayload achievement: { case AchievementPayload achievement: {
this.Ui.Plugin.Functions.OpenAchievement(achievement.Id); Ui.Plugin.Functions.OpenAchievement(achievement.Id);
break; break;
} }
case RawPayload raw: { case RawPayload raw: {
@@ -335,7 +342,7 @@ internal sealed class PayloadHandler {
var payloads = source.Payloads.Skip(start).Take(end - start + 1).ToList(); var payloads = source.Payloads.Skip(start).Take(end - start + 1).ToList();
if (!Plugin.ChatGui.RegisteredLinkHandlers.TryGetValue((link.Plugin, link.CommandId), out var value)) if (!Plugin.ChatGui.RegisteredLinkHandlers.TryGetValue((link.Plugin, link.CommandId), out var value))
{ {
Plugin.Log.Warning("could not find dalamudLinkHandlers"); Plugin.Log.Warning("Could not find DalamudLinkHandlers");
return; return;
} }
@@ -349,13 +356,13 @@ internal sealed class PayloadHandler {
} }
private void RightClickPayload(Chunk chunk, Payload? payload) { private void RightClickPayload(Chunk chunk, Payload? payload) {
this.Popup = (chunk, payload); Popup = (chunk, payload);
ImGui.OpenPopup(PopupId); ImGui.OpenPopup(PopupId);
} }
private void DrawItemPopup(ItemPayload payload) { private void DrawItemPopup(ItemPayload payload) {
if (payload.Kind == ItemPayload.ItemKind.EventItem) { if (payload.Kind == ItemPayload.ItemKind.EventItem) {
this.DrawEventItemPopup(payload); DrawEventItemPopup(payload);
return; return;
} }
@@ -366,7 +373,7 @@ internal sealed class PayloadHandler {
var hq = payload.Kind == ItemPayload.ItemKind.Hq; var hq = payload.Kind == ItemPayload.ItemKind.Hq;
if (this.Ui.Plugin.TextureCache.GetItem(item, hq) is { } icon) { if (Ui.Plugin.TextureCache.GetItem(item, hq) is { } icon) {
InlineIcon(icon); InlineIcon(icon);
} }
@@ -378,33 +385,32 @@ internal sealed class PayloadHandler {
name.Payloads.Add(new TextPayload(" ")); name.Payloads.Add(new TextPayload(" "));
} }
this.Log.DrawChunks(ChunkUtil.ToChunks(name, ChunkSource.None, null).ToList(), false); Log.DrawChunks(ChunkUtil.ToChunks(name, ChunkSource.None, null).ToList(), false);
ImGui.Separator(); ImGui.Separator();
var realItemId = payload.RawItemId; var realItemId = payload.RawItemId;
if (item.EquipSlotCategory.Row != 0) { if (item.EquipSlotCategory.Row != 0) {
if (ImGui.Selectable(Language.Context_TryOn)) { if (ImGui.Selectable(Language.Context_TryOn)) {
this.Ui.Plugin.Functions.Context.TryOn(realItemId, 0); Ui.Plugin.Functions.Context.TryOn(realItemId, 0);
} }
if (ImGui.Selectable(Language.Context_ItemComparison)) { if (ImGui.Selectable(Language.Context_ItemComparison)) {
this.Ui.Plugin.Functions.Context.OpenItemComparison(realItemId); Ui.Plugin.Functions.Context.OpenItemComparison(realItemId);
} }
} }
if (item.ItemSearchCategory.Value?.Category == 3) { if (item.ItemSearchCategory.Value?.Category == 3) {
if (ImGui.Selectable(Language.Context_SearchRecipes)) { if (ImGui.Selectable(Language.Context_SearchRecipes)) {
this.Ui.Plugin.Functions.Context.SearchForRecipesUsingItem(payload.ItemId); Ui.Plugin.Functions.Context.SearchForRecipesUsingItem(payload.ItemId);
} }
} }
if (ImGui.Selectable(Language.Context_SearchForItem)) { if (ImGui.Selectable(Language.Context_SearchForItem)) {
this.Ui.Plugin.Functions.Context.SearchForItem(realItemId); Ui.Plugin.Functions.Context.SearchForItem(realItemId);
} }
if (ImGui.Selectable(Language.Context_Link)) { if (ImGui.Selectable(Language.Context_Link)) {
this.Ui.Plugin.Functions.Context.LinkItem(realItemId); Ui.Plugin.Functions.Context.LinkItem(realItemId);
} }
if (ImGui.Selectable(Language.Context_CopyItemName)) { if (ImGui.Selectable(Language.Context_CopyItemName)) {
@@ -422,18 +428,17 @@ internal sealed class PayloadHandler {
return; return;
} }
if (this.Ui.Plugin.TextureCache.GetEventItem(item) is { } icon) { if (Ui.Plugin.TextureCache.GetEventItem(item) is { } icon) {
InlineIcon(icon); InlineIcon(icon);
} }
var name = item.Name.ToDalamudString(); var name = item.Name.ToDalamudString();
this.Log.DrawChunks(ChunkUtil.ToChunks(name, ChunkSource.None, null).ToList(), false); Log.DrawChunks(ChunkUtil.ToChunks(name, ChunkSource.None, null).ToList(), false);
ImGui.Separator(); ImGui.Separator();
var realItemId = payload.RawItemId; var realItemId = payload.RawItemId;
if (ImGui.Selectable(Language.Context_Link)) { if (ImGui.Selectable(Language.Context_Link)) {
this.Ui.Plugin.Functions.Context.LinkItem(realItemId); Ui.Plugin.Functions.Context.LinkItem(realItemId);
} }
if (ImGui.Selectable(Language.Context_CopyItemName)) { if (ImGui.Selectable(Language.Context_CopyItemName)) {
@@ -448,7 +453,6 @@ internal sealed class PayloadHandler {
return; return;
var world = player.World; var world = player.World;
if (chunk.Message?.Code.Type == ChatType.FreeCompanyLoginLogout) { if (chunk.Message?.Code.Type == ChatType.FreeCompanyLoginLogout) {
if (Plugin.ClientState.LocalPlayer?.HomeWorld.GameData is { } homeWorld) { if (Plugin.ClientState.LocalPlayer?.HomeWorld.GameData is { } homeWorld) {
world = homeWorld; world = homeWorld;
@@ -463,40 +467,41 @@ internal sealed class PayloadHandler {
}); });
} }
this.Log.DrawChunks(name, false); Log.DrawChunks(name, false);
ImGui.Separator(); ImGui.Separator();
if (ImGui.Selectable(Language.Context_SendTell)) { if (ImGui.Selectable(Language.Context_SendTell)) {
this.Log.Chat = $"/tell {player.PlayerName}"; Log.Chat = $"/tell {player.PlayerName}";
if (world.IsPublic) { if (world.IsPublic) {
this.Log.Chat += $"@{world.Name}"; Log.Chat += $"@{world.Name}";
} }
this.Log.Chat += " "; Log.Chat += " ";
this.Log.Activate = true; Log.Activate = true;
} }
var validContentId = chunk.Message?.ContentId is not (null or 0);
if (world.IsPublic) { if (world.IsPublic) {
var party = Plugin.PartyList; var party = Plugin.PartyList;
var leader = (ulong?) party[(int) party.PartyLeaderIndex]?.ContentId; var leader = (ulong?) party[(int) party.PartyLeaderIndex]?.ContentId;
var isLeader = party.Length == 0 || Plugin.ClientState.LocalContentId == leader; var isLeader = party.Length == 0 || Plugin.ClientState.LocalContentId == leader;
var member = party.FirstOrDefault(member => member.Name.TextValue == player.PlayerName && member.World.Id == world.RowId); var member = party.FirstOrDefault(member => member.Name.TextValue == player.PlayerName && member.World.Id == world.RowId);
var isInParty = member != default; var isInParty = member != default;
var inInstance = this.Ui.Plugin.Functions.IsInInstance(); var inInstance = Ui.Plugin.Functions.IsInInstance();
var inPartyInstance = Plugin.DataManager.GetExcelSheet<TerritoryType>()!.GetRow(Plugin.ClientState.TerritoryType)?.TerritoryIntendedUse is (41 or 47 or 48 or 52 or 53); var inPartyInstance = Plugin.DataManager.GetExcelSheet<TerritoryType>()!.GetRow(Plugin.ClientState.TerritoryType)?.TerritoryIntendedUse is (41 or 47 or 48 or 52 or 53);
if (isLeader) { if (isLeader) {
if (!isInParty) { if (!isInParty) {
if (inInstance && inPartyInstance) { if (inInstance && inPartyInstance) {
if (chunk.Message?.ContentId is not (null or 0) && ImGui.Selectable(Language.Context_InviteToParty)) { if (validContentId && ImGui.Selectable(Language.Context_InviteToParty)) {
this.Ui.Plugin.Functions.Party.InviteInInstance(chunk.Message!.ContentId); Ui.Plugin.Functions.Party.InviteInInstance(chunk.Message!.ContentId);
} }
} else if (!inInstance && ImGui.BeginMenu(Language.Context_InviteToParty)) { } else if (!inInstance && ImGui.BeginMenu(Language.Context_InviteToParty)) {
if (ImGui.Selectable(Language.Context_InviteToParty_SameWorld)) { if (ImGui.Selectable(Language.Context_InviteToParty_SameWorld)) {
this.Ui.Plugin.Functions.Party.InviteSameWorld(player.PlayerName, (ushort) world.RowId, chunk.Message?.ContentId ?? 0); Ui.Plugin.Functions.Party.InviteSameWorld(player.PlayerName, (ushort) world.RowId, chunk.Message?.ContentId ?? 0);
} }
if (chunk.Message?.ContentId is not (null or 0) && ImGui.Selectable(Language.Context_InviteToParty_DifferentWorld)) { if (validContentId && ImGui.Selectable(Language.Context_InviteToParty_DifferentWorld)) {
this.Ui.Plugin.Functions.Party.InviteOtherWorld(chunk.Message!.ContentId); Ui.Plugin.Functions.Party.InviteOtherWorld(chunk.Message!.ContentId);
} }
ImGui.EndMenu(); ImGui.EndMenu();
@@ -505,55 +510,58 @@ internal sealed class PayloadHandler {
if (isInParty && member != null && (!inInstance || (inInstance && inPartyInstance))) { if (isInParty && member != null && (!inInstance || (inInstance && inPartyInstance))) {
if (ImGui.Selectable(Language.Context_Promote)) { if (ImGui.Selectable(Language.Context_Promote)) {
this.Ui.Plugin.Functions.Party.Promote(player.PlayerName, (ulong) member.ContentId); Ui.Plugin.Functions.Party.Promote(player.PlayerName, (ulong) member.ContentId);
} }
if (ImGui.Selectable(Language.Context_KickFromParty)) { if (ImGui.Selectable(Language.Context_KickFromParty)) {
this.Ui.Plugin.Functions.Party.Kick(player.PlayerName, (ulong) member.ContentId); Ui.Plugin.Functions.Party.Kick(player.PlayerName, (ulong) member.ContentId);
} }
} }
} }
var isFriend = this.Ui.Plugin.Common.Functions.FriendList.List.Any(friend => friend.Name.TextValue == player.PlayerName && friend.HomeWorld == world.RowId); var isFriend = Ui.Plugin.Common.Functions.FriendList.List.Any(friend => friend.Name.TextValue == player.PlayerName && friend.HomeWorld == world.RowId);
if (!isFriend && ImGui.Selectable(Language.Context_SendFriendRequest)) { if (!isFriend && ImGui.Selectable(Language.Context_SendFriendRequest)) {
this.Ui.Plugin.Functions.SendFriendRequest(player.PlayerName, (ushort) world.RowId); Ui.Plugin.Functions.SendFriendRequest(player.PlayerName, (ushort) world.RowId);
} }
if (ImGui.Selectable(Language.Context_AddToBlacklist)) { if (ImGui.Selectable(Language.Context_AddToBlacklist)) {
this.Ui.Plugin.Functions.AddToBlacklist(player.PlayerName, (ushort) world.RowId); Ui.Plugin.Functions.AddToBlacklist(player.PlayerName, (ushort) world.RowId);
} }
if (this.Ui.Plugin.Functions.IsMentor() && ImGui.Selectable(Language.Context_InviteToNoviceNetwork)) { if (Ui.Plugin.Functions.IsMentor() && ImGui.Selectable(Language.Context_InviteToNoviceNetwork)) {
this.Ui.Plugin.Functions.Context.InviteToNoviceNetwork(player.PlayerName, (ushort) world.RowId); Ui.Plugin.Functions.Context.InviteToNoviceNetwork(player.PlayerName, (ushort) world.RowId);
} }
} }
var inputChannel = chunk.Message?.Code.Type.ToInputChannel(); var inputChannel = chunk.Message?.Code.Type.ToInputChannel();
if (inputChannel != null && ImGui.Selectable(Language.Context_ReplyInSelectedChatMode)) { if (inputChannel != null && ImGui.Selectable(Language.Context_ReplyInSelectedChatMode)) {
this.Ui.Plugin.Functions.Chat.SetChannel(inputChannel.Value); Ui.Plugin.Functions.Chat.SetChannel(inputChannel.Value);
this.Log.Activate = true; Log.Activate = true;
} }
if (ImGui.Selectable(Language.Context_Target) && this.FindCharacterForPayload(player) is { } obj) { if (ImGui.Selectable(Language.Context_Target) && FindCharacterForPayload(player) is { } obj) {
Plugin.TargetManager.Target = obj; Plugin.TargetManager.Target = obj;
} }
if (validContentId && ImGui.Selectable(Language.Context_AdventurerPlate))
{
if (!Ui.Plugin.Functions.TryOpenAdventurerPlate(chunk.Message!.ContentId))
WrapperUtil.AddNotification(Language.Context_AdventurerPlateError, NotificationType.Warning);
}
// View Party Finder 0x2E // View Party Finder 0x2E
} }
private PlayerCharacter? FindCharacterForPayload(PlayerPayload payload) { private PlayerCharacter? FindCharacterForPayload(PlayerPayload payload) {
foreach (var obj in Plugin.ObjectTable) { foreach (var obj in Plugin.ObjectTable) {
if (obj is not PlayerCharacter character) { if (obj is not PlayerCharacter character)
continue; continue;
}
if (character.Name.TextValue != payload.PlayerName) { if (character.Name.TextValue != payload.PlayerName)
continue; continue;
}
if (payload.World.IsPublic && character.HomeWorld.Id != payload.World.RowId) { if (payload.World.IsPublic && character.HomeWorld.Id != payload.World.RowId)
continue; continue;
}
return character; return character;
} }
+1
View File
@@ -31,6 +31,7 @@ public sealed class Plugin : IDalamudPlugin {
[PluginService] internal static ITextureProvider TextureProvider { get; private set; } = null!; [PluginService] internal static ITextureProvider TextureProvider { get; private set; } = null!;
[PluginService] internal static IGameInteropProvider GameInteropProvider { get; private set; } = null!; [PluginService] internal static IGameInteropProvider GameInteropProvider { get; private set; } = null!;
[PluginService] internal static IGameConfig GameConfig { get; private set; } = null!; [PluginService] internal static IGameConfig GameConfig { get; private set; } = null!;
[PluginService] internal static INotificationManager Notification { get; private set; } = null!;
internal Configuration Config { get; } internal Configuration Config { get; }
internal Commands Commands { get; } internal Commands Commands { get; }
+2017 -1244
View File
File diff suppressed because it is too large Load Diff
+6
View File
@@ -862,4 +862,10 @@
<data name="Migration_Line4"> <data name="Migration_Line4">
<value>Do not close FFXIV, unload Dalamud, or turn off your computer during this time.</value> <value>Do not close FFXIV, unload Dalamud, or turn off your computer during this time.</value>
</data> </data>
<data name="Context_AdventurerPlate" xml:space="preserve">
<value>View Adventurer Plate</value>
</data>
<data name="Context_AdventurerPlateError" xml:space="preserve">
<value>Unable to open adventurer plate at this moment</value>
</data>
</root> </root>
+12
View File
@@ -0,0 +1,12 @@
using Dalamud.Interface.ImGuiNotification;
using Dalamud.Interface.Internal.Notifications;
namespace ChatTwo.Util;
public static class WrapperUtil
{
public static void AddNotification(string content, NotificationType type, bool minimized = true)
{
Plugin.Notification.AddNotification(new Notification { Content = content, Type = type, Minimized = minimized });
}
}