diff --git a/Extension/Multiplayer/Session/session.cpp b/Extension/Multiplayer/Session/session.cpp index 2482c38..77713c0 100644 --- a/Extension/Multiplayer/Session/session.cpp +++ b/Extension/Multiplayer/Session/session.cpp @@ -648,7 +648,9 @@ void render(Session &s, std::uintptr_t client, const NativeFrame &local, std::ui p.native_status = !p.shown_wanted ? "Further away than players are shown." : sampled ? "Waiting for the player's cosmetic recipe." : "Waiting for player poses."; - // No skater for them, but still their name or dot where they are. + // No skater for them, but still their name or dot where they are, and where the + // Social menu's teleport and spectate find them. + if (!p.shown_wanted && sampled) update_party_position(&p.render_pose); if (!p.shown_wanted && sampled && labels) label(p); } } diff --git a/Extension/Multiplayer/Session/session_commands.cpp b/Extension/Multiplayer/Session/session_commands.cpp index 2507ae8..7cd1421 100644 --- a/Extension/Multiplayer/Session/session_commands.cpp +++ b/Extension/Multiplayer/Session/session_commands.cpp @@ -196,7 +196,10 @@ std::string teleport_self(Session &s, std::string_view argument) { std::string error; auto *p = find_player(s, argument, error); if (!p) return error; - if (!p->visible) return peer_name(s, *p) + " is not in the world right now."; + // Where they were last heard to be: a player further away than skaters are shown has no + // skater here, and is exactly who a teleport is for. Only one no pose has placed yet has + // nowhere to go to. + if (!p->placed) return peer_name(s, *p) + " is not in the world right now."; at = p->render_pose.root.position; at[0] += 2.0f; // beside them, not inside at[1] += 1.0f;