space-wizards / space-station-14

A multiplayer game about paranoia and chaos on a space station. Remake of the cult-classic Space Station 13.
https://spacestation14.io
MIT License
2.73k stars 3.47k forks source link

Eternal Prison of the QSI #30242

Open Cojoke-dot opened 4 months ago

Cojoke-dot commented 4 months ago

Description

Using an anchored container and an unanchored container, one can seal a person eternally with a paired QSI set Container refers to mostly lockers and crates in this issue, but I know disposal bins work just as well Reproduction

  1. Anchor container 1 and place qsi inside
  2. Place qsi and object to imprison inside container 2 (any place inside that would cause the container to teleport)
  3. Trigger QSI
  4. Attempt to move in order to exit the container, cannot (in attached video, no active doAfter on Hoid)

Screenshots

https://github.com/user-attachments/assets/0015e97c-66d0-4d0b-8875-791f39b77391

Brandon-Huu commented 4 months ago

Why doesn't it just move the player? Why does it take the entire container the player is in?

Cojoke-dot commented 4 months ago

Why doesn't it just move the player? Why does it take the entire container the player is in?

Because the QSI does not check where it is going before selecting the target for teleport, you can just put the QSI next to the person and then teleport it to cause the same effect.

LucasTheDrgn commented 3 months ago

I may argue this is actually a bug with the SharedContainerSystem.CanInsert method. The QSI checks if the entities it's decided to teleport can be inserted into the container it's decided to teleport into, and somehow crates "allow" lockers to be inserted into them. Either this function should be changed to return the expected result, a different function should be used to return the expected result, or a different function should be written to return the expected result.