var doAfterArgs = new DoAfterArgs(EntityManager, user, bonkableComponent.BonkDelay, new BonkDoAfterEvent(), uid, target: uid, used: climber)
{
BreakOnMove = true,
- BreakOnDamage = true
+ BreakOnDamage = true,
+ DuplicateCondition = DuplicateConditions.SameTool | DuplicateConditions.SameTarget
};
- _doAfter.TryStartDoAfter(doAfterArgs);
-
- return true;
+ return _doAfter.TryStartDoAfter(doAfterArgs);
}
- private void OnAttemptClimb(EntityUid uid, BonkableComponent component, AttemptClimbEvent args)
+ private void OnAttemptClimb(EntityUid uid, BonkableComponent component, ref AttemptClimbEvent args)
{
- if (args.Cancelled || !HasComp<ClumsyComponent>(args.Climber) || !HasComp<HandsComponent>(args.User))
+ if (args.Cancelled)
return;
if (TryStartBonk(uid, args.User, args.Climber, component))
using Content.Shared.Damage;
using Robust.Shared.Audio;
+using Robust.Shared.GameStates;
-namespace Content.Shared.Interaction.Components
+namespace Content.Shared.Interaction.Components;
+
+/// <summary>
+/// A simple clumsy tag-component.
+/// </summary>
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
+public sealed partial class ClumsyComponent : Component
{
/// <summary>
- /// A simple clumsy tag-component.
+ /// Damage dealt to a clumsy character when they try to fire a gun.
/// </summary>
- [RegisterComponent]
- public sealed partial class ClumsyComponent : Component
- {
- [DataField("clumsyDamage", required: true)]
- [ViewVariables(VVAccess.ReadWrite)]
- public DamageSpecifier ClumsyDamage = default!;
+ [DataField(required: true), AutoNetworkedField]
+ public DamageSpecifier ClumsyDamage = default!;
- /// <summary>
- /// Sound to play when clumsy interactions fail
- /// </summary>
- [DataField("clumsySound")]
- public SoundSpecifier ClumsySound = new SoundPathSpecifier("/Audio/Items/bikehorn.ogg");
- }
+ /// <summary>
+ /// Sound to play when clumsy interactions fail.
+ /// </summary>
+ [DataField]
+ public SoundSpecifier ClumsySound = new SoundPathSpecifier("/Audio/Items/bikehorn.ogg");
}