using Content.Shared.Chat.Prototypes; using Content.Shared.Damage; using Content.Shared.Damage.Prototypes; using Content.Shared.FixedPoint; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; namespace Content.Shared._DV.Body.Components; /// /// This is used for Avali feather preening functionality. /// [RegisterComponent, NetworkedComponent, AutoGenerateComponentState, AutoGenerateComponentPause] public sealed partial class PreenableComponent : Component { [DataField] public EntProtoId FeatherPrototype; [DataField] public HashSet>? ValidDamageTypes = new() { "Blunt", "Piercing", "Slash" }; [DataField] public LocId SelfPreeningMessage = "preening-popup-self"; [DataField] public LocId GettingPreenedMessage = "preening-popup-self-recipient"; [DataField] public LocId PreeningOtherMessage = "preening-popup-other"; [DataField] public LocId FeatherBloodiedNameString = "feather-bloody-name-modifier"; [DataField] public LocId FeatherBloodiedDescString = "feather-bloody-desc"; [DataField] public LocId PreeningVerbString = "preening-action-verb"; [DataField] public LocId DroppedFeatherString = "preening-feather-dropped-injured"; [DataField] public ProtoId ScreamEmote = "Scream"; /// /// The minimum amount of damage that must be taken from one attack to have a chance to shed a feather. /// [DataField] public FixedPoint2 ShedDamageThreshold = 9; /// /// The chance for a feather to be shed on hit, per point of damage taken. /// [DataField] public float ShedScalingChance = 0.0125f; [DataField] public DamageModifierSet? VulnerabilityModifier; [DataField, AutoNetworkedField] public int MaximumFeathers = 3; [DataField, AutoNetworkedField] public int CurrentFeathers; [DataField] public TimeSpan ReplenishDelay = TimeSpan.FromSeconds(150); [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), AutoNetworkedField, AutoPausedField] public TimeSpan? ReplenishTime; }