Allow specific entities to bypass DoAfter delays (#17349)

* Allow specific entities to bypass DoAfter delays

This adds the InstantDoAfters tag to the admin ghost for mappers.

* Add specific player prototype for InteractionTest
This commit is contained in:
Vordenburg
2023-06-15 15:18:38 -04:00
committed by GitHub
parent 23b6d87a79
commit f8888b0960
4 changed files with 39 additions and 3 deletions

View File

@@ -38,7 +38,7 @@ namespace Content.IntegrationTests.Tests.Interaction;
[FixtureLifeCycle(LifeCycle.InstancePerTestCase)] [FixtureLifeCycle(LifeCycle.InstancePerTestCase)]
public abstract partial class InteractionTest public abstract partial class InteractionTest
{ {
protected virtual string PlayerPrototype => "AdminObserver"; protected virtual string PlayerPrototype => "MobInteractionTestObserver";
protected PairTracker PairTracker = default!; protected PairTracker PairTracker = default!;
protected TestMapData MapData = default!; protected TestMapData MapData = default!;
@@ -118,7 +118,36 @@ public abstract partial class InteractionTest
[SetUp] [SetUp]
public virtual async Task Setup() public virtual async Task Setup()
{ {
PairTracker = await PoolManager.GetServerClient(new PoolSettings()); const string TestPrototypes = @"
- type: entity
id: MobInteractionTestObserver
name: observer
noSpawn: true
save: false
description: Boo!
components:
- type: Access
groups:
- AllAccess
- type: Body
prototype: Aghost
- type: DoAfter
- type: Ghost
canInteract: true
- type: Hands
- type: Mind
- type: Stripping
- type: Tag
tags:
- CanPilot
- BypassInteractionRangeChecks
- type: Thieving
stripTimeReduction: 9999
stealthy: true
- type: UserInterface
";
PairTracker = await PoolManager.GetServerClient(new PoolSettings{ExtraPrototypes = TestPrototypes});
// server dependencies // server dependencies
SEntMan = Server.ResolveDependency<IEntityManager>(); SEntMan = Server.ResolveDependency<IEntityManager>();

View File

@@ -4,6 +4,7 @@ using Content.Shared.ActionBlocker;
using Content.Shared.Damage; using Content.Shared.Damage;
using Content.Shared.Hands.Components; using Content.Shared.Hands.Components;
using Content.Shared.Mobs; using Content.Shared.Mobs;
using Content.Shared.Tag;
using Robust.Shared.GameStates; using Robust.Shared.GameStates;
using Robust.Shared.Serialization; using Robust.Shared.Serialization;
using Robust.Shared.Timing; using Robust.Shared.Timing;
@@ -16,6 +17,7 @@ public abstract partial class SharedDoAfterSystem : EntitySystem
[Dependency] protected readonly IGameTiming GameTiming = default!; [Dependency] protected readonly IGameTiming GameTiming = default!;
[Dependency] private readonly ActionBlockerSystem _actionBlocker = default!; [Dependency] private readonly ActionBlockerSystem _actionBlocker = default!;
[Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly SharedTransformSystem _transform = default!;
[Dependency] private readonly TagSystem _tag = default!;
/// <summary> /// <summary>
/// We'll use an excess time so stuff like finishing effects can show. /// We'll use an excess time so stuff like finishing effects can show.
@@ -221,7 +223,8 @@ public abstract partial class SharedDoAfterSystem : EntitySystem
if (args.AttemptFrequency == AttemptFrequency.StartAndEnd && !TryAttemptEvent(doAfter)) if (args.AttemptFrequency == AttemptFrequency.StartAndEnd && !TryAttemptEvent(doAfter))
return false; return false;
if (args.Delay <= TimeSpan.Zero) if (args.Delay <= TimeSpan.Zero ||
_tag.HasTag(args.User, "InstantDoAfters"))
{ {
RaiseDoAfterEvents(doAfter, comp); RaiseDoAfterEvents(doAfter, comp);
// We don't store instant do-afters. This is just a lazy way of hiding them from client-side visuals. // We don't store instant do-afters. This is just a lazy way of hiding them from client-side visuals.

View File

@@ -9,6 +9,7 @@
maxZoom: 8.916104, 8.916104 maxZoom: 8.916104, 8.916104
- type: Tag - type: Tag
tags: tags:
- InstantDoAfters
- CanPilot - CanPilot
- BypassInteractionRangeChecks - BypassInteractionRangeChecks
- type: Input - type: Input

View File

@@ -409,6 +409,9 @@
- type: Tag - type: Tag
id: Ingot id: Ingot
- type: Tag
id: InstantDoAfters
- type: Tag - type: Tag
id: IntercomElectronics id: IntercomElectronics