From d855df732f6e81bae63783b14680fcdfec2dedea Mon Sep 17 00:00:00 2001 From: TNE Date: Mon, 4 May 2026 01:17:14 +0200 Subject: [PATCH] Prevent zombies from using jetpacks Introduces CanComplexInteract check from ActionBlockerSystem alongside a translation string When Zombifying: Removes AutomaticJetpackUserComponent, calls SharedJetpackSystem.SetEnable(..., false, ...) --- Content.Server/Zombies/ZombieSystem.Transform.cs | 11 +++++++++++ .../_DV/Movement/Systems/SharedJetpackSystem.cs | 8 ++++++++ Resources/Locale/en-US/_DV/movement/jetpacks.ftl | 1 + 3 files changed, 20 insertions(+) diff --git a/Content.Server/Zombies/ZombieSystem.Transform.cs b/Content.Server/Zombies/ZombieSystem.Transform.cs index a0845a76c5..b5b03880b1 100644 --- a/Content.Server/Zombies/ZombieSystem.Transform.cs +++ b/Content.Server/Zombies/ZombieSystem.Transform.cs @@ -26,6 +26,8 @@ using Content.Shared.Mobs; using Content.Shared.Mobs.Components; using Content.Shared.Movement.Pulling.Components; using Content.Shared.Movement.Systems; +using Content.Shared.Movement.Components; // DeltaV +using Content.Shared._DV.Movement.Components; // DeltaV using Content.Shared.NameModifier.EntitySystems; using Content.Shared.NPC.Components; // DeltaV using Content.Shared.NPC.Systems; @@ -73,6 +75,7 @@ public sealed partial class ZombieSystem [Dependency] private readonly TagSystem _tag = default!; [Dependency] private readonly ISharedPlayerManager _player = default!; [Dependency] private readonly PsionicSystem _psionic = default!; // DeltaV + [Dependency] private readonly SharedJetpackSystem _jetpack = default!; // DeltaV - Prevent Jetpacks on Zombies private static readonly ProtoId InvalidForGlobalSpawnSpellTag = "InvalidForGlobalSpawnSpell"; private static readonly ProtoId CannotSuicideTag = "CannotSuicide"; @@ -151,6 +154,14 @@ public sealed partial class ZombieSystem if (HasComp(target)) _psionic.MindBreakEntity(target, false, true); // DeltaV End - Prevent Psionic Zombies + // DeltaV Start - Prevent Jetpacks on Zombies + if (TryComp(target, out var jetpackUser)) + { + if(TryComp(jetpackUser.Jetpack, out var jetpack)) + _jetpack.SetEnabled(jetpackUser.Jetpack, jetpack, false, target); + } + RemComp(target); + // DeltaV End - Prevent Jetpacks on Zombies //funny voice var accentType = "zombie"; diff --git a/Content.Shared/_DV/Movement/Systems/SharedJetpackSystem.cs b/Content.Shared/_DV/Movement/Systems/SharedJetpackSystem.cs index 65867bf761..5c088b0871 100644 --- a/Content.Shared/_DV/Movement/Systems/SharedJetpackSystem.cs +++ b/Content.Shared/_DV/Movement/Systems/SharedJetpackSystem.cs @@ -1,3 +1,4 @@ +using Content.Shared.ActionBlocker; using Content.Shared._DV.Movement.Components; using Content.Shared.Movement.Components; using Content.Shared.Movement.Events; @@ -7,12 +8,19 @@ namespace Content.Shared.Movement.Systems; public abstract partial class SharedJetpackSystem { [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly ActionBlockerSystem _actionBlocker = default!; private void OnJetpackToggle(Entity jetpack, ref ToggleJetpackEvent args) { if (args.Handled) return; + if (!_actionBlocker.CanComplexInteract(args.Performer)) + { + _popup.PopupClient(Loc.GetString("jetpack-too-complex"), jetpack, args.Performer); + return; + } + jetpack.Comp.AutomaticMode = !jetpack.Comp.AutomaticMode; jetpack.Comp.AutomaticUser = args.Performer; Dirty(jetpack); diff --git a/Resources/Locale/en-US/_DV/movement/jetpacks.ftl b/Resources/Locale/en-US/_DV/movement/jetpacks.ftl index 19f9dd10fa..f42d719019 100644 --- a/Resources/Locale/en-US/_DV/movement/jetpacks.ftl +++ b/Resources/Locale/en-US/_DV/movement/jetpacks.ftl @@ -2,3 +2,4 @@ jetpack-activated-on-grid = The jetpack will automatically turn on when leaving jetpack-activated-off-grid = The jetpack turns on. jetpack-activates-automatically = The jetpack automatically turns on. jetpack-deactivated = The jetpack will no longer turn on. +jetpack-too-complex = The jetpack seems to be too complicated to operate.