(Self-hostable!) Server JobId Teleport Redirector

Hi all!

I got inspired by a little thing @Joalix_20 made some months ago over at Server Join by JobId and decided I’d have a go at it, but with… like the N64 expansion pak… or the free upgrade to first class seats… or the DVD logo hitting the corner… oh, and FOSS…

It’s a simple concept: a Game receives clients through https://www.roblox.com/games/start?placeId=<placeId>&launchData=<launchData> and grabs Player:GetJoinData().LaunchData, parses the launchData for a destination PlaceId and JobId, and sends ya there!

Well I hadn’t really programmed much in a little while here and I got going at it, nothing could stop me until it was not only serviceable but excellent… and I think I ended up with something everybody can actually use!

I took a lot of time to optimize it so it’s super fast, you don’t even get to load into the place properly before you’re already whisked away towards your destination! If I say so myself it’s quite pretty as well, blends in well with the Roblox UX language, but you be the judge.

Enough rambling, how do you use it?

You can take advantage of my ready-to-use place or you can self-host it, it’s uncopylocked.

  1. Concatenate JobId and PlaceId into one string, the order doesn’t matter. Both <JobId><PlaceId> and <PlaceId><JobId> work.

  2. Construct a URL like so with your concatenated string:
    https://www.roblox.com/games/start?launchData=<JobId><PlaceId>&placeId=17118259388

    • The order of &placeId= and &launchData= don’t matter, I just prefer this order because the chaos is all in the middle and the placeId is easily visible, I think it looks nicer that way.
    • Replace the value of &placeId= with yours if you are self-hosting.
  3. Here’s an example with a random JobId and the PlaceId of Crossroads:
    https://www.roblox.com/games/start?launchData=1818130aedd2-cf2b-4f4c-b5d8-de01f43dd13a&placeId=17118259388

  4. That’s it! Use that URL for however long that server is open and you will join it.

Self-Hosting

Visiting the place like normal without any launchData will take you to a How-To guide for self-hosting. redirect - Roblox


Ok you can berate me now for “wasting precious characters encoding JSON” if you’d like! (No more JSON)

I made a neat simple loading screen that you probably won’t see because it’s just that fast, maybe it will come in handy if the pipeline slows down somehow.

9 Likes

Looks like encoding JSON just doesn’t really work all that well. It was working when I put the URLs in my address bar but if I click a link then my browser translates some of it, and it all goes wrong!

I can just switch that out I suppose

2 Likes

All I see in the test place is bouncing balls…

2 Likes

I recently made something similar to this but it uses this more simple method of joining a place:
roblox://experiences/start?placeId=${placeId}&gameInstanceId=${gameInstanceId}
Fyi, gameInstanceId is the server JobId.

You could look at that if you have your own domain like I do to have a redirect to the Roblox url (roblox:// doesn’t work on platforms such as Discord as they aren’t actual domains).

2 Likes

I’d like to apologize, I was trying my best to fix it up after the JSON encoding nightmare.

It all works properly again and the How-To for self-hosting is back online. Again really sorry. I wish I did it this way in the first place and avoided JSON.

I was off to a rocky start there but it’s all good now, and clicking on links works now since there is no url encoding required.

2 Likes

Made a couple updates to it:

  • UUID/JobId validation is now done manually rather than using string.find

    • I did this because string.find, while being a C function, does a lot of work, more than doing it manually. Also, it seemed fun to program, and it was!
  • The main Redirector script now supports forcing a specific PlaceId to be used for all teleports, which may be useful for those who self-host and only want to use this for servers within a specific game

    • This makes the game fail to redirect if anything extra is found in LaunchData that is not a part of a valid JobId