Point a retail 12.0.7.68974 client at your server. This page is deliberately concrete: it separates what you change on the server from what you change in the client.
You do not edit game data. You only:
Arctium Game Launcher.exe in the install root (beside _retail_)._retail_\WTF\Config.wtf: SET portal "YOUR_SERVER_IP".That’s it. Everything else is server-side.
In bnetserver.conf:
; The address the CLIENT will reach (public IP or LAN IP of the server)
LoginREST.ExternalAddress = YOUR_SERVER_IP
LoginREST.LocalAddress = YOUR_SERVER_IP
LoginREST.Port = 8081
In the auth database, the realm the client sees comes from the realmlist
table (not a realmlist.wtf):
UPDATE realmlist
SET address = 'YOUR_SERVER_IP', localAddress = 'YOUR_SERVER_IP', port = 8085
WHERE id = 1;
Make sure these ports are open to the client: 8081 (REST login), 1119 (bnet), 8085 (world).
Create an account (worldserver console). It must be a Battle.net account, and the name must be an email address — a retail client logs in through Battle.net:
bnetaccount create you@example.com yourpassword
That prints the linked game account it created for you, named <id>#1. Grant GM
rights on that name, not on the email:
bnetaccount listgameaccounts you@example.com
account set gmlevel 1#1 3 -1
Do not use
account createhere. It makes a plain game account with no Battle.net link, which the client cannot log in with. TrinityCore is explicit about it:account createrefuses any name containing@and tells you to use the bnet commands, whilebnetaccount createrequires one.
Or let a script do all of it, including the GM level:
SOAP_USER='1#1' SOAP_PASS='...' scripts/create-account.sh -e you@example.com -p yourpassword -g 3
The client build must equal the server’s world-DB build. A mismatched build
fails at login every time. CLIENT.md covers obtaining the client
and what to do when the live build no longer matches your server — or just run
scripts/setup-client.ps1, which checks the build before downloading and sets
the portal.
Copy Arctium Game Launcher.exe into the install root — beside
_retail_, Data and .build.info, not inside _retail_ next to
Wow.exe. This is the single most common setup mistake.
WoW_Midnight\
├── Data\
├── _retail_\Wow.exe
└── Arctium Game Launcher.exe <- here
Arctium patches the running client in memory so it:
No game file is permanently modified.
Open _retail_\WTF\Config.wtf (note the _retail_ prefix — there is no
Config.wtf at the install root) and add, or edit if it is already present:
SET portal "YOUR_SERVER_IP"
The file is a flat list of SET key "value" lines in no particular order. Add
yours on its own line; leave the graphics settings alone.
Optional, if you want to force locale / skip the launcher update check:
SET textLocale "enUS"
SET audioLocale "enUS"
portalis the only required client edit. It tells the client which Battle.net host to talk to — yourbnetserver.
Run Arctium, not Battle.net.exe. It starts the patched client and shows the
Battle.net login screen pointed at your server.
bnetaccount create.Modern retail login goes through the HTTP REST dev-certificate path (port
8081), not the old realmlist.wtf. 95% of stuck logins are one of these:
| Symptom | Cause | Fix |
|---|---|---|
| Stuck “Connecting” / “Authenticating” | REST endpoint 8081 unreachable, or portal wrong |
Verify LoginREST.ExternalAddress + port 8081 open; check SET portal |
| “Version mismatch” / bounced at login | Client build ≠ 68974 | Reinstall/repin the client to 68974 |
| Realm list empty | realmlist.address wrong or worldserver (8085) down |
Fix the realmlist row; confirm 8085 is listening |
| Certificate/handshake error | Arctium not used, or cert not trusted | Always launch via Arctium |
| In game, but a character has no quests | Data/quest-chain gap | See FIXES.md |
.bot — creature-based companions..pbot — fake-player bots with persistence + combat rotations.See FEATURES.md.