From 0cd3a3c2d9812ed5b4f3904ba16efbf3a91577bb Mon Sep 17 00:00:00 2001 From: Tornado Tech <54727692+Tornado-Technology@users.noreply.github.com> Date: Sun, 4 Aug 2024 18:48:09 +1000 Subject: [PATCH] Added personal signature system (#382) * Added personal signature system * FUCKING RUSSIAN LANUAGE A HATE LATTERS, HATEEEEEEEEEEEEEEEEEEEEEEE! * Added locale and sound --- .../CP14PersonalSignatureComponent.cs | 10 +++ .../CP14PersonalSignatureSystem.cs | 79 +++++++++++++++++++ .../en-US/_CP14/presonal-signature/verbs.ftl | 1 + .../ru-RU/_CP14/presonal-signature/verbs.ftl | 1 + 4 files changed, 91 insertions(+) create mode 100644 Content.Server/_CP14/PersonalSignature/CP14PersonalSignatureComponent.cs create mode 100644 Content.Server/_CP14/PersonalSignature/CP14PersonalSignatureSystem.cs create mode 100644 Resources/Locale/en-US/_CP14/presonal-signature/verbs.ftl create mode 100644 Resources/Locale/ru-RU/_CP14/presonal-signature/verbs.ftl diff --git a/Content.Server/_CP14/PersonalSignature/CP14PersonalSignatureComponent.cs b/Content.Server/_CP14/PersonalSignature/CP14PersonalSignatureComponent.cs new file mode 100644 index 0000000000..6a3fa22e92 --- /dev/null +++ b/Content.Server/_CP14/PersonalSignature/CP14PersonalSignatureComponent.cs @@ -0,0 +1,10 @@ +using Robust.Shared.Audio; + +namespace Content.Server._CP14.PersonalSignature; + +[RegisterComponent] +public sealed partial class CP14PersonalSignatureComponent : Component +{ + [DataField] + public SoundSpecifier? SignSound; +} diff --git a/Content.Server/_CP14/PersonalSignature/CP14PersonalSignatureSystem.cs b/Content.Server/_CP14/PersonalSignature/CP14PersonalSignatureSystem.cs new file mode 100644 index 0000000000..04a4530966 --- /dev/null +++ b/Content.Server/_CP14/PersonalSignature/CP14PersonalSignatureSystem.cs @@ -0,0 +1,79 @@ +using System.Diagnostics.CodeAnalysis; +using Content.Server.Mind; +using Content.Server.Paper; +using Content.Shared.Hands.Components; +using Content.Shared.Paper; +using Content.Shared.Verbs; +using Robust.Server.Audio; +using Robust.Shared.Audio; +using Robust.Shared.Player; + +namespace Content.Server._CP14.PersonalSignature; + +public sealed class CP14PersonalSignatureSystem : EntitySystem +{ + [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly MindSystem _mind = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent>(OnGetVerb); + } + + private void OnGetVerb(Entity entity, ref GetVerbsEvent args) + { + if (!_mind.TryGetMind(args.User, out _, out var mind)) + return; + + if (mind.CharacterName is null) + return; + + if (!CanSign(args.Using, out var signature)) + return; + + if (HasSign(entity, mind.CharacterName)) + return; + + args.Verbs.Add(new AlternativeVerb + { + Text = Loc.GetString("cp-sign-verb"), + Act = () => + { + Sign(entity, mind.CharacterName, signature.SignSound); + }, + }); + } + + private bool CanSign(EntityUid? item, [NotNullWhen(true)] out CP14PersonalSignatureComponent? personalSignature) + { + personalSignature = null; + return item is not null && TryComp(item, out personalSignature); + } + + private bool HasSign(Entity entity, string sign) + { + foreach (var info in entity.Comp.StampedBy) + { + if (info.StampedName == sign) + return true; + } + + return false; + } + + private void Sign(Entity target, string name, SoundSpecifier? sound) + { + var info = new StampDisplayInfo + { + StampedName = name, + StampedColor = Color.Gray, + }; + + if (sound is not null) + _audio.PlayEntity(sound, Filter.Pvs(target), target, true); + + target.Comp.StampedBy.Add(info); + } +} diff --git a/Resources/Locale/en-US/_CP14/presonal-signature/verbs.ftl b/Resources/Locale/en-US/_CP14/presonal-signature/verbs.ftl new file mode 100644 index 0000000000..f2fc3d9dd9 --- /dev/null +++ b/Resources/Locale/en-US/_CP14/presonal-signature/verbs.ftl @@ -0,0 +1 @@ +cp-sign-verb = Sign diff --git a/Resources/Locale/ru-RU/_CP14/presonal-signature/verbs.ftl b/Resources/Locale/ru-RU/_CP14/presonal-signature/verbs.ftl new file mode 100644 index 0000000000..663b78fed1 --- /dev/null +++ b/Resources/Locale/ru-RU/_CP14/presonal-signature/verbs.ftl @@ -0,0 +1 @@ +cp-sign-verb = Подписать