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"));
     }
 }
示例#3
0
 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"));
         }
     }
 }
示例#4
0
        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);
        }