From 3933490962993e839c71efea46c3e799ac824778 Mon Sep 17 00:00:00 2001 From: themias <89101928+themias@users.noreply.github.com> Date: Tue, 30 Jan 2024 06:05:20 -0500 Subject: [PATCH] Fix centcom cargo gifts (#24701) --- .../Cargo/Systems/CargoSystem.Orders.cs | 54 +++++++++++-------- .../StationEvents/Events/CargoGiftsRule.cs | 7 ++- 2 files changed, 36 insertions(+), 25 deletions(-) diff --git a/Content.Server/Cargo/Systems/CargoSystem.Orders.cs b/Content.Server/Cargo/Systems/CargoSystem.Orders.cs index 5985bbb484..a4daeb8c2d 100644 --- a/Content.Server/Cargo/Systems/CargoSystem.Orders.cs +++ b/Content.Server/Cargo/Systems/CargoSystem.Orders.cs @@ -170,6 +170,33 @@ namespace Content.Server.Cargo.Systems return; } + var tradeDestination = TryFulfillOrder(stationData, order, orderDatabase); + + if (tradeDestination == null) + { + ConsolePopup(args.Session, Loc.GetString("cargo-console-unfulfilled")); + PlayDenySound(uid, component); + return; + } + + _idCardSystem.TryFindIdCard(player, out var idCard); + // ReSharper disable once ConditionalAccessQualifierIsNonNullableAccordingToAPIContract + order.SetApproverData(idCard.Comp?.FullName, idCard.Comp?.JobTitle); + _audio.PlayPvs(component.ConfirmSound, uid); + + ConsolePopup(args.Session, Loc.GetString("cargo-console-trade-station", ("destination", MetaData(tradeDestination.Value).EntityName))); + + // Log order approval + _adminLogger.Add(LogType.Action, LogImpact.Low, + $"{ToPrettyString(player):user} approved order [orderId:{order.OrderId}, quantity:{order.OrderQuantity}, product:{order.ProductId}, requester:{order.Requester}, reason:{order.Reason}] with balance at {bank.Balance}"); + + orderDatabase.Orders.Remove(order); + DeductFunds(bank, cost); + UpdateOrders(station.Value, orderDatabase); + } + + private EntityUid? TryFulfillOrder(StationDataComponent stationData, CargoOrderData order, StationCargoOrderDatabaseComponent orderDatabase) + { // No slots at the trade station _listEnts.Clear(); GetTradeStations(stationData, ref _listEnts); @@ -198,27 +225,7 @@ namespace Content.Server.Cargo.Systems break; } - if (tradeDestination == null) - { - ConsolePopup(args.Session, Loc.GetString("cargo-console-unfulfilled")); - PlayDenySound(uid, component); - return; - } - - _idCardSystem.TryFindIdCard(player, out var idCard); - // ReSharper disable once ConditionalAccessQualifierIsNonNullableAccordingToAPIContract - order.SetApproverData(idCard.Comp?.FullName, idCard.Comp?.JobTitle); - _audio.PlayPvs(component.ConfirmSound, uid); - - ConsolePopup(args.Session, Loc.GetString("cargo-console-trade-station", ("destination", MetaData(tradeDestination.Value).EntityName))); - - // Log order approval - _adminLogger.Add(LogType.Action, LogImpact.Low, - $"{ToPrettyString(player):user} approved order [orderId:{order.OrderId}, quantity:{order.OrderQuantity}, product:{order.ProductId}, requester:{order.Requester}, reason:{order.Reason}] with balance at {bank.Balance}"); - - orderDatabase.Orders.Remove(order); - DeductFunds(bank, cost); - UpdateOrders(station.Value, orderDatabase); + return tradeDestination; } private void GetTradeStations(StationDataComponent data, ref List ents) @@ -370,7 +377,8 @@ namespace Content.Server.Cargo.Systems string sender, string description, string dest, - StationCargoOrderDatabaseComponent component + StationCargoOrderDatabaseComponent component, + StationDataComponent stationData ) { DebugTools.Assert(_protoMan.HasIndex(spawnId)); @@ -386,7 +394,7 @@ namespace Content.Server.Cargo.Systems $"AddAndApproveOrder {description} added order [orderId:{order.OrderId}, quantity:{order.OrderQuantity}, product:{order.ProductId}, requester:{order.Requester}, reason:{order.Reason}]"); // Add it to the list - return TryAddOrder(dbUid, order, component); + return TryAddOrder(dbUid, order, component) && TryFulfillOrder(stationData, order, component).HasValue; } private bool TryAddOrder(EntityUid dbUid, CargoOrderData data, StationCargoOrderDatabaseComponent component) diff --git a/Content.Server/StationEvents/Events/CargoGiftsRule.cs b/Content.Server/StationEvents/Events/CargoGiftsRule.cs index 4d3ffa005d..c174cc48c0 100644 --- a/Content.Server/StationEvents/Events/CargoGiftsRule.cs +++ b/Content.Server/StationEvents/Events/CargoGiftsRule.cs @@ -3,6 +3,7 @@ using Content.Server.Cargo.Components; using Content.Server.Cargo.Systems; using Content.Server.GameTicking; using Content.Server.GameTicking.Rules.Components; +using Content.Server.Station.Components; using Content.Server.StationEvents.Components; using Robust.Shared.Prototypes; @@ -39,7 +40,8 @@ public sealed class CargoGiftsRule : StationEventSystem component.TimeUntilNextGifts += 30f; - if (!TryGetRandomStation(out var station, HasComp)) + if (!TryGetRandomStation(out var station, HasComp) || + !TryComp(station, out var stationData)) return; if (!TryComp(station, out var cargoDb)) @@ -65,7 +67,8 @@ public sealed class CargoGiftsRule : StationEventSystem Loc.GetString(component.Sender), Loc.GetString(component.Description), Loc.GetString(component.Dest), - cargoDb + cargoDb, + stationData! )) { break; -- 2.52.0