diff --git a/Content.Server/Explosion/Components/TimerStartOnSignalComponent.cs b/Content.Server/Explosion/Components/TimerStartOnSignalComponent.cs
new file mode 100644
index 0000000000..9adc6dab87
--- /dev/null
+++ b/Content.Server/Explosion/Components/TimerStartOnSignalComponent.cs
@@ -0,0 +1,15 @@
+using Content.Shared.DeviceLinking;
+using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
+
+namespace Content.Server.Explosion.Components
+{
+ ///
+ /// Sends a trigger when signal is received.
+ ///
+ [RegisterComponent]
+ public sealed partial class TimerStartOnSignalComponent : Component
+ {
+ [DataField("port", customTypeSerializer: typeof(PrototypeIdSerializer))]
+ public string Port = "Timer";
+ }
+}
diff --git a/Content.Server/Explosion/EntitySystems/TriggerSystem.Signal.cs b/Content.Server/Explosion/EntitySystems/TriggerSystem.Signal.cs
index ffd47f0257..ce4d201f28 100644
--- a/Content.Server/Explosion/EntitySystems/TriggerSystem.Signal.cs
+++ b/Content.Server/Explosion/EntitySystems/TriggerSystem.Signal.cs
@@ -11,6 +11,9 @@ namespace Content.Server.Explosion.EntitySystems
{
SubscribeLocalEvent(OnSignalReceived);
SubscribeLocalEvent(OnInit);
+
+ SubscribeLocalEvent(OnTimerSignalReceived);
+ SubscribeLocalEvent(OnTimerSignalInit);
}
private void OnSignalReceived(EntityUid uid, TriggerOnSignalComponent component, ref SignalReceivedEvent args)
@@ -24,5 +27,17 @@ namespace Content.Server.Explosion.EntitySystems
{
_signalSystem.EnsureSinkPorts(uid, component.Port);
}
+
+ private void OnTimerSignalReceived(EntityUid uid, TimerStartOnSignalComponent component, ref SignalReceivedEvent args)
+ {
+ if (args.Port != component.Port)
+ return;
+
+ StartTimer(uid, args.Trigger);
+ }
+ private void OnTimerSignalInit(EntityUid uid, TimerStartOnSignalComponent component, ComponentInit args)
+ {
+ _signalSystem.EnsureSinkPorts(uid, component.Port);
+ }
}
}
diff --git a/Resources/Locale/en-US/machine-linking/receiver_ports.ftl b/Resources/Locale/en-US/machine-linking/receiver_ports.ftl
index a0d2fd3ec4..d7a2636e11 100644
--- a/Resources/Locale/en-US/machine-linking/receiver_ports.ftl
+++ b/Resources/Locale/en-US/machine-linking/receiver_ports.ftl
@@ -28,6 +28,9 @@ signal-port-description-doorbolt = Bolts door when HIGH.
signal-port-name-trigger = Trigger
signal-port-description-trigger = Triggers some mechanism on the device.
+signal-port-name-timer = Timer
+signal-port-description-timer = Starts the timer countdown of the device.
+
signal-port-name-order-sender = Order sender
signal-port-description-order-sender = Cargo console order sender
diff --git a/Resources/Prototypes/DeviceLinking/sink_ports.yml b/Resources/Prototypes/DeviceLinking/sink_ports.yml
index 339b814175..a5313fcc4e 100644
--- a/Resources/Prototypes/DeviceLinking/sink_ports.yml
+++ b/Resources/Prototypes/DeviceLinking/sink_ports.yml
@@ -48,6 +48,11 @@
name: signal-port-name-trigger
description: signal-port-description-trigger
+- type: sinkPort
+ id: Timer
+ name: signal-port-name-timer
+ description: signal-port-description-timer
+
- type: sinkPort
id: OrderReceiver
name: signal-port-name-order-receiver
diff --git a/Resources/Prototypes/DeviceLinking/source_ports.yml b/Resources/Prototypes/DeviceLinking/source_ports.yml
index 1988f29e45..5c32734726 100644
--- a/Resources/Prototypes/DeviceLinking/source_ports.yml
+++ b/Resources/Prototypes/DeviceLinking/source_ports.yml
@@ -2,13 +2,13 @@
id: Pressed
name: signal-port-name-pressed
description: signal-port-description-pressed
- defaultLinks: [ Toggle, Trigger ]
+ defaultLinks: [ Toggle, Trigger, Timer ]
- type: sourcePort
id: On
name: signal-port-name-on-transmitter
description: signal-port-description-on-transmitter
- defaultLinks: [ On, Open, Forward, Trigger ]
+ defaultLinks: [ On, Open, Forward, Trigger, Timer ]
- type: sourcePort
id: Off
@@ -25,13 +25,13 @@
id: Left
name: signal-port-name-left
description: signal-port-description-left
- defaultLinks: [ On, Open, Forward, Trigger ]
+ defaultLinks: [ On, Open, Forward, Trigger, Timer ]
- type: sourcePort
id: Right
name: signal-port-name-right
description: signal-port-description-right
- defaultLinks: [ On, Open, Reverse, Trigger ]
+ defaultLinks: [ On, Open, Reverse, Trigger, Timer ]
- type: sourcePort
id: Middle
@@ -76,7 +76,7 @@
id: Timer
name: signal-port-name-timer-trigger
description: signal-port-description-timer-trigger
- defaultLinks: [ AutoClose, On, Open, Forward, Trigger ]
+ defaultLinks: [ AutoClose, On, Open, Forward, Trigger, Timer ]
- type: sourcePort
id: Start
@@ -94,7 +94,7 @@
id: OutputHigh
name: signal-port-name-logic-output-high
description: signal-port-description-logic-output-high
- defaultLinks: [ On, Open, Forward, Trigger ]
+ defaultLinks: [ On, Open, Forward, Trigger, Timer ]
- type: sourcePort
id: OutputLow
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml
index 772dd15ab8..87b6bb2534 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Bombs/plastic.yml
@@ -54,10 +54,10 @@
beepSound: /Audio/Machines/Nuke/general_beep.ogg
startOnStick: true
canToggleStartOnStick: true
- - type: TriggerOnSignal
+ - type: TimerStartOnSignal
- type: DeviceLinkSink
ports:
- - Trigger
+ - Timer
- type: Explosive # Powerful explosion in a very small radius. Doesn't break underplating.
explosionType: DemolitionCharge
totalIntensity: 60