using Content.Shared.Chat.Prototypes; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Shared.EntityEffects.Effects; /// /// Tries to force someone to emote (scream, laugh, etc). Still respects whitelists/blacklists and other limits unless specially forced. /// public sealed partial class Emote : EventEntityEffect { /// /// The emote the entity will preform. /// [DataField("emote", required: true, customTypeSerializer: typeof(PrototypeIdSerializer))] public string EmoteId; /// /// If the emote should be recorded in chat. /// [DataField] public bool ShowInChat; /// /// If the forced emote will be listed in the guidebook. /// [DataField] public bool ShowInGuidebook; /// /// If true, the entity will preform the emote even if they normally can't. /// [DataField] public bool Force = false; protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys) { if (!ShowInGuidebook) return null; // JUSTIFICATION: Emoting is mostly flavor, so same reason popup messages are not in here. var emotePrototype = prototype.Index(EmoteId); return Loc.GetString("reagent-effect-guidebook-emote", ("chance", Probability), ("emote", Loc.GetString(emotePrototype.Name))); } }