Server operations
Server operations is the FiveM back office behind Freedom Roleplay, a Dutch Qbox server. Running it takes logs you can trust, refunds from evidence, a safe way to ship changes and someone who reads packet captures when joins fail.
- 01Serial numbers trace every weapon through every hand and trunk
- 02Every change ships from the test server with a diff, a backup and a rollback id
- 03First joins stalling at 95% traced to the network and fixed
Logging everything without slowing the game
The rule on Freedom Roleplay is simple: never refund on a guess. Every resource that touches items, money, vehicles, jobs or permissions writes to a logging resource with 12 tables in its own database, so a full log can never slow down or break the game database. Writes go into a queue and leave as one parameterised insert of up to 250 rows per table per second, flushed on stop. Every item that does not stack gets a serial number when it is created, so staff can follow one weapon from where it was made through every hand, bag and trunk.
Staff read this in the Logboek, an in-game panel laid out like a mail client: log types with live counts, results, and the entry or a player dossier with balances, activity and the last inventory snapshots, each with a diff against the one before. An item can be restored from a log row with a second click, and the server refuses a second restore of the same row. The panel was tested against 207,000 real log rows from the test server, with all 728 action types written out in plain Dutch.
Asking the logs a question
Senior staff wanted answers like what a player did yesterday and how much he earned, without writing SQL. In a private Discord channel they type /log-check and ask. A language model answers by calling seven narrow, read-only query tools over the log database and the txAdmin log. Money is classified in code, not by the model. The database account cannot see IP addresses, sessions are read-only with a 10-second statement limit, and IPs, licences and Discord IDs never leave the server. Answers name the period that was searched. When staff got contradictory answers, a replay showed the model had only searched today; with a seven-day default window, 8 of 8 repeated questions came back right.
Refunds from evidence
Refund requests start as a Discord ticket in plain language. The player links the ticket to the right character with a one-time code from in game. A language model turns "ak47, 3000 cash and a bag" into exact items from the live inventory catalogue and summarises the loss logs: deaths, robberies and items lost on a hospital respawn. It only advises. Staff approve or reject, cannot approve their own claim, and lower ranks cannot overrule higher ones. The game server delivers, checks weight and slots, and writes an intent before every grant, so an uncertain result goes to manual review instead of a retry.
Shipping safely
Freedom Roleplay has a separate development server. A release tool compares it with the live server per unit: a resource, a config file, a SQL migration or rows of a world table edited in game. It shows the exact diff and pushes only what was asked for. Every release keeps the replaced files and a database dump, multi-migration releases are tried on a throwaway copy of the live database first, and a resource only restarts when nobody is online and nothing depends on it. Any release can be rolled back by its id. It shipped more than 170 releases in the first week after launch and 273 in the first 13 days.
Performance and the 95% bug
Performance work starts with a measurement. A scan of 25,968 clothing texture files found 4,619 above 2048 pixels; downscaling them cut summed texture memory from 47.2 GB to 12.5 GB and the first download by about 1.5 GB. An automated benchmark flies a camera past eight fixed spots and logs average and 1% low FPS with the server's world state, which made a clean A/B possible: without one vegetation pack, the route averaged 18 percent more FPS on the test PC, so the pack was removed. Every resource targets 0.00 ms idle and at most 0.10 ms active in resmon.
Some new players hung at 95% on their first join. Packet captures showed the file server opening hundreds of short connections; after one unlucky close the router reused a port, the connection died silently and the client, which has no download timeout, waited forever. nginx with HTTP/2 now serves the same files over a few long-lived connections. A clean first join on the test server then loaded 2,898 files over 13 connections and reached the character menu in 142 seconds.
More views
Want this on your server?


