foreach (var ent in _lookup.GetEntitiesInRange(uid, component.MalfunctionRadius))
{
+ if (component.MalfunctionWhitelist?.IsValid(ent, EntityManager) == false)
+ continue;
+
+ if (component.MalfunctionBlacklist?.IsValid(ent, EntityManager) == true)
+ continue;
+
_emag.DoEmagEffect(uid, ent); //it does not emag itself. adorable.
}
}
using System.Numerics;
using Content.Shared.FixedPoint;
using Content.Shared.Store;
+using Content.Shared.Whitelist;
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
/// </summary>
[ViewVariables(VVAccess.ReadWrite), DataField("malfunctionRadius")]
public float MalfunctionRadius = 3.5f;
+
+ /// <summary>
+ /// Whitelist for entities that can be emagged by malfunction.
+ /// Used to prevent ultra gamer things like ghost emagging chem or instantly launching the shuttle.
+ /// </summary>
+ [DataField]
+ public EntityWhitelist? MalfunctionWhitelist;
+
+ /// <summary>
+ /// Whitelist for entities that can never be emagged by malfunction.
+ /// </summary>
+ [DataField]
+ public EntityWhitelist? MalfunctionBlacklist;
#endregion
#region Visualizer