private void OnLinkAttempt(EntityUid uid, AccessReaderComponent component, LinkAttemptEvent args) { if (component.Enabled && !IsAllowed(args.User, component)) { args.Cancel(); } }
private void OnLinkAttempt(EntityUid uid, ConveyorComponent component, LinkAttemptEvent args) { if (args.TransmitterComponent.Outputs.GetPort(args.TransmitterPort).Signal is TwoWayLeverSignal signal && signal != TwoWayLeverSignal.Middle) { args.Cancel(); _stunSystem.TryParalyze(uid, TimeSpan.FromSeconds(2f), true); component.Owner.PopupMessage(args.Attemptee, Loc.GetString("conveyor-component-failed-link")); } }
private void OnLinkAttempt(EntityUid uid, ConveyorComponent component, LinkAttemptEvent args) { if (args.TransmitterComponent.Outputs.GetPort(args.TransmitterPort).Signal is TwoWayLeverSignal signal && signal != TwoWayLeverSignal.Middle) { args.Cancel(); if (args.Attemptee.TryGetComponent <StunnableComponent>(out var stunnableComponent)) { stunnableComponent.Paralyze(2); component.Owner.PopupMessage(args.Attemptee, Loc.GetString("conveyor-component-failed-link")); } } }
private bool TryLink(SignalTransmitterComponent transmitter, SignalReceiverComponent receiver, SignalPortSelected args, EntityUid user, bool quiet = false, bool checkRange = true) { if (!transmitter.Outputs.TryGetValue(args.TransmitterPort, out var linkedReceivers) || !receiver.Inputs.TryGetValue(args.ReceiverPort, out var linkedTransmitters)) { return(false); } // Does the link already exist? Under the assumption that nothing has broken, lets only check the // transmitter ports. foreach (var identifier in linkedTransmitters) { if (identifier.Uid == transmitter.Owner && identifier.Port == args.TransmitterPort) { return(true); } } if (checkRange && !IsInRange(transmitter, receiver)) { if (!quiet) { _popupSystem.PopupCursor(Loc.GetString("signal-linker-component-out-of-range"), Filter.Entities(user)); } return(false); } // allow other systems to refuse the connection var linkAttempt = new LinkAttemptEvent(user, transmitter.Owner, args.TransmitterPort, receiver.Owner, args.ReceiverPort); RaiseLocalEvent(transmitter.Owner, linkAttempt, true); if (linkAttempt.Cancelled) { if (!quiet) { _popupSystem.PopupCursor(Loc.GetString("signal-linker-component-connection-refused", ("machine", transmitter.Owner)), Filter.Entities(user)); } return(false); } RaiseLocalEvent(receiver.Owner, linkAttempt, true); if (linkAttempt.Cancelled) { if (!quiet) { _popupSystem.PopupCursor(Loc.GetString("signal-linker-component-connection-refused", ("machine", receiver.Owner)), Filter.Entities(user)); } return(false); } linkedReceivers.Add(new(receiver.Owner, args.ReceiverPort)); linkedTransmitters.Add(new(transmitter.Owner, args.TransmitterPort)); if (!quiet) { _popupSystem.PopupCursor(Loc.GetString("signal-linker-component-linked-port", ("machine1", transmitter.Owner), ("port1", PortName <TransmitterPortPrototype>(args.TransmitterPort)), ("machine2", receiver.Owner), ("port2", PortName <ReceiverPortPrototype>(args.ReceiverPort))), Filter.Entities(user), PopupType.Medium); } return(true); }