using Content.Shared.Localizations;
using Robust.Shared.Prototypes;
namespace Content.Shared.EntityEffects.Effects;
///
/// Applies the effect of an .
///
public sealed partial class NestedEffect : EntityEffectBase
{
///
/// The effect prototype to use.
///
[DataField(required: true)]
public ProtoId Proto;
private List _conditions = new();
private List _effects = new();
public override string? EntityEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys)
{
var proto = prototype.Index(Proto);
if (proto.GuidebookText is {} key)
return Loc.GetString(key, ("chance", Probability));
_effects.Clear();
foreach (var effect in proto.Effects)
{
if (effect.EntityEffectGuidebookText(prototype, entSys) is not {} text)
continue;
// basically GuidebookReagentEffectDescription but independent of reagents and no linq
_conditions.Clear();
if (effect.Conditions is {} conditions)
{
foreach (var condition in conditions)
{
_conditions.Add(condition.EntityConditionGuidebookText(prototype));
}
}
var desc = Loc.GetString("guidebook-nested-effect-description",
("effect", text),
("chance", effect.Probability),
("conditionCount", _conditions.Count),
("conditions", ContentLocalizationManager.FormatList(_conditions)));
_effects.Add(desc);
}
return _effects.Count == 0 ? null : string.Join("\n", _effects);
}
}
///
/// Handles .
///
public sealed class NestedEffectSystem : EntityEffectSystem
{
[Dependency] private readonly SharedEntityEffectsSystem _effects = default!;
protected override void Effect(Entity ent, ref EntityEffectEvent args)
{
_effects.TryApplyEffect(ent, args.Effect.Proto, args.Scale, args.User);
}
}