Fix mech double interactions (#14672)

This commit is contained in:
Leon Friedrich
2023-03-24 14:42:43 +13:00
committed by GitHub
parent b960bc7636
commit 07667ae34b
4 changed files with 12 additions and 2 deletions

View File

@@ -195,7 +195,7 @@ public sealed class MechSystem : SharedMechSystem
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;

View File

@@ -7,6 +7,8 @@ namespace Content.Shared.Interaction.Components;
/// 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))]

View File

@@ -239,8 +239,13 @@ namespace Content.Shared.Interaction
bool checkCanUse = true)
{
if (TryComp<InteractionRelayComponent>(user, out var relay) && relay.RelayEntity is not null)
{
// 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))

View File

@@ -125,6 +125,7 @@ public abstract class SharedMechSystem : EntitySystem
if (pilot == null)
return;
// TODO why is this being blocked?
if (!_timing.IsFirstTimePredicted)
return;
@@ -165,6 +166,8 @@ public abstract class SharedMechSystem : EntitySystem
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);