mirror of
https://github.com/WWhiteDreamProject/wwdpublic.git
synced 2026-04-18 05:59:03 +03:00
# Description #562 but using commands instead of tricks. Less user-friendly but makes you look like a hacker when you use them :trollface: <details><summary><h1>Media</h1></summary><p>    (ignore the missing locale, I fixes) </p></details> # Changelog 🆑 - add: Admin tooling: added several admin commands to help manipulate entities' languages. --------- Signed-off-by: Mnemotechnican <69920617+Mnemotechnician@users.noreply.github.com> Co-authored-by: DEATHB4DEFEAT <77995199+DEATHB4DEFEAT@users.noreply.github.com>
76 lines
2.6 KiB
C#
76 lines
2.6 KiB
C#
using Content.Server.Administration;
|
|
using Content.Shared.Administration;
|
|
using Content.Shared.Language;
|
|
using Content.Shared.Language.Components;
|
|
using Content.Shared.Language.Systems;
|
|
using Robust.Shared.Toolshed;
|
|
using Robust.Shared.Toolshed.Syntax;
|
|
using Robust.Shared.Toolshed.TypeParsers;
|
|
|
|
namespace Content.Server.Language.Commands;
|
|
|
|
[ToolshedCommand(Name = "language"), AdminCommand(AdminFlags.Admin)]
|
|
public sealed class AdminLanguageCommand : ToolshedCommand
|
|
{
|
|
private LanguageSystem? _languagesField;
|
|
private LanguageSystem Languages => _languagesField ??= GetSys<LanguageSystem>();
|
|
|
|
[CommandImplementation("add")]
|
|
public EntityUid AddLanguage(
|
|
[CommandInvocationContext] IInvocationContext ctx,
|
|
[PipedArgument] EntityUid input,
|
|
[CommandArgument] ValueRef<string, Prototype<LanguagePrototype>> @ref,
|
|
[CommandArgument] bool canSpeak = true,
|
|
[CommandArgument] bool canUnderstand = true
|
|
)
|
|
{
|
|
var language = @ref.Evaluate(ctx)!;
|
|
|
|
if (language == SharedLanguageSystem.UniversalPrototype)
|
|
{
|
|
EnsureComp<UniversalLanguageSpeakerComponent>(input);
|
|
Languages.UpdateEntityLanguages(input);
|
|
}
|
|
else
|
|
{
|
|
EnsureComp<LanguageSpeakerComponent>(input);
|
|
Languages.AddLanguage(input, language, canSpeak, canUnderstand);
|
|
}
|
|
|
|
return input;
|
|
}
|
|
|
|
[CommandImplementation("rm")]
|
|
public EntityUid RemoveLanguage(
|
|
[CommandInvocationContext] IInvocationContext ctx,
|
|
[PipedArgument] EntityUid input,
|
|
[CommandArgument] ValueRef<string, Prototype<LanguagePrototype>> @ref,
|
|
[CommandArgument] bool removeSpeak = true,
|
|
[CommandArgument] bool removeUnderstand = true
|
|
)
|
|
{
|
|
var language = @ref.Evaluate(ctx)!;
|
|
if (language == SharedLanguageSystem.UniversalPrototype && HasComp<UniversalLanguageSpeakerComponent>(input))
|
|
{
|
|
RemComp<UniversalLanguageSpeakerComponent>(input);
|
|
EnsureComp<LanguageSpeakerComponent>(input);
|
|
}
|
|
// We execute this branch even in case of universal so that it gets removed if it was added manually to the LanguageKnowledge
|
|
Languages.RemoveLanguage(input, language, removeSpeak, removeUnderstand);
|
|
|
|
return input;
|
|
}
|
|
|
|
[CommandImplementation("lsspoken")]
|
|
public IEnumerable<string> ListSpoken([PipedArgument] EntityUid input)
|
|
{
|
|
return Languages.GetSpokenLanguages(input);
|
|
}
|
|
|
|
[CommandImplementation("lsunderstood")]
|
|
public IEnumerable<string> ListUnderstood([PipedArgument] EntityUid input)
|
|
{
|
|
return Languages.GetUnderstoodLanguages(input);
|
|
}
|
|
}
|