DoAfter Refactor Fixes (#14278)

* Doafterfixes

* Injector blocker
This commit is contained in:
keronshb
2023-02-26 00:33:06 -05:00
committed by GitHub
parent 0d6f64e6d0
commit ec739c24da
13 changed files with 148 additions and 54 deletions

View File

@@ -1,3 +1,4 @@
using System.Threading;
using Content.Server.Administration.Logs;
using Content.Server.Body.Systems;
using Content.Server.DoAfter;
@@ -40,6 +41,12 @@ public sealed class HealingSystem : EntitySystem
private void OnDoAfter(EntityUid uid, DamageableComponent component, DoAfterEvent<HealingData> args)
{
if (args.Cancelled)
{
args.AdditionalData.HealingComponent.CancelToken = null;
return;
}
if (args.Handled || args.Cancelled || _mobStateSystem.IsDead(uid) || args.Args.Used == null)
return;
@@ -67,6 +74,7 @@ public sealed class HealingSystem : EntitySystem
if (args.AdditionalData.HealingComponent.HealingEndSound != null)
_audio.PlayPvs(args.AdditionalData.HealingComponent.HealingEndSound, uid, AudioHelpers.WithVariation(0.125f, _random).WithVolume(-5f));
args.AdditionalData.HealingComponent.CancelToken = null;
args.Handled = true;
}
@@ -90,7 +98,7 @@ public sealed class HealingSystem : EntitySystem
private bool TryHeal(EntityUid uid, EntityUid user, EntityUid target, HealingComponent component)
{
if (_mobStateSystem.IsDead(target) || !TryComp<DamageableComponent>(target, out var targetDamage))
if (_mobStateSystem.IsDead(target) || !TryComp<DamageableComponent>(target, out var targetDamage) || component.CancelToken != null)
return false;
if (targetDamage.TotalDamage == 0)
@@ -108,14 +116,21 @@ public sealed class HealingSystem : EntitySystem
if (component.HealingBeginSound != null)
_audio.PlayPvs(component.HealingBeginSound, uid, AudioHelpers.WithVariation(0.125f, _random).WithVolume(-5f));
var delay = user != target
var isNotSelf = user != target;
var delay = isNotSelf
? component.Delay
: component.Delay * GetScaledHealingPenalty(user, component);
component.CancelToken = new CancellationTokenSource();
var healingData = new HealingData(component, stack);
var doAfterEventArgs = new DoAfterEventArgs(user, delay, target: target, used: uid)
var doAfterEventArgs = new DoAfterEventArgs(user, delay, cancelToken: component.CancelToken.Token,target: target, used: uid)
{
//Raise the event on the target if it's not self, otherwise raise it on self.
RaiseOnTarget = isNotSelf,
RaiseOnUser = !isNotSelf,
BreakOnUserMove = true,
BreakOnTargetMove = true,
// Didn't break on damage as they may be trying to prevent it and