Rotting fixes (#9338)
This commit is contained in:
11
Content.Server/Atmos/Miasma/BodyPreservedComponent.cs
Normal file
11
Content.Server/Atmos/Miasma/BodyPreservedComponent.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
namespace Content.Server.Atmos.Miasma
|
||||
{
|
||||
[RegisterComponent]
|
||||
/// <summary>
|
||||
/// Way for natural sources of rotting to tell if there are more unnatural preservation forces at play.
|
||||
/// </summary>
|
||||
public sealed class BodyPreservedComponent : Component
|
||||
{
|
||||
public int PreservationSources = 0;
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ using Content.Server.Atmos.EntitySystems;
|
||||
using Content.Server.Temperature.Systems;
|
||||
using Content.Server.Body.Components;
|
||||
using Content.Shared.Examine;
|
||||
using Content.Shared.Tag;
|
||||
using Robust.Shared.Containers;
|
||||
using Robust.Shared.Random;
|
||||
|
||||
@@ -145,6 +146,8 @@ namespace Content.Server.Atmos.Miasma
|
||||
|
||||
private void OnTempChange(EntityUid uid, RottingComponent component, OnTemperatureChangeEvent args)
|
||||
{
|
||||
if (HasComp<BodyPreservedComponent>(uid))
|
||||
return;
|
||||
bool decompose = (args.CurrentTemperature > 274f);
|
||||
ToggleDecomposition(uid, decompose);
|
||||
}
|
||||
@@ -184,12 +187,18 @@ namespace Content.Server.Atmos.Miasma
|
||||
private void OnEntInserted(EntityUid uid, AntiRottingContainerComponent component, EntInsertedIntoContainerMessage args)
|
||||
{
|
||||
if (TryComp<PerishableComponent>(args.Entity, out var perishable))
|
||||
{
|
||||
ModifyPreservationSource(args.Entity, true);
|
||||
ToggleDecomposition(args.Entity, false, perishable);
|
||||
}
|
||||
}
|
||||
private void OnEntRemoved(EntityUid uid, AntiRottingContainerComponent component, EntRemovedFromContainerMessage args)
|
||||
{
|
||||
if (TryComp<PerishableComponent>(args.Entity, out var perishable))
|
||||
{
|
||||
ModifyPreservationSource(args.Entity, false);
|
||||
ToggleDecomposition(args.Entity, true, perishable);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -216,23 +225,41 @@ namespace Content.Server.Atmos.Miasma
|
||||
if (decompose == perishable.Progressing) // Saved a few cycles
|
||||
return;
|
||||
|
||||
if (!HasComp<RottingComponent>(uid))
|
||||
return;
|
||||
perishable.Progressing = decompose;
|
||||
|
||||
if (!perishable.Rotting)
|
||||
return;
|
||||
|
||||
if (decompose)
|
||||
{
|
||||
perishable.Progressing = true;
|
||||
EnsureComp<FliesComponent>(uid);
|
||||
return;
|
||||
}
|
||||
|
||||
perishable.Progressing = false;
|
||||
RemComp<FliesComponent>(uid);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Add or remove a preservation source.
|
||||
/// Remove is just "add = false"
|
||||
/// If we have 0 we remove the whole component.
|
||||
/// </summary>
|
||||
public void ModifyPreservationSource(EntityUid uid, bool add)
|
||||
{
|
||||
var component = EnsureComp<BodyPreservedComponent>(uid);
|
||||
|
||||
if (add)
|
||||
{
|
||||
component.PreservationSources++;
|
||||
return;
|
||||
}
|
||||
|
||||
component.PreservationSources--;
|
||||
|
||||
if (component.PreservationSources == 0)
|
||||
RemCompDeferred(uid, component);
|
||||
}
|
||||
|
||||
public string RequestPoolDisease()
|
||||
{
|
||||
// We reset the current time on this outbreak so people don't get unlucky at the transition time
|
||||
|
||||
Reference in New Issue
Block a user