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); }