Capabilities

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.

CapabilityWhat it powersSourceIf not implemented
VERIFY_GAME_CREDENTIALSLinking a game account to a master accountDatabase🔴 No player can link an account, so nothing can be delivered to anyone. The server is hidden from players.
LIST_ACCOUNT_CHARACTERSListing an account's charactersDatabase🔴 No delivery target can be chosen. The server is hidden from players.
DELIVER_ITEM_GRANTItem deliveryLive world + database journal🔴 Nothing bought can be handed over. The server is hidden from players.
PLAYER_ONLINE_EVENTResuming a held delivery at loginEnterWorld 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_CATALOGChoosing the item a product, bundle or prize grantsLoaded item data🔴 No item content can be created — there is no raw item-id entry anywhere. Existing content keeps working.
SEARCH_SKILL_CATALOGChoosing the skill a product or bundle grantsLoaded skill dataSkills cannot be added to products or bundles; the Skill option disappears from the builders. Items are unaffected.
DELIVER_SKILL_GRANTSkill deliveryLive world + database journalSkills cannot be sold; the Skill option disappears from the builders even if the skill catalog is searchable. Items are unaffected.
CHARACTER_SERVICESRename and gender changeLive world + database journalThe Character Services module cannot be enabled.
LIST_CHARACTER_SKILLSDeclining a skill the character already knows, before it is paid forLive world + databaseA 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_CHARACTEROffline-character unstuckDatabaseThe Unstuck module cannot be enabled.
LIST_RANKINGSPvP / PK / level leaderboardsDatabaseThe Rankings module cannot be enabled.
CREATE_GAME_ACCOUNTCreating a game account from the portalDatabaseThe self-service account creation module cannot be enabled; players link existing accounts only.
GET_SERVER_STATUSConnector statusConnectionNothing changes: status comes from the connection, so it is left out of the support matrix.
GET_ONLINE_COUNTOnline-player countLive worldPlayer 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:

CodeWhat the player is told
SKILL_ALREADY_KNOWNThe character already had that skill at the same level or higher
CHARACTER_NAME_TAKENThat name is already taken
RESERVED_CHARACTER_NAMEThat name is reserved on this server
INVALID_CHARACTER_NAMEThat name is not allowed on this server
KAMAEL_GENDER_LOCKEDKamael classes are tied to gender
GENDER_UNCHANGEDThe character already had that gender
DELIVERY_EXPIREDIt was not collected in time — your coins were returned
DELIVERY_FAILEDThe 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.

On this page