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;
[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<ItemComponent> _itemQuery;
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);
}
}
if (!UI.TryOpenUi(uid, StorageComponent.StorageUiKey.Key, entity))
return;
- if (!silent)
+ if (!silent && !_tag.HasTag(entity, storageComp.SilentStorageUserTag))
{
Audio.PlayPredicted(storageComp.StorageOpenSound, uid, entity);
// 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),
$"{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);
}
{
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);
}
/// <summary>
* 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;
return false;
}
- if (playSound)
+ if (canPlaySound)
Audio.PlayPredicted(storageComp.StorageInsertSound, uid, user, _audioParams);
return true;