Fix climbing and bonking simultaneously (#27268)
* Properly network ClumsyComponent * Fix being able to climb and bonk at the same time. Also properly subscribe to AttemptClimbEvent by-ref. * Update Content.Shared/Interaction/Components/ClumsyComponent.cs
This commit is contained in:
@@ -107,17 +107,16 @@ public sealed partial class BonkSystem : EntitySystem
|
||||
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))
|
||||
|
||||
@@ -222,7 +222,8 @@ public sealed partial class ClimbSystem : VirtualController
|
||||
used: entityToMove)
|
||||
{
|
||||
BreakOnMove = true,
|
||||
BreakOnDamage = true
|
||||
BreakOnDamage = true,
|
||||
DuplicateCondition = DuplicateConditions.SameTool | DuplicateConditions.SameTarget
|
||||
};
|
||||
|
||||
_audio.PlayPredicted(comp.StartClimbSound, climbable, user);
|
||||
|
||||
@@ -1,22 +1,24 @@
|
||||
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");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user