1 using Robust.Shared.Containers;
2 using Robust.Shared.Network;
4 namespace Content.Shared.EntityEffects.Effects.EntitySpawning;
7 /// Spawns a given number of entities of a given prototype in a specified container owned by this entity.
8 /// Acts like <see cref="SpawnEntityEntityEffectSystem"/> if it cannot spawn the prototype in the specified container.
9 /// Amount is modified by scale.
11 /// <inheritdoc cref="EntityEffectSystem{T,TEffect}"/>
12 public sealed partial class SpawnEntityInContainerOrDropEntityEffectSystem : EntityEffectSystem<ContainerManagerComponent, SpawnEntityInContainerOrDrop>
14 [Dependency] private readonly INetManager _net = default!;
16 protected override void Effect(Entity<ContainerManagerComponent> entity, ref EntityEffectEvent<SpawnEntityInContainerOrDrop> args)
18 var quantity = args.Effect.Number * (int)Math.Floor(args.Scale);
19 var proto = args.Effect.Entity;
20 var container = args.Effect.ContainerName;
22 var xform = Transform(entity);
24 if (args.Effect.Predicted)
26 for (var i = 0; i < quantity; i++)
28 PredictedSpawnInContainerOrDrop(proto, entity, container, xform, entity.Comp);
31 else if (_net.IsServer)
33 for (var i = 0; i < quantity; i++)
35 SpawnInContainerOrDrop(proto, entity, container, xform, entity.Comp);
41 /// <inheritdoc cref="BaseSpawnEntityEntityEffect{T}"/>
42 public sealed partial class SpawnEntityInContainerOrDrop : BaseSpawnEntityEntityEffect<SpawnEntityInContainerOrDrop>
45 /// Name of the container we're trying to spawn into.
47 [DataField(required: true)]
48 public string ContainerName;