Skip to content

Commit

Permalink
add SpawnTableOnUse (#32620)
Browse files Browse the repository at this point in the history
* add SpawnTableOnUse

* make BaseEmitSound more flexible and remove sound from spawntable

* add log

* :trollface:

---------

Co-authored-by: deltanedas <@deltanedas:kde.org>
  • Loading branch information
deltanedas authored Dec 16, 2024
1 parent cd23805 commit 2635888
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 5 deletions.
17 changes: 17 additions & 0 deletions Content.Server/Storage/Components/SpawnTableOnUseComponent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using Content.Server.Storage.EntitySystems;
using Content.Shared.EntityTable.EntitySelectors;

namespace Content.Server.Storage.Components;

/// <summary>
/// Spawns items from an entity table when used in hand.
/// </summary>
[RegisterComponent, Access(typeof(SpawnTableOnUseSystem))]
public sealed partial class SpawnTableOnUseComponent : Component
{
/// <summary>
/// The entity table to select entities from.
/// </summary>
[DataField(required: true)]
public EntityTableSelector Table = default!;
}
41 changes: 41 additions & 0 deletions Content.Server/Storage/EntitySystems/SpawnTableOnUseSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
using Content.Server.Administration.Logs;
using Content.Server.Storage.Components;
using Content.Shared.Database;
using Content.Shared.EntityTable;
using Content.Shared.Hands.EntitySystems;
using Content.Shared.Interaction.Events;

namespace Content.Server.Storage.EntitySystems;

public sealed class SpawnTableOnUseSystem : EntitySystem
{
[Dependency] private readonly EntityTableSystem _entityTable = default!;
[Dependency] private readonly IAdminLogManager _adminLogger = default!;
[Dependency] private readonly SharedHandsSystem _hands = default!;

public override void Initialize()
{
base.Initialize();

SubscribeLocalEvent<SpawnTableOnUseComponent, UseInHandEvent>(OnUseInHand);
}

private void OnUseInHand(Entity<SpawnTableOnUseComponent> ent, ref UseInHandEvent args)
{
if (args.Handled)
return;

args.Handled = true;

var coords = Transform(ent).Coordinates;
var spawns = _entityTable.GetSpawns(ent.Comp.Table);
foreach (var id in spawns)
{
var spawned = Spawn(id, coords);
_adminLogger.Add(LogType.EntitySpawn, LogImpact.Low, $"{ToPrettyString(args.User):user} used {ToPrettyString(ent):spawner} which spawned {ToPrettyString(spawned)}");
_hands.TryPickupAnyHand(args.User, spawned);
}

Del(ent);
}
}
7 changes: 7 additions & 0 deletions Content.Shared/Sound/Components/BaseEmitSoundComponent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,11 @@ public abstract partial class BaseEmitSoundComponent : Component
[ViewVariables(VVAccess.ReadWrite)]
[DataField(required: true)]
public SoundSpecifier? Sound;

/// <summary>
/// Play the sound at the position instead of parented to the source entity.
/// Useful if the entity is deleted after.
/// </summary>
[DataField]
public bool Positional;
}
18 changes: 13 additions & 5 deletions Content.Shared/Sound/SharedEmitSoundSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -145,14 +145,22 @@ protected void TryEmitSound(EntityUid uid, BaseEmitSoundComponent component, Ent
if (component.Sound == null)
return;

if (predict)
if (component.Positional)
{
_audioSystem.PlayPredicted(component.Sound, uid, user);
var coords = Transform(uid).Coordinates;
if (predict)
_audioSystem.PlayPredicted(component.Sound, coords, user);
else if (_netMan.IsServer)
// don't predict sounds that client couldn't have played already
_audioSystem.PlayPvs(component.Sound, coords);
}
else if (_netMan.IsServer)
else
{
// don't predict sounds that client couldn't have played already
_audioSystem.PlayPvs(component.Sound, uid);
if (predict)
_audioSystem.PlayPredicted(component.Sound, uid, user);
else if (_netMan.IsServer)
// don't predict sounds that client couldn't have played already
_audioSystem.PlayPvs(component.Sound, uid);
}
}

Expand Down

0 comments on commit 2635888

Please sign in to comment.