[DataField("transferEfficiency")]
private float _transferEfficiency = 1f;
+ /// <summary>
+ /// Whether this will inject through hardsuits or not.
+ /// </summary>
+ [DataField("pierceArmor"), ViewVariables(VVAccess.ReadWrite)]
+ public bool PierceArmor = true;
+
/// <summary>
/// Solution to inject from.
/// </summary>
using Content.Shared.FixedPoint;
using Content.Shared.Hands.Components;
using Content.Shared.IdentityManagement;
+using Content.Shared.Inventory;
+using Content.Shared.Popups;
using Content.Shared.StatusEffect;
+using Content.Shared.Tag;
using Content.Shared.Verbs;
using Content.Shared.Weapons.Melee;
using Content.Shared.Weapons.Melee.Events;
[Dependency] private readonly BloodstreamSystem _bloodstream = default!;
[Dependency] private readonly ContestsSystem _contests = default!;
[Dependency] private readonly ExamineSystem _examine = default!;
+ [Dependency] private readonly InventorySystem _inventory = default!;
[Dependency] private readonly LagCompensationSystem _lag = default!;
[Dependency] private readonly SolutionContainerSystem _solutions = default!;
+ [Dependency] private readonly TagSystem _tag = default!;
public override void Initialize()
{
if (Deleted(entity))
continue;
+ // prevent deathnettles injecting through hardsuits
+ if (!comp.PierceArmor && _inventory.TryGetSlotEntity(entity, "outerClothing", out var suit) && _tag.HasTag(suit.Value, "Hardsuit"))
+ {
+ PopupSystem.PopupEntity(Loc.GetString("melee-inject-failed-hardsuit", ("weapon", owner)), args.User, args.User, PopupType.SmallCaution);
+ continue;
+ }
+
if (bloodQuery.TryGetComponent(entity, out var bloodstream))
hitBloodstreams.Add((entity, bloodstream));
}