Configure the L2Off connector
Adapt the generated portal.toml to your SQL Server pack
portal.toml is the complete connector configuration. It is required and must
sit beside the .mjs file. The generated profile is a retail High Five starting
point; it is not a claim that every L2Off schema is identical.
File layout
Core sections
| Section | What you configure |
|---|---|
[portal] | Generated gateway URL, token, enabled state, heartbeat |
[pack] | Free-text pack name and chronicle shown in Admin |
[database.world] | SQL Server connection for characters, world data, and delivery queue |
[database.account] | Optional second connection when account tables live elsewhere |
[account] | Password format, ANSI codepage, and optional hAuthD MD5 key |
[queries] | Account, character, online, rankings, clan, siege, and boss SQL |
[catalog] | Paths to the item and skill scripts loaded by the server |
[delivery.*] | Queue statements and when each operation can reach a character |
[queue] | Result polling interval and expiry for abandoned jobs |
The token prefix identifies the game server. Do not copy a profile from another server, and do not edit the generated token by hand.
Database permissions
Grant only what enabled sections use:
SELECTfor account, character, online, ranking, clan, siege, boss, and Premium-status queries;INSERTfor account creation and delivery queue statements;UPDATEfor queue reporting, Premium delivery, and enabled services;CREATE,SELECT,INSERT, andUPDATEfor the connector'sportal_grant_journalwhere journaled SQL requires it;DELETEonly when a configured expiry path removes abandoned queue rows.
Test with the same SQL login the connector uses.
Parameters are mandatory
The connector binds names such as @account, @characterId, @itemId,
@count, @commandId, and @limit. It rejects a query that omits a required
parameter because valid SQL without the account filter could expose every
character.
Queries must alias their result columns to the names described on the relevant feature page. The connector validates rows before returning them.
Delivery windows
Every [delivery.*] section declares when its statement reaches the player:
window | Use when the configured path works |
|---|---|
both | whether the character is online or offline, such as an extender queue |
online | only against a live character |
offline | only while the character is logged out |
Forgeport filters targets and products using this value. A product with grants whose windows never overlap cannot be sold on this server.
The wrong window can report success without delivery
The SQL may run successfully while the game ignores or overwrites the result. Set the window from observed pack behavior, then test both player states.
Optional custom bridge
If the SQL profile cannot express a pack behavior, place bridge.mjs beside
portal.toml. It must default-export the connector's GameBridge contract and
takes over the profile-backed bridge completely. This is an advanced explicit
override; a missing or misnamed file fails at startup.
Verify
- Start the connector from the directory containing both files.
- Confirm the startup log names no profile validation error.
- Confirm the server shows Connected.
- Run Connector check.
- Verify each enabled write in the game client, not only in SQL Server.