From: lzk <124214523+lzk228@users.noreply.github.com> Date: Thu, 27 Mar 2025 17:42:57 +0000 (+0100) Subject: make admin interacts with storages silent (#35417) X-Git-Url: https://git.smokeofanarchy.ru/gitweb.cgi?a=commitdiff_plain;h=8f049f174d3aec367d1b8baa96afbffb24085696;p=space-station-14.git make admin interacts with storages silent (#35417) * make admin interacts with storages silent * review * silent insert and transfer * i love code --------- Co-authored-by: ScarKy0 --- diff --git a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs index f523a6c8a0..9297ea043d 100644 --- a/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs +++ b/Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs @@ -22,6 +22,7 @@ using Content.Shared.Placeable; using Content.Shared.Popups; using Content.Shared.Stacks; using Content.Shared.Storage.Components; +using Content.Shared.Tag; using Content.Shared.Timing; using Content.Shared.Storage.Events; using Content.Shared.Verbs; @@ -66,6 +67,7 @@ public abstract class SharedStorageSystem : EntitySystem [Dependency] private readonly SharedStackSystem _stack = default!; [Dependency] protected readonly SharedTransformSystem TransformSystem = default!; [Dependency] protected readonly SharedUserInterfaceSystem UI = default!; + [Dependency] private readonly TagSystem _tag = default!; [Dependency] protected readonly UseDelaySystem UseDelay = default!; private EntityQuery _itemQuery; @@ -276,7 +278,8 @@ public abstract class SharedStorageSystem : EntitySystem if (!UI.IsUiOpen(uid, args.UiKey)) { UpdateAppearance((uid, storageComp, null)); - Audio.PlayPredicted(storageComp.StorageCloseSound, uid, args.Actor); + if (!_tag.HasTag(args.Actor, storageComp.SilentStorageUserTag)) + Audio.PlayPredicted(storageComp.StorageCloseSound, uid, args.Actor); } } @@ -357,7 +360,7 @@ public abstract class SharedStorageSystem : EntitySystem if (!UI.TryOpenUi(uid, StorageComponent.StorageUiKey.Key, entity)) return; - if (!silent) + if (!silent && !_tag.HasTag(entity, storageComp.SilentStorageUserTag)) { Audio.PlayPredicted(storageComp.StorageOpenSound, uid, entity); @@ -602,7 +605,8 @@ public abstract class SharedStorageSystem : EntitySystem // If we picked up at least one thing, play a sound and do a cool animation! if (successfullyInserted.Count > 0) { - Audio.PlayPredicted(component.StorageInsertSound, uid, args.User, _audioParams); + if (!_tag.HasTag(args.User, component.SilentStorageUserTag)) + Audio.PlayPredicted(component.StorageInsertSound, uid, args.User, _audioParams); EntityManager.RaiseSharedEvent(new AnimateInsertingEntitiesEvent( GetNetEntity(uid), GetNetEntityList(successfullyInserted), @@ -645,7 +649,8 @@ public abstract class SharedStorageSystem : EntitySystem $"{ToPrettyString(player):player} is attempting to take {ToPrettyString(item):item} out of {ToPrettyString(storage):storage}"); if (_sharedHandsSystem.TryPickupAnyHand(player, item, handsComp: player.Comp) - && storage.Comp.StorageRemoveSound != null) + && storage.Comp.StorageRemoveSound != null + && !_tag.HasTag(player, storage.Comp.SilentStorageUserTag)) { Audio.PlayPredicted(storage.Comp.StorageRemoveSound, storage, player, _audioParams); } @@ -903,8 +908,10 @@ public abstract class SharedStorageSystem : EntitySystem { Insert(target, entity, out _, user: user, targetComp, playSound: false); } - - Audio.PlayPredicted(sourceComp.StorageInsertSound, target, user, _audioParams); + if (user != null + && (!_tag.HasTag(user.Value, sourceComp.SilentStorageUserTag) + || !_tag.HasTag(user.Value, targetComp.SilentStorageUserTag))) + Audio.PlayPredicted(sourceComp.StorageInsertSound, target, user, _audioParams); } /// @@ -1077,12 +1084,17 @@ public abstract class SharedStorageSystem : EntitySystem * For now we just treat items as always being the same size regardless of stack count. */ + // Check if the sound is expected to play. + // If there is an user, the sound will not play if they have the SilentStorageUserTag + // If there is no user, only playSound is checked. + var canPlaySound = playSound && (user == null || !_tag.HasTag(user.Value, storageComp.SilentStorageUserTag)); + if (!stackAutomatically || !_stackQuery.TryGetComponent(insertEnt, out var insertStack)) { if (!ContainerSystem.Insert(insertEnt, storageComp.Container)) return false; - if (playSound) + if (canPlaySound) Audio.PlayPredicted(storageComp.StorageInsertSound, uid, user, _audioParams); return true; @@ -1112,7 +1124,7 @@ public abstract class SharedStorageSystem : EntitySystem return false; } - if (playSound) + if (canPlaySound) Audio.PlayPredicted(storageComp.StorageInsertSound, uid, user, _audioParams); return true; diff --git a/Content.Shared/Storage/StorageComponent.cs b/Content.Shared/Storage/StorageComponent.cs index f772ad2022..17d3fce62d 100644 --- a/Content.Shared/Storage/StorageComponent.cs +++ b/Content.Shared/Storage/StorageComponent.cs @@ -1,5 +1,6 @@ using Content.Shared.Item; using Content.Shared.Storage.EntitySystems; +using Content.Shared.Tag; using Content.Shared.Whitelist; using Robust.Shared.Audio; using Robust.Shared.Containers; @@ -141,6 +142,12 @@ namespace Content.Shared.Storage [DataField] public bool HideStackVisualsWhenClosed = true; + /// + /// Entities with this tag won't trigger storage sound. + /// + [DataField] + public ProtoId SilentStorageUserTag = "SilentStorageUser"; + [Serializable, NetSerializable] public enum StorageUiKey : byte { diff --git a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml index 0933cd5573..8fecb53818 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml @@ -13,6 +13,7 @@ - BypassInteractionRangeChecks - BypassDropChecks - NoConsoleSound + - SilentStorageUser - type: Input context: "aghost" - type: Ghost diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 5d7d19950d..68b69fc3b4 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -1165,6 +1165,9 @@ - type: Tag id: SignalTrigger +- type: Tag + id: SilentStorageUser # used in SharedStorageSystem, so the entity will do all silently + - type: Tag id: SkeletonMotorcycleKeys