diff --git a/Content.Shared/Delivery/DeliveryModifierSystem.cs b/Content.Shared/Delivery/DeliveryModifierSystem.cs index 15a903537b..2b071b18cf 100644 --- a/Content.Shared/Delivery/DeliveryModifierSystem.cs +++ b/Content.Shared/Delivery/DeliveryModifierSystem.cs @@ -25,6 +25,7 @@ public sealed partial class DeliveryModifierSystem : EntitySystem SubscribeLocalEvent(OnGetRandomMultiplier); SubscribeLocalEvent(OnPriorityMapInit); + SubscribeLocalEvent(OnPriorityDelivered); SubscribeLocalEvent(OnPriorityExamine); SubscribeLocalEvent(OnGetPriorityMultiplier); @@ -55,12 +56,23 @@ public sealed partial class DeliveryModifierSystem : EntitySystem Dirty(ent); } + private void OnPriorityDelivered(Entity ent, ref DeliveryUnlockedEvent args) + { + if (ent.Comp.Expired) + return; + + ent.Comp.Delivered = true; + Dirty(ent); + } + private void OnPriorityExamine(Entity ent, ref ExaminedEvent args) { var trueName = _nameModifier.GetBaseName(ent.Owner); var timeLeft = ent.Comp.DeliverUntilTime - _timing.CurTime; - if (_timing.CurTime < ent.Comp.DeliverUntilTime) + if (ent.Comp.Delivered) + args.PushMarkup(Loc.GetString("delivery-priority-delivered-examine", ("type", trueName))); + else if (_timing.CurTime < ent.Comp.DeliverUntilTime) args.PushMarkup(Loc.GetString("delivery-priority-examine", ("type", trueName), ("time", timeLeft.ToString("mm\\:ss")))); else args.PushMarkup(Loc.GetString("delivery-priority-expired-examine", ("type", trueName))); @@ -122,7 +134,7 @@ public sealed partial class DeliveryModifierSystem : EntitySystem while (priorityQuery.MoveNext(out var uid, out var priorityData)) { - if (priorityData.Expired) + if (priorityData.Expired || priorityData.Delivered) continue; if (priorityData.DeliverUntilTime < curTime) diff --git a/Content.Shared/Delivery/DeliveryPriorityComponent.cs b/Content.Shared/Delivery/DeliveryPriorityComponent.cs index dc06af6239..835d1c9c00 100644 --- a/Content.Shared/Delivery/DeliveryPriorityComponent.cs +++ b/Content.Shared/Delivery/DeliveryPriorityComponent.cs @@ -23,6 +23,12 @@ public sealed partial class DeliveryPriorityComponent : Component [DataField] public float ExpiredMultiplierOffset = -0.1f; + /// + /// Whether this delivery was delivered on time. + /// + [DataField, AutoNetworkedField] + public bool Delivered; + /// /// Whether this priority delivery has already ran out of time or not. /// diff --git a/Content.Shared/Delivery/SharedDeliverySystem.cs b/Content.Shared/Delivery/SharedDeliverySystem.cs index db5b849c75..175dfbe70d 100644 --- a/Content.Shared/Delivery/SharedDeliverySystem.cs +++ b/Content.Shared/Delivery/SharedDeliverySystem.cs @@ -237,9 +237,9 @@ public abstract class SharedDeliverySystem : EntitySystem { _appearance.SetData(uid, DeliveryVisuals.IsLocked, isLocked); - // If we're trying to unlock, always remove the priority tape - if (!isLocked) - _appearance.SetData(uid, DeliveryVisuals.PriorityState, DeliveryPriorityState.Off); + // If we're trying to unlock, mark priority as inactive + if (HasComp(uid)) + _appearance.SetData(uid, DeliveryVisuals.PriorityState, DeliveryPriorityState.Inactive); } public void UpdatePriorityVisuals(Entity ent) diff --git a/Resources/Locale/en-US/delivery/delivery-component.ftl b/Resources/Locale/en-US/delivery/delivery-component.ftl index 54f45a578d..c346b2a813 100644 --- a/Resources/Locale/en-US/delivery/delivery-component.ftl +++ b/Resources/Locale/en-US/delivery/delivery-component.ftl @@ -24,7 +24,8 @@ delivery-teleporter-empty-verb = Take mail # modifiers delivery-priority-examine = This is a [color=orange]priority {$type}[/color]. You have [color=orange]{$time}[/color] left to deliver it to get a bonus. -delivery-priority-expired-examine = This is a [color=orange]priority {$type}[/color]. It seems you ran out of time. +delivery-priority-delivered-examine = This is a [color=orange]priority {$type}[/color]. It got delivered on time. +delivery-priority-expired-examine = This is a [color=orange]priority {$type}[/color]. It ran out of time. delivery-fragile-examine = This is a [color=red]fragile {$type}[/color]. Deliver it intact for a bonus. delivery-fragile-broken-examine = This is a [color=red]fragile {$type}[/color]. It looks badly damaged. diff --git a/Resources/Prototypes/Entities/Objects/Deliveries/deliveries.yml b/Resources/Prototypes/Entities/Objects/Deliveries/deliveries.yml index d1e9969bbb..a209f5c6f7 100644 --- a/Resources/Prototypes/Entities/Objects/Deliveries/deliveries.yml +++ b/Resources/Prototypes/Entities/Objects/Deliveries/deliveries.yml @@ -59,18 +59,18 @@ - state: trash map: [ "enum.DeliveryVisualLayers.Trash" ] visible: false - - state: postmark - - map: [ "enum.DeliveryVisualLayers.JobStamp" ] - offset: -0.21875, -0.25 - - state: fragile - map: [ "enum.DeliveryVisualLayers.FragileStamp" ] - visible: false - - state: locked - map: [ "enum.DeliveryVisualLayers.Lock" ] - state: priority map: [ "enum.DeliveryVisualLayers.PriorityTape" ] visible: false shader: unshaded + - state: fragile + map: [ "enum.DeliveryVisualLayers.FragileStamp" ] + visible: false + - state: postmark + - map: [ "enum.DeliveryVisualLayers.JobStamp" ] + offset: -0.21875, -0.25 + - state: locked + map: [ "enum.DeliveryVisualLayers.Lock" ] - state: broken map: [ "enum.DeliveryVisualLayers.Breakage" ] visible: false @@ -102,18 +102,18 @@ - state: trash map: [ "enum.DeliveryVisualLayers.Trash" ] visible: false - - state: postmark - - map: [ "enum.DeliveryVisualLayers.JobStamp" ] - offset: -0.125, -0.0625 - - state: fragile - map: [ "enum.DeliveryVisualLayers.FragileStamp" ] - visible: false - - state: locked - map: [ "enum.DeliveryVisualLayers.Lock" ] - state: priority map: [ "enum.DeliveryVisualLayers.PriorityTape" ] visible: false shader: unshaded + - state: fragile + map: [ "enum.DeliveryVisualLayers.FragileStamp" ] + visible: false + - state: postmark + - map: [ "enum.DeliveryVisualLayers.JobStamp" ] + offset: -0.125, -0.0625 + - state: locked + map: [ "enum.DeliveryVisualLayers.Lock" ] - state: broken map: [ "enum.DeliveryVisualLayers.Breakage" ] visible: false