API 11
This commit is contained in:
+1
-1
@@ -11,7 +11,7 @@ resharper_csharp_brace_style=next_line
|
||||
resharper_csharp_braces_for_foreach=not_required
|
||||
resharper_csharp_braces_for_for=not_required
|
||||
resharper_csharp_braces_for_while=not_required
|
||||
charset=utf-8-bom
|
||||
charset=utf-8
|
||||
end_of_line=crlf
|
||||
|
||||
# Microsoft .NET properties
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="JetBrains.Annotations" Version="2023.3.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.3.1" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.3.1" />
|
||||
<PackageReference Include="JetBrains.Annotations" Version="2024.3.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
|
||||
<PackageReference Include="MSTest.TestAdapter" Version="3.6.3" />
|
||||
<PackageReference Include="MSTest.TestFramework" Version="3.6.3" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<Version>1.29.3</Version>
|
||||
<Version>1.29.4</Version>
|
||||
<TargetFramework>net8.0-windows</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
@@ -53,13 +53,13 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="DalamudPackager" Version="2.1.13" />
|
||||
<PackageReference Include="DalamudPackager" Version="11.0.0" />
|
||||
<PackageReference Include="EmbedIO" Version="3.5.2" />
|
||||
<PackageReference Include="MessagePack" Version="2.5.140" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.4" />
|
||||
<PackageReference Include="Pidgin" Version="3.2.3" />
|
||||
<PackageReference Include="MessagePack" Version="3.0.238-rc.1" />
|
||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.0" />
|
||||
<PackageReference Include="Pidgin" Version="3.3.0" />
|
||||
<PackageReference Include="SixLabors.ImageSharp" Version="3.1.5" />
|
||||
<PackageReference Include="Watson.Lite" Version="6.2.2" />
|
||||
<PackageReference Include="Watson.Lite" Version="6.2.3" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
using Dalamud.Plugin.Services;
|
||||
using Lumina.Excel.GeneratedSheets;
|
||||
using Lumina.Excel.Sheets;
|
||||
|
||||
namespace ChatTwo.Code;
|
||||
|
||||
@@ -146,7 +146,7 @@ internal static class InputChannelExt
|
||||
return null;
|
||||
|
||||
var cmds = data.GetExcelSheet<TextCommand>();
|
||||
return cmds == null ? null : ids.Select(id => cmds.GetRow(id)).Where(id => id != null).Cast<TextCommand>();
|
||||
return ids.Where(id => cmds.HasRow(id)).Select(id => cmds.GetRow(id));
|
||||
}
|
||||
|
||||
internal static bool IsLinkshell(this InputChannel channel) => channel switch
|
||||
|
||||
@@ -237,20 +237,14 @@ internal class Tab
|
||||
public float Opacity = 100f;
|
||||
public bool InputDisabled;
|
||||
|
||||
[NonSerialized]
|
||||
public uint Unread;
|
||||
[NonSerialized] public uint Unread;
|
||||
[NonSerialized] public long LastActivity;
|
||||
[NonSerialized] public MessageList Messages = new();
|
||||
|
||||
[NonSerialized]
|
||||
public long LastActivity;
|
||||
[NonSerialized] public TellTarget? TellTarget;
|
||||
[NonSerialized] public InputChannel? PreviousChannel;
|
||||
|
||||
[NonSerialized]
|
||||
public MessageList Messages = new();
|
||||
|
||||
[NonSerialized]
|
||||
public InputChannel? PreviousChannel;
|
||||
|
||||
[NonSerialized]
|
||||
public Guid Identifier = Guid.NewGuid();
|
||||
[NonSerialized] public Guid Identifier = Guid.NewGuid();
|
||||
|
||||
internal bool Matches(Message message) => message.Matches(ChatCodes, ExtraChatAll, ExtraChatChannels);
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@ internal sealed unsafe class Chat : IDisposable
|
||||
[Signature("48 89 5C 24 ?? 48 89 74 24 ?? 57 48 83 EC ?? 48 8D B9 ?? ?? ?? ?? 33 C0")]
|
||||
private readonly delegate* unmanaged<RaptureLogModule*, ushort, Utf8String*, Utf8String*, ulong, ulong, ushort, byte, int, byte, void> PrintTellNative = null!;
|
||||
|
||||
[Signature("E8 ?? ?? ?? ?? 48 8D 4C 24 ?? E8 ?? ?? ?? ?? 48 8D 8C 24 ?? ?? ?? ?? E8 ?? ?? ?? ?? B0 01")]
|
||||
[Signature("E8 ?? ?? ?? ?? 48 8D 4C 24 ?? E8 ?? ?? ?? ?? 48 8D 8C 24 ?? ?? ?? ?? E8 ?? ?? ?? ?? B0 ?? 48 8B 8C 24")]
|
||||
private readonly delegate* unmanaged<NetworkModule*, ulong, ushort, Utf8String*, Utf8String*, ushort, ushort, byte> SendTellNative = null!;
|
||||
|
||||
// Client::UI::AddonChatLog.OnRefresh
|
||||
@@ -38,7 +38,7 @@ internal sealed unsafe class Chat : IDisposable
|
||||
private delegate byte ChatLogRefreshDelegate(nint log, ushort eventId, AtkValue* value);
|
||||
|
||||
// Replace with CS version later
|
||||
[Signature("E8 ?? ?? ?? ?? EB 81 48 8B 1D", DetourName = nameof(ContextMenuTellInForayDetour))]
|
||||
[Signature("48 89 5C 24 ?? 55 56 57 48 81 EC ?? ?? ?? ?? 48 8B 05 ?? ?? ?? ?? 48 33 C4 48 89 84 24 ?? ?? ?? ?? 83 B9", DetourName = nameof(ContextMenuTellInForayDetour))]
|
||||
private Hook<ContextMenuTellInForayDelegate>? ContextMenuTellInForayHook { get; set; }
|
||||
private delegate void ContextMenuTellInForayDelegate(RaptureShellModule* module, Utf8String* playerName, Utf8String* worldName, ushort worldId, ulong accountId, ulong contentId, ushort reason);
|
||||
|
||||
@@ -123,16 +123,16 @@ internal sealed unsafe class Chat : IDisposable
|
||||
_ => 0,
|
||||
};
|
||||
|
||||
internal static int RotateLinkshellHistory(RotateMode mode)
|
||||
internal static void RotateLinkshellHistory(RotateMode mode)
|
||||
{
|
||||
var uiModule = UIModule.Instance();
|
||||
if (mode == RotateMode.None)
|
||||
uiModule->LinkshellCycle = -1;
|
||||
|
||||
return uiModule->RotateLinkshellHistory(GetRotateIdx(mode));
|
||||
uiModule->RotateLinkshellHistory(GetRotateIdx(mode));
|
||||
}
|
||||
|
||||
internal static int RotateCrossLinkshellHistory(RotateMode mode) =>
|
||||
internal static void RotateCrossLinkshellHistory(RotateMode mode) =>
|
||||
UIModule.Instance()->RotateCrossLinkshellHistory(GetRotateIdx(mode));
|
||||
|
||||
// This function looks up a channel's user-defined color.
|
||||
|
||||
@@ -8,7 +8,7 @@ namespace ChatTwo.GameFunctions;
|
||||
// From: https://git.anna.lgbt/anna/XivCommon/src/branch/main/XivCommon/Functions/Chat.cs
|
||||
public unsafe class ChatCommon
|
||||
{
|
||||
[Signature("48 89 5C 24 ?? 57 48 83 EC 20 48 8B FA 48 8B D9 45 84 C9")]
|
||||
[Signature("48 89 5C 24 ?? 48 89 74 24 ?? 57 48 83 EC ?? 48 8B F2 48 8B F9 45 84 C9")]
|
||||
private readonly delegate* unmanaged<UIModule*, Utf8String*, nint, byte, void> ProcessChatBox = null!;
|
||||
|
||||
internal ChatCommon()
|
||||
|
||||
@@ -10,7 +10,8 @@ using FFXIVClientStructs.FFXIV.Client.UI;
|
||||
using FFXIVClientStructs.FFXIV.Client.UI.Agent;
|
||||
using FFXIVClientStructs.FFXIV.Client.UI.Info;
|
||||
using FFXIVClientStructs.FFXIV.Component.GUI;
|
||||
using Lumina.Excel.GeneratedSheets;
|
||||
using Lumina.Excel;
|
||||
using Lumina.Excel.Sheets;
|
||||
using ValueType = FFXIVClientStructs.FFXIV.Component.GUI.ValueType;
|
||||
|
||||
namespace ChatTwo.GameFunctions;
|
||||
@@ -61,11 +62,9 @@ internal unsafe class GameFunctions : IDisposable
|
||||
|
||||
private void ListCommand(string name, ushort world, string commandName)
|
||||
{
|
||||
var row = Plugin.DataManager.GetExcelSheet<World>()!.GetRow(world);
|
||||
if (row == null)
|
||||
return;
|
||||
var row = Plugin.DataManager.GetExcelSheet<World>().GetRow(world);
|
||||
|
||||
var worldName = row.Name.RawString;
|
||||
var worldName = row.Name.ExtractText();
|
||||
ReplacementName = $"{name}@{worldName}";
|
||||
Plugin.Common.SendMessage($"/{commandName} add {Placeholder}");
|
||||
}
|
||||
@@ -174,9 +173,9 @@ internal unsafe class GameFunctions : IDisposable
|
||||
return InfoProxyFriendList.Instance()->CharDataSpan.ToArray();
|
||||
}
|
||||
|
||||
internal static void OpenQuestLog(Quest quest)
|
||||
internal static void OpenQuestLog(RowRef<Quest> quest)
|
||||
{
|
||||
var splits = quest.Id.RawString.Split("_");
|
||||
var splits = quest.Value.Id.ExtractText().Split("_");
|
||||
if (splits.Length != 2)
|
||||
{
|
||||
Plugin.ChatGui.Print("QuestId is wrongly formatted");
|
||||
|
||||
@@ -86,7 +86,7 @@ public class Processing
|
||||
if (chunk.Link is PlayerPayload playerPayload)
|
||||
userContent = Plugin.ChatLogWindow.HidePlayerInString(userContent, playerPayload.PlayerName, playerPayload.World.RowId);
|
||||
else if (Plugin.ClientState.LocalPlayer is { } player)
|
||||
userContent = Plugin.ChatLogWindow.HidePlayerInString(userContent, player.Name.TextValue, player.HomeWorld.Id);
|
||||
userContent = Plugin.ChatLogWindow.HidePlayerInString(userContent, player.Name.TextValue, player.HomeWorld.RowId);
|
||||
}
|
||||
|
||||
var isNotUrl = text.Link is not UriPayload;
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@ using Dalamud.Game.Text.SeStringHandling.Payloads;
|
||||
using System.Text.RegularExpressions;
|
||||
using Dalamud.Game.Text;
|
||||
using FFXIVClientStructs.FFXIV.Client.UI.Agent;
|
||||
using Lumina.Excel.GeneratedSheets;
|
||||
using Lumina.Excel.Sheets;
|
||||
|
||||
namespace ChatTwo;
|
||||
|
||||
|
||||
@@ -8,8 +8,9 @@ using Dalamud.Game.Text.SeStringHandling;
|
||||
using Dalamud.Hooking;
|
||||
using Dalamud.Interface.ImGuiNotification;
|
||||
using Dalamud.Plugin.Services;
|
||||
using Dalamud.Utility;
|
||||
using FFXIVClientStructs.FFXIV.Client.UI.Misc;
|
||||
using Lumina.Excel.GeneratedSheets;
|
||||
using Lumina.Excel.Sheets;
|
||||
|
||||
namespace ChatTwo;
|
||||
|
||||
@@ -90,7 +91,7 @@ internal class MessageManager : IAsyncDisposable
|
||||
return Path.Join(Plugin.Interface.ConfigDirectory.FullName, "chat-sqlite.db");
|
||||
}
|
||||
|
||||
private void Logout()
|
||||
private void Logout(int _, int __)
|
||||
{
|
||||
LastContentId = 0;
|
||||
}
|
||||
@@ -298,11 +299,8 @@ internal class MessageManager : IAsyncDisposable
|
||||
if (Formats.TryGetValue(type, out var cached))
|
||||
return cached;
|
||||
|
||||
var logKind = Plugin.DataManager.GetExcelSheet<LogKind>()!.GetRow((ushort)type);
|
||||
if (logKind == null)
|
||||
return null;
|
||||
|
||||
var format = (SeString)logKind.Format;
|
||||
var logKind = Plugin.DataManager.GetExcelSheet<LogKind>().GetRow((ushort)type);
|
||||
var format = logKind.Format.ToDalamudString();
|
||||
|
||||
static bool IsStringParam(Payload payload, byte num)
|
||||
{
|
||||
|
||||
+33
-49
@@ -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;
|
||||
|
||||
+13
-5
@@ -1,5 +1,5 @@
|
||||
using Lumina.Excel;
|
||||
using Lumina.Excel.GeneratedSheets;
|
||||
using Lumina.Excel.Sheets;
|
||||
|
||||
namespace ChatTwo;
|
||||
|
||||
@@ -8,13 +8,21 @@ public static class Sheets
|
||||
public static readonly ExcelSheet<Item> ItemSheet;
|
||||
public static readonly ExcelSheet<World> WorldSheet;
|
||||
public static readonly ExcelSheet<LogFilter> LogFilterSheet;
|
||||
public static readonly ExcelSheet<EventItem> EventItemSheet;
|
||||
public static readonly ExcelSheet<Completion> CompletionSheet;
|
||||
public static readonly ExcelSheet<TerritoryType> TerritorySheet;
|
||||
public static readonly ExcelSheet<TextCommand> TextCommandSheet;
|
||||
public static readonly ExcelSheet<EventItemHelp> EventItemHelpSheet;
|
||||
|
||||
static Sheets()
|
||||
{
|
||||
ItemSheet = Plugin.DataManager.GetExcelSheet<Item>()!;
|
||||
WorldSheet = Plugin.DataManager.GetExcelSheet<World>()!;
|
||||
LogFilterSheet = Plugin.DataManager.GetExcelSheet<LogFilter>()!;
|
||||
TextCommandSheet = Plugin.DataManager.GetExcelSheet<TextCommand>()!;
|
||||
ItemSheet = Plugin.DataManager.GetExcelSheet<Item>();
|
||||
WorldSheet = Plugin.DataManager.GetExcelSheet<World>();
|
||||
EventItemSheet = Plugin.DataManager.GetExcelSheet<EventItem>();
|
||||
LogFilterSheet = Plugin.DataManager.GetExcelSheet<LogFilter>();
|
||||
CompletionSheet = Plugin.DataManager.GetExcelSheet<Completion>();
|
||||
TerritorySheet = Plugin.DataManager.GetExcelSheet<TerritoryType>();
|
||||
TextCommandSheet = Plugin.DataManager.GetExcelSheet<TextCommand>();
|
||||
EventItemHelpSheet = Plugin.DataManager.GetExcelSheet<EventItemHelp>();
|
||||
}
|
||||
}
|
||||
+55
-43
@@ -19,8 +19,10 @@ using Dalamud.Interface.Utility.Raii;
|
||||
using Dalamud.Interface.Windowing;
|
||||
using Dalamud.Memory;
|
||||
using FFXIVClientStructs.FFXIV.Client.UI;
|
||||
using FFXIVClientStructs.FFXIV.Client.UI.Agent;
|
||||
using FFXIVClientStructs.FFXIV.Client.UI.Info;
|
||||
using ImGuiNET;
|
||||
using Lumina.Excel.GeneratedSheets;
|
||||
using Lumina.Excel.Sheets;
|
||||
|
||||
namespace ChatTwo.Ui;
|
||||
|
||||
@@ -57,7 +59,6 @@ public sealed class ChatLogWindow : Window
|
||||
private int InputBacklogIdx = -1;
|
||||
private int LastTab { get; set; }
|
||||
private InputChannel? TempChannel;
|
||||
internal TellTarget? TellTarget;
|
||||
public bool TellSpecial;
|
||||
private readonly Stopwatch LastResize = new();
|
||||
private AutoCompleteInfo? AutoCompleteInfo;
|
||||
@@ -128,7 +129,7 @@ public sealed class ChatLogWindow : Window
|
||||
Plugin.Commands.Register("/clearlog2").Execute -= ClearLog;
|
||||
}
|
||||
|
||||
private void Logout()
|
||||
private void Logout(int _, int __)
|
||||
{
|
||||
Plugin.MessageManager.ClearAllTabs();
|
||||
}
|
||||
@@ -138,8 +139,12 @@ public sealed class ChatLogWindow : Window
|
||||
Plugin.MessageManager.FilterAllTabsAsync();
|
||||
}
|
||||
|
||||
internal void Activated(ChatActivatedArgs args)
|
||||
internal unsafe void Activated(ChatActivatedArgs args)
|
||||
{
|
||||
// Return if we don't have a tab selected
|
||||
if (CurrentTab == null)
|
||||
return;
|
||||
|
||||
TellSpecial = args.TellSpecial;
|
||||
|
||||
Activate = true;
|
||||
@@ -176,18 +181,18 @@ public sealed class ChatLogWindow : Window
|
||||
|
||||
var tellInfo = Plugin.Functions.Chat.GetTellHistoryInfo(idx);
|
||||
if (tellInfo != null && reason != null)
|
||||
TellTarget = new TellTarget(tellInfo.Name, (ushort) tellInfo.World, tellInfo.ContentId, reason.Value);
|
||||
CurrentTab!.TellTarget = new TellTarget(tellInfo.Name, (ushort) tellInfo.World, tellInfo.ContentId, reason.Value);
|
||||
}
|
||||
else
|
||||
{
|
||||
TellTarget = null;
|
||||
CurrentTab!.TellTarget = null;
|
||||
if (target != null)
|
||||
TellTarget = target;
|
||||
CurrentTab!.TellTarget = target;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
TellTarget = null;
|
||||
CurrentTab!.TellTarget = null;
|
||||
}
|
||||
|
||||
if (info.Channel is InputChannel.Linkshell1 or InputChannel.CrossLinkshell1 && info.Rotate != RotateMode.None)
|
||||
@@ -199,15 +204,13 @@ public sealed class ChatLogWindow : Window
|
||||
// Rotate using the game's code.
|
||||
if (info.Channel == InputChannel.Linkshell1)
|
||||
{
|
||||
var idx = GameFunctions.Chat.RotateLinkshellHistory(info.Rotate);
|
||||
if (idx >= 0 && GameFunctions.Chat.ValidLinkshell((uint)idx))
|
||||
targetChannel = info.Channel + (uint)idx;
|
||||
GameFunctions.Chat.RotateLinkshellHistory(info.Rotate);
|
||||
targetChannel = (InputChannel) AgentChatLog.Instance()->CurrentChannel;
|
||||
}
|
||||
else
|
||||
{
|
||||
var idx = GameFunctions.Chat.RotateCrossLinkshellHistory(info.Rotate);
|
||||
if (idx >= 0 && GameFunctions.Chat.ValidCrossLinkshell((uint)idx))
|
||||
targetChannel = info.Channel + (uint)idx;
|
||||
GameFunctions.Chat.RotateCrossLinkshellHistory(info.Rotate);
|
||||
targetChannel = (InputChannel)AgentChatLog.Instance()->CurrentChannel;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -293,17 +296,19 @@ public sealed class ChatLogWindow : Window
|
||||
AddTextCommandChannel(command, type);
|
||||
}
|
||||
|
||||
var echo = Sheets.TextCommandSheet.GetRow(116);
|
||||
if (echo != null)
|
||||
if (Sheets.TextCommandSheet.HasRow(116))
|
||||
{
|
||||
var echo = Sheets.TextCommandSheet.GetRow(116);
|
||||
AddTextCommandChannel(echo, ChatType.Echo);
|
||||
}
|
||||
}
|
||||
|
||||
private void AddTextCommandChannel(TextCommand command, ChatType type)
|
||||
{
|
||||
TextCommandChannels[command.Command] = type;
|
||||
TextCommandChannels[command.ShortCommand] = type;
|
||||
TextCommandChannels[command.Alias] = type;
|
||||
TextCommandChannels[command.ShortAlias] = type;
|
||||
TextCommandChannels[command.Command.ExtractText()] = type;
|
||||
TextCommandChannels[command.ShortCommand.ExtractText()] = type;
|
||||
TextCommandChannels[command.Alias.ExtractText()] = type;
|
||||
TextCommandChannels[command.ShortAlias.ExtractText()] = type;
|
||||
}
|
||||
|
||||
private void SetUpAllCommands()
|
||||
@@ -313,10 +318,10 @@ public sealed class ChatLogWindow : Window
|
||||
|
||||
var commandNames = commands.SelectMany(cmd => new[]
|
||||
{
|
||||
cmd.Command.RawString,
|
||||
cmd.ShortCommand.RawString,
|
||||
cmd.Alias.RawString,
|
||||
cmd.ShortAlias.RawString,
|
||||
cmd.Command.ExtractText(),
|
||||
cmd.ShortCommand.ExtractText(),
|
||||
cmd.Alias.ExtractText(),
|
||||
cmd.ShortAlias.ExtractText(),
|
||||
});
|
||||
|
||||
foreach (var command in commandNames)
|
||||
@@ -673,8 +678,8 @@ public sealed class ChatLogWindow : Window
|
||||
UIModule.PlaySound(ChatCloseSfx);
|
||||
}
|
||||
|
||||
if (TempChannel is InputChannel.Tell)
|
||||
TellTarget = null;
|
||||
if (TempChannel is InputChannel.Tell && CurrentTab != null)
|
||||
CurrentTab.TellTarget = null;
|
||||
|
||||
TempChannel = null;
|
||||
if (Plugin.Functions.Chat.UsesTellTempChannel)
|
||||
@@ -724,7 +729,7 @@ public sealed class ChatLogWindow : Window
|
||||
var channels = new Dictionary<string, InputChannel>();
|
||||
foreach (var channel in Enum.GetValues<InputChannel>())
|
||||
{
|
||||
var name = Sheets.LogFilterSheet.FirstOrDefault(row => row.LogKind == (byte) channel.ToChatType())?.Name?.RawString ?? channel.ToChatType().Name();
|
||||
var name = Sheets.LogFilterSheet.FirstOrNull(row => row.LogKind == (byte) channel.ToChatType())?.Name.ExtractText() ?? channel.ToChatType().Name();
|
||||
if (channel.IsLinkshell())
|
||||
{
|
||||
var lsName = Plugin.Functions.Chat.GetLinkshellName(channel.LinkshellIndex());
|
||||
@@ -774,14 +779,17 @@ public sealed class ChatLogWindow : Window
|
||||
internal Chunk[] ReadChannelName(Tab? activeTab)
|
||||
{
|
||||
Chunk[] channelNameChunks;
|
||||
if (TellTarget != null)
|
||||
if (activeTab?.TellTarget != null)
|
||||
{
|
||||
var playerName = TellTarget.Name;
|
||||
var playerName = activeTab.TellTarget.Name;
|
||||
if (ScreenshotMode)
|
||||
// Note: don't use HidePlayerInString here because
|
||||
// abbreviation settings do not affect this.
|
||||
playerName = HashPlayer(TellTarget.Name, TellTarget.World);
|
||||
var world = Sheets.WorldSheet.GetRow(TellTarget.World)?.Name?.RawString ?? "???";
|
||||
playerName = HashPlayer(activeTab.TellTarget.Name, activeTab.TellTarget.World);
|
||||
|
||||
var world = Sheets.WorldSheet.HasRow(activeTab.TellTarget.World)
|
||||
? Sheets.WorldSheet.GetRow(activeTab.TellTarget.World).Name.ExtractText()
|
||||
: "???";
|
||||
|
||||
channelNameChunks =
|
||||
[
|
||||
@@ -834,7 +842,9 @@ public sealed class ChatLogWindow : Window
|
||||
// Note: don't use HidePlayerInString here because
|
||||
// abbreviation settings do not affect this.
|
||||
var playerName = HashPlayer(tellPlayerName, tellWorldId);
|
||||
var world = Sheets.WorldSheet.GetRow(tellWorldId)?.Name?.RawString ?? "???";
|
||||
var world = Sheets.WorldSheet.HasRow(tellWorldId)
|
||||
? Sheets.WorldSheet.GetRow(tellWorldId).Name.ExtractText()
|
||||
: "???";
|
||||
|
||||
channelNameChunks =
|
||||
[
|
||||
@@ -862,7 +872,8 @@ public sealed class ChatLogWindow : Window
|
||||
internal void SetChannel(InputChannel? channel)
|
||||
{
|
||||
channel ??= InputChannel.Say;
|
||||
TellTarget = null;
|
||||
if (CurrentTab != null)
|
||||
CurrentTab.TellTarget = null;
|
||||
|
||||
// Instead of calling SetChannel(), we ask the ExtraChat plugin to set a
|
||||
// channel override by just calling the command directly.
|
||||
@@ -901,8 +912,8 @@ public sealed class ChatLogWindow : Window
|
||||
Plugin.Functions.Chat.SendTellUsingCommandInner(tellBytes);
|
||||
|
||||
TellSpecial = false;
|
||||
if (TempChannel is InputChannel.Tell)
|
||||
TellTarget = null;
|
||||
if (TempChannel is InputChannel.Tell && CurrentTab != null)
|
||||
CurrentTab.TellTarget = null;
|
||||
|
||||
Chat = string.Empty;
|
||||
return;
|
||||
@@ -910,9 +921,9 @@ public sealed class ChatLogWindow : Window
|
||||
|
||||
if (!trimmed.StartsWith('/'))
|
||||
{
|
||||
if (TellTarget != null)
|
||||
if (CurrentTab?.TellTarget != null)
|
||||
{
|
||||
var target = TellTarget;
|
||||
var target = CurrentTab.TellTarget;
|
||||
var reason = target.Reason;
|
||||
var world = Sheets.WorldSheet.GetRow(target.World);
|
||||
if (world is { IsPublic: true })
|
||||
@@ -927,7 +938,7 @@ public sealed class ChatLogWindow : Window
|
||||
}
|
||||
|
||||
if (TempChannel is InputChannel.Tell)
|
||||
TellTarget = null;
|
||||
CurrentTab.TellTarget = null;
|
||||
|
||||
Chat = string.Empty;
|
||||
return;
|
||||
@@ -1213,6 +1224,7 @@ public sealed class ChatLogWindow : Window
|
||||
var switchedTab = LastTab != tabI;
|
||||
if (switchedTab)
|
||||
TabChannelSwitch(tab);
|
||||
|
||||
LastTab = tabI;
|
||||
tab.Unread = 0;
|
||||
|
||||
@@ -1588,12 +1600,12 @@ public sealed class ChatLogWindow : Window
|
||||
if (text.StartsWith('/'))
|
||||
{
|
||||
var command = text.Split(' ')[0];
|
||||
var cmd = Sheets.TextCommandSheet.FirstOrDefault(cmd =>
|
||||
cmd.Command.RawString == command || cmd.Alias.RawString == command ||
|
||||
cmd.ShortCommand.RawString == command || cmd.ShortAlias.RawString == command);
|
||||
var cmd = Sheets.TextCommandSheet.FirstOrNull(cmd =>
|
||||
cmd.Command.ExtractText() == command || cmd.Alias.ExtractText() == command ||
|
||||
cmd.ShortCommand.ExtractText() == command || cmd.ShortAlias.ExtractText() == command);
|
||||
|
||||
if (cmd != null)
|
||||
Plugin.CommandHelpWindow.UpdateContent(cmd);
|
||||
Plugin.CommandHelpWindow.UpdateContent(cmd.Value);
|
||||
}
|
||||
|
||||
if (data->EventFlag != ImGuiInputTextFlags.CallbackHistory)
|
||||
@@ -1733,7 +1745,7 @@ public sealed class ChatLogWindow : Window
|
||||
if (chunk.Link is PlayerPayload playerPayload)
|
||||
content = HidePlayerInString(content, playerPayload.PlayerName, playerPayload.World.RowId);
|
||||
else if (Plugin.ClientState.LocalPlayer is { } player)
|
||||
content = HidePlayerInString(content, player.Name.TextValue, player.HomeWorld.Id);
|
||||
content = HidePlayerInString(content, player.Name.TextValue, player.HomeWorld.RowId);
|
||||
}
|
||||
|
||||
if (wrap)
|
||||
|
||||
@@ -4,7 +4,7 @@ using Dalamud.Interface.Utility;
|
||||
using Dalamud.Interface.Windowing;
|
||||
using Dalamud.Utility;
|
||||
using ImGuiNET;
|
||||
using Lumina.Excel.GeneratedSheets;
|
||||
using Lumina.Excel.Sheets;
|
||||
|
||||
namespace ChatTwo.Ui;
|
||||
|
||||
@@ -59,6 +59,6 @@ public class CommandHelpWindow : Window {
|
||||
if (Command == null)
|
||||
return;
|
||||
|
||||
LogWindow.DrawChunks(ChunkUtil.ToChunks(Command.Description.ToDalamudString(), ChunkSource.None, null).ToList());
|
||||
LogWindow.DrawChunks(ChunkUtil.ToChunks(Command.Value.Description.ToDalamudString(), ChunkSource.None, null).ToList());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,8 @@ using Dalamud.Game.Text.SeStringHandling;
|
||||
using Dalamud.Game.Text.SeStringHandling.Payloads;
|
||||
using Dalamud.Interface.Windowing;
|
||||
using ImGuiNET;
|
||||
|
||||
using Lumina.Excel;
|
||||
using Lumina.Excel.Sheets;
|
||||
using DalamudPartyFinderPayload = Dalamud.Game.Text.SeStringHandling.Payloads.PartyFinderPayload;
|
||||
|
||||
namespace ChatTwo.Ui;
|
||||
@@ -84,11 +85,11 @@ public class SeStringDebugger : Window
|
||||
{
|
||||
RenderMetadataDictionary("Link MapLinkPayload", new Dictionary<string, string?>
|
||||
{
|
||||
{ "Map.RowId", map.Map?.RowId.ToString() },
|
||||
{ "Map.PlaceName", map.Map?.PlaceName.Value?.Name.ToString() },
|
||||
{ "Map.PlaceNameRegion", map.Map?.PlaceNameRegion.Value?.Name.ToString() },
|
||||
{ "Map.PlaceNameSub", map.Map?.PlaceNameSub.Value?.Name.ToString() },
|
||||
{ "TerritoryType.RowId", map.TerritoryType?.RowId.ToString() },
|
||||
{ "Map.RowId", map.Map.RowId.ToString() },
|
||||
{ "Map.PlaceName", map.Map.Value.PlaceName.Value.Name.ToString() },
|
||||
{ "Map.PlaceNameRegion", map.Map.Value.PlaceNameRegion.Value.Name.ToString() },
|
||||
{ "Map.PlaceNameSub", map.Map.Value.PlaceNameSub.Value.Name.ToString() },
|
||||
{ "TerritoryType.RowId", map.TerritoryType.RowId.ToString() },
|
||||
{ "RawX", map.RawX.ToString() },
|
||||
{ "RawY", map.RawY.ToString() },
|
||||
{ "XCoord", map.XCoord.ToString() },
|
||||
@@ -102,8 +103,8 @@ public class SeStringDebugger : Window
|
||||
{
|
||||
RenderMetadataDictionary("Link QuestPayload", new Dictionary<string, string?>
|
||||
{
|
||||
{ "Quest.RowId", quest.Quest?.RowId.ToString() },
|
||||
{ "Quest.Name", quest.Quest?.Name.ToString() },
|
||||
{ "Quest.RowId", quest.Quest.RowId.ToString() },
|
||||
{ "Quest.Name", quest.Quest.Value.Name.ToString() },
|
||||
});
|
||||
break;
|
||||
}
|
||||
@@ -131,7 +132,7 @@ public class SeStringDebugger : Window
|
||||
{
|
||||
{ "Displayed", player.DisplayedName },
|
||||
{ "Player Name", player.PlayerName },
|
||||
{ "World Name", player.World.Name },
|
||||
{ "World Name", player.World.Value.Name.ExtractText() },
|
||||
{ "Data", string.Join(" ", player.Encode().Select(b => b.ToString("X2"))) },
|
||||
});
|
||||
break;
|
||||
@@ -144,7 +145,7 @@ public class SeStringDebugger : Window
|
||||
{ "RawItemId", item.RawItemId.ToString() },
|
||||
{ "Kind", EnumName(item.Kind) },
|
||||
{ "IsHQ", item.IsHQ.ToString() },
|
||||
{ "Item.Name", item.Item?.Name.ToString() },
|
||||
{ "Item.Name", item.Kind == ItemPayload.ItemKind.EventItem ? Sheets.EventItemSheet.GetRow(item.ItemId).Name.ExtractText() : Sheets.ItemSheet.GetRow(item.ItemId).Name.ExtractText() },
|
||||
});
|
||||
break;
|
||||
}
|
||||
@@ -197,8 +198,8 @@ public class SeStringDebugger : Window
|
||||
RenderMetadataDictionary("Link StatusPayload", new Dictionary<string, string?>
|
||||
{
|
||||
{ "Status.RowId", status.Status.RowId.ToString() },
|
||||
{ "Status.Name", status.Status.Name },
|
||||
{ "Status.Icon", status.Status.Icon.ToString() }
|
||||
{ "Status.Name", status.Status.Value.Name.ExtractText() },
|
||||
{ "Status.Icon", status.Status.Value.Icon.ToString() }
|
||||
});
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -162,7 +162,7 @@ internal sealed class Database : ISettingsTab
|
||||
// Generate
|
||||
var stopwatch = Stopwatch.StartNew();
|
||||
var playerName = Plugin.ClientState.LocalPlayer?.Name.ToString() ?? "Unknown Player";
|
||||
var worldId = Plugin.ClientState.LocalPlayer?.HomeWorld.Id ?? 0;
|
||||
var worldId = Plugin.ClientState.LocalPlayer?.HomeWorld.RowId ?? 0;
|
||||
var senderSource = new SeStringBuilder()
|
||||
.AddText("<")
|
||||
.Add(new PlayerPayload(playerName, worldId))
|
||||
|
||||
+115
-117
@@ -5,8 +5,7 @@ using Dalamud.Game;
|
||||
using Dalamud.Game.Text.SeStringHandling;
|
||||
using Dalamud.Game.Text.SeStringHandling.Payloads;
|
||||
using Dalamud.Utility;
|
||||
using Lumina.Excel;
|
||||
using Lumina.Excel.GeneratedSheets;
|
||||
using Lumina.Excel.Sheets;
|
||||
using Pidgin;
|
||||
using static Pidgin.Parser;
|
||||
using static Pidgin.Parser<char>;
|
||||
@@ -19,13 +18,6 @@ internal static class AutoTranslate
|
||||
private static readonly Dictionary<ClientLanguage, List<AutoTranslateEntry>> Entries = new();
|
||||
private static readonly HashSet<(uint, uint)> ValidEntries = [];
|
||||
|
||||
private static readonly ExcelSheet<Completion> CompletionSheet;
|
||||
|
||||
static AutoTranslate()
|
||||
{
|
||||
CompletionSheet = Plugin.DataManager.GetExcelSheet<Completion>()!;
|
||||
}
|
||||
|
||||
private static Parser<char, (string name, Maybe<IEnumerable<ISelectorPart>> selector)> Parser()
|
||||
{
|
||||
var sheetName = Any
|
||||
@@ -125,117 +117,123 @@ internal static class AutoTranslate
|
||||
|
||||
var parser = Parser();
|
||||
var list = new List<AutoTranslateEntry>();
|
||||
foreach (var row in CompletionSheet)
|
||||
{
|
||||
var lookup = row.LookupTable.TextValue();
|
||||
if (lookup is not ("" or "@"))
|
||||
{
|
||||
var (sheetName, selector) = parser.ParseOrThrow(lookup);
|
||||
var sheetType = typeof(Completion)
|
||||
.Assembly
|
||||
.GetType($"Lumina.Excel.GeneratedSheets.{sheetName}")!;
|
||||
var getSheet = Plugin.DataManager
|
||||
.GetType()
|
||||
.GetMethod("GetExcelSheet", Type.EmptyTypes)!
|
||||
.MakeGenericMethod(sheetType);
|
||||
var sheet = (ExcelSheetImpl) getSheet.Invoke(Plugin.DataManager, null)!;
|
||||
var rowParsers = sheet.GetRowParsers().ToArray();
|
||||
|
||||
var columns = new List<int>();
|
||||
var rows = new List<Range>();
|
||||
if (selector.HasValue)
|
||||
{
|
||||
columns.Clear();
|
||||
rows.Clear();
|
||||
foreach (var part in selector.Value)
|
||||
{
|
||||
switch (part)
|
||||
{
|
||||
case IndexRange range:
|
||||
{
|
||||
var start = (int) range.Start;
|
||||
var end = (int) (range.End + 1);
|
||||
rows.Add(start..end);
|
||||
break;
|
||||
}
|
||||
case SingleRow single:
|
||||
{
|
||||
var idx = (int) single.Row;
|
||||
rows.Add(idx..(idx + 1));
|
||||
break;
|
||||
}
|
||||
case ColumnSpecifier col:
|
||||
columns.Add((int) col.Column);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (columns.Count == 0)
|
||||
columns.Add(0);
|
||||
|
||||
var validRows = rowParsers.Select(p => p.RowId).ToArray();
|
||||
if (rows.Count == 0)
|
||||
// We can't use an "index from end" (like `^0`) here because
|
||||
// we're iterating over integers, not an array directly.
|
||||
// Previously, we were setting `0..^0` which caused these
|
||||
// sheets to be completely skipped due to this bug.
|
||||
// See below.
|
||||
rows.Add(..Index.FromStart((int)validRows.Max() + 1));
|
||||
|
||||
foreach (var range in rows)
|
||||
{
|
||||
// We iterate over the range by numerical values here, so
|
||||
// we can't use an "index from end" otherwise nothing will
|
||||
// happen.
|
||||
// See above.
|
||||
for (var i = range.Start.Value; i < range.End.Value; i++)
|
||||
{
|
||||
if (!validRows.Contains((uint) i))
|
||||
continue;
|
||||
|
||||
foreach (var col in columns)
|
||||
{
|
||||
var rowParser = rowParsers.FirstOrDefault(p => p.RowId == i);
|
||||
if (rowParser == null)
|
||||
continue;
|
||||
|
||||
var rawName = rowParser.ReadColumn<Lumina.Text.SeString>(col)!;
|
||||
var name = rawName.ToDalamudString();
|
||||
var text = name.TextValue;
|
||||
if (text.Length > 0)
|
||||
{
|
||||
list.Add(new AutoTranslateEntry(
|
||||
row.Group,
|
||||
(uint) i,
|
||||
text,
|
||||
name
|
||||
));
|
||||
|
||||
if (shouldAdd)
|
||||
ValidEntries.Add((row.Group, (uint) i));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (lookup is not "@")
|
||||
{
|
||||
var text = row.Text.ToDalamudString();
|
||||
list.Add(new AutoTranslateEntry(
|
||||
row.Group,
|
||||
row.RowId,
|
||||
text.TextValue,
|
||||
text
|
||||
));
|
||||
|
||||
if (shouldAdd)
|
||||
ValidEntries.Add((row.Group, row.RowId));
|
||||
}
|
||||
}
|
||||
|
||||
// TODO REMOVE AFTER FIX
|
||||
Entries[Plugin.DataManager.Language] = list;
|
||||
return list;
|
||||
|
||||
// TODO FIX
|
||||
// foreach (var row in Sheets.CompletionSheet)
|
||||
// {
|
||||
// var lookup = row.LookupTable.ExtractText();
|
||||
// if (lookup is not ("" or "@"))
|
||||
// {
|
||||
// var (sheetName, selector) = parser.ParseOrThrow(lookup);
|
||||
// var sheetType = typeof(Completion)
|
||||
// .Assembly
|
||||
// .GetType($"Lumina.Excel.Sheets.{sheetName}")!;
|
||||
// var getSheet = Plugin.DataManager
|
||||
// .GetType()
|
||||
// .GetMethod("GetExcelSheet", Type.EmptyTypes)!
|
||||
// .MakeGenericMethod(sheetType);
|
||||
// var sheet = (ExcelSheetImpl) getSheet.Invoke(Plugin.DataManager, null)!;
|
||||
// var rowParsers = sheet.GetRowParsers().ToArray();
|
||||
//
|
||||
// var columns = new List<int>();
|
||||
// var rows = new List<Range>();
|
||||
// if (selector.HasValue)
|
||||
// {
|
||||
// columns.Clear();
|
||||
// rows.Clear();
|
||||
// foreach (var part in selector.Value)
|
||||
// {
|
||||
// switch (part)
|
||||
// {
|
||||
// case IndexRange range:
|
||||
// {
|
||||
// var start = (int) range.Start;
|
||||
// var end = (int) (range.End + 1);
|
||||
// rows.Add(start..end);
|
||||
// break;
|
||||
// }
|
||||
// case SingleRow single:
|
||||
// {
|
||||
// var idx = (int) single.Row;
|
||||
// rows.Add(idx..(idx + 1));
|
||||
// break;
|
||||
// }
|
||||
// case ColumnSpecifier col:
|
||||
// columns.Add((int) col.Column);
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if (columns.Count == 0)
|
||||
// columns.Add(0);
|
||||
//
|
||||
// var validRows = rowParsers.Select(p => p.RowId).ToArray();
|
||||
// if (rows.Count == 0)
|
||||
// // We can't use an "index from end" (like `^0`) here because
|
||||
// // we're iterating over integers, not an array directly.
|
||||
// // Previously, we were setting `0..^0` which caused these
|
||||
// // sheets to be completely skipped due to this bug.
|
||||
// // See below.
|
||||
// rows.Add(..Index.FromStart((int)validRows.Max() + 1));
|
||||
//
|
||||
// foreach (var range in rows)
|
||||
// {
|
||||
// // We iterate over the range by numerical values here, so
|
||||
// // we can't use an "index from end" otherwise nothing will
|
||||
// // happen.
|
||||
// // See above.
|
||||
// for (var i = range.Start.Value; i < range.End.Value; i++)
|
||||
// {
|
||||
// if (!validRows.Contains((uint) i))
|
||||
// continue;
|
||||
//
|
||||
// foreach (var col in columns)
|
||||
// {
|
||||
// var rowParser = rowParsers.FirstOrDefault(p => p.RowId == i);
|
||||
// if (rowParser == null)
|
||||
// continue;
|
||||
//
|
||||
// var rawName = rowParser.ReadColumn<Lumina.Text.SeString>(col)!;
|
||||
// var name = rawName.ToDalamudString();
|
||||
// var text = name.TextValue;
|
||||
// if (text.Length > 0)
|
||||
// {
|
||||
// list.Add(new AutoTranslateEntry(
|
||||
// row.Group,
|
||||
// (uint) i,
|
||||
// text,
|
||||
// name
|
||||
// ));
|
||||
//
|
||||
// if (shouldAdd)
|
||||
// ValidEntries.Add((row.Group, (uint) i));
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// else if (lookup is not "@")
|
||||
// {
|
||||
// var text = row.Text.ToDalamudString();
|
||||
// list.Add(new AutoTranslateEntry(
|
||||
// row.Group,
|
||||
// row.RowId,
|
||||
// text.TextValue,
|
||||
// text
|
||||
// ));
|
||||
//
|
||||
// if (shouldAdd)
|
||||
// ValidEntries.Add((row.Group, row.RowId));
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// Entries[Plugin.DataManager.Language] = list;
|
||||
// return list;
|
||||
}
|
||||
|
||||
internal static List<AutoTranslateEntry> Matching(string prefix, bool sort)
|
||||
|
||||
@@ -38,14 +38,14 @@ internal static class ChunkUtil
|
||||
case PayloadType.UIForeground:
|
||||
var foregroundPayload = (UIForegroundPayload) payload;
|
||||
if (foregroundPayload.IsEnabled)
|
||||
foreground.Push(foregroundPayload.UIColor.UIForeground);
|
||||
foreground.Push(foregroundPayload.UIColor.Value.UIForeground);
|
||||
else if (foreground.Count > 0)
|
||||
foreground.Pop();
|
||||
break;
|
||||
case PayloadType.UIGlow:
|
||||
var glowPayload = (UIGlowPayload) payload;
|
||||
if (glowPayload.IsEnabled)
|
||||
glow.Push(glowPayload.UIColor.UIGlow);
|
||||
glow.Push(glowPayload.UIColor.Value.UIGlow);
|
||||
else if (glow.Count > 0)
|
||||
glow.Pop();
|
||||
break;
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using ChatTwo.Resources;
|
||||
using System.Runtime.CompilerServices;
|
||||
using ChatTwo.Resources;
|
||||
using Dalamud.Interface.ImGuiNotification;
|
||||
|
||||
namespace ChatTwo.Util;
|
||||
@@ -26,4 +27,18 @@ public static class WrapperUtil
|
||||
|
||||
public static IEnumerable<(T Value, int Index)> WithIndex<T>(this IEnumerable<T> list)
|
||||
=> list.Select((x, i) => (x, i));
|
||||
|
||||
/// <summary> Return the first object fulfilling the predicate or null for structs. </summary>
|
||||
/// <param name="values"> The enumerable. </param>
|
||||
/// <param name="predicate"> The predicate. </param>
|
||||
/// <returns> The first object fulfilling the predicate, or a null-optional. </returns>
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)]
|
||||
public static T? FirstOrNull<T>(this IEnumerable<T> values, Func<T, bool> predicate) where T : struct
|
||||
{
|
||||
foreach(var val in values)
|
||||
if (predicate(val))
|
||||
return val;
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
+53
-60
@@ -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=="
|
||||
},
|
||||
"EmbedIO": {
|
||||
"type": "Direct",
|
||||
@@ -19,30 +19,31 @@
|
||||
},
|
||||
"MessagePack": {
|
||||
"type": "Direct",
|
||||
"requested": "[2.5.140, )",
|
||||
"resolved": "2.5.140",
|
||||
"contentHash": "nkIsgy8BkIfv40bSz9XZb4q//scI1PF3AYeB5X66nSlIhBIqbdpLz8Qk3gHvnjV3RZglQLO/ityK3eNfLii2NA==",
|
||||
"requested": "[3.0.238-rc.1, )",
|
||||
"resolved": "3.0.238-rc.1",
|
||||
"contentHash": "gAVmHb2gswXviGFpAmUgGBVvZEjYGph7Co5hp6IbshEooIuZT34Rv4YcBKvVnUCHdoqxQvK6DZIOPSLSYv3LjQ==",
|
||||
"dependencies": {
|
||||
"MessagePack.Annotations": "2.5.140",
|
||||
"Microsoft.NET.StringTools": "17.6.3",
|
||||
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
|
||||
"MessagePack.Annotations": "3.0.238-rc.1",
|
||||
"MessagePackAnalyzer": "3.0.238-rc.1",
|
||||
"Microsoft.NET.StringTools": "17.11.4"
|
||||
}
|
||||
},
|
||||
"Microsoft.Data.Sqlite": {
|
||||
"type": "Direct",
|
||||
"requested": "[8.0.4, )",
|
||||
"resolved": "8.0.4",
|
||||
"contentHash": "vgLm03wS+CfsolO7qk4KVuvt0CtzgdjKmoORuwxMmiIF1ow1JlOo1vwfDHfwXnGa5+QEbvOUy3169bBcHshfTg==",
|
||||
"requested": "[9.0.0, )",
|
||||
"resolved": "9.0.0",
|
||||
"contentHash": "lw6wthgXGx3r/U775k1UkUAWIn0kAT0wj4ZRq0WlhPx4WAOiBsIjgDKgWkXcNTGT0KfHiClkM+tyPVFDvxeObw==",
|
||||
"dependencies": {
|
||||
"Microsoft.Data.Sqlite.Core": "8.0.4",
|
||||
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.6"
|
||||
"Microsoft.Data.Sqlite.Core": "9.0.0",
|
||||
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.10",
|
||||
"SQLitePCLRaw.core": "2.1.10"
|
||||
}
|
||||
},
|
||||
"Pidgin": {
|
||||
"type": "Direct",
|
||||
"requested": "[3.2.3, )",
|
||||
"resolved": "3.2.3",
|
||||
"contentHash": "/1Q/f9asEZH7bogARG4EUxYT3LGB+mNC19db4unmx8gL04kkPzkg1VuX/BFk4UMJsqVopYComG/ydCrj1flCww=="
|
||||
"requested": "[3.3.0, )",
|
||||
"resolved": "3.3.0",
|
||||
"contentHash": "2rvIoIogQG1+vqvXCuz1xiAVljaiacG/wCz/TNpN74TzWw+9iSCjhBLf7kVg24sBi6tArRdrcklHq49ovW2NLA=="
|
||||
},
|
||||
"SixLabors.ImageSharp": {
|
||||
"type": "Direct",
|
||||
@@ -52,18 +53,18 @@
|
||||
},
|
||||
"Watson.Lite": {
|
||||
"type": "Direct",
|
||||
"requested": "[6.2.2, )",
|
||||
"resolved": "6.2.2",
|
||||
"contentHash": "yRYcaRFSnqwy/rrPd+WIFLyvNfgTANo447KiK7j1mKpgUIYPNDAKYxqj9wkDVfvGIHxzt4z3CFK6eWOGWUYsuQ==",
|
||||
"requested": "[6.2.3, )",
|
||||
"resolved": "6.2.3",
|
||||
"contentHash": "NGVWwQTulT016tiSuwK/AUU+Ebgyq0r0xLaWxll29xv/LTV0w4pHtoPskUPRqnzV8Po+ZndCd5dsUzGCjP0BVA==",
|
||||
"dependencies": {
|
||||
"CavemanTcp": "2.0.2",
|
||||
"Watson.Core": "6.2.2"
|
||||
"CavemanTcp": "2.0.3",
|
||||
"Watson.Core": "6.2.3"
|
||||
}
|
||||
},
|
||||
"CavemanTcp": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.0.2",
|
||||
"contentHash": "T161WxkgNTMC5SQPPDfLCGCD2j3YTvF0ZUGy/1pcGaYi6y7mcSzPymgVzG/6mOjAxJNGotK8hf1iOD8eT3bbhQ=="
|
||||
"resolved": "2.0.3",
|
||||
"contentHash": "/feSFO+5A1tS69Vv9XgD8+Ahz9iRcPj8r1kXIIVxeL+VjUzpPpVoAOtNG70oyu+b8M1RqthZAszaVQHpSPzuwg=="
|
||||
},
|
||||
"IpMatcher": {
|
||||
"type": "Transitive",
|
||||
@@ -72,21 +73,26 @@
|
||||
},
|
||||
"MessagePack.Annotations": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.5.140",
|
||||
"contentHash": "JE3vwluOrsJ4t3hnfXzIxJUh6lhx6M/KR8Sark/HOUw1DJ5UKu5JsAnnuaQngg6poFkRx1lzHSLTkxHNJO7+uQ=="
|
||||
"resolved": "3.0.238-rc.1",
|
||||
"contentHash": "yvnpKGuxZuFHnYZ9N8WQXQn0J28w2f0evh0RekDtuxIEKGPw/qQLQXyQWFzMunfb/+pKTWYlUZR1rvvNcwl10A=="
|
||||
},
|
||||
"MessagePackAnalyzer": {
|
||||
"type": "Transitive",
|
||||
"resolved": "3.0.238-rc.1",
|
||||
"contentHash": "qweXSZ+3mrf3RAqBs71vrF20SiNmqQdbrrt/L3749jh7OPpvdyZcHhOd20BSk+THQXgmmQfqF5F3o/J7S7tGCQ=="
|
||||
},
|
||||
"Microsoft.Data.Sqlite.Core": {
|
||||
"type": "Transitive",
|
||||
"resolved": "8.0.4",
|
||||
"contentHash": "x5FE5m1h31UIDEk0j3r38HtYvsa0fxd5jXzvE/SARI7LecXt/jm4z2SUl6TEoJGQOo9Ow2wg3a0MU2E1TVVAdA==",
|
||||
"resolved": "9.0.0",
|
||||
"contentHash": "cFfZjFL+tqzGYw9lB31EkV1IWF5xRQNk2k+MQd+Cf86Gl6zTeAoiZIFw5sRB1Z8OxpEC7nu+nTDsLSjieBAPTw==",
|
||||
"dependencies": {
|
||||
"SQLitePCLRaw.core": "2.1.6"
|
||||
"SQLitePCLRaw.core": "2.1.10"
|
||||
}
|
||||
},
|
||||
"Microsoft.NET.StringTools": {
|
||||
"type": "Transitive",
|
||||
"resolved": "17.6.3",
|
||||
"contentHash": "N0ZIanl1QCgvUumEL1laasU0a7sOE5ZwLZVTn0pAePnfhq8P7SvTjF8Axq+CnavuQkmdQpGNXQ1efZtu5kDFbA=="
|
||||
"resolved": "17.11.4",
|
||||
"contentHash": "mudqUHhNpeqIdJoUx2YDWZO/I9uEDYVowan89R6wsomfnUJQk6HteoQTlNjZDixhT2B4IXMkMtgZtoceIjLRmA=="
|
||||
},
|
||||
"RegexMatcher": {
|
||||
"type": "Transitive",
|
||||
@@ -95,32 +101,32 @@
|
||||
},
|
||||
"SQLitePCLRaw.bundle_e_sqlite3": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.1.6",
|
||||
"contentHash": "BmAf6XWt4TqtowmiWe4/5rRot6GerAeklmOPfviOvwLoF5WwgxcJHAxZtySuyW9r9w+HLILnm8VfJFLCUJYW8A==",
|
||||
"resolved": "2.1.10",
|
||||
"contentHash": "UxWuisvZ3uVcVOLJQv7urM/JiQH+v3TmaJc1BLKl5Dxfm/nTzTUrqswCqg/INiYLi61AXnHo1M1JPmPqqLnAdg==",
|
||||
"dependencies": {
|
||||
"SQLitePCLRaw.lib.e_sqlite3": "2.1.6",
|
||||
"SQLitePCLRaw.provider.e_sqlite3": "2.1.6"
|
||||
"SQLitePCLRaw.lib.e_sqlite3": "2.1.10",
|
||||
"SQLitePCLRaw.provider.e_sqlite3": "2.1.10"
|
||||
}
|
||||
},
|
||||
"SQLitePCLRaw.core": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.1.6",
|
||||
"contentHash": "wO6v9GeMx9CUngAet8hbO7xdm+M42p1XeJq47ogyRoYSvNSp0NGLI+MgC0bhrMk9C17MTVFlLiN6ylyExLCc5w==",
|
||||
"resolved": "2.1.10",
|
||||
"contentHash": "Ii8JCbC7oiVclaE/mbDEK000EFIJ+ShRPwAvvV89GOZhQ+ZLtlnSWl6ksCNMKu/VGXA4Nfi2B7LhN/QFN9oBcw==",
|
||||
"dependencies": {
|
||||
"System.Memory": "4.5.3"
|
||||
}
|
||||
},
|
||||
"SQLitePCLRaw.lib.e_sqlite3": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.1.6",
|
||||
"contentHash": "2ObJJLkIUIxRpOUlZNGuD4rICpBnrBR5anjyfUFQep4hMOIeqW+XGQYzrNmHSVz5xSWZ3klSbh7sFR6UyDj68Q=="
|
||||
"resolved": "2.1.10",
|
||||
"contentHash": "mAr69tDbnf3QJpRy2nJz8Qdpebdil00fvycyByR58Cn9eARvR+UiG2Vzsp+4q1tV3ikwiYIjlXCQFc12GfebbA=="
|
||||
},
|
||||
"SQLitePCLRaw.provider.e_sqlite3": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2.1.6",
|
||||
"contentHash": "PQ2Oq3yepLY4P7ll145P3xtx2bX8xF4PzaKPRpw9jZlKvfe4LE/saAV82inND9usn1XRpmxXk7Lal3MTI+6CNg==",
|
||||
"resolved": "2.1.10",
|
||||
"contentHash": "uZVTi02C1SxqzgT0HqTWatIbWGb40iIkfc3FpFCpE/r7g6K0PqzDUeefL6P6HPhDtc6BacN3yQysfzP7ks+wSQ==",
|
||||
"dependencies": {
|
||||
"SQLitePCLRaw.core": "2.1.6"
|
||||
"SQLitePCLRaw.core": "2.1.10"
|
||||
}
|
||||
},
|
||||
"System.Memory": {
|
||||
@@ -128,23 +134,10 @@
|
||||
"resolved": "4.5.3",
|
||||
"contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA=="
|
||||
},
|
||||
"System.Runtime.CompilerServices.Unsafe": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.0.0",
|
||||
"contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
|
||||
},
|
||||
"System.Text.Encodings.Web": {
|
||||
"type": "Transitive",
|
||||
"resolved": "8.0.0",
|
||||
"contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ=="
|
||||
},
|
||||
"System.Text.Json": {
|
||||
"type": "Transitive",
|
||||
"resolved": "8.0.4",
|
||||
"contentHash": "bAkhgDJ88XTsqczoxEMliSrpijKZHhbJQldhAmObj/RbrN3sU5dcokuXmWJWsdQAhiMJ9bTayWsL1C9fbbCRhw==",
|
||||
"dependencies": {
|
||||
"System.Text.Encodings.Web": "8.0.0"
|
||||
}
|
||||
"resolved": "8.0.5",
|
||||
"contentHash": "0f1B50Ss7rqxXiaBJyzUu9bWFOO2/zSlifZ/UNMdiIpDYe4cY4LQQicP4nirK1OS31I43rn062UIJ1Q9bpmHpg=="
|
||||
},
|
||||
"System.ValueTuple": {
|
||||
"type": "Transitive",
|
||||
@@ -171,12 +164,12 @@
|
||||
},
|
||||
"Watson.Core": {
|
||||
"type": "Transitive",
|
||||
"resolved": "6.2.2",
|
||||
"contentHash": "lqdT+foblghBKLXuvXBFLJmO9J0TkPCBiQFH4xg4txFM7osm1jvF2IzYjor6w1NL+kNDhvlCRkBNaPSSxfJO/A==",
|
||||
"resolved": "6.2.3",
|
||||
"contentHash": "ccdGhC60dHTV1CA+C+U8zZOTQD4yLoPUDV0ZyXqF4dYmQ/zgwhegAxBGkV3WIw+2fqnTKYwMhJFU/tbkykybvA==",
|
||||
"dependencies": {
|
||||
"IpMatcher": "1.0.4.4",
|
||||
"RegexMatcher": "1.0.8",
|
||||
"System.Text.Json": "8.0.4",
|
||||
"System.Text.Json": "8.0.5",
|
||||
"Timestamps": "1.0.9",
|
||||
"UrlMatcher": "3.0.0"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user