mirror of
https://github.com/WWhiteDreamProject/wwdpublic.git
synced 2026-04-18 14:07:53 +03:00
# Description Chatstack. Can be changed/disabled in settings, and the chat automatically updates to reflect the change. Does not interfere with filters, etc. Also updated ChatMessage class and serverside IChatManager with a new IgnoreChatStack bool option, default false. Currently is limited to looking up to 3 messages behind, only because I feel off adding a textbox to the options. --- # TODO - [x] Make sure it works - [x] Add it to settings --- <details><summary><h1>Media</h1></summary> <p>  [ee.webm](https://github.com/user-attachments/assets/bf1c92f0-b52a-47a0-b142-70b1ee5003cc) </p> </details> --- # Changelog 🆑 - add: Chatstack. Look for it in Options under "General - Accessibility". --------- Co-authored-by: sleepyyapril <123355664+sleepyyapril@users.noreply.github.com> (cherry picked from commit 78edbab4308bcef190fe387d36df79d90200e084)
75 lines
2.6 KiB
C#
75 lines
2.6 KiB
C#
using System.IO;
|
|
using JetBrains.Annotations;
|
|
using Lidgren.Network;
|
|
using Robust.Shared.Network;
|
|
using Robust.Shared.Serialization;
|
|
using Robust.Shared.Utility;
|
|
|
|
namespace Content.Shared.Chat
|
|
{
|
|
[Serializable, NetSerializable]
|
|
public sealed class ChatMessage
|
|
{
|
|
public ChatChannel Channel;
|
|
public string Message;
|
|
public string WrappedMessage;
|
|
public NetEntity SenderEntity;
|
|
|
|
/// <summary>
|
|
/// Identifier sent when <see cref="SenderEntity"/> is <see cref="NetEntity.Invalid"/>
|
|
/// if this was sent by a player to assign a key to the sender of this message.
|
|
/// This is unique per sender.
|
|
/// </summary>
|
|
public int? SenderKey;
|
|
|
|
public bool HideChat;
|
|
public Color? MessageColorOverride;
|
|
public string? AudioPath;
|
|
public float AudioVolume;
|
|
public bool IgnoreChatStack;
|
|
[NonSerialized]
|
|
public bool Read;
|
|
|
|
public ChatMessage(ChatChannel channel, string message, string wrappedMessage, NetEntity source, int? senderKey, bool hideChat = false, Color? colorOverride = null, string? audioPath = null, float audioVolume = 0, bool ignoreChatStack = false)
|
|
{
|
|
Channel = channel;
|
|
Message = message;
|
|
WrappedMessage = wrappedMessage;
|
|
SenderEntity = source;
|
|
SenderKey = senderKey;
|
|
HideChat = hideChat;
|
|
MessageColorOverride = colorOverride;
|
|
AudioPath = audioPath;
|
|
AudioVolume = audioVolume;
|
|
IgnoreChatStack = ignoreChatStack;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Sent from server to client to notify the client about a new chat message.
|
|
/// </summary>
|
|
[UsedImplicitly]
|
|
public sealed class MsgChatMessage : NetMessage
|
|
{
|
|
public override MsgGroups MsgGroup => MsgGroups.Command;
|
|
|
|
public ChatMessage Message = default!;
|
|
|
|
public override void ReadFromBuffer(NetIncomingMessage buffer, IRobustSerializer serializer)
|
|
{
|
|
var length = buffer.ReadVariableInt32();
|
|
using var stream = new MemoryStream(length);
|
|
buffer.ReadAlignedMemory(stream, length);
|
|
serializer.DeserializeDirect(stream, out Message);
|
|
}
|
|
|
|
public override void WriteToBuffer(NetOutgoingMessage buffer, IRobustSerializer serializer)
|
|
{
|
|
var stream = new MemoryStream();
|
|
serializer.SerializeDirect(stream, Message);
|
|
buffer.WriteVariableInt32((int) stream.Length);
|
|
buffer.Write(stream.AsSpan());
|
|
}
|
|
}
|
|
}
|