Running Classic Yourself
What is inside the Gate to Heavens Classic release archive, how to start it, and how to get a client connected to your own server.
What Is in the Archive
The archive lives with the client on classic.playgth.com, which is
where this game’s page sends you for it. Unzip it anywhere you have write
access, and avoid Program Files on Windows: the server writes its database and its logs next to
itself, and Windows quietly redirects those writes somewhere you will not find them.
Inside are four folders and one file.
| Folder | What it is |
|---|---|
server/ | The three servers, their config, the game data, and everything they write. Windows and Linux binaries both ship. |
client/ | A complete, playable game client with its own launcher. There is nothing to go and find. |
database-mysql/ | The schema, for the optional MySQL path. You do not need it to start. |
tools/ | gmadmin, which is how you make yourself staff. |
README.md | Half a page: how to start it, what the four folders hold, and a link back to this documentation. Everything else was moved here on purpose, because a manual sealed inside a zip cannot be corrected once it is downloaded. |
Everything the server needs lives inside server/: settings.cfg, logic.cfg, both start
scripts, and the data/, scripts/, worlds/ and articles/ folders. db/ and logs/ appear
in there on the first run. The shared install page draws those files at the
top level of the archive, so if you go looking for settings.cfg up there you will not find it.
Leave server/ and client/ where they are, side by side. The website serves client patch files
out of client/ relative to the folder the server runs from, so moving one of them breaks
patching.
Start It
On Windows, open server\ and double-click start-server.bat. Three windows open: the login
server, the game server and the website.
On Linux:
cd server
sh start-server.sh
That makes the binaries executable and backgrounds all three. Stop them again with
pkill -f 'linux/(login|game|web)server'.
To run them yourself instead, open three terminals inside server\ and start one in each. The
start scripts do nothing clever; they exist to guarantee the working directory, because each
binary looks for settings.cfg and the game data relative to where it is running from rather than
next to the executable.
windows\loginserver.exe
windows\gameserver.exe
windows\webserver.exe -http :80
The same three on Linux, from server/, after a chmod +x linux/*:
./linux/loginserver &
./linux/gameserver &
./linux/webserver -http :80 &
Login listens on UDP 26000, the game on UDP 26001, and the website on :80. Port 80 usually needs administrator or root, and it will fail to start if IIS, Apache or anything else already holds it.
The first start does more work than the ones after it: the databases get created and the schema applied. The console says so as it happens.
The Database
Nothing to install. The first start creates the database files under server/db/, one per
database, from the same schema that ships in database-mysql/. A start that got that far leaves a
.db file per database in there, so an empty server/db/ is worth knowing about: it means the
server stopped before it reached the database, and the FATAL: line further down says why. To go
back to a clean server, stop everything and delete server/db/. It rebuilds on the next start.
MySQL is supported and is what we run in production. If you switch to it later, the server copies the accounts and characters you already have into it on the next start and renames the old files out of the way. The switch itself is on the database page.
Switching needs no credentials of your own. The server/settings.cfg in the archive is already
filled in for a MySQL on the same machine, using the limited user that
database-mysql/00_create_databases.sql creates, and the password in those two files is generated
when the archive is built. So they already agree with each other, and no two downloads share a
password. Load the schema, set DATABASE_PROVIDER mysql, and start the server.
The server applies the rest of the schema itself, so one file is normally enough. If the MySQL user you have cannot create databases, load all four by hand instead:
mysql -u root -p < database-mysql/00_create_databases.sql
mysql -u root -p < database-mysql/01_gommo_accounts.sql
mysql -u root -p < database-mysql/03_gth_game_tables.sql
mysql -u root -p < database-mysql/05_seed_data.sql
Make Yourself Staff
A fresh install has nobody with any powers, on purpose. There is one seeded account,
[email protected] with the password OSOGTH2026!, and it is an ordinary player: that password is
printed in every copy of the archive, so change it or delete the account once you have your own.
Staff levels come from tools\gmadmin.exe (tools/gmadmin on Linux). Run it from the folder you
unzipped and it finds server/settings.cfg by itself, so it reaches the right database on either
backend with nothing to configure.
tools\gmadmin.exe create [email protected] YourName
tools\gmadmin.exe grant [email protected] classicgth 4
tools\gmadmin.exe list
Level 4 is the top of the ladder, and the grant names a game, which is why classicgth appears in
it. The five levels, promoting other people and what to do if you lose every admin account are on
the GM accounts page. What the commands themselves do is on the
GM commands page.
Point the Client at Your Server
Two files in client/data/ decide where the client goes.
server.cfg is the game server address:
MASTER_SERVER_NUMBER 1
MASTER_SERVER_WEBSITE 127.0.0.1
MASTER_SERVER_PORT 26000
MASTER_SERVER_WEBSITE takes an IP address or a hostname, and a hostname is resolved for you.
MASTER_SERVER_PORT is the login port, 26000, not the game port. Leave it at 127.0.0.1 while
you are testing on the same machine.
general.cfg is where the launcher goes. webserver_url is what it signs in against, and
update_url is what it patches from. Both ship pointing at http://127.0.0.1:8080 while
start-server.bat runs the website on :80, so make them agree: either set both keys to
http://127.0.0.1, or start the website on the port they already name by running
windows\webserver.exe -http :8080 from inside server\ instead of using the start script.
Players run client/launcher.exe, not client.exe. It signs in against your website, brings the
client files up to date from it, and starts the game. New logins register themselves on first use,
so nobody has to be created ahead of time and nothing waits on your approval.
Opening It to Other People
Allow inbound UDP 26000 and UDP 26001 through the server’s firewall, and forward them if the machine is behind a router. The website needs TCP 80 as well if you want people to reach it. The servers already listen on every interface, so there is nothing to change on that side.
Every player’s copy of client/data/server.cfg needs your public address in
MASTER_SERVER_WEBSITE, and their general.cfg needs the same address in webserver_url and
update_url. The configuration page covers the settings.cfg side, and the
website page covers certificates and running behind a reverse proxy.
Stopping It Safely
Order matters, and it is the reverse of how they start: game server, then login server, then the website. Stopping the game server first is what saves and disconnects the players who are on; stopping the login server first would leave them connected to a server that is about to go away.
Character saves are transactional and the game server flushes on shutdown, so a clean stop cannot leave a half-written character.
On Windows, close each window or press Ctrl+C in it. On Linux, if you started them with
start-server.sh:
pkill -f gameserver
pkill -f loginserver
pkill -f webserver
If you set them up as systemd services, sudo systemctl stop the three units in that same order.
Updating to a New Version
- Back up first. Not after. See the database page; the schema upgrade on start is one-way.
- Download the new archive and stop the servers, in the order above.
- Replace
server/and itsdatafolder with the new ones, and keep your ownsettings.cfg. That file holds your database credentials and your own settings, and no release will ever contain a copy worth having. - Replace
client/wholesale. That is what your players patch from, so their launchers pick the new files up on their next run without anybody downloading anything by hand. - Start the servers again.
Read the release notes before you start: if a version needs anything beyond this, that is where it will say so.
It Did Not Start
A server window that opens and closes in under a second hit a fatal startup error, and it said so
before it went. The last console line, and the end of server/logs/history.log, is a line beginning
FATAL: that names the cause. Older runs are kept beside it as history.<timestamp>.log.
Three messages account for almost all of them.
The FATAL: line says | What happened | What to do |
|---|---|---|
no settings.cfg found | The server was launched from the wrong folder. Double-clicking an executable in server\windows\ does this every time, because the working directory becomes that folder and there is no settings.cfg in it. | Use start-server.bat, or run the executable from inside server\. |
failed to connect to ... database | On the default database, server/db/ cannot be written: a read-only folder, a directory you do not own, or a network share. On MySQL, it is not running, not reachable, or the credentials are wrong. | The message names what it tried, either the exact file or the user, host, port and database. Keep the database files on a local disk; a network filesystem corrupts them. |
could not load server configuration | settings.cfg is malformed, or the game data is missing. | Compare your settings.cfg against the shipped settings.cfg.example, and confirm server/data is present and was extracted whole. |
For more logging, set DEBUG 1 under [general] in server/settings.cfg and restart. The default
is 0, which logs at info level.
The client keeps its own logs\ folder beside client.exe, separate from the server’s. If the
launcher stalls rather than the server failing, that is where to look, along with whether the
website is running and whether client/data/general.cfg points at it.
When you ask for help, bring server/logs/history.log, the client’s logs\ if the client is
involved, and what you did immediately before it broke. The FATAL: line and a run with DEBUG 1
are usually enough on their own.
If the game starts but the world is empty of monsters, or players cannot get in from outside, the troubleshooting page works through both.