first commit

This commit is contained in:
2025-07-06 00:23:46 +02:00
commit 38f50c8819
1788 changed files with 112878 additions and 0 deletions

View File

@@ -0,0 +1,82 @@
using System;
using System.Linq;
using NitroxClient.Communication.Packets.Processors.Abstract;
using NitroxClient.GameLogic;
using NitroxClient.GameLogic.ChatUI;
using NitroxClient.GameLogic.Settings;
using NitroxModel.DataStructures.Unity;
using NitroxModel.DataStructures.Util;
using NitroxModel.Packets;
using NitroxModel_Subnautica.DataStructures;
using UnityEngine;
namespace NitroxClient.Communication.Packets.Processors
{
class ChatMessageProcessor : ClientPacketProcessor<ChatMessage>
{
private readonly PlayerManager remotePlayerManager;
private readonly LocalPlayer localPlayer;
private readonly PlayerChatManager playerChatManager;
private readonly Color32 serverMessageColor = new Color32(0x8c, 0x00, 0xFF, 0xFF);
public ChatMessageProcessor(PlayerManager remotePlayerManager, LocalPlayer localPlayer, PlayerChatManager playerChatManager)
{
this.remotePlayerManager = remotePlayerManager;
this.localPlayer = localPlayer;
this.playerChatManager = playerChatManager;
}
public override void Process(ChatMessage message)
{
if (message.PlayerId != ChatMessage.SERVER_ID)
{
LogClientMessage(message);
}
else
{
LogServerMessage(message);
}
}
private void LogClientMessage(ChatMessage message)
{
// The message can come from either the local player or other players
string playerName;
NitroxColor color;
if (localPlayer.PlayerId == message.PlayerId)
{
playerName = localPlayer.PlayerName;
color = localPlayer.PlayerSettings.PlayerColor;
}
else
{
Optional<RemotePlayer> remotePlayer = remotePlayerManager.Find(message.PlayerId);
if (!remotePlayer.HasValue)
{
string playerTableFormatted = string.Join("\n", remotePlayerManager.GetAll().Select(ply => $"Name: '{ply.PlayerName}', Id: {ply.PlayerId}"));
Log.Error($"Tried to add chat message for remote player that could not be found with id '${message.PlayerId}' and message: '{message.Text}'.\nAll remote players right now:\n{playerTableFormatted}");
throw new Exception($"Tried to add chat message for remote player that could not be found with id '${message.PlayerId}' and message: '{message.Text}'.\nAll remote players right now:\n{playerTableFormatted}");
}
playerName = remotePlayer.Value.PlayerName;
color = remotePlayer.Value.PlayerSettings.PlayerColor;
}
playerChatManager.AddMessage(playerName, message.Text, color.ToUnity());
if (!NitroxPrefs.SilenceChat.Value)
{
playerChatManager.ShowChat();
}
}
private void LogServerMessage(ChatMessage message)
{
playerChatManager.AddMessage("Server", message.Text, serverMessageColor);
if (!NitroxPrefs.SilenceChat.Value)
{
playerChatManager.ShowChat();
}
}
}
}