Prevent Quantum Spin Inverter from Teleporting Things into Microwaves (#29200)
* Prevent Quantum Spin Inverter from Teleporting Things into Microwaves * Simplifies code, GetTeleportingEntity instead of TryGet, adds failed teleport message * remove using Linguini.Syntax.Ast; * capital... * re-add CanInsert and Fixes microwave issue * beb * beeb
This commit is contained in:
@@ -79,6 +79,7 @@ namespace Content.Server.Kitchen.EntitySystems
|
|||||||
SubscribeLocalEvent<MicrowaveComponent, EntInsertedIntoContainerMessage>(OnContentUpdate);
|
SubscribeLocalEvent<MicrowaveComponent, EntInsertedIntoContainerMessage>(OnContentUpdate);
|
||||||
SubscribeLocalEvent<MicrowaveComponent, EntRemovedFromContainerMessage>(OnContentUpdate);
|
SubscribeLocalEvent<MicrowaveComponent, EntRemovedFromContainerMessage>(OnContentUpdate);
|
||||||
SubscribeLocalEvent<MicrowaveComponent, InteractUsingEvent>(OnInteractUsing, after: new[] { typeof(AnchorableSystem) });
|
SubscribeLocalEvent<MicrowaveComponent, InteractUsingEvent>(OnInteractUsing, after: new[] { typeof(AnchorableSystem) });
|
||||||
|
SubscribeLocalEvent<MicrowaveComponent, ContainerIsInsertingAttemptEvent>(OnInsertAttempt);
|
||||||
SubscribeLocalEvent<MicrowaveComponent, BreakageEventArgs>(OnBreak);
|
SubscribeLocalEvent<MicrowaveComponent, BreakageEventArgs>(OnBreak);
|
||||||
SubscribeLocalEvent<MicrowaveComponent, PowerChangedEvent>(OnPowerChanged);
|
SubscribeLocalEvent<MicrowaveComponent, PowerChangedEvent>(OnPowerChanged);
|
||||||
SubscribeLocalEvent<MicrowaveComponent, AnchorStateChangedEvent>(OnAnchorChanged);
|
SubscribeLocalEvent<MicrowaveComponent, AnchorStateChangedEvent>(OnAnchorChanged);
|
||||||
@@ -309,6 +310,32 @@ namespace Content.Server.Kitchen.EntitySystems
|
|||||||
UpdateUserInterfaceState(uid, component);
|
UpdateUserInterfaceState(uid, component);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnInsertAttempt(Entity<MicrowaveComponent> ent, ref ContainerIsInsertingAttemptEvent args)
|
||||||
|
{
|
||||||
|
if (ent.Comp.Broken)
|
||||||
|
{
|
||||||
|
args.Cancel();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (TryComp<ItemComponent>(args.EntityUid, out var item))
|
||||||
|
{
|
||||||
|
if (_item.GetSizePrototype(item.Size) > _item.GetSizePrototype(ent.Comp.MaxItemSize))
|
||||||
|
{
|
||||||
|
args.Cancel();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
args.Cancel();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ent.Comp.Storage.Count >= ent.Comp.Capacity)
|
||||||
|
args.Cancel();
|
||||||
|
}
|
||||||
|
|
||||||
private void OnInteractUsing(Entity<MicrowaveComponent> ent, ref InteractUsingEvent args)
|
private void OnInteractUsing(Entity<MicrowaveComponent> ent, ref InteractUsingEvent args)
|
||||||
{
|
{
|
||||||
if (args.Handled)
|
if (args.Handled)
|
||||||
|
|||||||
@@ -150,8 +150,19 @@ public sealed class SwapTeleporterSystem : EntitySystem
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var teleEnt = GetTeleportingEntity((uid, xform));
|
var (teleEnt, cont) = GetTeleportingEntity((uid, xform));
|
||||||
var otherTeleEnt = GetTeleportingEntity((linkedEnt, Transform(linkedEnt)));
|
var (otherTeleEnt, otherCont) = GetTeleportingEntity((linkedEnt, Transform(linkedEnt)));
|
||||||
|
|
||||||
|
if (otherCont != null && !_container.CanInsert(teleEnt, otherCont) ||
|
||||||
|
cont != null && !_container.CanInsert(otherTeleEnt, cont))
|
||||||
|
{
|
||||||
|
_popup.PopupEntity(Loc.GetString("swap-teleporter-popup-teleport-fail",
|
||||||
|
("entity", Identity.Entity(linkedEnt, EntityManager))),
|
||||||
|
teleEnt,
|
||||||
|
teleEnt,
|
||||||
|
PopupType.MediumCaution);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
_popup.PopupEntity(Loc.GetString("swap-teleporter-popup-teleport-other",
|
_popup.PopupEntity(Loc.GetString("swap-teleporter-popup-teleport-other",
|
||||||
("entity", Identity.Entity(linkedEnt, EntityManager))),
|
("entity", Identity.Entity(linkedEnt, EntityManager))),
|
||||||
@@ -184,20 +195,20 @@ public sealed class SwapTeleporterSystem : EntitySystem
|
|||||||
DestroyLink(linked, user); // the linked one is shown globally
|
DestroyLink(linked, user); // the linked one is shown globally
|
||||||
}
|
}
|
||||||
|
|
||||||
private EntityUid GetTeleportingEntity(Entity<TransformComponent> ent)
|
private (EntityUid, BaseContainer?) GetTeleportingEntity(Entity<TransformComponent> ent)
|
||||||
{
|
{
|
||||||
var parent = ent.Comp.ParentUid;
|
var parent = ent.Comp.ParentUid;
|
||||||
if (_container.TryGetOuterContainer(ent, ent, out var container))
|
if (_container.TryGetOuterContainer(ent, ent, out var container))
|
||||||
parent = container.Owner;
|
parent = container.Owner;
|
||||||
|
|
||||||
if (HasComp<MapGridComponent>(parent) || HasComp<MapComponent>(parent))
|
if (HasComp<MapGridComponent>(parent) || HasComp<MapComponent>(parent))
|
||||||
return ent;
|
return (ent, container);
|
||||||
|
|
||||||
if (!_xformQuery.TryGetComponent(parent, out var parentXform) || parentXform.Anchored)
|
if (!_xformQuery.TryGetComponent(parent, out var parentXform) || parentXform.Anchored)
|
||||||
return ent;
|
return (ent, container);
|
||||||
|
|
||||||
if (!TryComp<PhysicsComponent>(parent, out var body) || body.BodyType == BodyType.Static)
|
if (!TryComp<PhysicsComponent>(parent, out var body) || body.BodyType == BodyType.Static)
|
||||||
return ent;
|
return (ent, container);
|
||||||
|
|
||||||
return GetTeleportingEntity((parent, parentXform));
|
return GetTeleportingEntity((parent, parentXform));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ swap-teleporter-popup-link-destroyed = Quantum link destroyed!
|
|||||||
swap-teleporter-popup-teleport-cancel-time = It's still recharging!
|
swap-teleporter-popup-teleport-cancel-time = It's still recharging!
|
||||||
swap-teleporter-popup-teleport-cancel-link = It's not linked with another device!
|
swap-teleporter-popup-teleport-cancel-link = It's not linked with another device!
|
||||||
swap-teleporter-popup-teleport-other = {CAPITALIZE(THE($entity))} activates, and you find yourself somewhere else.
|
swap-teleporter-popup-teleport-other = {CAPITALIZE(THE($entity))} activates, and you find yourself somewhere else.
|
||||||
|
swap-teleporter-popup-teleport-fail = {CAPITALIZE(THE($entity))} activates and fails to transport you anywhere.
|
||||||
|
|
||||||
swap-teleporter-verb-destroy-link = Destroy Quantum Link
|
swap-teleporter-verb-destroy-link = Destroy Quantum Link
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user