using Content.Shared.Botany.Components; using Content.Shared.Botany.Systems; using Robust.Shared.Prototypes; using Content.Shared.Random.Helpers; using Robust.Shared.Timing; namespace Content.Shared.EntityEffects.Effects.Botany.PlantAttributes; /// /// Entity effect that reverts aging of plant. /// /// public sealed partial class PlantCryoxadoneEntityEffectSystem : EntityEffectSystem { [Dependency] private PlantSystem _plant = default!; [Dependency] private PlantHolderSystem _plantHolder = default!; [Dependency] private PlantHarvestSystem _plantHarvest = default!; [Dependency] private IGameTiming _timing = default!; [Dependency] private BotanySystem _botany = default!; protected override void Effect(Entity entity, ref EntityEffectEvent args) { if (_plantHolder.IsDead(entity.Owner)) return; if (!TryComp(entity, out var plantHolder)) return; var random = SharedRandomExtensions.PredictedRandom(_timing, GetNetEntity(entity)); var deviation = plantHolder.Age > entity.Comp.Maturation ? (int)Math.Max(entity.Comp.Maturation - 1, plantHolder.Age - random.Next(7, 10)) : (int)(entity.Comp.Maturation / entity.Comp.GrowthStages); if (plantHolder.Age - deviation < 0) { _botany.TryRevertPlantToSeed(entity.Owner); return; } _plantHolder.AdjustsAge((entity.Owner, plantHolder), -deviation); _plantHarvest.ResetHarvestProgress((entity.Owner, plantHolder)); _plant.ForceUpdate(entity.AsNullable()); } } /// public sealed partial class PlantCryoxadone : EntityEffectBase { public override string EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) => Loc.GetString("entity-effect-guidebook-plant-cryoxadone", ("chance", Probability)); }