Priority = 1, // Promote to top to make ejecting the ALT-click action
Act = () =>
{
- if (args.User == component.PilotSlot.ContainedEntity)
+ if (args.User == uid || args.User == component.PilotSlot.ContainedEntity)
{
TryEject(uid, component);
return;
/// Relays an entities interactions to another entity.
/// This doesn't raise the same events, but just relays
/// the clicks of the mouse.
+///
+/// Note that extreme caution should be taken when using this, as this will probably bypass many normal can-interact checks.
/// </summary>
[RegisterComponent, NetworkedComponent]
[Access(typeof(SharedInteractionSystem))]
{
if (TryComp<InteractionRelayComponent>(user, out var relay) && relay.RelayEntity is not null)
{
- UserInteraction(relay.RelayEntity.Value, coordinates, target, altInteract, checkCanInteract, checkAccess, checkCanUse);
+ // TODO this needs to be handled better. This probably bypasses many complex can-interact checks in weird roundabout ways.
+ if (_actionBlockerSystem.CanInteract(user, target))
+ {
+ UserInteraction(relay.RelayEntity.Value, coordinates, target, altInteract, checkCanInteract, checkAccess, checkCanUse);
+ return;
+ }
}
if (target != null && Deleted(target.Value))
if (pilot == null)
return;
+ // TODO why is this being blocked?
if (!_timing.IsFirstTimePredicted)
return;
var rider = EnsureComp<MechPilotComponent>(pilot);
var relay = EnsureComp<RelayInputMoverComponent>(pilot);
+
+ // Warning: this bypasses most normal interaction blocking components on the user, like drone laws and the like.
var irelay = EnsureComp<InteractionRelayComponent>(pilot);
_mover.SetRelay(pilot, mech, relay);