This commit is contained in:
Infi
2024-11-13 04:13:18 +01:00
parent 9597218319
commit 45fdac0dd6
21 changed files with 341 additions and 339 deletions
+33 -49
View File
@@ -14,15 +14,12 @@ using Dalamud.Interface.Textures;
using Dalamud.Interface.Textures.TextureWraps;
using Dalamud.Interface.Utility;
using Dalamud.Interface.Utility.Raii;
using Dalamud.Memory;
using Dalamud.Utility;
using FFXIVClientStructs.FFXIV.Client.LayoutEngine;
using FFXIVClientStructs.FFXIV.Client.UI;
using FFXIVClientStructs.FFXIV.Component.GUI;
using ImGuiNET;
using Lumina.Excel;
using Lumina.Excel.GeneratedSheets;
using Lumina.Excel.Sheets;
using Action = System.Action;
using DalamudPartyFinderPayload = Dalamud.Game.Text.SeStringHandling.Payloads.PartyFinderPayload;
using ChatTwoPartyFinderPayload = ChatTwo.Util.PartyFinderPayload;
@@ -40,21 +37,11 @@ public sealed class PayloadHandler {
public uint HoverCounter;
public uint LastHoverCounter;
private readonly ExcelSheet<Item> ItemSheet;
private readonly ExcelSheet<EventItem> EventItemSheet;
private readonly ExcelSheet<TerritoryType> TerritorySheet;
private readonly ExcelSheet<EventItemHelp> EventItemHelpSheet;
private const uint PopupSfx = 1u;
internal PayloadHandler(ChatLogWindow logWindow)
{
LogWindow = logWindow;
ItemSheet = Plugin.DataManager.GetExcelSheet<Item>()!;
EventItemSheet = Plugin.DataManager.GetExcelSheet<EventItem>()!;
TerritorySheet = Plugin.DataManager.GetExcelSheet<TerritoryType>()!;
EventItemHelpSheet = Plugin.DataManager.GetExcelSheet<EventItemHelp>()!;
}
internal void Draw()
@@ -325,15 +312,15 @@ public sealed class PayloadHandler {
private void HoverStatus(StatusPayload status)
{
if (Plugin.TextureProvider.GetFromGameIcon(status.Status.Icon).GetWrapOrDefault() is { } icon)
if (Plugin.TextureProvider.GetFromGameIcon(status.Status.Value.Icon).GetWrapOrDefault() is { } icon)
InlineIcon(icon);
var nameString = ResolveRsv(status.Status.Name.ToDalamudString());
var nameString = ResolveRsv(status.Status.Value.Name.ToDalamudString());
var name = ChunkUtil.ToChunks(nameString, ChunkSource.None, null);
LogWindow.DrawChunks(name.ToList());
ImGui.Separator();
var descString = ResolveRsv(status.Status.Description.ToDalamudString());
var descString = ResolveRsv(status.Status.Value.Description.ToDalamudString());
var desc = ChunkUtil.ToChunks(descString, ChunkSource.None, null);
LogWindow.DrawChunks(desc.ToList());
}
@@ -346,26 +333,24 @@ public sealed class PayloadHandler {
return;
}
if (item.Item == null)
return;
if (Plugin.TextureProvider.GetFromGameIcon(new GameIconLookup(item.Item.Icon, item.IsHQ)).GetWrapOrDefault() is { } icon)
item.Item.TryGetValue(out Item resolvedItem);
if (Plugin.TextureProvider.GetFromGameIcon(new GameIconLookup(resolvedItem.Icon, item.IsHQ)).GetWrapOrDefault() is { } icon)
InlineIcon(icon);
var name = ChunkUtil.ToChunks(item.Item.Name.ToDalamudString(), ChunkSource.None, null);
var name = ChunkUtil.ToChunks(resolvedItem.Name.ToDalamudString(), ChunkSource.None, null);
LogWindow.DrawChunks(name.ToList());
ImGui.Separator();
var desc = ChunkUtil.ToChunks(item.Item.Description.ToDalamudString(), ChunkSource.None, null);
var desc = ChunkUtil.ToChunks(resolvedItem.Description.ToDalamudString(), ChunkSource.None, null);
LogWindow.DrawChunks(desc.ToList());
}
private void HoverEventItem(ItemPayload payload)
{
var item = EventItemSheet.GetRow(payload.RawItemId);
if (item == null)
if (!Sheets.EventItemSheet.HasRow(payload.RawItemId))
return;
var item = Sheets.EventItemSheet.GetRow(payload.RawItemId);
if (Plugin.TextureProvider.GetFromGameIcon(new GameIconLookup(item.Icon)).GetWrapOrDefault() is { } icon)
InlineIcon(icon);
@@ -373,12 +358,11 @@ public sealed class PayloadHandler {
LogWindow.DrawChunks(name.ToList());
ImGui.Separator();
var help = EventItemHelpSheet.GetRow(payload.RawItemId);
if (help != null)
{
var desc = ChunkUtil.ToChunks(help.Description.ToDalamudString(), ChunkSource.None, null);
LogWindow.DrawChunks(desc.ToList());
}
if (!Sheets.EventItemHelpSheet.HasRow(payload.RawItemId))
return;
var help = Sheets.EventItemHelpSheet.GetRow(payload.RawItemId);
LogWindow.DrawChunks(ChunkUtil.ToChunks(help.Description.ToDalamudString(), ChunkSource.None, null).ToList());
}
private void HoverURI(UriPayload uri)
@@ -467,10 +451,10 @@ public sealed class PayloadHandler {
return;
}
var item = ItemSheet.GetRow(payload.ItemId);
if (item == null)
if (!Sheets.ItemSheet.HasRow(payload.ItemId))
return;
var item = Sheets.ItemSheet.GetRow(payload.ItemId);
var hq = payload.Kind == ItemPayload.ItemKind.Hq;
if (Plugin.TextureProvider.GetFromGameIcon(new GameIconLookup(item.Icon, hq)).GetWrapOrDefault() is { } icon)
InlineIcon(icon);
@@ -486,7 +470,7 @@ public sealed class PayloadHandler {
ImGui.Separator();
var realItemId = payload.RawItemId;
if (item.EquipSlotCategory.Row != 0)
if (item.EquipSlotCategory.RowId != 0)
{
if (ImGui.Selectable(Language.Context_TryOn))
GameFunctions.Context.TryOn(realItemId, 0);
@@ -495,7 +479,7 @@ public sealed class PayloadHandler {
GameFunctions.Context.OpenItemComparison(realItemId);
}
if (item.ItemSearchCategory.Value?.Category == 3)
if (item.ItemSearchCategory.Value.Category == 3)
if (ImGui.Selectable(Language.Context_SearchRecipes))
GameFunctions.Context.SearchForRecipesUsingItem(payload.ItemId);
@@ -514,10 +498,10 @@ public sealed class PayloadHandler {
if (payload.Kind != ItemPayload.ItemKind.EventItem)
return;
var item = EventItemSheet.GetRow(payload.ItemId);
if (item == null)
if (!Sheets.EventItemSheet.HasRow(payload.ItemId))
return;
var item = Sheets.EventItemSheet.GetRow(payload.ItemId);
if (Plugin.TextureProvider.GetFromGameIcon(new GameIconLookup(item.Icon)).GetWrapOrDefault() is { } icon)
InlineIcon(icon);
@@ -541,16 +525,16 @@ public sealed class PayloadHandler {
var world = player.World;
if (chunk.Message?.Code.Type == ChatType.FreeCompanyLoginLogout)
if (Plugin.ClientState.LocalPlayer?.HomeWorld.GameData is { } homeWorld)
world = homeWorld;
if (Plugin.ClientState.LocalPlayer?.HomeWorld.IsValid == true)
world = Plugin.ClientState.LocalPlayer.HomeWorld;
var name = new List<Chunk> { new TextChunk(ChunkSource.None, null, player.PlayerName) };
if (world.IsPublic)
if (world.Value.IsPublic)
{
name.AddRange(new Chunk[]
{
new IconChunk(ChunkSource.None, null, BitmapFontIcon.CrossWorld),
new TextChunk(ChunkSource.None, null, world.Name),
new TextChunk(ChunkSource.None, null, world.Value.Name.ExtractText()),
});
}
@@ -561,31 +545,31 @@ public sealed class PayloadHandler {
if (ImGui.Selectable(Language.Context_SendTell))
{
// Eureka and Bozja need special handling as tells work different
if (TerritorySheet.GetRow(Plugin.ClientState.TerritoryType)?.TerritoryIntendedUse != 41)
if (Sheets.TerritorySheet.GetRow(Plugin.ClientState.TerritoryType).TerritoryIntendedUse.RowId != 41)
{
LogWindow.Chat = $"/tell {player.PlayerName}";
if (world.IsPublic)
LogWindow.Chat += $"@{world.Name}";
if (world.Value.IsPublic)
LogWindow.Chat += $"@{world.Value.Name}";
LogWindow.Chat += " ";
}
else if (validContentId)
{
LogWindow.Plugin.Functions.Chat.SetEurekaTellChannel(player.PlayerName, world.Name.ToString(), (ushort) world.RowId, 0, chunk.Message!.ContentId, 0, false);
LogWindow.Plugin.Functions.Chat.SetEurekaTellChannel(player.PlayerName, world.Value.Name.ToString(), (ushort) world.RowId, 0, chunk.Message!.ContentId, 0, false);
}
LogWindow.Activate = true;
}
if (world.IsPublic)
if (world.Value.IsPublic)
{
var party = Plugin.PartyList;
var leader = (ulong?) party[(int) party.PartyLeaderIndex]?.ContentId;
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.RowId == world.RowId);
var isInParty = member != default;
var inInstance = GameFunctions.GameFunctions.IsInInstance();
var inPartyInstance = TerritorySheet.GetRow(Plugin.ClientState.TerritoryType)?.TerritoryIntendedUse is (41 or 47 or 48 or 52 or 53);
var inPartyInstance = Sheets.TerritorySheet.GetRow(Plugin.ClientState.TerritoryType).TerritoryIntendedUse.RowId is (41 or 47 or 48 or 52 or 53);
if (isLeader)
{
if (!isInParty)
@@ -655,7 +639,7 @@ public sealed class PayloadHandler {
if (character.Name.TextValue != payload.PlayerName)
continue;
if (payload.World.IsPublic && character.HomeWorld.Id != payload.World.RowId)
if (payload.World.Value.IsPublic && character.HomeWorld.RowId != payload.World.RowId)
continue;
return character;