Update syncshell chat.
All checks were successful
Build and Update Repo / build-and-update-repo (push) Successful in 1m12s
All checks were successful
Build and Update Repo / build-and-update-repo (push) Successful in 1m12s
Update /ss to /ps Remove whitespaces from sending in syncshell chat.
This commit is contained in:
@@ -3,6 +3,7 @@ using Dalamud.Game.Text.SeStringHandling.Payloads;
|
|||||||
using Dalamud.Hooking;
|
using Dalamud.Hooking;
|
||||||
using Dalamud.Memory;
|
using Dalamud.Memory;
|
||||||
using Dalamud.Plugin.Services;
|
using Dalamud.Plugin.Services;
|
||||||
|
using Dalamud.Utility;
|
||||||
using Dalamud.Utility.Signatures;
|
using Dalamud.Utility.Signatures;
|
||||||
using FFXIVClientStructs.FFXIV.Client.System.String;
|
using FFXIVClientStructs.FFXIV.Client.System.String;
|
||||||
using FFXIVClientStructs.FFXIV.Client.UI;
|
using FFXIVClientStructs.FFXIV.Client.UI;
|
||||||
@@ -26,7 +27,7 @@ public unsafe sealed class GameChatHooks : IDisposable
|
|||||||
// Based on https://git.anna.lgbt/anna/ExtraChat/src/branch/main/client/ExtraChat/GameFunctions.cs
|
// Based on https://git.anna.lgbt/anna/ExtraChat/src/branch/main/client/ExtraChat/GameFunctions.cs
|
||||||
|
|
||||||
private readonly ILogger<GameChatHooks> _logger;
|
private readonly ILogger<GameChatHooks> _logger;
|
||||||
private readonly Action<int, byte[]> _ssCommandHandler;
|
private readonly Action<int, byte[]> _psCommandHandler;
|
||||||
|
|
||||||
#region signatures
|
#region signatures
|
||||||
#pragma warning disable CS0649
|
#pragma warning disable CS0649
|
||||||
@@ -130,10 +131,10 @@ public unsafe sealed class GameChatHooks : IDisposable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public GameChatHooks(ILogger<GameChatHooks> logger, IGameInteropProvider gameInteropProvider, Action<int, byte[]> ssCommandHandler)
|
public GameChatHooks(ILogger<GameChatHooks> logger, IGameInteropProvider gameInteropProvider, Action<int, byte[]> psCommandHandler)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_ssCommandHandler = ssCommandHandler;
|
_psCommandHandler = psCommandHandler;
|
||||||
|
|
||||||
logger.LogInformation("Initializing GameChatHooks");
|
logger.LogInformation("Initializing GameChatHooks");
|
||||||
gameInteropProvider.InitializeFromAttributes(this);
|
gameInteropProvider.InitializeFromAttributes(this);
|
||||||
@@ -209,20 +210,42 @@ public unsafe sealed class GameChatHooks : IDisposable
|
|||||||
if (isReply)
|
if (isReply)
|
||||||
_nextMessageIsReply = utcNow + TimeSpan.FromMilliseconds(100);
|
_nextMessageIsReply = utcNow + TimeSpan.FromMilliseconds(100);
|
||||||
|
|
||||||
// If it is a command, check if it begins with /ss first so we can handle the message directly
|
// If it is a command, check if it begins with /ps first so we can handle the message directly
|
||||||
// Letting Dalamud handle the commands causes all of the special payloads to be dropped
|
// Letting Dalamud handle the commands causes all of the special payloads to be dropped
|
||||||
if (isCommand && messageSpan.StartsWith(System.Text.Encoding.ASCII.GetBytes("/ss")))
|
if (isCommand && messageSpan.StartsWith(System.Text.Encoding.ASCII.GetBytes("/ps")))
|
||||||
{
|
{
|
||||||
|
|
||||||
for (int i = 1; i <= ChatService.CommandMaxNumber; ++i)
|
for (int i = 1; i <= ChatService.CommandMaxNumber; ++i)
|
||||||
{
|
{
|
||||||
var cmdString = $"/ss{i} ";
|
var cmdString = $"/ps{i} ";
|
||||||
if (messageSpan.StartsWith(System.Text.Encoding.ASCII.GetBytes(cmdString)))
|
if (messageSpan.StartsWith(System.Text.Encoding.ASCII.GetBytes(cmdString)))
|
||||||
{
|
{
|
||||||
var ssChatBytes = ProcessChatMessage(message);
|
var psChatBytes = ProcessChatMessage(message);
|
||||||
ssChatBytes = ssChatBytes.Skip(cmdString.Length).ToArray();
|
psChatBytes = psChatBytes.Skip(cmdString.Length).ToArray();
|
||||||
_ssCommandHandler?.Invoke(i, ssChatBytes);
|
if (psChatBytes.Length > 0)
|
||||||
|
{
|
||||||
|
bool isBlank = true;
|
||||||
|
int j;
|
||||||
|
|
||||||
|
for (j = 0; j < psChatBytes.Length; j++)
|
||||||
|
{
|
||||||
|
if(!char.IsWhiteSpace((char)psChatBytes[j]))
|
||||||
|
{
|
||||||
|
isBlank = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isBlank)
|
||||||
|
{
|
||||||
|
SendMessageHook!.OriginalDisposeSafe(thisPtr, message, uiModule);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_psCommandHandler?.Invoke(i, psChatBytes);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<Project Sdk="Dalamud.NET.Sdk/13.1.0">
|
<Project Sdk="Dalamud.NET.Sdk/13.1.0">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<AssemblyName>ClubPenguinSync</AssemblyName>
|
<AssemblyName>ClubPenguinSync</AssemblyName>
|
||||||
<Version>1.7.1.2</Version>
|
<Version>1.7.1.3</Version>
|
||||||
<PackageProjectUrl>https://github.com/Rawrington/ClubPenguinSync/</PackageProjectUrl>
|
<PackageProjectUrl>https://github.com/Rawrington/ClubPenguinSync/</PackageProjectUrl>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ public class ChatService : DisposableMediatorSubscriberBase
|
|||||||
{
|
{
|
||||||
var chatMsg = message.ChatMsg;
|
var chatMsg = message.ChatMsg;
|
||||||
var prefix = new SeStringBuilder();
|
var prefix = new SeStringBuilder();
|
||||||
prefix.AddText("[BnnuyChat] ");
|
prefix.AddText("[PenguinChat] ");
|
||||||
_chatGui.Print(new XivChatEntry{
|
_chatGui.Print(new XivChatEntry{
|
||||||
MessageBytes = [..prefix.Build().Encode(), ..message.ChatMsg.PayloadContent],
|
MessageBytes = [..prefix.Build().Encode(), ..message.ChatMsg.PayloadContent],
|
||||||
Name = chatMsg.SenderName,
|
Name = chatMsg.SenderName,
|
||||||
@@ -121,7 +121,7 @@ public class ChatService : DisposableMediatorSubscriberBase
|
|||||||
}
|
}
|
||||||
if (color != 0)
|
if (color != 0)
|
||||||
msg.AddUiForeground((ushort)color);
|
msg.AddUiForeground((ushort)color);
|
||||||
msg.AddText($"[SS{shellNumber}]<");
|
msg.AddText($"[PS{shellNumber}]<");
|
||||||
if (message.ChatMsg.Sender.UID.Equals(_apiController.UID, StringComparison.Ordinal))
|
if (message.ChatMsg.Sender.UID.Equals(_apiController.UID, StringComparison.Ordinal))
|
||||||
{
|
{
|
||||||
// Don't link to your own character
|
// Don't link to your own character
|
||||||
@@ -179,7 +179,7 @@ public class ChatService : DisposableMediatorSubscriberBase
|
|||||||
if (_gameChatHooks.IsValueCreated && _gameChatHooks.Value.ChatChannelOverride != null)
|
if (_gameChatHooks.IsValueCreated && _gameChatHooks.Value.ChatChannelOverride != null)
|
||||||
{
|
{
|
||||||
// Very dumb and won't handle re-numbering -- need to identify the active chat channel more reliably later
|
// Very dumb and won't handle re-numbering -- need to identify the active chat channel more reliably later
|
||||||
if (_gameChatHooks.Value.ChatChannelOverride.ChannelName.StartsWith($"SS [{shellNumber}]", StringComparison.Ordinal))
|
if (_gameChatHooks.Value.ChatChannelOverride.ChannelName.StartsWith($"PS [{shellNumber}]", StringComparison.Ordinal))
|
||||||
SwitchChatShell(shellNumber);
|
SwitchChatShell(shellNumber);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -200,7 +200,7 @@ public class ChatService : DisposableMediatorSubscriberBase
|
|||||||
// BUG: This doesn't always update the chat window e.g. when renaming a group
|
// BUG: This doesn't always update the chat window e.g. when renaming a group
|
||||||
_gameChatHooks.Value.ChatChannelOverride = new()
|
_gameChatHooks.Value.ChatChannelOverride = new()
|
||||||
{
|
{
|
||||||
ChannelName = $"SS [{shellNumber}]: {name}",
|
ChannelName = $"PS [{shellNumber}]: {name}",
|
||||||
ChatMessageHandler = chatBytes => SendChatShell(shellNumber, chatBytes)
|
ChatMessageHandler = chatBytes => SendChatShell(shellNumber, chatBytes)
|
||||||
};
|
};
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using Dalamud.Game.Command;
|
using Dalamud.Game.Command;
|
||||||
using Dalamud.Plugin.Services;
|
using Dalamud.Plugin.Services;
|
||||||
|
using Dalamud.Utility;
|
||||||
using MareSynchronos.FileCache;
|
using MareSynchronos.FileCache;
|
||||||
using MareSynchronos.MareConfiguration;
|
using MareSynchronos.MareConfiguration;
|
||||||
using MareSynchronos.MareConfiguration.Models;
|
using MareSynchronos.MareConfiguration.Models;
|
||||||
@@ -17,7 +18,7 @@ public sealed class CommandManagerService : IDisposable
|
|||||||
private const string _commandName = "/sync";
|
private const string _commandName = "/sync";
|
||||||
private const string _commandName2 = "/clubpenguin";
|
private const string _commandName2 = "/clubpenguin";
|
||||||
|
|
||||||
private const string _ssCommandPrefix = "/ss";
|
private const string _psCommandPrefix = "/ps";
|
||||||
|
|
||||||
private readonly ApiController _apiController;
|
private readonly ApiController _apiController;
|
||||||
private readonly ICommandManager _commandManager;
|
private readonly ICommandManager _commandManager;
|
||||||
@@ -52,7 +53,7 @@ public sealed class CommandManagerService : IDisposable
|
|||||||
// Lazy registration of all possible /ss# commands which tbf is what the game does for linkshells anyway
|
// Lazy registration of all possible /ss# commands which tbf is what the game does for linkshells anyway
|
||||||
for (int i = 1; i <= ChatService.CommandMaxNumber; ++i)
|
for (int i = 1; i <= ChatService.CommandMaxNumber; ++i)
|
||||||
{
|
{
|
||||||
_commandManager.AddHandler($"{_ssCommandPrefix}{i}", new CommandInfo(OnChatCommand)
|
_commandManager.AddHandler($"{_psCommandPrefix}{i}", new CommandInfo(OnChatCommand)
|
||||||
{
|
{
|
||||||
ShowInHelp = false
|
ShowInHelp = false
|
||||||
});
|
});
|
||||||
@@ -65,7 +66,7 @@ public sealed class CommandManagerService : IDisposable
|
|||||||
_commandManager.RemoveHandler(_commandName2);
|
_commandManager.RemoveHandler(_commandName2);
|
||||||
|
|
||||||
for (int i = 1; i <= ChatService.CommandMaxNumber; ++i)
|
for (int i = 1; i <= ChatService.CommandMaxNumber; ++i)
|
||||||
_commandManager.RemoveHandler($"{_ssCommandPrefix}{i}");
|
_commandManager.RemoveHandler($"{_psCommandPrefix}{i}");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnCommand(string command, string args)
|
private void OnCommand(string command, string args)
|
||||||
@@ -139,9 +140,9 @@ public sealed class CommandManagerService : IDisposable
|
|||||||
if (_mareConfigService.Current.DisableSyncshellChat)
|
if (_mareConfigService.Current.DisableSyncshellChat)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int shellNumber = int.Parse(command[_ssCommandPrefix.Length..]);
|
int shellNumber = int.Parse(command[_psCommandPrefix.Length..]);
|
||||||
|
|
||||||
if (args.Length == 0)
|
if (args.Length == 0 || args.IsNullOrWhitespace())
|
||||||
{
|
{
|
||||||
_chatService.SwitchChatShell(shellNumber);
|
_chatService.SwitchChatShell(shellNumber);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -246,7 +246,7 @@ internal sealed class GroupPanel
|
|||||||
if (!_mareConfig.Current.DisableSyncshellChat && shellConfig.Enabled)
|
if (!_mareConfig.Current.DisableSyncshellChat && shellConfig.Enabled)
|
||||||
{
|
{
|
||||||
ImGui.TextUnformatted($"[{shellNumber}]");
|
ImGui.TextUnformatted($"[{shellNumber}]");
|
||||||
UiSharedService.AttachToolTip("Chat command prefix: /ss" + shellNumber);
|
UiSharedService.AttachToolTip("Chat command prefix: /ps" + shellNumber);
|
||||||
}
|
}
|
||||||
if (textIsGid) ImGui.PushFont(UiBuilder.MonoFont);
|
if (textIsGid) ImGui.PushFont(UiBuilder.MonoFont);
|
||||||
ImGui.SameLine();
|
ImGui.SameLine();
|
||||||
|
|||||||
Reference in New Issue
Block a user