A volume that dynamically changes offset based on the location you entered the teleporter from.
Here’s a diagram to try and show what I mean: (I am neither a mathematician nor a programmer. Pardon the strange notation.)
Player p enters teleporter volume T. T has a coordinate placement of x100 y100. T’s destination d is equal to x500 y500. p first enters volume at coordinate x0 y200. This is offset from T by x-100 y+100.
When p teleports, they end up not at d, but rather D¹, calculated using p’s original offset from T. (dx - 100 = D¹x, dy + 100 = D¹y).
p then teleports again, instead entering the volume at x25 y0. This is offset from T by x-75 y-100.
Again, instead of ending up at d, they end up at D². (dx - 75 = D²x, dy + 100 = D²y).
Where p ends up is based on where p enters T volume, offset from d.
This means that the teleportation will be smoother than a teleporter that always teleports p to d.
This teleporter volume would also have an option to add or subtract rotation from the players view. Instead of setting rotation from say, 192.2 → 90, we could make it add or subtract from the angle, 192.2 + 90 = 272.2, or 192.2 - 90 = 102.2. This would also make teleportation less disorienting and smoother (give or take with ping and desync) for the person who is teleporting.
I hope my explanation wasn’t too confusing!