From 81eff24084ba28a448a6ce1a66d025ca19dba490 Mon Sep 17 00:00:00 2001 From: Jabak <163307958+Jabaks@users.noreply.github.com> Date: Thu, 11 Jul 2024 14:39:34 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B0=D0=B7=D1=80=D0=B5=D1=88=D0=B0?= =?UTF-8?q?=D1=8E=20=D0=B4=D0=B0=D1=82=D1=8C=20=D0=BC=D0=BD=D0=B5=20=D0=B4?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/SpaceLawChangeRuleComponent.cs | 7 ++ .../_Amour/StationEvents/SpaceLawChange.cs | 110 ++++++++++++++++++ .../ru-RU/_amour/events/space-law-change.ftl | 11 ++ Resources/Prototypes/GameRules/events.yml | 11 ++ 4 files changed, 139 insertions(+) create mode 100644 Content.Server/_Amour/StationEvents/Components/SpaceLawChangeRuleComponent.cs create mode 100644 Content.Server/_Amour/StationEvents/SpaceLawChange.cs create mode 100644 Resources/Locale/ru-RU/_amour/events/space-law-change.ftl diff --git a/Content.Server/_Amour/StationEvents/Components/SpaceLawChangeRuleComponent.cs b/Content.Server/_Amour/StationEvents/Components/SpaceLawChangeRuleComponent.cs new file mode 100644 index 0000000000..5fa6e58e2f --- /dev/null +++ b/Content.Server/_Amour/StationEvents/Components/SpaceLawChangeRuleComponent.cs @@ -0,0 +1,7 @@ +namespace Content.Server._Amour.StationEvents.Components; + +[RegisterComponent, Access(typeof(SpaceLawChangeRule))] +public sealed partial class SpaceLawChangeRuleComponent : Component +{ + +} diff --git a/Content.Server/_Amour/StationEvents/SpaceLawChange.cs b/Content.Server/_Amour/StationEvents/SpaceLawChange.cs new file mode 100644 index 0000000000..b3d823f15f --- /dev/null +++ b/Content.Server/_Amour/StationEvents/SpaceLawChange.cs @@ -0,0 +1,110 @@ +using System.Linq; +using Content.Server._Amour.StationEvents.Components; +using Content.Server.Chat.Systems; +using Content.Server.Fax; +using Content.Server.GameTicking.Rules.Components; +using Content.Server.StationEvents.Events; +using Content.Shared.Paper; +using Robust.Shared.Random; + +namespace Content.Server._Amour.StationEvents +{ + public sealed class SpaceLawChangeRule : StationEventSystem + { + [Dependency] private readonly ChatSystem _chat = default!; + [Dependency] private readonly IRobustRandom _robustRandom = default!; + [Dependency] private readonly FaxSystem _faxSystem = default!; + private readonly RandomSelector _randomSelector = default!; + + public SpaceLawChangeRule() + { + var options = new List + { + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11" + // Add other message options here if necessary + }; + + _randomSelector = new RandomSelector(options); + } + + protected override void Started(EntityUid uid, SpaceLawChangeRuleComponent component, + GameRuleComponent gameRule, GameRuleStartedEvent args) + { + base.Started(uid, component, gameRule, args); + + var randomMessage = _randomSelector.GetRandom(_robustRandom); + + var message = Loc.GetString($"station-event-space-law-change-announcement-{randomMessage}"); + + _chat.DispatchGlobalAnnouncement(message, playSound: true, colorOverride: Color.Gold); + + SendSpaceLawChangeFax(message); + } + + /// + /// Sending a fax announcing changes in Space Law + /// + private void SendSpaceLawChangeFax(string message) + { + var printout = new FaxPrintout( + message, + Loc.GetString("materials-paper"), + stampedBy: new List + { + new() { StampedName = Loc.GetString("stamp-component-stamped-name-centcom"), StampedColor = Color.FromHex("#006600") } + }, + prototypeId: null!, + stampState: null); + + var faxes = EntityManager.EntityQuery(); + foreach (var fax in faxes) + { + _faxSystem.Receive(fax.Owner, printout, null, fax); + } + } + } + + /// + /// Randomly selects an option from the list. Selected options cannot be selected again until all unselected options are exhausted. + /// + public class RandomSelector + { + private readonly List _options; + private readonly List _exclusions; + + public RandomSelector(List options) + { + _options = options; + _exclusions = new List(); + } + + public string GetRandom(IRobustRandom robustRandom) + { + if (_exclusions.Count >= _options.Count) + _exclusions.Clear(); + + var availableOptions = _options.Except(_exclusions).ToList(); + if (availableOptions.Count == 0) + { + _exclusions.Clear(); + availableOptions = _options.ToList(); + } + + var selectedOption = robustRandom.PickAndTake(availableOptions); + _exclusions.Add(selectedOption); + + return selectedOption; + } + } + +} diff --git a/Resources/Locale/ru-RU/_amour/events/space-law-change.ftl b/Resources/Locale/ru-RU/_amour/events/space-law-change.ftl new file mode 100644 index 0000000000..165a6f11e8 --- /dev/null +++ b/Resources/Locale/ru-RU/_amour/events/space-law-change.ftl @@ -0,0 +1,11 @@ +station-event-space-law-change-announcement-1 = В связи с недавними изменениями корпоративной политики, юбки и шорты теперь запрещены законом о космосе под кодовым номером "1XX". Вы обязаны немедленно исправить ситуацию в течение 15 минут. Мы настоятельно рекомендуем вам поторопиться, чтобы избежать возможных негативных последствий. +station-event-space-law-change-announcement-2 = В связи с недавними изменениями корпоративной политики, кухонные ножи теперь запрещены законом под кодовым номером "1XX". Вы обязаны немедленно исправить ситуацию в течение 15 минут. Мы настоятельно рекомендуем вам поторопиться, чтобы избежать возможных негативных последствий. +station-event-space-law-change-announcement-3 = В связи с недавними изменениями в корпоративной политике, головные уборы и береты теперь запрещены законом о космосе под кодовым номером "1XX". Вы обязаны немедленно исправить ситуацию в течение 15 минут. Мы настоятельно рекомендуем вам поторопиться, чтобы избежать возможных негативных последствий. +station-event-space-law-change-announcement-4 = В связи с недавними изменениями корпоративной политики зимние куртки теперь запрещены законом о космосе под кодовым номером "1XX". Вы обязаны немедленно исправить ситуацию в течение 15 минут. Мы настоятельно рекомендуем вам поторопиться, чтобы избежать возможных негативных последствий. +station-event-space-law-change-announcement-5 = В связи с недавними изменениями в корпоративной политике, алкогольные напитки теперь запрещены законом о космосе под кодовым номером "1XX". Вы обязаны немедленно исправить ситуацию в течение 15 минут. Мы настоятельно рекомендуем вам поторопиться, чтобы избежать возможных негативных последствий. +station-event-space-law-change-announcement-6 = В связи с недавними изменениями в корпоративной политике, несмешные клоуны теперь запрещены законом под кодовым номером "1XX". Вы обязаны немедленно исправить ситуацию в течение 15 минут. Мы настоятельно рекомендуем вам поторопиться, чтобы избежать возможных негативных последствий. +station-event-space-law-change-announcement-7 = В связи с недавними изменениями в корпоративной политике, продукты со специями теперь запрещены законом о космосе под кодовым номером "1XX". Вы обязаны немедленно исправить ситуацию в течение 15 минут. Мы настоятельно рекомендуем вам поторопиться, чтобы избежать возможных негативных последствий. +station-event-space-law-change-announcement-8 = В связи с недавними изменениями в корпоративной политике деятельность руководителей отделов, которые не уделяют должного внимания патриотическому воспитанию своих сотрудников во славу NanoTrasen, теперь считается незаконной под кодовым номером “1XX” Космического закона. Вы обязаны немедленно исправить ситуацию в течение 15 минут. Мы настоятельно рекомендуем вам поторопиться, чтобы избежать возможных негативных последствий. +station-event-space-law-change-announcement-9 = В связи с недавними изменениями в корпоративной политике, ношение головного убора теперь запрещено космическим законодательством под кодовым номером "1XX". Вы обязаны немедленно исправить ситуацию в течение 15 минут. Мы настоятельно рекомендуем вам поторопиться, чтобы избежать возможных негативных последствий. +station-event-space-law-change-announcement-10 = В связи с недавними изменениями в корпоративной политике, отказ руководителей отделов лично поприветствовать каждого члена экипажа, посещающего отдел, теперь является незаконным в соответствии с кодом космического права "1XX". Вы обязаны немедленно исправить ситуацию в течение 15 минут. Мы настоятельно рекомендуем вам поторопиться, чтобы избежать возможных негативных последствий. +station-event-space-law-change-announcement-11 = В связи с недавними изменениями в корпоративной политике, нецензурная лексика руководителей подразделений в каналах связи теперь считается незаконной в соответствии с кодом космического права "1XX". Вы обязаны немедленно исправить ситуацию в течение 15 минут. Мы настоятельно рекомендуем вам поторопиться, чтобы избежать возможных негативных последствий. diff --git a/Resources/Prototypes/GameRules/events.yml b/Resources/Prototypes/GameRules/events.yml index 1d852a6879..e0cb451c65 100644 --- a/Resources/Prototypes/GameRules/events.yml +++ b/Resources/Prototypes/GameRules/events.yml @@ -503,3 +503,14 @@ minimumPlayers: 20 weight: 5 - type: MobReplacementRule + +- type: entity + id: SpaceLawChange + parent: BaseGameRule + noSpawn: true + components: + - type: StationEvent + weight: 8 + reoccurrenceDelay: 20 + duration: 1 + - type: SpaceLawChangeRule