using Content.Server.Chemistry.Components; using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Chemistry.Reagent; using Content.Shared.Random; using Content.Shared.Random.Helpers; using Robust.Shared.Random; namespace Content.Server.Chemistry.EntitySystems; public sealed partial class SolutionRandomFillSystem : EntitySystem { [Dependency] private SharedSolutionContainerSystem _solutionsSystem = default!; [Dependency] private IRobustRandom _random = default!; public override void Initialize() { base.Initialize(); SubscribeLocalEvent(OnRandomSolutionFillMapInit); } private void OnRandomSolutionFillMapInit(Entity entity, ref MapInitEvent args) { if (entity.Comp.WeightedRandomId == null) return; var pick = ProtoMan.Index(entity.Comp.WeightedRandomId).Pick(_random); var reagent = pick.reagent; var quantity = pick.quantity; if (!ProtoMan.HasIndex(reagent)) { Log.Error($"Tried to add invalid reagent Id {reagent} using SolutionRandomFill."); return; } _solutionsSystem.EnsureSolution(entity.Owner, entity.Comp.Solution, out var target); if (target.Comp.Solution.AvailableVolume < quantity) Log.Error($"A random solution fill {entity.Comp.WeightedRandomId} tried to put {pick.quantity} of {pick.reagent} into {ToPrettyString(target)} but there was not enough space!"); _solutionsSystem.TryAddReagent(target, reagent, quantity); } }