using Content.Shared.Sound; namespace Content.Server.Interaction.Components; [RegisterComponent, Friend(typeof(InteractionPopupSystem))] public sealed class InteractionPopupComponent : Component { /// /// Time delay between interactions to avoid spam. /// [DataField("interactDelay")] [ViewVariables(VVAccess.ReadWrite)] public TimeSpan InteractDelay = TimeSpan.FromSeconds(1.0); /// /// String will be used to fetch the localized message to be played if the interaction succeeds. /// Nullable in case none is specified on the yaml prototype. /// [DataField("interactSuccessString")] public string? InteractSuccessString; /// /// String will be used to fetch the localized message to be played if the interaction fails. /// Nullable in case no message is specified on the yaml prototype. /// [DataField("interactFailureString")] public string? InteractFailureString; /// /// Sound effect to be played when the interaction succeeds. /// Nullable in case no path is specified on the yaml prototype. /// [DataField("interactSuccessSound")] public SoundSpecifier? InteractSuccessSound; /// /// Sound effect to be played when the interaction fails. /// Nullable in case no path is specified on the yaml prototype. /// [DataField("interactFailureSound")] public SoundSpecifier? InteractFailureSound; /// /// Chance that an interaction attempt will succeed. /// 1 = always play "success" popup and sound. /// 0.5 = 50% chance to play either success or failure popup and sound. /// 0 = always play "failure" popup and sound. /// [DataField("successChance")] public float SuccessChance = 1.0f; // Always succeed, unless specified otherwise on the yaml prototype. /// /// If set, shows a message to all surrounding players but NOT the current player. /// [DataField("messagePerceivedByOthers")] public string? MessagePerceivedByOthers; /// /// Will the sound effect be perceived by entities not involved in the interaction? /// [DataField("soundPerceivedByOthers")] public bool SoundPerceivedByOthers = true; [ViewVariables(VVAccess.ReadWrite)] public TimeSpan LastInteractTime; }