Delta-v/Content.Server/Destructible/Thresholds/Behaviors/BurnBodyBehavior.cs

47 lines
1.8 KiB
C#

using Content.Shared.Body.Components;
using Content.Shared.Body.Part; // Shitmed Change
using Content.Shared.IdentityManagement;
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))
{
foreach (var item in inventorySystem.GetHandOrInventoryEntities(bodyId))
{
transformSystem.DropNextTo(item, bodyId);
}
}
var bodyIdentity = Identity.Entity(bodyId, system.EntityManager);
// Begin Shitmed Changes
if (system.EntityManager.TryGetComponent<BodyPartComponent>(bodyId, out var bodyPart))
{
if (bodyPart.CanSever
&& system.BodySystem.BurnPart(bodyId, bodyPart))
sharedPopupSystem.PopupCoordinates(Loc.GetString("bodyburn-text-others", ("name", bodyIdentity)), transformSystem.GetMoverCoordinates(bodyId), PopupType.LargeCaution);
}
else
{
sharedPopupSystem.PopupCoordinates(Loc.GetString("bodyburn-text-others", ("name", bodyIdentity)), transformSystem.GetMoverCoordinates(bodyId), PopupType.LargeCaution);
}
// End Shitmed Changes
system.EntityManager.QueueDeleteEntity(bodyId);
}
}