Custom Drone Racing League Simulator Server banner

Custom Drone Racing League Simulator Server

9 devlogs
33h 47m 29s

In December of 2025 the servers for Drone Racing League Simulator were shut down this is a project to restore the online mode to DRL

This project uses AI

Small uses of AI for writing kebab case to snake case json statements

Mr Milky Way

The maps now work correctly and just about every endpoint is accounted for. I also had too add the /storage/image/ endpoint. I started work on fixing the replays too, but the game has like 3 different functions to send a replay, uses them all, and sends different data to each.
BRUH

Attachment
0
Mr Milky Way

I did some work on custom community map making.
You can now create and test a track, but can’t edit or clone a track yet. you also can’t delete a track but ehh who needs that…

This took way to long, but hopefully the next bits will be shorter. (it wont there is still so much left check img 2)

Attachment
Attachment
0
Mr Milky Way

I fixed the drone collection problem, and it wasn’t because of the drone time endpoint.

The game would try to preload your drones on the boot of the game using your player ID. The problem was that the game would set the player ID as null because the login was sending back filler data. I also added the remove drone endpoint to delete your drones. I think next up is the drone time endpoint (or just the time endpoints like all of them).

Attachment
Attachment
Attachment
0
Mr Milky Way

I fixed some small problems with the rivals leaderboard and Community tracks and tried to add drones into the mix.

This works kinda well, the drones get uploaded BUT, if you close the game and reopen it it just says that the drone isn’t in your collection (even though you made it). I think it has to do with the drone time endpoint, but I need to do more looking. It doesn’t seem related to the player state but idk. Works well other than that though.

Attachment
Attachment
0
Mr Milky Way

So I figured out why the leaderboards where broken, and it was bc I was a certified idiot.

The game wanted the data in kebab-case but I SQL doesn’t like kebab-case so I was storing it in snake_case, and just retuning the raw snake_case stuff to the game. This works fine for the score, but not anything like names. I do have a little fixing up on more of the leaderboard endpoints (like the rival ones) tho.

Attachment
Attachment
0
Mr Milky Way

I fixed up some db issues with the leaderboard: the maps used to check drone name and guid and not ‘drl-official’ bool. This meant that the leaderboard would be different per drone and not different per drone class/official drones. I then fixed the real leaderboard to show the entries as the only endpoint without filler data up to this point was the leaderboard post. It went well and next up is figuring out why the names are all undefined. I think it lies in a different endpoint but idk.

Attachment
0
Mr Milky Way

After a long time I figured out the leaderboards I got the DB working for them. It was a MONSTROUS block of code but it works (smh) some of it is still filler data (like the Number 1 position bit) but it won’t override a better score and should work fine when I fixup the rest of the code to use the DB. I spent way to long trying to find out why the data being sent was null, bc as it turns out the data is in a json array and I thought it was just in json… BUT IT WORKS, YEAH!

Attachment
Attachment
Attachment
0
Mr Milky Way

After a lot of work I have decided to make this a flavortown project and as such I have a lot to write for my first Devlog. I started this project because my favorite (only) drone simulator that I own, DRLSim, had it’s server shut down. I decided to make a custom server for the game even though I have never made a server before. I started out by checking the game logs to find what requests the game was sending to the server, once I found out the name of the request I would go into the .DLL that send the request and see what it wants back (I also patched the dll with a new server URL too). First on the list was the login data, it wanted an expiration and the token it sent me back + a success boolean. Because of this I didn’t have to decode the token. Next was game and player state data which could be left null. Next was map data which had to be in base 64 and I could fill with fake data. Last was a server time call, this also had to be in base 64 and had to be the current time in iso format. After all of this I could boot into the main menu, and race on 4 out of 277 tracks. After finishing a race the game would ask for leadboard data and then softlock. Instead of fixing this right away, I re-coded all of what I had made to use express and not just a http server. Then I tried to fix the maps not loading and the game would get the map data, BUT would only download a 1kb file and so I just left that for a fix later. At this point I looked at how DRL handled the login tokens. After some digging I found that the token was in base 64 and used AES encryption. The key was easy to find but the iv looked to be hard coded, but was actually the timestamp that the game sends to the server. Now that I could read what the token says I could start to actually make a database. This allowed me to save the player state also. Next I started work on the xp system which needed that player state. I also added some filler leaderboard data. I hit the char count for the log :(

Attachment
0