Compare commits
4 Commits
41b5122e12
...
1.7.1.3
| Author | SHA1 | Date | |
|---|---|---|---|
| 51004f3017 | |||
| 60c1668492 | |||
| 4f07dba409 | |||
| 003fc77628 |
@@ -1,4 +1,4 @@
|
||||
name: Release
|
||||
name: Build and Update Repo
|
||||
|
||||
on:
|
||||
push:
|
||||
@@ -10,7 +10,7 @@ env:
|
||||
DOTNET_VERSION: 9.x
|
||||
|
||||
jobs:
|
||||
tag-and-release:
|
||||
build-and-update-repo:
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
@@ -79,7 +79,9 @@ jobs:
|
||||
if .InternalName == $internalName
|
||||
then
|
||||
.DalamudApiLevel = $dalamudApiLevel
|
||||
| .TestingDalamudApiLevel = $dalamudApiLevel
|
||||
| .AssemblyVersion = $version
|
||||
| .TestingAssemblyVersion = $version
|
||||
| .DownloadLinkInstall = $downloadUrl
|
||||
| .DownloadLinkTesting = $downloadUrl
|
||||
| .DownloadLinkUpdate = $downloadUrl
|
||||
|
||||
@@ -3,6 +3,7 @@ using Dalamud.Game.Text.SeStringHandling.Payloads;
|
||||
using Dalamud.Hooking;
|
||||
using Dalamud.Memory;
|
||||
using Dalamud.Plugin.Services;
|
||||
using Dalamud.Utility;
|
||||
using Dalamud.Utility.Signatures;
|
||||
using FFXIVClientStructs.FFXIV.Client.System.String;
|
||||
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
|
||||
|
||||
private readonly ILogger<GameChatHooks> _logger;
|
||||
private readonly Action<int, byte[]> _ssCommandHandler;
|
||||
private readonly Action<int, byte[]> _psCommandHandler;
|
||||
|
||||
#region signatures
|
||||
#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;
|
||||
_ssCommandHandler = ssCommandHandler;
|
||||
_psCommandHandler = psCommandHandler;
|
||||
|
||||
logger.LogInformation("Initializing GameChatHooks");
|
||||
gameInteropProvider.InitializeFromAttributes(this);
|
||||
@@ -209,20 +210,42 @@ public unsafe sealed class GameChatHooks : IDisposable
|
||||
if (isReply)
|
||||
_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
|
||||
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)
|
||||
{
|
||||
var cmdString = $"/ss{i} ";
|
||||
var cmdString = $"/ps{i} ";
|
||||
if (messageSpan.StartsWith(System.Text.Encoding.ASCII.GetBytes(cmdString)))
|
||||
{
|
||||
var ssChatBytes = ProcessChatMessage(message);
|
||||
ssChatBytes = ssChatBytes.Skip(cmdString.Length).ToArray();
|
||||
_ssCommandHandler?.Invoke(i, ssChatBytes);
|
||||
var psChatBytes = ProcessChatMessage(message);
|
||||
psChatBytes = psChatBytes.Skip(cmdString.Length).ToArray();
|
||||
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;
|
||||
}
|
||||
|
||||
_psCommandHandler?.Invoke(i, psChatBytes);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -28,9 +28,9 @@ public sealed class IpcCallerOtherSync : DisposableMediatorSubscriberBase
|
||||
_lightlessLoaded = msg.IsLoaded;
|
||||
});
|
||||
|
||||
_snowcloakLoaded = PluginWatcherService.GetInitialPluginState(pi, "SnowcloakSync")?.IsLoaded ?? false;
|
||||
_snowcloakLoaded = PluginWatcherService.GetInitialPluginState(pi, "Snowcloak")?.IsLoaded ?? false;
|
||||
|
||||
Mediator.SubscribeKeyed<PluginChangeMessage>(this, "SnowcloakSync", (msg) =>
|
||||
Mediator.SubscribeKeyed<PluginChangeMessage>(this, "Snowcloak", (msg) =>
|
||||
{
|
||||
_snowcloakLoaded = msg.IsLoaded;
|
||||
});
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<Project Sdk="Dalamud.NET.Sdk/13.1.0">
|
||||
<PropertyGroup>
|
||||
<AssemblyName>ClubPenguinSync</AssemblyName>
|
||||
<Version>1.7.1.1</Version>
|
||||
<Version>1.7.1.3</Version>
|
||||
<PackageProjectUrl>https://github.com/Rawrington/ClubPenguinSync/</PackageProjectUrl>
|
||||
</PropertyGroup>
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@ public class ChatService : DisposableMediatorSubscriberBase
|
||||
{
|
||||
var chatMsg = message.ChatMsg;
|
||||
var prefix = new SeStringBuilder();
|
||||
prefix.AddText("[BnnuyChat] ");
|
||||
prefix.AddText("[PenguinChat] ");
|
||||
_chatGui.Print(new XivChatEntry{
|
||||
MessageBytes = [..prefix.Build().Encode(), ..message.ChatMsg.PayloadContent],
|
||||
Name = chatMsg.SenderName,
|
||||
@@ -121,7 +121,7 @@ public class ChatService : DisposableMediatorSubscriberBase
|
||||
}
|
||||
if (color != 0)
|
||||
msg.AddUiForeground((ushort)color);
|
||||
msg.AddText($"[SS{shellNumber}]<");
|
||||
msg.AddText($"[PS{shellNumber}]<");
|
||||
if (message.ChatMsg.Sender.UID.Equals(_apiController.UID, StringComparison.Ordinal))
|
||||
{
|
||||
// Don't link to your own character
|
||||
@@ -179,7 +179,7 @@ public class ChatService : DisposableMediatorSubscriberBase
|
||||
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
|
||||
if (_gameChatHooks.Value.ChatChannelOverride.ChannelName.StartsWith($"SS [{shellNumber}]", StringComparison.Ordinal))
|
||||
if (_gameChatHooks.Value.ChatChannelOverride.ChannelName.StartsWith($"PS [{shellNumber}]", StringComparison.Ordinal))
|
||||
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
|
||||
_gameChatHooks.Value.ChatChannelOverride = new()
|
||||
{
|
||||
ChannelName = $"SS [{shellNumber}]: {name}",
|
||||
ChannelName = $"PS [{shellNumber}]: {name}",
|
||||
ChatMessageHandler = chatBytes => SendChatShell(shellNumber, chatBytes)
|
||||
};
|
||||
return;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using Dalamud.Game.Command;
|
||||
using Dalamud.Plugin.Services;
|
||||
using Dalamud.Utility;
|
||||
using MareSynchronos.FileCache;
|
||||
using MareSynchronos.MareConfiguration;
|
||||
using MareSynchronos.MareConfiguration.Models;
|
||||
@@ -17,7 +18,7 @@ public sealed class CommandManagerService : IDisposable
|
||||
private const string _commandName = "/sync";
|
||||
private const string _commandName2 = "/clubpenguin";
|
||||
|
||||
private const string _ssCommandPrefix = "/ss";
|
||||
private const string _psCommandPrefix = "/ps";
|
||||
|
||||
private readonly ApiController _apiController;
|
||||
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
|
||||
for (int i = 1; i <= ChatService.CommandMaxNumber; ++i)
|
||||
{
|
||||
_commandManager.AddHandler($"{_ssCommandPrefix}{i}", new CommandInfo(OnChatCommand)
|
||||
_commandManager.AddHandler($"{_psCommandPrefix}{i}", new CommandInfo(OnChatCommand)
|
||||
{
|
||||
ShowInHelp = false
|
||||
});
|
||||
@@ -65,7 +66,7 @@ public sealed class CommandManagerService : IDisposable
|
||||
_commandManager.RemoveHandler(_commandName2);
|
||||
|
||||
for (int i = 1; i <= ChatService.CommandMaxNumber; ++i)
|
||||
_commandManager.RemoveHandler($"{_ssCommandPrefix}{i}");
|
||||
_commandManager.RemoveHandler($"{_psCommandPrefix}{i}");
|
||||
}
|
||||
|
||||
private void OnCommand(string command, string args)
|
||||
@@ -139,9 +140,9 @@ public sealed class CommandManagerService : IDisposable
|
||||
if (_mareConfigService.Current.DisableSyncshellChat)
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -246,7 +246,7 @@ internal sealed class GroupPanel
|
||||
if (!_mareConfig.Current.DisableSyncshellChat && shellConfig.Enabled)
|
||||
{
|
||||
ImGui.TextUnformatted($"[{shellNumber}]");
|
||||
UiSharedService.AttachToolTip("Chat command prefix: /ss" + shellNumber);
|
||||
UiSharedService.AttachToolTip("Chat command prefix: /ps" + shellNumber);
|
||||
}
|
||||
if (textIsGid) ImGui.PushFont(UiBuilder.MonoFont);
|
||||
ImGui.SameLine();
|
||||
|
||||
Reference in New Issue
Block a user