diff --git a/ChatTwo/ChatTwo.csproj b/ChatTwo/ChatTwo.csproj
index 338d427..13a2877 100755
--- a/ChatTwo/ChatTwo.csproj
+++ b/ChatTwo/ChatTwo.csproj
@@ -49,8 +49,7 @@
-
-
+
diff --git a/ChatTwo/GameFunctions/Chat.cs b/ChatTwo/GameFunctions/Chat.cs
index a1f7a32..51b0f94 100755
--- a/ChatTwo/GameFunctions/Chat.cs
+++ b/ChatTwo/GameFunctions/Chat.cs
@@ -7,6 +7,7 @@ using Dalamud.Game.Text.SeStringHandling;
using Dalamud.Hooking;
using Dalamud.Logging;
using Dalamud.Memory;
+using Dalamud.Utility.Signatures;
using FFXIVClientStructs.FFXIV.Client.System.Framework;
using FFXIVClientStructs.FFXIV.Client.System.String;
using FFXIVClientStructs.FFXIV.Client.UI;
@@ -14,7 +15,6 @@ using FFXIVClientStructs.FFXIV.Client.UI.Agent;
using FFXIVClientStructs.FFXIV.Client.UI.Misc;
using FFXIVClientStructs.FFXIV.Client.UI.Shell;
using FFXIVClientStructs.FFXIV.Component.GUI;
-using Siggingway;
using ValueType = FFXIVClientStructs.FFXIV.Component.GUI.ValueType;
namespace ChatTwo.GameFunctions;
@@ -119,7 +119,7 @@ internal sealed unsafe class Chat : IDisposable {
internal Chat(Plugin plugin) {
this.Plugin = plugin;
- Siggingway.Siggingway.Initialise(this.Plugin.SigScanner, this);
+ SignatureHelper.Initialise(this);
this.ChatLogRefreshHook?.Enable();
this.ChangeChannelNameHook?.Enable();
diff --git a/ChatTwo/GameFunctions/Context.cs b/ChatTwo/GameFunctions/Context.cs
index 8300c44..7695e75 100755
--- a/ChatTwo/GameFunctions/Context.cs
+++ b/ChatTwo/GameFunctions/Context.cs
@@ -1,9 +1,9 @@
using ChatTwo.Util;
+using Dalamud.Utility.Signatures;
using FFXIVClientStructs.FFXIV.Client.System.Framework;
using FFXIVClientStructs.FFXIV.Client.UI;
using FFXIVClientStructs.FFXIV.Client.UI.Agent;
using FFXIVClientStructs.FFXIV.Component.GUI;
-using Siggingway;
namespace ChatTwo.GameFunctions;
@@ -30,7 +30,7 @@ internal sealed unsafe class Context {
internal Context(Plugin plugin) {
this.Plugin = plugin;
- Siggingway.Siggingway.Initialise(this.Plugin.SigScanner, this);
+ SignatureHelper.Initialise(this);
}
internal void InviteToNoviceNetwork(string name, ushort world) {
diff --git a/ChatTwo/GameFunctions/GameFunctions.cs b/ChatTwo/GameFunctions/GameFunctions.cs
index a159a5b..29398b2 100755
--- a/ChatTwo/GameFunctions/GameFunctions.cs
+++ b/ChatTwo/GameFunctions/GameFunctions.cs
@@ -1,12 +1,12 @@
using System.Runtime.InteropServices;
using Dalamud.Hooking;
using Dalamud.Memory;
+using Dalamud.Utility.Signatures;
using FFXIVClientStructs.FFXIV.Client.System.Framework;
using FFXIVClientStructs.FFXIV.Client.UI;
using FFXIVClientStructs.FFXIV.Client.UI.Agent;
using FFXIVClientStructs.FFXIV.Component.GUI;
using Lumina.Excel.GeneratedSheets;
-using Siggingway;
namespace ChatTwo.GameFunctions;
@@ -63,7 +63,7 @@ internal unsafe class GameFunctions : IDisposable {
this.Chat = new Chat(this.Plugin);
this.Context = new Context(this.Plugin);
- Siggingway.Siggingway.Initialise(this.Plugin.SigScanner, this);
+ SignatureHelper.Initialise(this);
this.ResolveTextCommandPlaceholderHook?.Enable();
}
diff --git a/ChatTwo/GameFunctions/Party.cs b/ChatTwo/GameFunctions/Party.cs
index 02ae849..7c9cc0d 100755
--- a/ChatTwo/GameFunctions/Party.cs
+++ b/ChatTwo/GameFunctions/Party.cs
@@ -1,8 +1,8 @@
using ChatTwo.Util;
+using Dalamud.Utility.Signatures;
using FFXIVClientStructs.FFXIV.Client.System.Framework;
using FFXIVClientStructs.FFXIV.Client.UI.Agent;
using FFXIVClientStructs.FFXIV.Component.GUI;
-using Siggingway;
namespace ChatTwo.GameFunctions;
@@ -23,17 +23,29 @@ internal sealed unsafe class Party {
internal Party(Plugin plugin) {
this.Plugin = plugin;
- Siggingway.Siggingway.Initialise(this.Plugin.SigScanner, this);
+ SignatureHelper.Initialise(this);
}
- internal void Invite(string name, ushort world, ulong contentId) {
+ internal void InviteSameWorld(string name, ushort world, ulong contentId) {
if (this._inviteToParty == null) {
return;
}
// 6.05: 20D722
var a1 = this.Plugin.Functions.GetInfoProxyByIndex(1);
+ fixed (byte* namePtr = name.ToTerminatedBytes()) {
+ // this only works if target is on the same world
+ this._inviteToParty(a1, contentId, namePtr, world);
+ }
+ }
+ internal void InviteOtherWorld(ulong contentId) {
+ if (this._inviteToPartyContentId != null) {
+ return;
+ }
+
+ // 6.05: 20D722
+ var a1 = this.Plugin.Functions.GetInfoProxyByIndex(1);
if (contentId != 0) {
// third param is world, but it requires a specific world
// if they're not on that world, it will fail
@@ -41,11 +53,6 @@ internal sealed unsafe class Party {
// current player is on
this._inviteToPartyContentId(a1, contentId, 0);
}
-
- fixed (byte* namePtr = name.ToTerminatedBytes()) {
- // this only works if target is on the same world
- this._inviteToParty(a1, contentId, namePtr, world);
- }
}
internal void Kick(string name, ulong contentId) {
diff --git a/ChatTwo/PayloadHandler.cs b/ChatTwo/PayloadHandler.cs
index 153cc8d..bc2213d 100755
--- a/ChatTwo/PayloadHandler.cs
+++ b/ChatTwo/PayloadHandler.cs
@@ -326,12 +326,15 @@ internal sealed class PayloadHandler {
}
private void DrawPlayerPopup(Chunk chunk, PlayerPayload player) {
- var name = player.PlayerName;
+ var name = new List { new TextChunk(null, null, player.PlayerName) };
if (player.World.IsPublic) {
- name += $"{player.World.Name}";
+ name.AddRange(new Chunk[] {
+ new IconChunk(null, null, BitmapFontIcon.CrossWorld),
+ new TextChunk(null, null, player.World.Name),
+ });
}
- ImGui.TextUnformatted(name);
+ this.Log.DrawChunks(name, false);
ImGui.Separator();
if (player.World.IsPublic) {
@@ -346,8 +349,16 @@ internal sealed class PayloadHandler {
var member = party.FirstOrDefault(member => member.Name.TextValue == player.PlayerName && member.World.Id == player.World.RowId);
var isInParty = member != default;
if (isLeader) {
- if (!isInParty && ImGui.Selectable("Invite to Party")) {
- this.Ui.Plugin.Functions.Party.Invite(player.PlayerName, (ushort) player.World.RowId, chunk.Message?.ContentId ?? 0);
+ if (!isInParty && ImGui.BeginMenu("Invite to Party")) {
+ if (ImGui.Selectable("Same world")) {
+ this.Ui.Plugin.Functions.Party.InviteSameWorld(player.PlayerName, (ushort) player.World.RowId, chunk.Message?.ContentId ?? 0);
+ }
+
+ if (chunk.Message?.ContentId is not null or 0 && ImGui.Selectable("Different world")) {
+ this.Ui.Plugin.Functions.Party.InviteOtherWorld(chunk.Message!.ContentId);
+ }
+
+ ImGui.EndMenu();
}
if (isInParty && member != null) {