using Content.Server.Humanoid; using Content.Server.Speech.EntitySystems; using Content.Shared.Actions; using Content.Shared.Actions.ActionTypes; using Content.Shared.Chat.Prototypes; using Content.Shared.Humanoid; using Robust.Shared.Audio; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Dictionary; namespace Content.Server.Speech.Components; /// /// Component required for entities to be able to do vocal emotions. /// [RegisterComponent] [Access(typeof(VocalSystem))] public sealed class VocalComponent : Component { /// /// Emote sounds prototype id for each sex (not gender). /// Entities without considered to be . /// [DataField("sounds", customTypeSerializer: typeof(PrototypeIdValueDictionarySerializer))] public Dictionary? Sounds; [DataField("screamId", customTypeSerializer: typeof(PrototypeIdSerializer))] public string ScreamId = "Scream"; [DataField("wilhelm")] public SoundSpecifier Wilhelm = new SoundPathSpecifier("/Audio/Voice/Human/wilhelm_scream.ogg"); [DataField("wilhelmProbability")] public float WilhelmProbability = 0.01f; [DataField("screamActionId", customTypeSerializer: typeof(PrototypeIdSerializer))] public string ScreamActionId = "Scream"; [DataField("screamAction")] public InstantAction? ScreamAction; /// /// Currently loaded emote sounds prototype, based on entity sex. /// Null if no valid prototype for entity sex was found. /// [ViewVariables] public EmoteSoundsPrototype? EmoteSounds = null; } public sealed class ScreamActionEvent : InstantActionEvent { }