Diseases (#7057)
* Disease system first pass * Renamed HealthChange * First working version of diseases (wtf???) * Fix the cursed yaml initialization * Pop-Up effect * Generic status effect * Create copy of prototype * CureDiseaseEffect * Disease resistance * Spaceacillin * Nerf spaceacillin now that we know it works * Sneezing, Coughing, Snoughing * Fix queuing, prevent future issues * Disease protection * Disease outbreak event * Disease Reagent Cure * Chem cause disease effect * Disease artifacts * Try infect when interacting with diseased * Diseases don't have to be infectious * Talking without a mask does a snough * Temperature cure * Bedrest * DiseaseAdjustReagent * Tweak how disease statuses work to be a bit less shit * A few more diseases * Natural immunity (can't get the same disease twice) * Polished up some diseases, touched up spaceacillin production * Rebalanced transmission * Edit a few diseases, make disease cures support a minimum value * Nitrile gloves, more disease protection sources * Health scanner shows diseased status * Clean up disease system * Traitor item * Mouth swabs * Disease diagnoser machine * Support for clean samples * Vaccines + fixes * Pass on disease resistant clothes * More work on non-infectious diseases & vaccines * Handle dead bodies * Added the relatively CBT visualizer * Pass over diseases and their populators * Comment stuff * Readability cleanup * Add printing sound to diagnoser, fix printing bug * vaccinator sound, seal up some classes * Make disease protection equip detection not shit (thanks whoever wrote addaccentcomponent) * Mirror review * More review stuff * More mirror review stuff * Refactor snoughing * Redid report creator * Fix snough messages, new vaccinator sound * Mirror review naming * Woops, forgot the artifact * Add recipes and fills * Rebalance space cold and robovirus * Give lizarb disease interaction stuff * Tweak some stuff and move things around * Add diseases to mice (since animal vectors are interesting and can be used to make vaccines) * Remove unused reagent
This commit is contained in:
33
Content.Server/Disease/Cures/DiseaseBedrestCure.cs
Normal file
33
Content.Server/Disease/Cures/DiseaseBedrestCure.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
using Content.Shared.Disease;
|
||||
using Content.Server.Buckle.Components;
|
||||
|
||||
namespace Content.Server.Disease.Cures
|
||||
{
|
||||
/// <summary>
|
||||
/// Cures the disease after a certain amount of time
|
||||
/// strapped.
|
||||
/// </summary>
|
||||
/// TODO: Revisit after bed pr merged
|
||||
public sealed class DiseaseBedrestCure : DiseaseCure
|
||||
{
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
public int Ticker = 0;
|
||||
[DataField("maxLength", required: true)]
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
public int MaxLength = 60;
|
||||
|
||||
public override bool Cure(DiseaseEffectArgs args)
|
||||
{
|
||||
if (!args.EntityManager.TryGetComponent<BuckleComponent>(args.DiseasedEntity, out var buckle))
|
||||
return false;
|
||||
if (buckle.Buckled)
|
||||
Ticker++;
|
||||
return Ticker >= MaxLength;
|
||||
}
|
||||
|
||||
public override string CureText()
|
||||
{
|
||||
return (Loc.GetString("diagnoser-cure-bedrest", ("time", MaxLength)));
|
||||
}
|
||||
}
|
||||
}
|
||||
34
Content.Server/Disease/Cures/DiseaseBodyTemperatureCure.cs
Normal file
34
Content.Server/Disease/Cures/DiseaseBodyTemperatureCure.cs
Normal file
@@ -0,0 +1,34 @@
|
||||
using Content.Server.Temperature.Components;
|
||||
using Content.Shared.Disease;
|
||||
|
||||
namespace Content.Server.Disease.Cures
|
||||
{
|
||||
/// <summary>
|
||||
/// Cures the disease if temperature is within certain bounds.
|
||||
/// </summary>
|
||||
public sealed class DiseaseBodyTemperatureCure : DiseaseCure
|
||||
{
|
||||
[DataField("min")]
|
||||
public float Min = 0;
|
||||
|
||||
[DataField("max")]
|
||||
public float Max = float.MaxValue;
|
||||
public override bool Cure(DiseaseEffectArgs args)
|
||||
{
|
||||
if (!args.EntityManager.TryGetComponent(args.DiseasedEntity, out TemperatureComponent temp))
|
||||
return false;
|
||||
|
||||
return temp.CurrentTemperature > Min && temp.CurrentTemperature < float.MaxValue;
|
||||
}
|
||||
|
||||
public override string CureText()
|
||||
{
|
||||
if (Min == 0)
|
||||
return Loc.GetString("diagnoser-cure-temp-max", ("max", Math.Round(Max)));
|
||||
if (Max == float.MaxValue)
|
||||
return Loc.GetString("diagnoser-cure-temp-min", ("min", Math.Round(Min)));
|
||||
|
||||
return Loc.GetString("diagnoser-cure-temp-both", ("max", Math.Round(Max)), ("min", Math.Round(Min)));
|
||||
}
|
||||
}
|
||||
}
|
||||
31
Content.Server/Disease/Cures/DiseaseJustWaitCure.cs
Normal file
31
Content.Server/Disease/Cures/DiseaseJustWaitCure.cs
Normal file
@@ -0,0 +1,31 @@
|
||||
using Content.Shared.Disease;
|
||||
|
||||
namespace Content.Server.Disease.Cures
|
||||
{
|
||||
/// <summary>
|
||||
/// Automatically removes the disease after a
|
||||
/// certain amount of time.
|
||||
/// </summary>
|
||||
public sealed class DiseaseJustWaitCure : DiseaseCure
|
||||
{
|
||||
/// <summary>
|
||||
/// All of these are in seconds
|
||||
/// </summary>
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
public int Ticker = 0;
|
||||
[DataField("maxLength", required: true)]
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
public int MaxLength = 150;
|
||||
|
||||
public override bool Cure(DiseaseEffectArgs args)
|
||||
{
|
||||
Ticker++;
|
||||
return Ticker >= MaxLength;
|
||||
}
|
||||
|
||||
public override string CureText()
|
||||
{
|
||||
return Loc.GetString("diagnoser-cure-wait", ("time", MaxLength));
|
||||
}
|
||||
}
|
||||
}
|
||||
38
Content.Server/Disease/Cures/DiseaseReagentCure.cs
Normal file
38
Content.Server/Disease/Cures/DiseaseReagentCure.cs
Normal file
@@ -0,0 +1,38 @@
|
||||
using Content.Shared.Disease;
|
||||
using Content.Shared.FixedPoint;
|
||||
using Content.Server.Body.Components;
|
||||
|
||||
namespace Content.Server.Disease.Cures
|
||||
{
|
||||
/// <summary>
|
||||
/// Cures the disease if a certain amount of reagent
|
||||
/// is in the host's chemstream.
|
||||
/// </summary>
|
||||
public sealed class DiseaseReagentCure : DiseaseCure
|
||||
{
|
||||
[DataField("min")]
|
||||
public FixedPoint2 Min = 5;
|
||||
[DataField("reagent")]
|
||||
public string? Reagent;
|
||||
|
||||
public override bool Cure(DiseaseEffectArgs args)
|
||||
{
|
||||
if (!args.EntityManager.TryGetComponent<BloodstreamComponent>(args.DiseasedEntity, out var bloodstream))
|
||||
return false;
|
||||
|
||||
var quant = FixedPoint2.Zero;
|
||||
if (Reagent != null && bloodstream.ChemicalSolution.ContainsReagent(Reagent))
|
||||
{
|
||||
quant = bloodstream.ChemicalSolution.GetReagentQuantity(Reagent);
|
||||
}
|
||||
return quant >= Min;
|
||||
}
|
||||
|
||||
public override string CureText()
|
||||
{
|
||||
if (Reagent == null)
|
||||
return string.Empty;
|
||||
return (Loc.GetString("diagnoser-cure-reagent", ("units", Min), ("reagent", Reagent)));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user