From 5c5900f367661136459714045b19e4d8f6367520 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Wed, 10 Sep 2025 02:46:20 +0300 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=BF=D1=80=D0=B5=D1=82=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D0=B0=D0=BA=D1=82=D0=B8=D0=B2=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D1=8E=20=D0=B8=20=D0=B0=D0=B2=D1=82=D0=BE=D0=BC=D0=B0=D1=82?= =?UTF-8?q?=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=20=D0=BE=D1=82=D0=BA=D0=BB?= =?UTF-8?q?=D1=8E=D1=87=D0=B0=D1=82=D1=8C=20=D1=8D=D0=BD=D0=B5=D1=80=D0=B3?= =?UTF-8?q?=D0=B5=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D0=B9=20=D1=89?= =?UTF-8?q?=D0=B8=D1=82=20=D0=B2=20=D0=BA=D0=BE=D0=BD=D1=82=D0=B5=D0=B9?= =?UTF-8?q?=D0=BD=D0=B5=D1=80=D0=B0=D1=85=20(#2997)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: VigersRay <60344369+VigersRay@users.noreply.github.com> Co-authored-by: Vigers Ray --- Content.Server/EnergyDome/EnergyDomeSystem.cs | 37 +++++++++++++++++-- .../EnergyShield/EnergyShieldSystem.cs | 9 +---- .../EnergyDomeProtectedUserComponent.cs | 12 ++++++ 3 files changed, 47 insertions(+), 11 deletions(-) create mode 100644 Content.Shared/EnergyDome/EnergyDomeProtectedUserComponent.cs diff --git a/Content.Server/EnergyDome/EnergyDomeSystem.cs b/Content.Server/EnergyDome/EnergyDomeSystem.cs index befae4151c..c735dda18a 100644 --- a/Content.Server/EnergyDome/EnergyDomeSystem.cs +++ b/Content.Server/EnergyDome/EnergyDomeSystem.cs @@ -59,11 +59,10 @@ public sealed partial class EnergyDomeSystem : EntitySystem SubscribeLocalEvent(OnComponentRemove); - //Dome events SubscribeLocalEvent(OnDomeDamaged); + SubscribeLocalEvent(OnProtectedEntityParentChanged); } - private void OnInit(Entity generator, ref MapInitEvent args) { if (generator.Comp.CanDeviceNetworkUse) @@ -159,7 +158,6 @@ public sealed partial class EnergyDomeSystem : EntitySystem if (args.Handled) return; - // Sunrise-Start if (!_containerSystem.ContainsEntity(args.Performer, generator.Owner)) return; @@ -168,7 +166,6 @@ public sealed partial class EnergyDomeSystem : EntitySystem if (!_biocodeSystem.CanUse(args.Performer, biocodedComponent.Factions)) return; } - // Sunrise-End AttemptToggle(generator, !generator.Comp.Enabled); @@ -251,6 +248,12 @@ public sealed partial class EnergyDomeSystem : EntitySystem public bool AttemptToggle(Entity generator, bool status) { + var parent = Transform(generator.Owner).ParentUid; + if (HasComp(Transform(parent).ParentUid)) + { + return false; + } + if (TryComp(generator, out var useDelay) && _useDelay.IsDelayed(new (generator, useDelay))) { _audio.PlayPvs(generator.Comp.TurnOffSound, generator); @@ -321,6 +324,9 @@ public sealed partial class EnergyDomeSystem : EntitySystem domeComp.Generator = generator; } + var protectedComp = EnsureComp(protectedEntity); + protectedComp.DomeEntity = newDome; + if (TryComp(generator.Owner, out var powerCellDrawComponent)) { _powerCell.SetDrawEnabled(generator.Owner, true); @@ -335,6 +341,23 @@ public sealed partial class EnergyDomeSystem : EntitySystem generator.Comp.Enabled = true; } + // Sunrise: обработчик смены парента защищаемой сущности + private void OnProtectedEntityParentChanged(Entity ent, ref EntParentChangedMessage args) + { + if (ent.Comp.DomeEntity == null) + return; + if (HasComp(Transform(ent).ParentUid)) + { + if (TryComp(ent.Comp.DomeEntity.Value, out var domeComp) && domeComp.Generator != null) + { + if (TryComp(domeComp.Generator.Value, out var genComp)) + { + TurnOff((domeComp.Generator.Value, genComp), false); + } + } + } + } + private void TurnOff(Entity generator, bool startReloading) { if (!generator.Comp.Enabled) @@ -343,6 +366,11 @@ public sealed partial class EnergyDomeSystem : EntitySystem generator.Comp.Enabled = false; QueueDel(generator.Comp.SpawnedDome); + if (generator.Comp.DomeParentEntity != null && HasComp(generator.Comp.DomeParentEntity.Value)) + { + RemCompDeferred(generator.Comp.DomeParentEntity.Value); + } + if (TryComp(generator.Owner, out var powerCellDrawComponent)) { _powerCell.SetDrawEnabled(generator.Owner, false); @@ -372,3 +400,4 @@ public sealed partial class EnergyDomeSystem : EntitySystem : entity; } } + diff --git a/Content.Server/_Sunrise/EnergyShield/EnergyShieldSystem.cs b/Content.Server/_Sunrise/EnergyShield/EnergyShieldSystem.cs index 72147db822..156468cb14 100644 --- a/Content.Server/_Sunrise/EnergyShield/EnergyShieldSystem.cs +++ b/Content.Server/_Sunrise/EnergyShield/EnergyShieldSystem.cs @@ -1,17 +1,11 @@ using Content.Server.Power.Components; using Content.Server.Power.EntitySystems; -using Content.Server.PowerCell; -using Content.Server._Sunrise.EnergyShield; using Content.Shared.Damage; using Content.Shared.Item.ItemToggle.Components; using Content.Shared.Item.ItemToggle; using Content.Shared.Popups; -using Content.Shared.Examine; -using Content.Shared.Timing; -using Content.Shared.IdentityManagement; -using Content.Shared.PowerCell.Components; using Robust.Shared.Audio.Systems; -using Robust.Shared.GameStates; +using Robust.Shared.Containers; namespace Content.Server._Sunrise.EnergyShield; @@ -21,6 +15,7 @@ public sealed class EnergyShieldSystem : EntitySystem [Dependency] private readonly ItemToggleSystem _itemToggle = default!; [Dependency] private readonly SharedPopupSystem _popup = default!; [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedContainerSystem _container = default!; public override void Initialize() { diff --git a/Content.Shared/EnergyDome/EnergyDomeProtectedUserComponent.cs b/Content.Shared/EnergyDome/EnergyDomeProtectedUserComponent.cs new file mode 100644 index 0000000000..0e7725d83d --- /dev/null +++ b/Content.Shared/EnergyDome/EnergyDomeProtectedUserComponent.cs @@ -0,0 +1,12 @@ +namespace Content.Shared.EnergyDome; + +/// +/// marker component that allows linking the dome generator with the dome itself +/// + +[RegisterComponent] +public sealed partial class EnergyDomeProtectedUserComponent : Component +{ + [DataField] + public EntityUid? DomeEntity; +}