Capabilities
Protocol capabilities and their GameBridge requirements
The handshake advertises the functions implemented by the installed bridge. Forgeport uses this list to decide what the portal can offer.
A capability is not a setting. It is either implemented in the bridge or it
isn't, and Admin → Game Servers reports it under Game server support as
Active or not implemented. What the owner chooses to show players is a
separate list of player modules.
| Capability | What it powers | Source | If not implemented |
|---|---|---|---|
VERIFY_GAME_CREDENTIALS | Linking a game account to a master account | Database | 🔴 No player can link an account, so nothing can be delivered to anyone. The server is hidden from players. |
LIST_ACCOUNT_CHARACTERS | Listing an account's characters | Database | 🔴 No delivery target can be chosen. The server is hidden from players. |
DELIVER_ITEM_GRANT | Item delivery | Live world + database journal | 🔴 Nothing bought can be handed over. The server is hidden from players. |
PLAYER_ONLINE_EVENT | Resuming a held delivery at login | EnterWorld hook | 🔴 A delivery held for an offline character never resumes. The server is hidden from players — unless it is an L2Off server, which holds nothing. |
SEARCH_GAME_CATALOG | Choosing the item a product, bundle or prize grants | Loaded item data | 🔴 No item content can be created — there is no raw item-id entry anywhere. Existing content keeps working. |
SEARCH_SKILL_CATALOG | Choosing the skill a product or bundle grants | Loaded skill data | Skills cannot be added to products or bundles; the Skill option disappears from the builders. Items are unaffected. |
DELIVER_SKILL_GRANT | Skill delivery | Live world + database journal | Skills cannot be sold; the Skill option disappears from the builders even if the skill catalog is searchable. Items are unaffected. |
CHARACTER_SERVICES | Rename and gender change | Live world + database journal | The Character Services module cannot be enabled. |
LIST_CHARACTER_SKILLS | Declining a skill the character already knows, before it is paid for | Live world + database | A skill the character already holds is still sold; the delivery then refuses it and the coins come back — on L2J at once, on L2Off when the extender settles the job. This capability declines the sale before the player pays at all. |
UNSTUCK_CHARACTER | Offline-character unstuck | Database | The Unstuck module cannot be enabled. |
LIST_RANKINGS | PvP / PK / level leaderboards | Database | The Rankings module cannot be enabled. |
CREATE_GAME_ACCOUNT | Creating a game account from the portal | Database | The self-service account creation module cannot be enabled; players link existing accounts only. |
GET_SERVER_STATUS | Connector status | Connection | Nothing changes: status comes from the connection, so it is left out of the support matrix. |
GET_ONLINE_COUNT | Online-player count | Live world | Player counts are not shown. Nothing else changes. |
For database-only methods, the bridge may query through the pack's existing connection pool. Live-world methods must run in the game server process.
An advertised capability is a claim you have to verify
Advertising a capability tells Forgeport it may sell against it. Nothing on the platform can check whether the claim holds: a connector is wired to one pack's schema, one revision, one set of customisations, and from the outside a method writing to the wrong place answers exactly like one that works.
Connector check is a smoke test, not proof. It confirms the connector answers and the command routes; it cannot confirm a player received anything.
So before a portal takes real money, exercise every advertised capability once end to end and confirm the outcome in the game client. This matters most on L2Off packs, where delivery goes through a queue an extender has to collect — an uncollected queue is indistinguishable from a working one until a player asks where their item is.
The five required capabilities
VERIFY_GAME_CREDENTIALS, LIST_ACCOUNT_CHARACTERS, DELIVER_ITEM_GRANT,
PLAYER_ONLINE_EVENT and SEARCH_GAME_CATALOG are required: without any one
of them the portal cannot complete its core loop — link an account, pick a
character, sell something, deliver it. Admin → Game Servers flags a
connected bridge that is missing one.
The first four are also reached by player traffic, so a server missing one is
hidden from players entirely rather than showing modules that fail on use.
SEARCH_GAME_CATALOG is only used while creating content, so losing it stops
new item content from being authored but leaves the portal running.
PLAYER_ONLINE_EVENT is required of L2J only. An L2Off
server queues a grant instead of holding it, so no command
ever waits for a login and there is nothing for the event to resume.
Advertise only completed capabilities:
@Override
public String[] capabilities()
{
return new String[]
{
"GET_SERVER_STATUS",
"GET_ONLINE_COUNT",
"LIST_ACCOUNT_CHARACTERS"
};
}Refusal codes
A REFUSED outcome gives the player their coins back whatever code comes with it — that is decided
by the outcome, not by the text. The code decides only which sentence they read in their order
history, and one Forgeport does not know falls back to "The game server declined this — your coins
were returned".
Use these spellings and the player gets the specific answer:
| Code | What the player is told |
|---|---|
SKILL_ALREADY_KNOWN | The character already had that skill at the same level or higher |
CHARACTER_NAME_TAKEN | That name is already taken |
RESERVED_CHARACTER_NAME | That name is reserved on this server |
INVALID_CHARACTER_NAME | That name is not allowed on this server |
KAMAEL_GENDER_LOCKED | Kamael classes are tied to gender |
GENDER_UNCHANGED | The character already had that gender |
DELIVERY_EXPIRED | It was not collected in time — your coins were returned |
DELIVERY_FAILED | The game server could not apply this — your coins were returned |
Anything else is yours to invent — it is recorded, shown to you, and the player reads the generic line. Adding one to this table is a change here, not a protocol change.