Files
tbd-station-14/Content.Shared/CombatMode/Pacification/PacifiedComponent.cs
2025-06-07 14:37:13 -07:00

63 lines
2.2 KiB
C#

using Content.Shared.Alert;
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
namespace Content.Shared.CombatMode.Pacification;
/// <summary>
/// Status effect that disallows harming living things and restricts aggressive actions.
///
/// There is a caveat with pacifism. It's not intended to be wholly encompassing: there are ways of harming people
/// while pacified--plenty of them, even! The goal is to restrict the obvious ones to make gameplay more interesting
/// while not overly limiting.
///
/// If you want full-pacifism (no combat mode at all), you can simply set <see cref="DisallowAllCombat"/> before adding.
/// </summary>
[RegisterComponent, NetworkedComponent, AutoGenerateComponentPause]
[Access(typeof(PacificationSystem))]
public sealed partial class PacifiedComponent : Component
{
/// <summary>
/// If true, this will prevent you from disarming opponents in combat.
/// </summary>
[DataField]
public bool DisallowDisarm = false;
/// <summary>
/// If true, this will disable combat entirely instead of only disallowing attacking living creatures and harmful things.
/// </summary>
[DataField]
public bool DisallowAllCombat = false;
/// <summary>
/// When attempting attack against the same entity multiple times,
/// don't spam popups every frame and instead have a cooldown.
/// </summary>
[DataField]
public TimeSpan PopupCooldown = TimeSpan.FromSeconds(3.0);
/// <summary>
/// Time at which the next popup can be shown.
/// </summary>
[DataField]
[AutoPausedField]
public TimeSpan? NextPopupTime = null;
/// <summary>
/// The last entity attacked, used for popup purposes (avoid spam)
/// </summary>
[DataField]
public EntityUid? LastAttackedEntity = null;
/// <summary>
/// The alert to show to owners of this component.
/// </summary>
[DataField]
public ProtoId<AlertPrototype> PacifiedAlert = "Pacified";
// Prevent cheat clients from using this to identify thieves and players that cannot fight back.
// This should not matter for prediction reasons since it only blocks user input.
public override bool SendOnlyToOwner => true;
}