--- /dev/null
+using Content.Shared.Body.Components;
+using Content.Shared.Inventory;
+using Content.Shared.Popups;
+using JetBrains.Annotations;
+using Robust.Server.GameObjects;
+
+namespace Content.Server.Destructible.Thresholds.Behaviors;
+
+[UsedImplicitly]
+[DataDefinition]
+public sealed partial class BurnBodyBehavior : IThresholdBehavior
+{
+
+ public void Execute(EntityUid bodyId, DestructibleSystem system, EntityUid? cause = null)
+ {
+ var transformSystem = system.EntityManager.System<TransformSystem>();
+ var inventorySystem = system.EntityManager.System<InventorySystem>();
+ var sharedPopupSystem = system.EntityManager.System<SharedPopupSystem>();
+
+ if (!system.EntityManager.TryGetComponent<InventoryComponent>(bodyId, out var comp))
+ return;
+
+ foreach (var item in inventorySystem.GetHandOrInventoryEntities(bodyId))
+ {
+ transformSystem.DropNextTo(item, bodyId);
+ }
+
+ sharedPopupSystem.PopupCoordinates(Loc.GetString("bodyburn-text-others", ("name", bodyId)), transformSystem.GetMoverCoordinates(bodyId), PopupType.LargeCaution);
+
+ system.EntityManager.QueueDeleteEntity(bodyId);
+ }
+}
public float Offset { get; set; } = 0.5f;
[DataField("transferForensics")]
- public bool DoTransferForensics = false;
+ public bool DoTransferForensics;
+
+ [DataField]
+ public bool SpawnInContainer;
public void Execute(EntityUid owner, DestructibleSystem system, EntityUid? cause = null)
{
if (EntityPrototypeHelpers.HasComponent<StackComponent>(entityId, system.PrototypeManager, system.ComponentFactory))
{
- var spawned = system.EntityManager.SpawnEntity(entityId, position.Offset(getRandomVector()));
+ var spawned = SpawnInContainer
+ ? system.EntityManager.SpawnNextToOrDrop(entityId, owner)
+ : system.EntityManager.SpawnEntity(entityId, position.Offset(getRandomVector()));
system.StackSystem.SetCount(spawned, count);
TransferForensics(spawned, system, owner);
{
for (var i = 0; i < count; i++)
{
- var spawned = system.EntityManager.SpawnEntity(entityId, position.Offset(getRandomVector()));
+ var spawned = SpawnInContainer
+ ? system.EntityManager.SpawnNextToOrDrop(entityId, owner)
+ : system.EntityManager.SpawnEntity(entityId, position.Offset(getRandomVector()));
TransferForensics(spawned, system, owner);
}
--- /dev/null
+bodyburn-text-others = {$name}'s body burns to ash!
damage: 400
behaviors:
- !type:GibBehavior { }
+ - trigger:
+ !type:DamageTypeTrigger
+ damageType: Heat
+ damage: 1500
+ behaviors:
+ - !type:SpawnEntitiesBehavior
+ spawnInContainer: true
+ spawn:
+ Ash:
+ min: 1
+ max: 1
+ - !type:BurnBodyBehavior { }
+ - !type:PlaySoundBehavior
+ sound:
+ collection: MeatLaserImpact
- type: RadiationReceiver
- type: Stamina
- type: MobState