using Content.Shared.Teleportation.Components;
using Content.Shared.Verbs;
using Robust.Shared.Audio.Systems;
+using Robust.Shared.Containers;
using Robust.Shared.Map.Components;
using Robust.Shared.Physics;
using Robust.Shared.Physics.Components;
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
+ [Dependency] private readonly SharedContainerSystem _container = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly SharedTransformSystem _transform = default!;
var pos = teleEntXform.Coordinates;
var otherPos = otherTeleEntXform.Coordinates;
+ if (_transform.ContainsEntity(teleEnt, (otherTeleEnt, otherTeleEntXform)) ||
+ _transform.ContainsEntity(otherTeleEnt, (teleEnt, teleEntXform)))
+ {
+ Log.Error($"Invalid teleport swap attempt between {ToPrettyString(teleEnt)} and {ToPrettyString(otherTeleEnt)}");
+ return;
+ }
+
_transform.SetCoordinates(teleEnt, otherPos);
_transform.SetCoordinates(otherTeleEnt, pos);
}
private EntityUid GetTeleportingEntity(Entity<TransformComponent> ent)
{
var parent = ent.Comp.ParentUid;
+ if (_container.TryGetOuterContainer(ent, ent, out var container))
+ parent = container.Owner;
if (HasComp<MapGridComponent>(parent) || HasComp<MapComponent>(parent))
return ent;