mirror of
https://github.com/space-syndicate/space-station-14.git
synced 2026-02-14 23:14:45 +01:00
Prevent Vestine and all other Botany chemicals from affecting all seeds. (#41883)
* EnsureUniqueSeed * mfw * aaaaaaaaaaaaa --------- Co-authored-by: Princess Cheeseballs <66055347+Pronana@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
f079ec6233
commit
4aa7a963dc
@@ -53,6 +53,7 @@ public sealed class PlantHolderSystem : EntitySystem
|
||||
|
||||
public const float HydroponicsSpeedMultiplier = 1f;
|
||||
public const float HydroponicsConsumptionMultiplier = 2f;
|
||||
public readonly FixedPoint2 PlantMetabolismRate = FixedPoint2.New(1);
|
||||
|
||||
private static readonly ProtoId<TagPrototype> HoeTag = "Hoe";
|
||||
private static readonly ProtoId<TagPrototype> PlantSampleTakerTag = "PlantSampleTaker";
|
||||
@@ -885,13 +886,18 @@ public sealed class PlantHolderSystem : EntitySystem
|
||||
|
||||
if (solution.Volume > 0 && component.MutationLevel < 25)
|
||||
{
|
||||
foreach (var entry in component.SoilSolution.Value.Comp.Solution.Contents)
|
||||
// Don't apply any effects to a non-unique seed ever! Remove this when botany code is sane...
|
||||
EnsureUniqueSeed(uid, component);
|
||||
foreach (var entry in solution.Contents)
|
||||
{
|
||||
if (entry.Quantity < PlantMetabolismRate)
|
||||
continue;
|
||||
|
||||
var reagentProto = _prototype.Index<ReagentPrototype>(entry.Reagent.Prototype);
|
||||
_entityEffects.ApplyEffects(uid, reagentProto.PlantMetabolisms.ToArray(), entry.Quantity.Float());
|
||||
_entityEffects.ApplyEffects(uid, reagentProto.PlantMetabolisms.ToArray(), entry.Quantity);
|
||||
}
|
||||
|
||||
_solutionContainerSystem.RemoveEachReagent(component.SoilSolution.Value, FixedPoint2.New(1));
|
||||
_solutionContainerSystem.RemoveEachReagent(component.SoilSolution.Value, PlantMetabolismRate);
|
||||
}
|
||||
|
||||
CheckLevelSanity(uid, component);
|
||||
|
||||
@@ -7,13 +7,11 @@ namespace Content.Server.EntityEffects.Effects.Botany.PlantAttributes;
|
||||
|
||||
public sealed partial class PlantAdjustPotencyEntityEffectSystem : EntityEffectSystem<PlantHolderComponent, PlantAdjustPotency>
|
||||
{
|
||||
[Dependency] private readonly PlantHolderSystem _plantHolder = default!;
|
||||
protected override void Effect(Entity<PlantHolderComponent> entity, ref EntityEffectEvent<PlantAdjustPotency> args)
|
||||
{
|
||||
if (entity.Comp.Seed == null || entity.Comp.Dead)
|
||||
return;
|
||||
|
||||
_plantHolder.EnsureUniqueSeed(entity, entity.Comp);
|
||||
entity.Comp.Seed.Potency = Math.Max(entity.Comp.Seed.Potency + args.Effect.Amount, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,6 @@ namespace Content.Server.EntityEffects.Effects.Botany.PlantAttributes;
|
||||
|
||||
public sealed partial class PlantDestroySeedsEntityEffectSystem : EntityEffectSystem<PlantHolderComponent, PlantDestroySeeds>
|
||||
{
|
||||
[Dependency] private readonly PlantHolderSystem _plantHolder = default!;
|
||||
[Dependency] private readonly PopupSystem _popup = default!;
|
||||
|
||||
protected override void Effect(Entity<PlantHolderComponent> entity, ref EntityEffectEvent<PlantDestroySeeds> args)
|
||||
@@ -20,7 +19,6 @@ public sealed partial class PlantDestroySeedsEntityEffectSystem : EntityEffectSy
|
||||
if (entity.Comp.Seed.Seedless)
|
||||
return;
|
||||
|
||||
_plantHolder.EnsureUniqueSeed(entity, entity.Comp);
|
||||
_popup.PopupEntity(
|
||||
Loc.GetString("botany-plant-seedsdestroyed"),
|
||||
entity,
|
||||
|
||||
@@ -9,7 +9,6 @@ namespace Content.Server.EntityEffects.Effects.Botany.PlantAttributes;
|
||||
public sealed partial class PlantDiethylamineEntityEffectSystem : EntityEffectSystem<PlantHolderComponent, PlantDiethylamine>
|
||||
{
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
[Dependency] private readonly PlantHolderSystem _plantHolder = default!;
|
||||
|
||||
protected override void Effect(Entity<PlantHolderComponent> entity, ref EntityEffectEvent<PlantDiethylamine> args)
|
||||
{
|
||||
@@ -18,13 +17,11 @@ public sealed partial class PlantDiethylamineEntityEffectSystem : EntityEffectSy
|
||||
|
||||
if (_random.Prob(0.1f))
|
||||
{
|
||||
_plantHolder.EnsureUniqueSeed(entity, entity);
|
||||
entity.Comp.Seed!.Lifespan++;
|
||||
}
|
||||
|
||||
if (_random.Prob(0.1f))
|
||||
{
|
||||
_plantHolder.EnsureUniqueSeed(entity, entity);
|
||||
entity.Comp.Seed!.Endurance++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@ namespace Content.Server.EntityEffects.Effects.Botany.PlantAttributes;
|
||||
|
||||
public sealed partial class PlantRestoreSeedsEntityEffectSystem : EntityEffectSystem<PlantHolderComponent, PlantRestoreSeeds>
|
||||
{
|
||||
[Dependency] private readonly PlantHolderSystem _plantHolder = default!;
|
||||
[Dependency] private readonly PopupSystem _popup = default!;
|
||||
|
||||
protected override void Effect(Entity<PlantHolderComponent> entity, ref EntityEffectEvent<PlantRestoreSeeds> args)
|
||||
@@ -19,7 +18,6 @@ public sealed partial class PlantRestoreSeedsEntityEffectSystem : EntityEffectSy
|
||||
if (!entity.Comp.Seed.Seedless)
|
||||
return;
|
||||
|
||||
_plantHolder.EnsureUniqueSeed(entity, entity.Comp);
|
||||
_popup.PopupEntity(Loc.GetString("botany-plant-seedsrestored"), entity);
|
||||
entity.Comp.Seed.Seedless = false;
|
||||
}
|
||||
|
||||
@@ -14,7 +14,6 @@ namespace Content.Server.EntityEffects.Effects.Botany.PlantAttributes;
|
||||
public sealed partial class RobustHarvestEntityEffectSystem : EntityEffectSystem<PlantHolderComponent, RobustHarvest>
|
||||
{
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
[Dependency] private readonly PlantHolderSystem _plantHolder = default!;
|
||||
|
||||
protected override void Effect(Entity<PlantHolderComponent> entity, ref EntityEffectEvent<RobustHarvest> args)
|
||||
{
|
||||
@@ -23,7 +22,6 @@ public sealed partial class RobustHarvestEntityEffectSystem : EntityEffectSystem
|
||||
|
||||
if (entity.Comp.Seed.Potency < args.Effect.PotencyLimit)
|
||||
{
|
||||
_plantHolder.EnsureUniqueSeed(entity, entity.Comp);
|
||||
entity.Comp.Seed.Potency = Math.Min(entity.Comp.Seed.Potency + args.Effect.PotencyIncrease, args.Effect.PotencyLimit);
|
||||
|
||||
if (entity.Comp.Seed.Potency > args.Effect.PotencySeedlessThreshold)
|
||||
@@ -34,7 +32,6 @@ public sealed partial class RobustHarvestEntityEffectSystem : EntityEffectSystem
|
||||
else if (entity.Comp.Seed.Yield > 1 && _random.Prob(0.1f))
|
||||
{
|
||||
// Too much of a good thing reduces yield
|
||||
_plantHolder.EnsureUniqueSeed(entity, entity.Comp);
|
||||
entity.Comp.Seed.Yield--;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -211,7 +211,7 @@ namespace Content.Shared.Chemistry.Reaction
|
||||
_adminLogger.Add(LogType.ChemicalReaction, reaction.Impact,
|
||||
$"Chemical reaction {reaction.ID:reaction} occurred with strength {unitReactions:strength} on entity {ToPrettyString(soln):metabolizer} at Pos:{(posFound ? $"{gridPos:coordinates}" : "[Grid or Map not Found]")}");
|
||||
|
||||
_entityEffects.ApplyEffects(soln, reaction.Effects, unitReactions.Float());
|
||||
_entityEffects.ApplyEffects(soln, reaction.Effects, unitReactions);
|
||||
|
||||
// Someday, some brave soul will thread through an optional actor
|
||||
// argument in from every call of OnReaction up, all just to pass
|
||||
|
||||
@@ -2,6 +2,7 @@ using Content.Shared.Administration.Logs;
|
||||
using Content.Shared.Chemistry;
|
||||
using Content.Shared.Chemistry.Reaction;
|
||||
using Content.Shared.EntityConditions;
|
||||
using Content.Shared.FixedPoint;
|
||||
using Content.Shared.Random.Helpers;
|
||||
using Robust.Shared.Random;
|
||||
using Robust.Shared.Timing;
|
||||
@@ -58,6 +59,12 @@ public sealed partial class SharedEntityEffectsSystem : EntitySystem, IEntityEff
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc cref="ApplyEffects(EntityUid,EntityEffect[],float,EntityUid?)"/>
|
||||
public void ApplyEffects(EntityUid target, EntityEffect[] effects, FixedPoint2 scale, EntityUid? user = null)
|
||||
{
|
||||
ApplyEffects(target, effects, scale.Float());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Applies a list of entity effects to a target entity.
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user