1
0

SatiateHunger.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using Content.Server.Nutrition.Components;
  2. using Content.Shared.Chemistry.Reagent;
  3. using Content.Shared.EntityEffects;
  4. using Content.Shared.Nutrition.Components;
  5. using Content.Shared.Nutrition.EntitySystems;
  6. using Robust.Shared.Prototypes;
  7. namespace Content.Server.EntityEffects.Effects
  8. {
  9. /// <summary>
  10. /// Attempts to find a HungerComponent on the target,
  11. /// and to update it's hunger values.
  12. /// </summary>
  13. public sealed partial class SatiateHunger : EntityEffect
  14. {
  15. private const float DefaultNutritionFactor = 3.0f;
  16. /// <summary>
  17. /// How much hunger is satiated.
  18. /// Is multiplied by quantity if used with EntityEffectReagentArgs.
  19. /// </summary>
  20. [DataField("factor")] public float NutritionFactor { get; set; } = DefaultNutritionFactor;
  21. //Remove reagent at set rate, satiate hunger if a HungerComponent can be found
  22. public override void Effect(EntityEffectBaseArgs args)
  23. {
  24. var entman = args.EntityManager;
  25. if (!entman.TryGetComponent(args.TargetEntity, out HungerComponent? hunger))
  26. return;
  27. if (args is EntityEffectReagentArgs reagentArgs)
  28. {
  29. entman.System<HungerSystem>().ModifyHunger(reagentArgs.TargetEntity, NutritionFactor * (float) reagentArgs.Quantity, hunger);
  30. }
  31. else
  32. {
  33. entman.System<HungerSystem>().ModifyHunger(args.TargetEntity, NutritionFactor, hunger);
  34. }
  35. }
  36. protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys)
  37. => Loc.GetString("reagent-effect-guidebook-satiate-hunger", ("chance", Probability), ("relative", NutritionFactor / DefaultNutritionFactor));
  38. }
  39. }