From c61ac08dd3e18d2cebb0fb8a91ad96e538c56bac Mon Sep 17 00:00:00 2001 From: Kei-Luna Date: Wed, 29 Apr 2026 09:01:20 +0900 Subject: [PATCH] Fixed a critical issue with in-game chat. --- GameServer/Command/CommandSender.cs | 4 +-- GameServer/Game/Player/ChatMessageHelper.cs | 27 +++++++++++++++++++++ GameServer/Game/Player/PlayerInstance.cs | 4 +-- 3 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 GameServer/Game/Player/ChatMessageHelper.cs diff --git a/GameServer/Command/CommandSender.cs b/GameServer/Command/CommandSender.cs index 0486421..e74e794 100644 --- a/GameServer/Command/CommandSender.cs +++ b/GameServer/Command/CommandSender.cs @@ -38,9 +38,9 @@ public class PlayerCommandSender(PlayerInstance player) : ICommandSender Type = ChatType.Friend, Sender = (uint)ConfigManager.Config.ServerOption.ServerProfile.Uid, Recver = (uint)Player.Uid, - Text = msg, + Text = ChatMessageHelper.NormalizeForClient(msg), Profile = Player.ToServerFriendProto(), - TimeStamp = (uint)Extensions.GetUnixMs() + TimeStamp = ChatMessageHelper.BuildClientTimestamp() }; await Player.SendPacket(CmdIds.NtfFriendChat, data); } diff --git a/GameServer/Game/Player/ChatMessageHelper.cs b/GameServer/Game/Player/ChatMessageHelper.cs new file mode 100644 index 0000000..bebdf46 --- /dev/null +++ b/GameServer/Game/Player/ChatMessageHelper.cs @@ -0,0 +1,27 @@ +using System.Text.RegularExpressions; + +namespace MikuSB.GameServer.Game.Player; + +public static partial class ChatMessageHelper +{ + [GeneratedRegex(@"\s+")] + private static partial Regex MultiWhitespaceRegex(); + + public static uint BuildClientTimestamp() + { + return (uint)MikuSB.Util.Extensions.Extensions.GetUnixSec(); + } + + public static string NormalizeForClient(string? text) + { + if (string.IsNullOrWhiteSpace(text)) + return string.Empty; + + var normalized = text + .Replace("\r\n", " ") + .Replace('\r', ' ') + .Replace('\n', ' '); + + return MultiWhitespaceRegex().Replace(normalized, " ").Trim(); + } +} diff --git a/GameServer/Game/Player/PlayerInstance.cs b/GameServer/Game/Player/PlayerInstance.cs index 1dc1137..a424c18 100644 --- a/GameServer/Game/Player/PlayerInstance.cs +++ b/GameServer/Game/Player/PlayerInstance.cs @@ -160,9 +160,9 @@ public class PlayerInstance(PlayerGameData data) Sender = sendUid, Recver = recvUid, Emoji = emojiId ?? 0, - Text = message ?? "", + Text = ChatMessageHelper.NormalizeForClient(message), Profile = Data.ToProfileProto(), - TimeStamp = (uint)Extensions.GetUnixMs() + TimeStamp = ChatMessageHelper.BuildClientTimestamp() }; await SendPacket(CmdIds.NtfFriendChat, data);