fixed plant bag double dump problem (#10188)

Co-authored-by: fooberticus <fooberticus@protonmail.com>
This commit is contained in:
Fooberticus Bazly
2022-07-31 04:14:21 -04:00
committed by GitHub
parent 564f6cc40c
commit fafd541349

View File

@@ -42,9 +42,9 @@ namespace Content.Server.Storage.EntitySystems
if (HasComp<DisposalUnitComponent>(args.Target) || HasComp<PlaceableSurfaceComponent>(args.Target))
{
StartDoAfter(uid, args.Target.Value, args.User, component, storage);
return;
}
}
private void AddDumpVerb(EntityUid uid, DumpableComponent dumpable, GetVerbsEvent<AlternativeVerb> args)
{
if (!args.CanAccess || !args.CanInteract)
@@ -105,11 +105,7 @@ namespace Content.Server.Storage.EntitySystems
public void StartDoAfter(EntityUid storageUid, EntityUid? targetUid, EntityUid userUid, DumpableComponent dumpable, ServerStorageComponent storage, float multiplier = 1)
{
if (dumpable.CancelToken != null)
{
dumpable.CancelToken.Cancel();
dumpable.CancelToken = null;
return;
}
if (storage.StoredEntities == null)
return;
@@ -119,7 +115,7 @@ namespace Content.Server.Storage.EntitySystems
dumpable.CancelToken = new CancellationTokenSource();
_doAfterSystem.DoAfter(new DoAfterEventArgs(userUid, delay, dumpable.CancelToken.Token, target: targetUid)
{
BroadcastFinishedEvent = new DumpCompletedEvent(userUid, targetUid, storage.StoredEntities),
BroadcastFinishedEvent = new DumpCompletedEvent(dumpable, userUid, targetUid, storage.StoredEntities),
BroadcastCancelledEvent = new DumpCancelledEvent(dumpable.Owner),
BreakOnTargetMove = true,
BreakOnUserMove = true,
@@ -131,6 +127,8 @@ namespace Content.Server.Storage.EntitySystems
private void OnDumpCompleted(DumpCompletedEvent args)
{
args.Component.CancelToken = null;
Queue<EntityUid> dumpQueue = new();
foreach (var entity in args.StoredEntities)
{
@@ -160,7 +158,6 @@ namespace Content.Server.Storage.EntitySystems
{
Transform(entity).LocalPosition = Transform(args.Target.Value).LocalPosition + _random.NextVector2Box() / 4;
}
return;
}
}
@@ -181,12 +178,14 @@ namespace Content.Server.Storage.EntitySystems
private sealed class DumpCompletedEvent : EntityEventArgs
{
public DumpableComponent Component { get; }
public EntityUid User { get; }
public EntityUid? Target { get; }
public IReadOnlyList<EntityUid> StoredEntities { get; }
public DumpCompletedEvent(EntityUid user, EntityUid? target, IReadOnlyList<EntityUid> storedEntities)
public DumpCompletedEvent(DumpableComponent component, EntityUid user, EntityUid? target, IReadOnlyList<EntityUid> storedEntities)
{
Component = component;
User = user;
Target = target;
StoredEntities = storedEntities;