diff --git a/Content.Server/Objectives/Components/StealTargetComponent.cs b/Content.Server/Objectives/Components/StealTargetComponent.cs
deleted file mode 100644
index 25fb9d3a70..0000000000
--- a/Content.Server/Objectives/Components/StealTargetComponent.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using Content.Server.Objectives.Systems;
-using Robust.Shared.Prototypes;
-using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
-
-namespace Content.Server.Objectives.Components.Targets;
-
-///
-/// Allows an object to become the target of a StealCollection objection
-///
-[RegisterComponent]
-public sealed partial class StealTargetComponent : Component
-{
- ///
- /// The theft group to which this item belongs.
- ///
- [DataField(required: true), ViewVariables(VVAccess.ReadWrite)]
- public string StealGroup;
-}
diff --git a/Content.Server/Objectives/Systems/StealConditionSystem.cs b/Content.Server/Objectives/Systems/StealConditionSystem.cs
index d61b796e42..7dc628c46f 100644
--- a/Content.Server/Objectives/Systems/StealConditionSystem.cs
+++ b/Content.Server/Objectives/Systems/StealConditionSystem.cs
@@ -1,5 +1,4 @@
using Content.Server.Objectives.Components;
-using Content.Server.Objectives.Components.Targets;
using Content.Shared.CartridgeLoader;
using Content.Shared.Interaction;
using Content.Shared.Mind;
diff --git a/Content.Shared/Delivery/SharedDeliverySystem.cs b/Content.Shared/Delivery/SharedDeliverySystem.cs
index 0f8ceb73fc..52c9db40a1 100644
--- a/Content.Shared/Delivery/SharedDeliverySystem.cs
+++ b/Content.Shared/Delivery/SharedDeliverySystem.cs
@@ -6,6 +6,7 @@ using Content.Shared.Hands.EntitySystems;
using Content.Shared.IdentityManagement;
using Content.Shared.Interaction.Events;
using Content.Shared.NameModifier.EntitySystems;
+using Content.Shared.Objectives.Components;
using Content.Shared.Popups;
using Content.Shared.Tag;
using Content.Shared.Verbs;
@@ -130,6 +131,7 @@ public abstract class SharedDeliverySystem : EntitySystem
_tag.AddTags(ent, "Trash", "Recyclable");
EnsureComp(ent);
+ RemComp(ent); // opened mail should not count for the objective
DirtyField(ent.Owner, ent.Comp, nameof(DeliveryComponent.IsOpened));
diff --git a/Content.Shared/Objectives/Components/StealTargetComponent.cs b/Content.Shared/Objectives/Components/StealTargetComponent.cs
new file mode 100644
index 0000000000..f286b0a32b
--- /dev/null
+++ b/Content.Shared/Objectives/Components/StealTargetComponent.cs
@@ -0,0 +1,17 @@
+using Robust.Shared.GameStates;
+using Robust.Shared.Prototypes;
+
+namespace Content.Shared.Objectives.Components;
+
+///
+/// Allows an object to become the target of a steal objective
+///
+[RegisterComponent, NetworkedComponent]
+public sealed partial class StealTargetComponent : Component
+{
+ ///
+ /// The theft group to which this item belongs.
+ ///
+ [DataField(required: true)]
+ public ProtoId StealGroup;
+}
diff --git a/Resources/Locale/en-US/objectives/conditions/steal-target-groups.ftl b/Resources/Locale/en-US/objectives/conditions/steal-target-groups.ftl
index 689e2e7808..6fc6ad850a 100644
--- a/Resources/Locale/en-US/objectives/conditions/steal-target-groups.ftl
+++ b/Resources/Locale/en-US/objectives/conditions/steal-target-groups.ftl
@@ -20,6 +20,7 @@ steal-target-groups-stamps = stamp
steal-target-groups-door-remotes = door remote
steal-target-groups-encryption-keys = encryption key
steal-target-groups-technology-disks = technology disk
+steal-target-groups-mail = mail
steal-target-groups-id-cards = ID Card
steal-target-groups-lamps = LAMP
diff --git a/Resources/Prototypes/Entities/Objects/Deliveries/deliveries.yml b/Resources/Prototypes/Entities/Objects/Deliveries/deliveries.yml
index ffa9a5791a..203d4f577e 100644
--- a/Resources/Prototypes/Entities/Objects/Deliveries/deliveries.yml
+++ b/Resources/Prototypes/Entities/Objects/Deliveries/deliveries.yml
@@ -39,6 +39,8 @@
- type: ContainerContainer
containers:
delivery: !type:Container
+ - type: StealTarget
+ stealGroup: Mail
- type: entity
parent: BaseDelivery
diff --git a/Resources/Prototypes/Objectives/objectiveGroups.yml b/Resources/Prototypes/Objectives/objectiveGroups.yml
index 3c59ab9a18..b75fcb72c2 100644
--- a/Resources/Prototypes/Objectives/objectiveGroups.yml
+++ b/Resources/Prototypes/Objectives/objectiveGroups.yml
@@ -58,13 +58,14 @@
- type: weightedRandom
id: ThiefObjectiveGroupCollection
weights:
- HeadCloakStealCollectionObjective: 1 #command
+ HeadCloakStealCollectionObjective: 1 #command
HeadBedsheetStealCollectionObjective: 1
StampStealCollectionObjective: 1
DoorRemoteStealCollectionObjective: 1
- TechnologyDiskStealCollectionObjective: 1 #rnd
+ TechnologyDiskStealCollectionObjective: 1 #sci
+ MailStealCollectionObjective: 1 #cargo
IDCardsStealCollectionObjective: 1
- LAMPStealCollectionObjective: 2 #only for moth
+ LAMPStealCollectionObjective: 2 #only for moth
- type: weightedRandom
id: ThiefObjectiveGroupItem
diff --git a/Resources/Prototypes/Objectives/stealTargetGroups.yml b/Resources/Prototypes/Objectives/stealTargetGroups.yml
index b21e0dc2de..43d8101b73 100644
--- a/Resources/Prototypes/Objectives/stealTargetGroups.yml
+++ b/Resources/Prototypes/Objectives/stealTargetGroups.yml
@@ -128,6 +128,13 @@
sprite: Objects/Misc/module.rsi
state: datadisk_base
+- type: stealTargetGroup
+ id: Mail
+ name: steal-target-groups-mail
+ sprite:
+ sprite: Objects/Specific/Cargo/mail.rsi
+ state: icon
+
- type: stealTargetGroup
id: IDCard
name: steal-target-groups-id-cards
diff --git a/Resources/Prototypes/Objectives/thief.yml b/Resources/Prototypes/Objectives/thief.yml
index c36b5f3192..b5d0141cb7 100644
--- a/Resources/Prototypes/Objectives/thief.yml
+++ b/Resources/Prototypes/Objectives/thief.yml
@@ -111,6 +111,20 @@
- type: Objective
difficulty: 0.8
+- type: entity
+ parent: BaseThiefStealCollectionObjective
+ id: MailStealCollectionObjective
+ components:
+ - type: NotJobRequirement
+ job: CargoTechnician
+ - type: StealCondition
+ stealGroup: Mail
+ minCollectionSize: 4
+ maxCollectionSize: 8
+ verifyMapExistence: false
+ - type: Objective
+ difficulty: 0.8
+
- type: entity
parent: BaseThiefStealCollectionObjective
id: IDCardsStealCollectionObjective