mirror of
https://github.com/goatcorp/Dalamud.git
synced 2025-12-12 18:27:23 +01:00
Pass clicked text in handler
This commit is contained in:
parent
cd5cc6aac2
commit
0760fa9d5c
4 changed files with 22 additions and 12 deletions
|
|
@ -64,6 +64,14 @@ namespace Dalamud.Game.Chat.SeStringHandling.Payloads
|
||||||
return $"{Type} - Data: {BitConverter.ToString(Data).Replace("-", " ")}";
|
return $"{Type} - Data: {BitConverter.ToString(Data).Replace("-", " ")}";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override bool Equals(object obj) {
|
||||||
|
if (obj is RawPayload rp) {
|
||||||
|
if (rp.Data.Length != this.Data.Length) return false;
|
||||||
|
return !Data.Where((t, i) => rp.Data[i] != t).Any();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
protected override byte[] EncodeImpl()
|
protected override byte[] EncodeImpl()
|
||||||
{
|
{
|
||||||
var chunkLen = this.data.Length + 1;
|
var chunkLen = this.data.Length + 1;
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,7 @@ namespace Dalamud.Game {
|
||||||
dalamud.Framework.Gui.Chat.OnCheckMessageHandled += OnCheckMessageHandled;
|
dalamud.Framework.Gui.Chat.OnCheckMessageHandled += OnCheckMessageHandled;
|
||||||
dalamud.Framework.Gui.Chat.OnChatMessage += OnChatMessage;
|
dalamud.Framework.Gui.Chat.OnChatMessage += OnChatMessage;
|
||||||
|
|
||||||
this.openInstallerWindowLink = this.dalamud.Framework.Gui.Chat.AddChatLinkHandler("Dalamud", 1001, (i) => {
|
this.openInstallerWindowLink = this.dalamud.Framework.Gui.Chat.AddChatLinkHandler("Dalamud", 1001, (i, m) => {
|
||||||
this.dalamud.OpenPluginInstaller();
|
this.dalamud.OpenPluginInstaller();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -182,7 +182,7 @@ namespace Dalamud.Game.Internal.Gui {
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly Dictionary<(string pluginName, uint commandId), Action<uint>> dalamudLinkHandlers = new Dictionary<(string, uint), Action<uint>>();
|
private readonly Dictionary<(string pluginName, uint commandId), Action<uint, SeString>> dalamudLinkHandlers = new Dictionary<(string, uint), Action<uint, SeString>>();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Create a link handler
|
/// Create a link handler
|
||||||
|
|
@ -191,7 +191,7 @@ namespace Dalamud.Game.Internal.Gui {
|
||||||
/// <param name="commandId"></param>
|
/// <param name="commandId"></param>
|
||||||
/// <param name="commandAction"></param>
|
/// <param name="commandAction"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
internal DalamudLinkPayload AddChatLinkHandler(string pluginName, uint commandId, Action<uint> commandAction) {
|
internal DalamudLinkPayload AddChatLinkHandler(string pluginName, uint commandId, Action<uint, SeString> commandAction) {
|
||||||
var payload = new DalamudLinkPayload() {Plugin = pluginName, CommandId = commandId};
|
var payload = new DalamudLinkPayload() {Plugin = pluginName, CommandId = commandId};
|
||||||
this.dalamudLinkHandlers.Add((pluginName, commandId), commandAction);
|
this.dalamudLinkHandlers.Add((pluginName, commandId), commandAction);
|
||||||
return payload;
|
return payload;
|
||||||
|
|
@ -230,17 +230,19 @@ namespace Dalamud.Game.Internal.Gui {
|
||||||
Log.Verbose($"InteractableLinkClicked: {Payload.EmbeddedInfoType.DalamudLink}");
|
Log.Verbose($"InteractableLinkClicked: {Payload.EmbeddedInfoType.DalamudLink}");
|
||||||
|
|
||||||
var payloadPtr = Marshal.ReadIntPtr(messagePtr, 0x10);
|
var payloadPtr = Marshal.ReadIntPtr(messagePtr, 0x10);
|
||||||
var payloadSize = 3 + Marshal.ReadByte(payloadPtr, 2);
|
var messageSize = 0;
|
||||||
var payloadBytes = new byte[payloadSize];
|
while (Marshal.ReadByte(payloadPtr, messageSize) != 0) messageSize++;
|
||||||
Marshal.Copy(payloadPtr, payloadBytes, 0, payloadSize);
|
var payloadBytes = new byte[messageSize];
|
||||||
|
Marshal.Copy(payloadPtr, payloadBytes, 0, messageSize);
|
||||||
var seStr = this.dalamud.SeStringManager.Parse(payloadBytes);
|
var seStr = this.dalamud.SeStringManager.Parse(payloadBytes);
|
||||||
if (seStr.Payloads.Count == 0) return;
|
var terminatorIndex = seStr.Payloads.IndexOf(RawPayload.LinkTerminator);
|
||||||
var payload = seStr.Payloads[0];
|
var payloads = terminatorIndex >= 0 ? seStr.Payloads.Take(terminatorIndex + 1).ToList() : seStr.Payloads;
|
||||||
|
if (payloads.Count == 0) return;
|
||||||
if (payload is DalamudLinkPayload link) {
|
var linkPayload = payloads[0];
|
||||||
|
if (linkPayload is DalamudLinkPayload link) {
|
||||||
if (this.dalamudLinkHandlers.ContainsKey((link.Plugin, link.CommandId))) {
|
if (this.dalamudLinkHandlers.ContainsKey((link.Plugin, link.CommandId))) {
|
||||||
Log.Verbose($"Sending DalamudLink to {link.Plugin}: {link.CommandId}");
|
Log.Verbose($"Sending DalamudLink to {link.Plugin}: {link.CommandId}");
|
||||||
this.dalamudLinkHandlers[(link.Plugin, link.CommandId)].Invoke(link.CommandId);
|
this.dalamudLinkHandlers[(link.Plugin, link.CommandId)].Invoke(link.CommandId, new SeString(payloads));
|
||||||
} else {
|
} else {
|
||||||
Log.Debug($"No DalamudLink registered for {link.Plugin} with ID of {link.CommandId}");
|
Log.Debug($"No DalamudLink registered for {link.Plugin} with ID of {link.CommandId}");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -139,7 +139,7 @@ namespace Dalamud.Plugin
|
||||||
/// <param name="commandId"></param>
|
/// <param name="commandId"></param>
|
||||||
/// <param name="commandAction"></param>
|
/// <param name="commandAction"></param>
|
||||||
/// <returns>Returns an SeString payload for the link.</returns>
|
/// <returns>Returns an SeString payload for the link.</returns>
|
||||||
public DalamudLinkPayload AddChatLinkHandler(uint commandId, Action<uint> commandAction) {
|
public DalamudLinkPayload AddChatLinkHandler(uint commandId, Action<uint, SeString> commandAction) {
|
||||||
return this.Framework.Gui.Chat.AddChatLinkHandler(this.pluginName, commandId, commandAction);
|
return this.Framework.Gui.Chat.AddChatLinkHandler(this.pluginName, commandId, commandAction);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue