From cf89e96c6be8fac53a6df7f34173958b0fc80c12 Mon Sep 17 00:00:00 2001 From: Rxup Date: Mon, 26 Feb 2024 01:11:29 +0300 Subject: [PATCH] BlobFix (#487) --- .../GameTicking/Rules/BlobRuleSystem.cs | 21 ++++++++++++------- Resources/Locale/ru-RU/blob/blob.ftl | 6 ++++++ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/Content.Server/Backmen/GameTicking/Rules/BlobRuleSystem.cs b/Content.Server/Backmen/GameTicking/Rules/BlobRuleSystem.cs index 239aa9e6a8e..31c32f2a160 100644 --- a/Content.Server/Backmen/GameTicking/Rules/BlobRuleSystem.cs +++ b/Content.Server/Backmen/GameTicking/Rules/BlobRuleSystem.cs @@ -2,6 +2,7 @@ using Content.Server.AlertLevel; using Content.Server.Backmen.GameTicking.Rules.Components; using Content.Server.Backmen.SpecForces; +using Content.Server.Chat.Managers; using Content.Server.Chat.Systems; using Content.Server.GameTicking; using Content.Server.GameTicking.Rules; @@ -10,6 +11,7 @@ using Content.Server.Nuke; using Content.Server.Objectives; using Content.Server.RoundEnd; +using Content.Server.Station.Components; using Content.Server.Station.Systems; using Content.Shared.Backmen.Blob; using Content.Shared.Objectives.Components; @@ -25,6 +27,8 @@ public sealed class BlobRuleSystem : GameRuleSystem [Dependency] private readonly NukeCodePaperSystem _nukeCode = default!; [Dependency] private readonly StationSystem _stationSystem = default!; [Dependency] private readonly ObjectivesSystem _objectivesSystem = default!; + [Dependency] private readonly AlertLevelSystem _alertLevelSystem = default!; + [Dependency] private readonly IChatManager _chatManager = default!; private ISawmill _sawmill = default!; private static readonly SoundPathSpecifier BlobDetectAudio = new SoundPathSpecifier("/Audio/Corvax/Adminbuse/Outbreak5.ogg"); @@ -67,6 +71,12 @@ public override void Update(float frameTime) } var stationUid = _stationSystem.GetOwningStation(ent); + if (stationUid == null || !HasComp(stationUid.Value)) + { + _chatManager.SendAdminAlert(ent, Loc.GetString("blob-alert-out-off-station")); + QueueDel(ent); + continue; + } switch (blobRuleComp.Stage) { case BlobStage.Default when comp.BlobTiles.Count < 30: @@ -74,8 +84,7 @@ public override void Update(float frameTime) case BlobStage.Default: _chatSystem.DispatchGlobalAnnouncement(Loc.GetString("blob-alert-detect"), Loc.GetString("Station"), true, BlobDetectAudio, Color.Red); - EntitySystem.Get() - .SetLevel(stationUid!.Value, "sigma", true, true, true, false); + _alertLevelSystem.SetLevel(stationUid.Value, "sigma", true, true, true, true); blobRuleComp.Stage = BlobStage.Begin; break; case BlobStage.Begin: @@ -87,12 +96,10 @@ public override void Update(float frameTime) true, blobRuleComp.AlertAudio, Color.Red); - if (stationUid != null) - _nukeCode.SendNukeCodes(stationUid.Value); - blobRuleComp.Stage = BlobStage.Critical; - EntitySystem.Get() - .SetLevel(stationUid!.Value, "gamma", true, true, true, false); + _nukeCode.SendNukeCodes(stationUid.Value); + blobRuleComp.Stage = BlobStage.Critical; + _alertLevelSystem.SetLevel(stationUid.Value, "gamma", true, true, true, true); EntityManager.System().CallOps(SpecForcesType.RXBZZ, "ДСО"); } diff --git a/Resources/Locale/ru-RU/blob/blob.ftl b/Resources/Locale/ru-RU/blob/blob.ftl index b4c9c14bab5..cec14187faf 100644 --- a/Resources/Locale/ru-RU/blob/blob.ftl +++ b/Resources/Locale/ru-RU/blob/blob.ftl @@ -45,6 +45,12 @@ blob-chem-electromagneticweb-info = Наносит 20 урона ожогами, 20% шанс вызывать ЭМИ разряд при атаке. Любая уничтоженая плитка гарантировано вызовет ЭМИ. Вы получаете на 25% больше урона теплом и брутом. + +blob-alert-out-off-station = Блоб был удален т.к. был обнаружен вне станции! + +blob-title=Блоб +blob-description=Все мы блоб... + # Announcment blob-alert-recall-shuttle = Эвакуационный шатл не может быть отправлен на станцию пока существует биологическая угроза 5 уровня. blob-alert-detect = На станции была обнаружена биологическая угроза 5 уровня, обьявлена изоляция станции.