From dc7ce0d9b1514f2dedf87cb981d122071eb2d01c Mon Sep 17 00:00:00 2001 From: BIGZi0348 Date: Mon, 16 Dec 2024 20:59:24 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=B2=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_Honk/Aspects/AlasAccentAspect.cs | 46 +++++++++++++++++++ .../Component/AlasAccentAspectComponent.cs | 6 +++ .../Speech/Components/AlasAccentComponent.cs | 10 ++++ .../Speech/EntitySystems/AlasAccentSystem.cs | 46 +++++++++++++++++++ .../Prototypes/_Honk/Aspects/Aspects.yml | 13 ++++++ 5 files changed, 121 insertions(+) create mode 100644 Content.Server/_Honk/Aspects/AlasAccentAspect.cs create mode 100644 Content.Server/_Honk/Aspects/Component/AlasAccentAspectComponent.cs create mode 100644 Content.Server/_Honk/Speech/Components/AlasAccentComponent.cs create mode 100644 Content.Server/_Honk/Speech/EntitySystems/AlasAccentSystem.cs diff --git a/Content.Server/_Honk/Aspects/AlasAccentAspect.cs b/Content.Server/_Honk/Aspects/AlasAccentAspect.cs new file mode 100644 index 0000000000..0c9f52e2fb --- /dev/null +++ b/Content.Server/_Honk/Aspects/AlasAccentAspect.cs @@ -0,0 +1,46 @@ +using Content.Server.GameTicking; +using Content.Server.GameTicking.Components; +using Content.Server._Honk.Speech.Components; +using Content.Server._Honk.AspectsSystem.Aspects.Components; +using Content.Server._White.AspectsSystem.Base; +using Content.Shared.Mind.Components; +using Robust.Shared.Random; + +namespace Content.Server._Honk.Aspects; + +public sealed class AlasAccentAspect : AspectSystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(HandleLateJoin); + } + + protected override void Started(EntityUid uid, AlasAccentAspectComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args) + { + base.Started(uid, component, gameRule, args); + var query = EntityQueryEnumerator(); + + while (query.MoveNext(out var ent, out _)) + { + EntityManager.EnsureComponent(ent); + } + } + + private void HandleLateJoin(PlayerSpawnCompleteEvent ev) + { + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var ruleEntity, out _, out var gameRule)) + { + if (!GameTicker.IsGameRuleAdded(ruleEntity, gameRule)) + continue; + + if (!ev.LateJoin) + return; + + var mob = ev.Mob; + EntityManager.EnsureComponent(mob); + } + } +} diff --git a/Content.Server/_Honk/Aspects/Component/AlasAccentAspectComponent.cs b/Content.Server/_Honk/Aspects/Component/AlasAccentAspectComponent.cs new file mode 100644 index 0000000000..eb9a60bfd2 --- /dev/null +++ b/Content.Server/_Honk/Aspects/Component/AlasAccentAspectComponent.cs @@ -0,0 +1,6 @@ +namespace Content.Server._Honk.AspectsSystem.Aspects.Components; + +[RegisterComponent] +public sealed partial class AlasAccentAspectComponent : Component +{ +} diff --git a/Content.Server/_Honk/Speech/Components/AlasAccentComponent.cs b/Content.Server/_Honk/Speech/Components/AlasAccentComponent.cs new file mode 100644 index 0000000000..0a812055f9 --- /dev/null +++ b/Content.Server/_Honk/Speech/Components/AlasAccentComponent.cs @@ -0,0 +1,10 @@ +using Content.Server._Honk.Speech.EntitySystems; + +namespace Content.Server._Honk.Speech.Components; + +[RegisterComponent] +[Access(typeof(AlasAccentSystem))] +public sealed partial class AlasAccentComponent : Component +{ + +} diff --git a/Content.Server/_Honk/Speech/EntitySystems/AlasAccentSystem.cs b/Content.Server/_Honk/Speech/EntitySystems/AlasAccentSystem.cs new file mode 100644 index 0000000000..d0dfa8fd48 --- /dev/null +++ b/Content.Server/_Honk/Speech/EntitySystems/AlasAccentSystem.cs @@ -0,0 +1,46 @@ +using System.Linq; +using Content.Server._Honk.Speech.Components; +using Content.Server.Speech; +using Content.Server.Speech.EntitySystems; + +namespace Content.Server._Honk.Speech.EntitySystems; + +public sealed class AlasAccentSystem : EntitySystem +{ + [Dependency] private readonly ReplacementAccentSystem _replacement = default!; + + public override void Initialize() + { + base.Initialize(); + SubscribeLocalEvent(OnAccent); + } + + private void OnAccent(EntityUid uid, AlasAccentComponent component, AccentGetEvent args) + { + var message = args.Message; + + message = _replacement.ApplyReplacements(message, "alas"); + + var words = message.Split(); + if (words.Length > 3) + { + var lastWord = words.Last(); + var modificator = ""; + switch (lastWord.Last()) + { + case '.': + modificator = @" Увы."; + break; + case ',': + modificator = @" увы."; + break; + default: + modificator = @", увы."; + break; + } + message = message + modificator; + } + + args.Message = message; + } +}; diff --git a/Resources/Prototypes/_Honk/Aspects/Aspects.yml b/Resources/Prototypes/_Honk/Aspects/Aspects.yml index aaa0725c1e..dddfc10bb5 100644 --- a/Resources/Prototypes/_Honk/Aspects/Aspects.yml +++ b/Resources/Prototypes/_Honk/Aspects/Aspects.yml @@ -10,3 +10,16 @@ startAudio: path: /Audio/White/Aspects/accent.ogg - type: CaucasianAccentAspect + +- type: entity + id: AlasAccentAspect + parent: BaseGameRule + noSpawn: true + components: + - type: Aspect + name: "Увы" + description: "Экипаж станции преисполнился осознанием бытия. Все проблемы в жизни, вся повседневная суета - это слишком тяжёло, увы." + weight: 3 + startAudio: + path: /Audio/White/Aspects/accent.ogg + - type: AlasAccentAspect