mirror of
https://github.com/corvax-team/ss14-wl.git
synced 2026-02-15 03:31:38 +01:00
135 lines
4.8 KiB
C#
135 lines
4.8 KiB
C#
using Content.Shared._WL.Languages;
|
|
using Content.Shared._WL.Languages.Components;
|
|
using Content.Shared.Chat;
|
|
using Content.Shared.Radio;
|
|
using Content.Shared.Speech;
|
|
using Content.Shared.IdentityManagement;
|
|
using Robust.Shared.Random;
|
|
using Robust.Shared.Utility;
|
|
|
|
namespace Content.Server._WL.Languages;
|
|
|
|
public sealed class LanguagesSystem : SharedLanguagesSystem
|
|
{
|
|
[Dependency] private readonly IRobustRandom _random = default!;
|
|
[Dependency] private readonly ILogManager _logMan = default!;
|
|
public const string SawmillName = "languages.sys";
|
|
|
|
public string GetHeardMessage(string message, EntityUid source, EntityUid listener)
|
|
{
|
|
if (!TryComp<LanguagesSpeekingComponent>(source, out var source_lang))
|
|
return message;
|
|
|
|
if (!TryComp<LanguagesSpeekingComponent>(listener, out var listen_lang))
|
|
return message;
|
|
|
|
var message_language = source_lang.CurrentLanguage;
|
|
if (listen_lang.IsUnderstanding && listen_lang.IsSpeeking && listen_lang.UnderstandingLanguages.Contains(message_language))
|
|
{
|
|
return message;
|
|
}
|
|
else
|
|
{
|
|
var obfus = ObfuscateMessage(message, message_language);
|
|
return obfus;
|
|
}
|
|
}
|
|
|
|
public string ObfuscateMessageFromSource(string message, EntityUid source)
|
|
{
|
|
if (!TryComp<LanguagesSpeekingComponent>(source, out var source_lang))
|
|
return message;
|
|
else
|
|
{
|
|
var message_language = source_lang.CurrentLanguage;
|
|
var obfus = ObfuscateMessage(message, message_language);
|
|
return obfus;
|
|
}
|
|
}
|
|
|
|
public bool CanUnderstand(EntityUid source, EntityUid listener)
|
|
{
|
|
if (source == listener)
|
|
return true;
|
|
|
|
if (!TryComp<LanguagesSpeekingComponent>(source, out var source_lang))
|
|
{
|
|
return true;
|
|
}
|
|
|
|
if (!TryComp<LanguagesSpeekingComponent>(listener, out var listen_lang))
|
|
{
|
|
return true;
|
|
}
|
|
|
|
var message_language = source_lang.CurrentLanguage;
|
|
return listen_lang.IsUnderstanding && source_lang.IsSpeeking && listen_lang.UnderstandingLanguages.Contains(message_language);
|
|
}
|
|
|
|
public bool IsObfusEmoting(EntityUid source)
|
|
{
|
|
if (!TryComp<LanguagesSpeekingComponent>(source, out var source_lang))
|
|
return false;
|
|
else
|
|
{
|
|
var message_language = source_lang.CurrentLanguage;
|
|
var proto = GetLanguagePrototype(message_language);
|
|
if (proto == null)
|
|
return false;
|
|
else
|
|
{
|
|
return proto.Obfuscation.IsEmoting();
|
|
}
|
|
}
|
|
}
|
|
|
|
public string GetObfusWrappedMessage(string message, EntityUid source, string name, SpeechVerbPrototype? speech = null)
|
|
{
|
|
var obfusMessage = ObfuscateMessageFromSource(message, source);
|
|
if (IsObfusEmoting(source))
|
|
{
|
|
var ent = Identity.Entity(source, EntityManager);
|
|
var wrappedMessage = Loc.GetString("chat-manager-entity-me-wrap-message",
|
|
("entityName", name),
|
|
("entity", ent),
|
|
("message", FormattedMessage.RemoveMarkupOrThrow(obfusMessage))
|
|
);
|
|
return wrappedMessage;
|
|
}
|
|
else
|
|
{
|
|
if (speech == null)
|
|
{
|
|
var wrappedobfuscatedMessage = Loc.GetString("chat-manager-entity-whisper-wrap-message",("entityName", name), ("message", FormattedMessage.EscapeText(obfusMessage)));
|
|
return wrappedobfuscatedMessage;
|
|
}
|
|
else
|
|
{
|
|
var wrappedMessage = Loc.GetString(speech.Bold ? "chat-manager-entity-say-bold-wrap-message" : "chat-manager-entity-say-wrap-message",
|
|
("entityName", name),
|
|
("verb", Loc.GetString(_random.Pick(speech.SpeechVerbStrings))),
|
|
("fontType", speech.FontId),
|
|
("fontSize", speech.FontSize),
|
|
("message", FormattedMessage.EscapeText(obfusMessage)
|
|
)
|
|
);
|
|
return wrappedMessage;
|
|
}
|
|
}
|
|
}
|
|
|
|
public string GetRadioObfusWrappedMessage(string message, EntityUid source, string name, SpeechVerbPrototype speech, RadioChannelPrototype channel)
|
|
{
|
|
var obfusMessage = ObfuscateMessageFromSource(message, source);
|
|
var wrappedMessage = Loc.GetString(speech.Bold ? "chat-radio-message-wrap-bold" : "chat-radio-message-wrap",
|
|
("color", channel.Color),
|
|
("fontType", speech.FontId),
|
|
("fontSize", speech.FontSize),
|
|
("verb", Loc.GetString(_random.Pick(speech.SpeechVerbStrings))),
|
|
("channel", $"\\[{channel.LocalizedName}\\]"),
|
|
("name", name),
|
|
("message", obfusMessage));
|
|
return wrappedMessage;
|
|
}
|
|
}
|