]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Allow cargo bounties to be sold off-station (#26469)
authorblueDev2 <89804215+blueDev2@users.noreply.github.com>
Thu, 28 Mar 2024 04:06:00 +0000 (00:06 -0400)
committerGitHub <noreply@github.com>
Thu, 28 Mar 2024 04:06:00 +0000 (15:06 +1100)
* Ported over code for delta-v to fix bounties

* Added requested changes

* Removed the station arg from "IsBountyComplete". It is unneeded and all calls just use a null value for it anyways

Content.Server/Cargo/Components/CargoBountyLabelComponent.cs
Content.Server/Cargo/Systems/CargoSystem.Bounty.cs
Content.Server/Cargo/Systems/CargoSystem.Shuttle.cs
Content.Server/Cargo/Systems/PriceGunSystem.cs

index 8eea00e09939830690f77b7c74412bf0aef17d3e..2b9898be0212cef7f6417e767f471ae5e849d888 100644 (file)
@@ -1,4 +1,6 @@
-namespace Content.Server.Cargo.Components;
+using Content.Server.Station.Systems;
+
+namespace Content.Server.Cargo.Components;
 
 /// <summary>
 /// 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.
     /// </summary>
     public bool Calculating;
+
+    /// <summary>
+    /// The Station System to check and remove bounties from
+    /// </summary>
+    [DataField]
+    public EntityUid? AssociatedStationId;
 }
index ce15542ec534ae574d6f93b08a274599bc248aef..ee5ae631fd9d3702a34158867a6d9f81ca493703 100644 (file)
@@ -4,6 +4,7 @@ using Content.Server.Cargo.Components;
 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 @@ public sealed partial class CargoSystem
 
         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<CargoBountyPrototype>(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 @@ public sealed partial class CargoSystem
         if (!_container.TryGetContainingContainer(uid, out var container) || container.ID != LabelSystem.ContainerName)
             return;
 
-        if (_station.GetOwningStation(uid) is not { } station || !TryComp<StationCargoBountyDatabaseComponent>(station, out var database))
+        if (component.AssociatedStationId is not { } station || !TryComp<StationCargoBountyDatabaseComponent>(station, out var database))
             return;
 
         if (database.CheckedBounties.Contains(component.Id))
@@ -131,14 +133,18 @@ public sealed partial class CargoSystem
             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 sealed partial class CargoSystem
         FillBountyDatabase(entity);
     }
 
-    public bool IsBountyComplete(EntityUid container, EntityUid? station, out HashSet<EntityUid> bountyEntities)
+    public bool IsBountyComplete(EntityUid container, out HashSet<EntityUid> bountyEntities)
     {
         if (!TryGetBountyLabel(container, out _, out var component))
         {
@@ -204,7 +210,7 @@ public sealed partial class CargoSystem
             return false;
         }
 
-        station ??= _station.GetOwningStation(container);
+        var station = component.AssociatedStationId;
         if (station == null)
         {
             bountyEntities = new();
@@ -225,7 +231,7 @@ public sealed partial class CargoSystem
         return IsBountyComplete(container, data, out _);
     }
 
-    public bool IsBountyComplete(EntityUid container, CargoBountyData data,  out HashSet<EntityUid> bountyEntities)
+    public bool IsBountyComplete(EntityUid container, CargoBountyData data, out HashSet<EntityUid> bountyEntities)
     {
         if (!_protoMan.TryIndex(data.Bounty, out var proto))
         {
@@ -314,7 +320,7 @@ public sealed partial class CargoSystem
                 var children = GetBountyEntities(ent);
                 foreach (var child in children)
                 {
-                 entities.Add(child);
+                    entities.Add(child);
                 }
             }
         }
index ab66e6ff3fcf741da3d1e788f8185a61b836e0bc..3bcd6d8d2067cfd644c15e3031112cf86543803f 100644 (file)
@@ -230,9 +230,8 @@ public sealed partial class CargoSystem
 
     #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 @@ public sealed partial class CargoSystem
         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 @@ public sealed partial class CargoSystem
             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 @@ public sealed partial class CargoSystem
             return;
         }
 
-        if (!SellPallets(gridUid, null, out var price))
+        if (!SellPallets(gridUid, out var price))
             return;
 
         var stackPrototype = _protoMan.Index<StackPrototype>(component.CashType);
@@ -354,4 +351,4 @@ public sealed partial class CargoSystem
 /// deleted but after the price has been calculated.
 /// </summary>
 [ByRefEvent]
-public readonly record struct EntitySoldEvent(EntityUid Station, HashSet<EntityUid> Sold);
+public readonly record struct EntitySoldEvent(HashSet<EntityUid> Sold);
index 7bd49b857ae17fa219a4803a975efcd69767b2c4..19fe07bd253a28b7e19c1bac0918723d6f3871dc 100644 (file)
@@ -57,7 +57,7 @@ public sealed class PriceGunSystem : EntitySystem
             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);
         }