Connecting a client

AscEmu serves one client version per world server, selected with ASCEMU_VERSION at compile time and ClientVersion in world.conf. How the client finds the server depends on its generation: the old clients read a realm list, the Battle.net clients from WoD on need their login host and certificate patched into the client or a launcher that does it at runtime.

Expansion Build Login How to connect
:classic: 5875 realm list realmlist.wtf
:tbc: 8606 realm list realmlist.wtf
:wotlk: 12340 realm list realmlist.wtf
:cata: 15595 realm list Config.wtf: SET realmList
:mop: 18414 realm list Config.wtf: SET portal
:wod: 21742 Battle.net connection_patcher
:legion: 26972 Battle.net connection_patcher
:bfa: 35662 Battle.net connection_patcher
:shadowlands: 45745 Battle.net Arctium Launcher
:dragonflight: 55664 Battle.net Arctium Launcher
:warwithin: 65299 Battle.net Arctium Launcher
:midnight: 70575 Battle.net Burralis Game Launcher

The world server answers only the client build it was compiled for. With a wrong ClientVersion in world.conf the client logs in but gets no answers: every NPC shows as Unknown and no button works.

realmlist.wtf

Classic, TBC and WotLK read the realm list from realmlist.wtf in the data folder of the client locale, for example Data/enUS/realmlist.wtf (Data/enGB/realmlist.wtf for a European client). Point it to the logonserver:

set realmlist 127.0.0.1

The logonserver answers on port 3724 (RealmListPort in logon.conf), the realm address the client receives afterwards comes from Realm1.Address in world.conf.

Config.wtf

Cata and MoP have no realmlist.wtf any more, the host is a variable in WTF/Config.wtf of the client. Cata reads

SET realmList "127.0.0.1"

and MoP

SET portal "127.0.0.1"

Both still use the classic realm list login of the logonserver.

Connection patcher

WoD, Legion and BfA log in through Battle.net: a TLS connection to the bnetserver whose certificate the client verifies against the keys built into its executable. The connection patcher of the tools (BUILD_TOOLS in CMake) replaces those keys with the ones of your server and writes a patched copy of the client:

connection_patcher <Wow-64.exe> <bnetserver.cert.pem>

The certificate is the one the bnetserver uses (certs/bnetserver.cert.pem, generated on the first start when none exists). The patcher writes Wow_AEPatched.exe next to the original and the signed certificate bundle the client expects. Afterwards set the login host in WTF/Config.wtf:

SET portal "127.0.0.1"

Only Windows clients are supported by the patcher. Clients that are already prepared for private servers (their executable carries the community keys) need no patching, the SET portal line is enough.

Arctium Launcher

The Shadowlands, Dragonflight and The War Within clients cannot be patched on disk, their code is encrypted. Use the original client executable of the build with the Arctium Launcher, which applies the patches at runtime (certificate check, login keys), and set the login host in WTF/Config.wtf:

SET portal "127.0.0.1"

AscEmu signs the world connection with the same keys as the launcher expects, so no further step is needed on the server side.

Burralis Game Launcher

The Midnight client (12.1.5) is started with the Burralis Game Launcher pointed at your logonserver. The launcher needs a TLS certificate that is valid for the Battle.net host name it connects to; a self-signed certificate for 127.0.0.1 is enough for a local server. The portal setting of Config.wtf is handled by the launcher.