diff --git a/Content.Server/Cargo/Components/CargoBountyLabelComponent.cs b/Content.Server/Cargo/Components/CargoBountyLabelComponent.cs
index 8eea00e0993983..2b9898be0212ce 100644
--- a/Content.Server/Cargo/Components/CargoBountyLabelComponent.cs
+++ b/Content.Server/Cargo/Components/CargoBountyLabelComponent.cs
@@ -1,4 +1,6 @@
-namespace Content.Server.Cargo.Components;
+using Content.Server.Station.Systems;
+
+namespace Content.Server.Cargo.Components;
///
/// This is used for marking containers as
@@ -17,4 +19,10 @@ public sealed partial class CargoBountyLabelComponent : Component
/// Used to prevent recursion in calculating the price.
///
public bool Calculating;
+
+ ///
+ /// The Station System to check and remove bounties from
+ ///
+ [DataField]
+ public EntityUid? AssociatedStationId;
}
diff --git a/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs b/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs
index ce15542ec534ae..ee5ae631fd9d37 100644
--- a/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs
+++ b/Content.Server/Cargo/Systems/CargoSystem.Bounty.cs
@@ -4,6 +4,7 @@
using Content.Server.Labels;
using Content.Server.NameIdentifier;
using Content.Server.Paper;
+using Content.Server.Station.Systems;
using Content.Shared.Cargo;
using Content.Shared.Cargo.Components;
using Content.Shared.Cargo.Prototypes;
@@ -65,16 +66,17 @@ private void OnPrintLabelMessage(EntityUid uid, CargoBountyConsoleComponent comp
var label = Spawn(component.BountyLabelId, Transform(uid).Coordinates);
component.NextPrintTime = _timing.CurTime + component.PrintDelay;
- SetupBountyLabel(label, bounty.Value);
+ SetupBountyLabel(label, station, bounty.Value);
_audio.PlayPvs(component.PrintSound, uid);
}
- public void SetupBountyLabel(EntityUid uid, CargoBountyData bounty, PaperComponent? paper = null, CargoBountyLabelComponent? label = null)
+ public void SetupBountyLabel(EntityUid uid, EntityUid stationId, CargoBountyData bounty, PaperComponent? paper = null, CargoBountyLabelComponent? label = null)
{
if (!Resolve(uid, ref paper, ref label) || !_protoMan.TryIndex(bounty.Bounty, out var prototype))
return;
label.Id = bounty.Id;
+ label.AssociatedStationId = stationId;
var msg = new FormattedMessage();
msg.AddText(Loc.GetString("bounty-manifest-header", ("id", bounty.Id)));
msg.PushNewline();
@@ -103,7 +105,7 @@ private void OnGetBountyPrice(EntityUid uid, CargoBountyLabelComponent component
if (!_container.TryGetContainingContainer(uid, out var container) || container.ID != LabelSystem.ContainerName)
return;
- if (_station.GetOwningStation(uid) is not { } station || !TryComp(station, out var database))
+ if (component.AssociatedStationId is not { } station || !TryComp(station, out var database))
return;
if (database.CheckedBounties.Contains(component.Id))
@@ -131,14 +133,18 @@ private void OnSold(ref EntitySoldEvent args)
if (!TryGetBountyLabel(sold, out _, out var component))
continue;
- if (!TryGetBountyFromId(args.Station, component.Id, out var bounty))
+ if (component.AssociatedStationId is not { } station || !TryGetBountyFromId(station, component.Id, out var bounty))
+ {
continue;
+ }
if (!IsBountyComplete(sold, bounty.Value))
+ {
continue;
+ }
- TryRemoveBounty(args.Station, bounty.Value);
- FillBountyDatabase(args.Station);
+ TryRemoveBounty(station, bounty.Value);
+ FillBountyDatabase(station);
_adminLogger.Add(LogType.Action, LogImpact.Low, $"Bounty \"{bounty.Value.Bounty}\" (id:{bounty.Value.Id}) was fulfilled");
}
}
@@ -196,7 +202,7 @@ public void RerollBountyDatabase(Entity en
FillBountyDatabase(entity);
}
- public bool IsBountyComplete(EntityUid container, EntityUid? station, out HashSet bountyEntities)
+ public bool IsBountyComplete(EntityUid container, out HashSet bountyEntities)
{
if (!TryGetBountyLabel(container, out _, out var component))
{
@@ -204,7 +210,7 @@ public bool IsBountyComplete(EntityUid container, EntityUid? station, out HashSe
return false;
}
- station ??= _station.GetOwningStation(container);
+ var station = component.AssociatedStationId;
if (station == null)
{
bountyEntities = new();
@@ -225,7 +231,7 @@ public bool IsBountyComplete(EntityUid container, CargoBountyData data)
return IsBountyComplete(container, data, out _);
}
- public bool IsBountyComplete(EntityUid container, CargoBountyData data, out HashSet bountyEntities)
+ public bool IsBountyComplete(EntityUid container, CargoBountyData data, out HashSet bountyEntities)
{
if (!_protoMan.TryIndex(data.Bounty, out var proto))
{
@@ -314,7 +320,7 @@ private HashSet GetBountyEntities(EntityUid uid)
var children = GetBountyEntities(ent);
foreach (var child in children)
{
- entities.Add(child);
+ entities.Add(child);
}
}
}
diff --git a/Content.Server/Cargo/Systems/CargoSystem.Shuttle.cs b/Content.Server/Cargo/Systems/CargoSystem.Shuttle.cs
index ab66e6ff3fcf74..3bcd6d8d2067cf 100644
--- a/Content.Server/Cargo/Systems/CargoSystem.Shuttle.cs
+++ b/Content.Server/Cargo/Systems/CargoSystem.Shuttle.cs
@@ -230,9 +230,8 @@ private int GetCargoSpace(EntityUid gridUid)
#region Station
- private bool SellPallets(EntityUid gridUid, EntityUid? station, out double amount)
+ private bool SellPallets(EntityUid gridUid, out double amount)
{
- station ??= _station.GetOwningStation(gridUid);
GetPalletGoods(gridUid, out var toSell, out amount);
Log.Debug($"Cargo sold {toSell.Count} entities for {amount}");
@@ -240,11 +239,9 @@ private bool SellPallets(EntityUid gridUid, EntityUid? station, out double amoun
if (toSell.Count == 0)
return false;
- if (station != null)
- {
- var ev = new EntitySoldEvent(station.Value, toSell);
- RaiseLocalEvent(ref ev);
- }
+
+ var ev = new EntitySoldEvent(toSell);
+ RaiseLocalEvent(ref ev);
foreach (var ent in toSell)
{
@@ -299,7 +296,7 @@ private bool CanSell(EntityUid uid, TransformComponent xform)
return false;
}
- var complete = IsBountyComplete(uid, (EntityUid?) null, out var bountyEntities);
+ var complete = IsBountyComplete(uid, out var bountyEntities);
// Recursively check for mobs at any point.
var children = xform.ChildEnumerator;
@@ -332,7 +329,7 @@ private void OnPalletSale(EntityUid uid, CargoPalletConsoleComponent component,
return;
}
- if (!SellPallets(gridUid, null, out var price))
+ if (!SellPallets(gridUid, out var price))
return;
var stackPrototype = _protoMan.Index(component.CashType);
@@ -354,4 +351,4 @@ private void OnRoundRestart(RoundRestartCleanupEvent ev)
/// deleted but after the price has been calculated.
///
[ByRefEvent]
-public readonly record struct EntitySoldEvent(EntityUid Station, HashSet Sold);
+public readonly record struct EntitySoldEvent(HashSet Sold);
diff --git a/Content.Server/Cargo/Systems/PriceGunSystem.cs b/Content.Server/Cargo/Systems/PriceGunSystem.cs
index 7bd49b857ae17f..19fe07bd253a28 100644
--- a/Content.Server/Cargo/Systems/PriceGunSystem.cs
+++ b/Content.Server/Cargo/Systems/PriceGunSystem.cs
@@ -57,7 +57,7 @@ private void OnAfterInteract(EntityUid uid, PriceGunComponent component, AfterIn
return;
// Check if we're scanning a bounty crate
- if (_bountySystem.IsBountyComplete(args.Target.Value, (EntityUid?) null, out _))
+ if (_bountySystem.IsBountyComplete(args.Target.Value, out _))
{
_popupSystem.PopupEntity(Loc.GetString("price-gun-bounty-complete"), args.User, args.User);
}