Old School Ops

Building a Public Server

The terms for running a public RF Online server on GoMMO, what you bring, which version to build on, what you can change without the source, what runs without this site, and what 1.0 means for an RF version.

Applies to RF Online 4.55RF Online 2.2.3.2 · updated 2026-10-31
On this page

This page is for anyone opening an RF Online server to the public on GoMMO: the terms, what you supply yourself, which version to start from, how far the game can be changed, and which parts depend on this site.

The Terms

  • Hosting is free. There is no fee, no licence key, no player limit and no other restriction.
  • Attribution is asked for. Say on your website or in your launcher that the server runs on GoMMO, with a link to oldschoolops.com. The RF launcher already shows such a line.
  • Donations are encouraged. None is required, and nothing on your server depends on one.
  • The source stays closed. A release holds the built servers, the GameCP and the tools. You change the game through the routes under Changing the Game, which are built for an operator who does not have the source.

What You Bring

  • Your own RF Online client and its assets. No RF release here contains a client, a patched executable or the client's art, and we do not redistribute one (We Do Not Ship a Client). Your players need the same client build as your server.
  • A machine to run it on, as What You Need describes.

Choosing a Foundation

Build a public server on one of these two:

RF Online: DragonbornRF Online: Golden Age
Game version4.552.2.3.2
Client buildRF Online Taiwan, built 2025-07-16Episode 2.2.3.2 retail
Client textReads its Traditional Chinese folder only; English can be written into it (below)Reads the language folder the launcher asks for

Every feature we build reaches both. Pick by the content you want and the client your players have: Choosing a Version lists what each one contains, and Game Clients names the exact client build each server needs.

Changing the Game

Without Code

  • Settings. settings.ini and the GameCP's Settings page hold rates, GM command levels, the anti-cheat toggles and each system's switches. See Configuration and The GameCP.
  • Environment overrides. A line GOMMO_<KEY>=value (or GOMMO_<KEY>_FILE=/path, which reads the value from that file) replaces the settings.ini key of the same name. On a Linux service install, put those lines in settings/server.env beside settings.ini: the systemd units that install.sh writes read it when the file exists. Under Docker they go in docker.env. Both are described in Docker and Linux.
  • Game data. Items, monsters, drops, shops and the rest are rows in the content database, edited in GoMMO Studio's Game Data or in the GameCP's Game Data Editor. If you already keep the original data files, the server can read them directly.

GoMMO Studio

GoMMO Studio edits maps, spawns, models, textures, the interface, sounds and client text. Install writes a project into your own client and server. File > Publish to players puts the client half on your launcher's updater, and players receive it the next time they start the launcher (Projects).

.gommomod Packs

A .gommomod is one change for one game, as a single file: the client and server files and the game data edits a Studio project would install, signed by its author and marked with the client and server builds it was made against.

  • File > Export as .gommomod… writes one from a project.
  • File > Open .gommomod… opens one as a new project.
  • File > Mods… keeps several in a load order and shows where they overlap.

Sharing a pack is passing the file. Nothing on this site hosts or lists them.

Lua

The server runs Lua from its scripts folder:

  • Dungeons (scripts/dungeons) and boss encounters (scripts/encounters).
  • Modules (scripts/modules), the operator's own extensions. A module listens to game events (logins, kills, PvP kills, chat, drops and loot, auction listings, level ups, upgrades, the Chip War), can refuse or adjust a few of them (an auction listing, a chat line, a loot claim, a hit's damage), adds staff % commands and player commands, runs timers, and keeps its own settings and tables. Modules are off until lua.enabled is switched on in the GameCP's Settings.

A module is checked when it loads. A mistake names the file and the line and suggests the name you probably meant, and a module that fails the check is not loaded while the others are.

New Messages Between Client and Server

A module can declare new messages of its own, in either direction. Only GoMMO Client and our client hook (an add-on that loads inside an official client) can read them. An official client never receives one: the server sends a module's messages only to a client that has said it understands them, so players on an unmodified client play as before. The client hook is not a download yet.

What Cannot Be Changed

  • The server program itself. Without the source there is no rebuilding it; anything beyond the routes above is a request for the Ideas board or Discord.
  • What the official client does. It is a program we do not control, and the server matches it byte for byte. Text compiled into the client program or drawn into its button art, the length of item codes, the language folder a build reads and the layout of the messages it already sends are all fixed by the client.
  • What a module may touch. A module cannot read or write the game's own tables, send raw bytes, send anything to an official client or read another module's data. On Dragonborn it can give a player currency but never take it; on Golden Age it can also take currency, never below zero. It changes the game through the events, gates and actions it is given.

English Text on the 4.55 Client

The 4.55 Taiwan client reads only its Traditional Chinese (zh-tw) folder. That folder uses the Big5 codepage, which holds plain English letters, so GoMMO Studio can write English into it and the client reads it as its own text. The server needs no change: what it sends is already English.

  1. Open a project for your 4.55 client in GoMMO Studio, then Tools > Localization….
  2. Fill the English column. Type text by hand, or press Machine-translate for Assistant drafts, which wait in the review queue and are written only when you accept them.
  3. Watch for red cells. Each field has a byte limit in the client, and text that does not fit is refused until it is shorter.
  4. Under Bundle language, choose zh-tw and press Write English into the bundle.
  5. Install to try it on your own client, then File > Publish to players so the launcher delivers it.

Every later Install writes English into the folder again, so the project stays the one copy of your translation. Players keep Language=Taiwan in the client's R3Engine.ini, as GoMMO Client Patcher tells them to.

Text compiled into the client program or drawn into images is outside what this reaches. We have not yet seen a 4.55 client draw English written this way, so tell us on Discord what yours shows.

Running Without This Site

A bundle runs fully with no connection to oldschoolops.com. Two things reach this site, and neither is needed to play.

The Update Check

Every released server asks this site every ten minutes whether a newer build exists, and shows the answer on your GameCP. It sends the build, the update channel, a per-install id, a hashed hardware and operating system fingerprint, the platform, your public hostname if one is set, the live player count and the uptime. Nothing is downloaded, patched or restarted.

There is no setting that turns it off. It never delays startup, and when this site cannot be reached the server logs one line saying the check is unavailable and that the server is unaffected, then carries on unchanged. UPDATE_URL under [update] in settings.ini points it at a different update service; empty uses ours.

Signing In With oldschoolops.com

Off unless OSO_SERVER_KEY is set under [oso] in settings.ini. Without it, your server keeps its own accounts and never contacts this site to sign anyone in. With it, nobody can sign in while this site is unreachable. See Signing In With oldschoolops.com.

Everything Else

The database is local (SQLite by default), the launcher's updater fetches from your own server, and HTTPS certificates are requested only when TLS_DOMAIN names a public hostname.

What 1.0 Means for an RF Version

An RF version reaches 1.0 when all of these hold:

  • Validation is live. The server's checks on what a client sends are on in normal play, each with its own switch on the Settings page.
  • The Lua SDK is complete. Modules have the events, gates, actions and documentation an operator needs to extend the server without the source.
  • Docker and Linux install. The bundle runs under Docker and installs as a Linux service from its own files.
  • Soak and race clean. The full world runs under a crowd of bots with no errors, leaks or data races.
  • Game data sync. The full workflow for keeping the server's game data and your client's data files in step works end to end.

The version numbers themselves are explained in Updates and Versions.

Something here wrong?

Out of date, incomplete, or assuming something it should not. Documentation errors are bugs, and this one arrives tagged and pointed at this page.

Top xp sources

How xp works
Loading…

Open the full search page