GameMaster.xml & CtlCode

Making someone a Game Master involves two independent switches. They do different things, neither implies the other, and mixing them up is the usual cause of "my GM has no commands" or "my GM cannot use skills".

SwitchWhereWhat it grants
Level in GameMaster.xmlConfig file, GameServerPermission to run slash commands
CtlCode on the character rowCharacter table, databaseIn-game GM status: aura, monster immunity, trade unlock, name colour

File Location#

Data/Util/GameMaster.xml

Loaded at GameServer startup. /reload util reloads it without a restart, and the new GM list applies at once, even to characters already online. With no GM set up yet, use reload.util in the Server Manager's Commands tab (or the GameServer window's Reload menu) instead.

Schema#

<GameMasterList>
    <GameMaster Account="admin" Character="Qubit_ADM" Level="32" />
</GameMasterList>
AttributeTypeEffect
Accountstring, max 10 charsAccount name as stored in MEMB_INFO. Must match the character's owner
Characterstring, max 10 charsCharacter name under that account
Levelbyte (0-255)GM command level. Higher = more privilege

Entries are keyed internally by Character name - listing the same character twice keeps only the first row. An entry whose Account or Character exceeds 10 characters is skipped with a red log line instead of loading.

What Level actually means#

Level is an arbitrary number with no hard-coded tiers. The only rule the GameServer applies is:

the character's stored Level must be greater than or equal to the GameMaster= attribute of the command being run (Command.xml).

The value 32 in the shipped file is a convention, not a bitmask, and has nothing to do with CtlCode = 32 despite looking identical.

LevelTypical role
0Not a GM - entry is effectively disabled
1Event host / helper commands (all built-in event commands gate on >= 1)
32Full admin - the level used by the stock command gates in Command.xml

Commands whose GameMaster= is 0 or missing are available to every player.

Character.CtlCode#

Character.CtlCode is a tinyint bitmask column, default 0. The DataServer only ever reads it (the single writer is the WZ_DesblocAccount stored procedure, which clears CtlCode = 1 once a block expires), so it is safe to edit by hand or with the AXIOM Editor. It is read when the character enters the game - relog to apply.

ValueNameEffect
0NormalOrdinary player
1Character blockedGameServer drops the connection when the character enters. Character select shows it as blocked. Auto-cleared by WZ_DesblocAccount when bloc_expire passes
2Item blockCannot pick up, drop or move items (inventory, trade, warehouse). Character select warns about it
4For TVClient-only spectator camera mode
8Observer GMGameServer Authority = 2: monsters ignore the character. Client marks it a non-attacking GM - all attacks and all targeted skills are refused client-side
16Account item blockSame restriction as 2
32GMGameServer Authority = 32: GM aura effect, GM ring support, monsters ignore the character, trade-block bypass, immunity to some player skills, hidden from viewport while invisible. Attacks and skills work normally
128Manager move charClient-only marker in the character info balloon

Bits combine, but the two GM bits do not: Authority is assigned, not accumulated, and 32 wins over 8 when both are set.

The Two Switches Together#

GameMaster.xmlCtlCodeResult
Not listed0Ordinary player
Level="32"0All slash commands work. No GM aura, no monster immunity, no trade unlock - looks and plays like a normal character
Not listed32GM status, aura and immunities - but no slash command with GameMaster>=1 works. Entering the game registers the character at GM level 0
Level="32"32Full GM. This is the correct setup
Level="32"8Commands work, GM status is the observer kind - cannot attack or cast

Cross-File Dependencies#

AttributeRelated in
AccountMust exist in the JoinServer / DataServer MEMB_INFO table
CharacterMust belong to that account
Per-command GM gateCommand.xml GameMaster= attribute
Command tuning and cooldownsCommand.dat
Name-creation word filterDataServer BadSyntax.txt

Common Issues#

  • GM cannot use any skills or attack - CtlCode is 8 (or 4). Set it to 32 and relog
  • GM has no commands - only CtlCode was set. Commands come exclusively from GameMaster.xml; add the account/character pair and run reload.util in the Server Manager (or /reload util as another GM)
  • GM has commands but no aura/immunity - only GameMaster.xml was set. Set CtlCode = 32 on the character row and relog
  • Command still denied after editing the XML - Level is below the command's GameMaster= value, the Account does not match the character's real owner, or the file was not reloaded yet. Run /reload util (or reload.util in the Server Manager)
  • Character cannot log in at all - CtlCode bit 1 is set
  • Character cannot touch items - CtlCode bit 2 or 16 is set
  • Duplicate character names - only the first entry for a given character name is stored, even across accounts
  • Test GMs shipped to production - v1.0.7 ships an empty GameMasterList. If you inherited an older file, strip its stock admin / test rows before release

Last updated October 1, 2026