Admin Commands & Tools
Comprehensive reference covering admin command sets, interface design patterns, and permission systems across major MUD codebases.
1. Admin/Immortal Command Reference
1.1 Player Management Commands
These commands let admins move through the world, move players, observe activity, and directly interact with the game state.
Movement & Teleportation
| Command | Codebase | Syntax | Description |
|---|---|---|---|
goto | Merc/ROM/SMAUG | goto <location|player|mob> | Teleport yourself to any room, player, or mobile. Customizable arrival/departure messages via bamfin/bamfout (Merc) or poofin/poofout (CircleMUD). |
goto | CircleMUD | goto <room_vnum|player|mob> | Same concept, uses poofin/poofout messages. |
teleport | Evennia | tel [<object> =] <target> | Move yourself or any object to a target location. Respects teleport and teleport_here locks. Supports /quiet, /intoexit, /tonone, /loc switches. |
Player Transport
| Command | Codebase | Syntax | Description |
|---|---|---|---|
transfer | Merc/ROM | transfer <player|all> [location] | Move a player (or all players) to your current room, or to a specified location. Level 38+. |
trans | CircleMUD | trans <victim> | Transport a player to your location. |
teleport | CircleMUD | teleport <victim> <location> | Send a player to a specific room. |
Remote Execution
| Command | Codebase | Syntax | Description |
|---|---|---|---|
at | Merc/ROM/CircleMUD | at <location|player|mob> <command> | Execute a command at a remote location without physically going there. Level 37 in Merc. |
force | Merc/ROM | force <player|all> <command> | Compel a player (or all players) to execute a command. Level 39 in Merc. |
force | CircleMUD | force <player|all|room> <command> | Same, also supports forcing everyone in the room. |
force | Evennia | force <object> = <command> | Forces an object to execute a command. Requires perm(spawn) or perm(Builder). |
Body Control
| Command | Codebase | Syntax | Description |
|---|---|---|---|
switch | Merc/ROM/CircleMUD | switch <mobile> | Take control of a mobile’s body. Your own body goes inert. Used by Angels in ROM for quest running. |
return | Merc/ROM/CircleMUD | return | Leave the switched body and return to your own. |
Observation & Stealth
| Command | Codebase | Syntax | Description |
|---|---|---|---|
snoop | Merc/ROM/CircleMUD | snoop <player> | Monitor a player’s session — everything they see and type appears on your terminal prefixed with %. Use snoop with no argument to stop. Level 37 in Merc. |
holylight | Merc/ROM/CircleMUD | holylight | Toggle ability to see invisible objects, hidden characters, and dark rooms. Level 37 in Merc. |
invis / wizinvis | Merc/ROM | invis [level] | Become invisible to players below the specified level. Toggle with no argument. Level 37 in Merc. |
invis | CircleMUD | invis [level] | Same — set invisibility level; characters below that level cannot see you. |
incognito | ROM | incognito [level] | Partial invisibility — your presence is hidden from who and where lists, but you’re still visible in the room. Distinct from full wizinvis. |
nohassle | CircleMUD | nohassle | Toggle prevention of aggressive monster attacks on yourself. |
1.2 Punishment Commands
Commands for disciplining players, restricting access, and enforcing rules.
Communication Restrictions
| Command | Codebase | Syntax | Description |
|---|---|---|---|
mute / silence | Merc | silence <player> | Prevents a player from using channels. Level 38. |
mute | CircleMUD | mute <player> | Silence a player on all communication channels. |
noemote | Merc/SMAUG | noemote <player> | Prevent a player from using the emote command. Level 38. |
notell | Merc/SMAUG | notell <player> | Prevent a player from using tell. Level 38. |
notitle | CircleMUD | notitle <player> | Prevent a player from setting a custom title. |
Access Restrictions
| Command | Codebase | Syntax | Description |
|---|---|---|---|
freeze / thaw | Merc/CircleMUD | freeze <player> / thaw <player> | Completely prevent a player from issuing any commands. Level 39 in Merc. |
deny | Merc | deny <player> | Permanently deny a player access to the MUD. Not reversible in-game in stock Merc. Level 39. |
ban | Merc | ban <site> | Ban an entire site from connecting. Suffix-matched. Level 39. |
allow | Merc | allow <site> | Remove a site ban. Level 39. |
ban | CircleMUD | ban [ALL|NEW|SELECT] <site> | Three ban levels: ALL (no connections), NEW (no new characters), SELECT (flagged characters only). |
unban | CircleMUD | unban <site> | Remove a site ban. |
ban | Evennia | ban [<name or ip> [: reason]] | Ban by account name or IP. Supports wildcard patterns for subnet blocking. Requires perm(ban) or perm(Developer). |
unban | Evennia | unban <banid> | Remove a ban by its ID number. |
wizlock | Merc/CircleMUD | wizlock [level] | Prevent all players below a given level from logging in. Level 39 in Merc. |
Other Punishments
| Command | Codebase | Syntax | Description |
|---|---|---|---|
pardon | Merc/CircleMUD | pardon <player> [killer|thief] | Remove killer or thief flags. Level 38 in Merc. |
slay | Merc | slay <player> | Kill a character instantly, no saving throw. Level 38. |
dc | CircleMUD | dc <descriptor_number> | Disconnect a socket without extracting the player from the game. |
boot | Evennia | boot[/quiet|/sid] <account> [: reason] | Kick an account from the server. /quiet suppresses notification, /sid allows removal by session ID. Requires perm(boot) or perm(Admin). |
purge (player) | CircleMUD | purge <player> | Remove a player entirely from the game world. |
1.3 World Management Commands
Commands for manipulating the game world — loading, creating, resetting, and restoring.
| Command | Codebase | Syntax | Description |
|---|---|---|---|
purge | Merc/ROM/CircleMUD | purge [name] | With no argument: remove all NPCs and objects from the room. With argument: remove a specific mobile or object. Level 38 in Merc. |
load / mload / oload | Merc/ROM | mload <vnum> / oload <vnum> [level] | Create a mobile or object by virtual number. Level 38 in Merc. |
load | CircleMUD | load <mob|obj> <vnum> | Same concept — create mobs or objects in-game. |
clone | ROM | clone <obj|mob> <target> | Duplicate an existing mob or object, preserving strung/set info and spell effects. Must be in same room or in possession. Level 52+. |
peace | Merc/ROM | peace | Stop all fighting in the current room. Level 37 in Merc. |
restore | Merc/ROM/CircleMUD | restore <character> | Fully restore hit points, mana, and movement. Level 38 in Merc. |
advance | Merc/ROM/CircleMUD | advance <player> <level> | Set a player’s level. The only way to create immortals. Level 40 in Merc. |
trust | Merc/ROM | trust <player> <level> | Grant a player access to commands at a given level without changing their actual level. Doesn’t affect combat strength. Level 40 in Merc. |
set | CircleMUD | set [file|player] <character> <field> <value> | Modify character attributes — extremely powerful, one of the most versatile admin commands. |
reroll | CircleMUD | reroll <player> | Regenerate a player’s statistics. |
unaffect | CircleMUD | unaffect <player> | Remove all spell effects from a character. |
zreset | CircleMUD | zreset <zone|*|.> | Force a zone reset. * resets all zones, . resets current zone. |
destroy | Evennia | destroy [obj, obj2, ...] | Permanently delete objects. Supports /force to bypass confirmation. Requires perm(destroy) or perm(Builder). |
spawn | Evennia | spawn <prototype> | Create objects from prototypes. Without arguments, lists available prototypes. |
1.4 Information Commands
Commands for inspecting the state of the game, players, objects, and connections.
| Command | Codebase | Syntax | Description |
|---|---|---|---|
stat | Merc/ROM | mstat|ostat|rstat <target> | Display detailed statistics about a mobile, object, or room. Level 37 in Merc. |
stat | CircleMUD | stat [player|object|mobile|file] <name> | Detailed information about any entity. |
examine | Evennia | examine [<object>[/attrname]] | Show technical details — attributes, locks, typeclasses, and all metadata. Supports examine *<account> for account inspection. Requires perm(examine) or perm(Builder). |
vnum | CircleMUD | vnum <mob|obj> <name> | List virtual numbers for mobs/objects matching a name. |
vstat | CircleMUD | vstat <mob|obj> <vnum> | Display prototype stats by vnum. |
mfind / ofind | Merc | mfind|ofind <name> | Find all mobile or object types matching a name. Level 37. |
mwhere | Merc | mwhere <name> | Show locations of all mobiles matching a name. Level 37. |
find | Evennia | find [<name>] | Search database for objects, displays with #dbref identifiers. |
wizlist | CircleMUD | wizlist | Display the list of immortals. Auto-generated. |
last | CircleMUD | last <player> | Check when a player last logged in, from what site, and their ID number. |
log | Merc | log <player> | Toggle logging of all commands a player enters. Level 37. |
users | Merc/CircleMUD | users [-k|-o|-p|-d|-l|-n|-h|-c] | List active connections with filtering options. Level 39 in Merc. |
show | CircleMUD | show <mode> [arg] | Display game information by mode (zones, player, stats, etc.). |
syslog | CircleMUD | syslog <off|brief|normal|complete> | Control system log verbosity. |
uptime | CircleMUD | uptime | Show server boot time and duration. |
memory | Merc | memory | Report MUD size and memory usage. Level 37. |
slookup | Merc | slookup <skill|spell> | Show internal identifiers for skills/spells. Level 37. |
objects | Evennia | objects [<nr>] | Database statistics and recent object list. |
scripts | Evennia | scripts [key|#dbref] | List and manage running scripts. |
1.5 Building Commands (OLC — Online Creation)
OLC (Online Creation) systems let builders edit areas in real-time while logged in, replacing the old workflow of editing text files and rebooting. The most widely adopted OLC originated from NiMUD (1994) and was ported across the Diku family.
ROM/Merc OLC (Ivan Toledo’s OLC 1.1+)
All OLC commands enter a modal editor — you type a command, then use subcommands to modify fields. done exits.
| Command | Syntax | Description | Subcommands |
|---|---|---|---|
redit | redit [vnum] / redit create <vnum> | Enter room editor or create new room | name, desc, ed (extra desc), sector, room (flags), direction commands (north, south, etc. to set exits), format, show |
medit | medit <vnum> / medit create <vnum> | Enter mobile editor or create new | name, short, long, desc, level, alignment, sex, act (flags), affect, ac, form, part, imm, res, vuln, off, size, hitdice, manadice, damdice, shop, spec, material |
oedit | oedit <vnum> / oedit create <vnum> | Enter object editor or create new | name, short, long, ed, type, extra, wear, v0-v4 (type-specific values), weight, cost, material, addaffect, delaffect |
aedit | aedit [area] | Enter area editor | name, filename, builder, vnum (range), age, reset, security, flags |
mpedit | mpedit <vnum> | Enter mobprog editor | Program triggers and scripting |
asave | asave <world|area|changed|list> | Save areas to disk | world (all), area (current), changed (modified only), list (show what needs saving) |
alist | alist | List all areas with vnums and assigned builders | — |
reset | reset <number> <type> <args> | Configure room resets | mob <vnum> [max], obj <vnum> room, obj <vnum> inside <container_vnum>, delete |
OLC item value reference (for oedit v0-v4):
| Item Type | v0 | v1 | v2 | v3 | v4 |
|---|---|---|---|---|---|
| LIGHT | — | — | hours (-1/999=infinite) | — | — |
| WEAPON | class | dice count | dice type | weapon type | — |
| ARMOR | AC pierce | AC bash | AC slash | AC exotic | — |
| CONTAINER | capacity | flags | key vnum | — | — |
| DRINK | capacity | quantity | liquid type | poisoned | — |
| FOOD | food hours | — | — | poisoned | — |
| SCROLL/POTION/PILL | level | spell1 | spell2 | spell3 | — |
| STAFF/WAND | level | max charges | current charges | spell | — |
SMAUG OLC
SMAUG’s OLC is similar in structure but adds extra commands:
| Command | Syntax | Description |
|---|---|---|
redit | redit <field> <value> | Modify current room (must be standing in it). Includes televnum, teledelay for teleportation rooms. |
medit | medit <vnum> | Edit mobile. Also supports medit create <vnum>. |
oedit | oedit <vnum> | Edit object. Also supports oedit create <vnum>. |
checkvnum | checkvnum | Check available vnum ranges |
rassign / oassign / massign | rassign <start> <end> | Assign vnum ranges for rooms, objects, mobs |
aassign | aassign <area> | Assign yourself to an area for editing |
foldarea | foldarea <filename> | Save an area to disk |
loadarea | loadarea <filename> | Load an area from disk |
bestowarea | bestowarea <player> <area> | Grant a builder editing rights to an area |
makeshop | makeshop <keeper_vnum> | Create a shop with a keeper mob |
shopset | shopset <keeper_vnum> <field> <value> | Configure shop properties |
makerepair | makerepair <keeper_vnum> | Create a repair shop |
makeboard | makeboard <filename> | Create a message board |
bset | bset <board> <field> <value> | Configure board settings |
Additional SMAUG admin commands for content configuration:
| Command | Syntax | Description |
|---|---|---|
sset | sset create <type> '<name>' | Create new skill/spell/ability/herb |
sset | sset <number> <property> <value> | Configure spell/skill properties |
setrace | setrace <race> <property> <value> | Modify racial attributes |
setclass | setclass <class> <property> <value> | Modify class attributes |
makedeity | makedeity <name> | Create a new deity |
setdeity | setdeity <deity> <property> <value> | Configure deity mechanics |
setclan | setclan <clan> <property> <value> | Configure guilds/clans |
morphcreate | morphcreate '<name>' | Create polymorph forms |
setmorph | setmorph <vnum> <property> <value> | Configure morph attributes |
hedit | hedit <topic> | Edit help files |
hset | hset save | Save help file changes |
Evennia Building Commands
Evennia takes a fundamentally different approach — no modal editors, no vnums. Everything is a Python object with a database reference (#dbref). Building commands are standalone rather than entering an editor mode.
| Command | Syntax | Permission | Description |
|---|---|---|---|
create | create[/drop] <name>[;alias][:typeclass] | Builder | Create objects. /drop places in room instead of inventory. |
dig | dig <roomname>[;alias][:typeclass] [= <exit_to>[;alias], <exit_back>[;alias]] | Builder | Create rooms with bidirectional exits. /teleport switch moves you there. |
tunnel | tunnel <direction>[:typeclass] [= <roomname>] | Builder | Quick room creation using cardinal directions. |
open | open <exit>[;alias][:typeclass] [,<return_exit>] = <destination> | Builder | Create exits between existing rooms. |
link | link <object> = <target> | Builder | Connect existing exits to destinations. /twoway for bidirectional. |
copy | copy <original> [= <new_name>][;alias][:location] | Builder | Duplicate objects with properties. |
set | set <obj>/<attr>[:category] = <value> | Builder | Set attributes on objects. Supports nested data structures and Python primitives. |
desc | desc [<obj> =] <description> | Builder | Set descriptions. /edit opens line editor. |
name | name <obj> = <newname>;alias1;alias2 | Builder | Rename objects and set aliases. |
tag | tag[/del] <obj> [= <tag>[:<category>]] | Builder | Manage tags for grouping and searching. |
typeclass | typeclass <object> [= <path>] | Builder | View or change an object’s typeclass. /reset clears attributes. |
lock | lock <object> [= <lockstring>] | Builder | Set access control rules. Uses function-based syntax. |
wipe | wipe <object>[/<attr>] | Builder | Clear attributes from objects. |
script | script <object> = <python.path> | Builder | Attach timed scripts to objects. |
spawn | spawn <prototype> | Builder | Create objects from prototype templates. |
teleport | tel [<object> =] <target> | Builder | Move objects between locations. |
destroy | destroy [obj, obj2, ...] | Builder | Delete objects permanently. |
find | find <name> | Builder | Search database for objects by name or dbref. |
examine | examine [<object>[/attr]] | Builder | Show all technical details about an object. |
objects | objects [<nr>] | Builder | Database statistics and recent object list. |
scripts | scripts [key|#dbref] | Builder | List and manage running scripts. |
cmdsets | cmdsets <obj> | Builder | Display command sets on objects. |
cpattr | cpattr <obj>/<attr> = <obj2>/<attr2> | Builder | Copy attributes between objects. |
sethelp | sethelp <topic> = <text> | Builder | Create help entries. |
1.6 Cross-Codebase Command Comparison
| Function | Merc/ROM | CircleMUD | SMAUG | Evennia |
|---|---|---|---|---|
| Teleport self | goto | goto | goto | tel (self) |
| Move player | transfer | trans / teleport | transfer | tel <player> = <dest> |
| Execute remotely | at | at | at | — (use force) |
| Force action | force | force | force | force |
| Watch player | snoop | snoop | snoop | — (custom) |
| Admin invisibility | invis | invis | wizinvis / incognito | — (custom) |
| See hidden | holylight | holylight | holylight | — (superuser bypass) |
| Load mob/obj | mload / oload | load | mload / oload | spawn / create |
| Delete entities | purge | purge | purge | destroy |
| Inspect | mstat / ostat / rstat | stat | stat | examine |
| Ban site | ban | ban | ban | ban |
| Freeze player | freeze | freeze | freeze | — (custom) |
| Mute player | silence | mute | silence | — (custom lock) |
| Set level | advance | advance | advance | perm |
| Edit rooms | redit (OLC) | — (offline) | redit | dig / set |
| Edit mobs | medit (OLC) | — (offline) | medit | create + set |
| Edit objects | oedit (OLC) | — (offline) | oedit | create + set |
| Admin channel | immtalk (:) | wiznet (;) | immtalk | channel system |
| Broadcast | echo | echo / gecho / send | echo | wall / emit |
2. Admin Interface Design
2.1 Wiz Commands vs Player Commands
In traditional MUDs, admin commands and player commands exist in the same text interface but are gated by level. The separation is purely logical, not visual:
- Same input line: Admins type commands into the same prompt as players. There’s no separate admin console.
- Level gating: Each command has a minimum level. The
wizhelpcommand shows only commands available at your current level. - Same parser: The command interpreter checks your level against the command table before executing.
In Merc/ROM, the command table in interp.c defines each command with a minimum level:
{ "goto", do_goto, POS_DEAD, L_HER, LOG_NORMAL, 1 },
{ "transfer", do_transfer, POS_DEAD, L_APP, LOG_ALWAYS, 1 },
In CircleMUD, commands in interpreter.c use level constants:
{ "advance", "advance", POS_DEAD, do_advance, LVL_IMPL, 0 },
{ "at", "at", POS_DEAD, do_at, LVL_IMMORT, 0 },
{ "ban", "ban", POS_DEAD, do_ban, LVL_GRGOD, 0 },
Evennia’s approach is different: commands are Python classes organized into command sets. Admin commands live in evennia.commands.default.admin and building commands in evennia.commands.default.building. Each command class declares its own lock:
class CmdBoot(MuxCommand):
key = "boot"
locks = "cmd:perm(boot) or perm(Admin)"
2.2 Admin-Only Channels
Every major codebase provides dedicated communication channels that only immortals can see.
Merc/ROM: immtalk (shortcut :)
The core immortal chat channel. All immortals level 36+ can hear and speak on it.
: Hey, anyone seen suspicious activity from Trogdor?
[Gandalf]: Hey, anyone seen suspicious activity from Trogdor?
ROM: wiznet (shortcut ;)
ROM’s wiznet is more than a chat channel — it’s an information service that broadcasts game events to immortals. You can toggle categories:
wiznet — show current wiznet status
wiznet on — enable wiznet
wiznet off — disable wiznet
wiznet <message> — send a message on wiznet
; <message> — shortcut
Wiznet event categories (toggleable per-immortal):
| Flag | Events Reported |
|---|---|
deaths | Player deaths |
logins | Player connects/disconnects |
newbies | New character creation |
snoops | When someone snoops another player |
ticks | Game tick events |
resets | Area resets |
penalties | Bans, freezes, denies |
saccing | Equipment sacrifice |
levels | Level gains |
switches | Body switches |
bugs | Bug/typo/idea submissions |
secure | Login failures, site bans triggered |
links | Link dead/reconnect events |
load | Object/mob loading |
Each immortal customizes their wiznet to see only relevant events:
wiznet +deaths +logins -ticks
CircleMUD: wiznet (shortcut ;)
CircleMUD’s wiznet operates similarly:
; [@|+|-|#] [text]
; message— send to all immortals; @— toggle wiznet on/off; +/; -— toggle specific categories
The nowiz command also toggles wiznet visibility.
SMAUG: immtalk
SMAUG uses immtalk like Merc, plus adds specialized channels at higher levels. The wartalk channel exists for deity+ discussions.
Evennia: Channel System
Evennia handles admin channels through its general channel infrastructure:
channel/create staffchat;staff = Staff-only discussion channel
Channels are controlled via three lock types:
- listen: who can subscribe and see messages
- send: who can post
- control: who can manage the channel (boot users, set bans)
Default system channels:
- MudInfo: Server announcements (restarts, errors)
- ConnectInfo: Player connection/disconnection notifications (optional)
Custom admin channels are created with appropriate locks:
lock staffchat = listen:perm(Admin);send:perm(Admin);control:perm(Developer)
2.3 Snooping — Watching Player I/O
Snooping lets an admin see everything a player sees and types in real-time.
Technical implementation (Merc/ROM/CircleMUD):
- Everything sent to the snooped player’s output buffer is also sent to the snooper, prefixed with
% - Everything the snooped player types is also shown to the snooper
- Only one snoop target at a time per admin
- Higher-level immortals can snoop lower-level ones; you cannot snoop someone of equal or higher level
- Snooping is typically logged (ROM’s wiznet reports it under the
snoopsflag)
Ethical frameworks vary by MUD:
- Restrictive model: Some MUDs implement a
snoopableflag that players control. Default is off. Admins can override but must file a report justifying why. - Open model: Admins can snoop freely but are expected to treat observed private communications (tells, etc.) as confidential.
- Policy model: Most MUDs state snoop should only be used “for disciplinary purposes” when cheating or illegal behavior is suspected. Admins who abuse snoop face demotion.
Evennia: No built-in snoop command. Can be implemented as a custom command that intercepts the msg() method on the target, forwarding output to the snooper. The lock system provides the access control framework.
2.4 Player Monitoring and Statistics
Beyond snooping, admins have several passive monitoring tools:
| Tool | What It Shows |
|---|---|
users / sockets | All connected players: name, host, idle time, connection state |
last | Last login time and site for a given player |
log | Toggle command logging for a specific player (writes to file) |
wiznet events | Real-time stream of deaths, logins, level gains, penalties |
stat / examine | Full character sheet: stats, equipment, affects, location, flags |
who (imm version) | Admin who shows player levels, sites, and flags invisible to mortals |
2.5 How Evennia Handles Admin Interfaces — The Django Admin Panel
Evennia is unique among MUD engines in providing a web-based admin interface alongside the traditional in-game commands.
Access: http://localhost:4001/admin (default), or the “Admin” link in the web client header.
Capabilities:
- Browse, search, create, edit, and delete all database objects (rooms, characters, exits, scripts, accounts)
- View and modify Attributes and Tags on any object
- Manage account permissions and staff status
- Link accounts to characters (especially important in
MULTISESSION_MODE0/1) - View connection history and session data
- Create rooms, exits, and set descriptions through form fields
Access control:
- Requires
Staff statusflag on the Account - Only Superusers can grant staff status
- The Django admin permission system is separate from in-game permissions (Builder, Admin, Developer)
Relationship to in-game commands: Almost everything possible through the web admin can also be done with in-game commands. The web admin is an alternative interface, not a replacement. It’s particularly useful for:
- Bulk operations (editing many objects at once)
- Non-technical staff who prefer GUIs
- Remote administration without a MUD client
- Debugging (direct database inspection)
Backend code lives in evennia/web/admin/ with admin classes like ObjectAdmin, AccountAdmin, etc. The admin site configuration is in evennia/web/utils/adminsite.py.
2.6 How Modern Engines Separate Admin from Player UIs
| Engine | Approach |
|---|---|
| Traditional (Diku family) | Single text interface, commands gated by level. No separation at all — just “you can type this, they can’t.” |
| Evennia | Dual interface: in-game text commands (gated by permissions/locks) + Django web admin panel (gated by staff flag). Both modify the same database. |
| Ranvier | Node.js engine with clean command separation in code. Admin commands are in separate modules. No built-in web admin. |
| Custom modern MUDs | Some implement dedicated admin web dashboards, REST APIs for remote management, or Discord bot integration for monitoring. |
The general trend: modern engines provide both in-game and out-of-game admin interfaces, while traditional codebases rely entirely on the in-game command line.
3. Trust Levels and Permission Systems
3.1 Merc/ROM Trust System
ROM (and its ancestor Merc) uses a numeric level system where immortal levels start above the mortal maximum and each level unlocks additional commands.
Merc level structure (stock):
| Level | Title | Key Commands Unlocked |
|---|---|---|
| 1-35 | Mortal | Player commands only |
| 36 | Immortal | immtalk, wizhelp |
| 37 | Hero | goto, bamfin/bamfout, holylight, invis, stat (mstat/ostat/rstat), mfind/ofind, mwhere, peace, switch/return, snoop, log, at, echo/recho, memory, slookup |
| 38 | Demi-God | mload/oload, mset/oset/rset/sset, noemote, notell, silence, purge, restore, slay, transfer, pardon |
| 39 | God | ban/allow, deny, disconnect, freeze, force, reboot, shutdown, wizlock, users |
| 40 | Implementor | advance, trust |
ROM additions (levels 52-60):
| Level | Title | Key Additions |
|---|---|---|
| 50 | Avatar/Hero | Mortal maximum |
| 52-54 | Angel | clone, quest running via switch only |
| 55-56 | Deity | Reimbursements (limited to 10 items), quest running |
| 57-59 | God | Rule enforcement: notell, deny, purge, freeze, ban |
| 60 | Implementor | Full access to everything |
The trust command: ROM’s most elegant admin tool. It lets you grant a player command access at a specific level without changing their actual level. A level 52 Angel given trust 57 can use God-level commands without gaining God-level combat stats or being listed as a God. Trust of 0 resets to natural level.
3.2 SMAUG Level Hierarchy
SMAUG extends the Merc hierarchy to 65 levels with a much more granular immortal tier:
| Level | Constant | Title |
|---|---|---|
| 1-49 | — | Mortal |
| 50 | LEVEL_AVATAR / LEVEL_HERO | Avatar |
| 51 | LEVEL_NEOPHYTE | Neophyte |
| 52 | LEVEL_ACOLYTE | Acolyte |
| 53 | LEVEL_CREATOR | Creator |
| 54 | LEVEL_SAVIOR | Savior |
| 55 | LEVEL_DEMI | Demi God |
| 56 | LEVEL_TRUEIMM | True Immortal |
| 57 | LEVEL_LESSER | Lesser God |
| 58 | LEVEL_GOD | God |
| 59 | LEVEL_GREATER | Greater God |
| 60 | LEVEL_ASCENDANT | Ascendant |
| 61 | LEVEL_SUB_IMPLEM | Sub-Implementor |
| 62 | LEVEL_IMPLEMENTOR | Implementor |
| 63 | LEVEL_ETERNAL | Eternal |
| 64 | LEVEL_INFINITE | Infinite |
| 65 | LEVEL_SUPREME | Supreme Entity |
Each level gates specific commands. The first immortal is created by editing a player file directly (changing the Level field to 65) or using the included “Admin” pfile (password: admin).
SMAUG also adds per-command level gating: admins can restrict which immortal levels can use which commands, and the bestowarea command grants building rights to specific areas without granting broader powers.
3.3 CircleMUD Privilege Levels
CircleMUD uses four immortal tiers defined as constants in structs.h:
| Constant | Default Level | Title | Key Commands |
|---|---|---|---|
LVL_IMMORT | 31 | Immortal | goto, at, invis, holylight, stat, snoop, switch, load, purge, restore, echo, send, wiznet |
LVL_GOD | 32 | God | force, freeze/thaw, mute, set, dc, reboot, shutdown |
LVL_GRGOD | 33 | Greater God | ban/unban, wizlock, syslog, users |
LVL_IMPL | 34 | Implementor | advance, full access to set on any field, shutdown die |
Key design principles:
- The first character to log in to a fresh MUD is automatically made
LVL_IMPL - All other immortals are created via
advancefrom the implementor - The level constants can be adjusted by modifying
structs.hand recompiling, allowing MUDs to add more granular tiers - Commands are gated by setting the minimum level in the
cmd_info[]array ininterpreter.c - Auto-generated
wizlistandimmlistfiles are maintained by theautowizutility
CircleMUD’s set command is particularly powerful — it can modify almost any player attribute:
set <player> level 31 — change level
set <player> gold 10000 — set gold
set <player> str 18 — set strength
set <player> title the Mighty — set title
set file <player> ... — modify offline players
3.4 Evennia’s Permission and Lock System
Evennia replaces numeric levels with a string-based permission hierarchy combined with a flexible lock system. This is the most modern and granular approach among the engines covered here.
Permission Hierarchy
Six default levels (from lowest to highest):
| Permission | Purpose | Default Access |
|---|---|---|
Guest | Temporary accounts | Only if GUEST_ENABLED=True |
Player | Standard player | Default for new accounts (set by PERMISSION_ACCOUNT_DEFAULT) |
Helper | Trusted player | Can edit help files |
Builder | World builder | Can use all building commands (create, dig, spawn, examine, etc.) |
Admin | Administrator | Can manage accounts, boot, wall, change passwords |
Developer | Full access | Can set permissions, ban/unban, functions like superuser but affected by locks |
Hierarchy is automatic: having Admin permission automatically passes any lock checking for Builder, Helper, or Player.
Assignment:
perm/account Tommy = Builder — grant Builder permission
perm/account/del Tommy = Builder — revoke it
perm *Tommy = Builder — asterisk syntax for accounts
The perm command is Developer-level and cannot be used to escalate beyond your own level.
The Lock System
Locks are the real power of Evennia’s access control. Every entity (objects, commands, scripts, accounts, channels) can have locks that define who can interact with it and how.
Lock string syntax:
access_type: [NOT] lockfunc1([args]) [AND|OR] [NOT] lockfunc2([args])
Multiple access types are separated by semicolons:
delete:id(34); edit:all(); get:not attr(very_weak) or perm(Admin)
Common access types:
| Access Type | Applies To | Controls |
|---|---|---|
control | Objects | Ownership and modification rights |
examine | Objects | Who can inspect details |
edit | Objects | Who can modify |
delete | Objects | Who can destroy |
get | Objects | Who can pick up |
traverse | Exits | Who can pass through |
cmd | Commands | Who can invoke the command |
puppet | Characters | Who can control the character |
listen | Channels | Who can subscribe |
send | Channels | Who can post messages |
boot | Accounts | Who can kick users |
Built-in lock functions:
| Function | Description |
|---|---|
true() / all() | Always grants access |
false() / none() | Always denies |
perm(permission) | Check hierarchical permission |
perm_above(permission) | Require strictly higher permission |
pperm(permission) | Check Account permissions only (prevents puppet escalation) |
id(dbref) / dbref(num) | Match specific object ID |
attr(attrname[, value]) | Check attributes |
attr_gt() / attr_ge() / attr_lt() | Attribute value comparisons |
tag(tagkey[, category]) | Check tags |
holds(objid) | Check inventory |
inside() | Check location |
serversetting(name, value) | Check server config |
In code:
# Checking access
if not obj.access(caller, 'delete'):
caller.msg("You can't delete that.")
# Setting locks
obj.locks.add("get:attr_gt(strength, 50)")
obj.locks.add("control:id(34); examine:perm(Builders)")
# Arbitrary lock checks
if not caller.locks.check_lockstring(caller, "dummy:perm(Admin)"):
caller.msg("Admin access required.")
Quelling
The quell command lets staff temporarily drop to their character’s permission level, useful for testing what players experience. Superusers can use this to test whether locks are working correctly.
Per-Command Access Control
Every Evennia command class defines its own lock:
class CmdBan(MuxCommand):
key = "ban"
locks = "cmd:perm(ban) or perm(Developer)"
help_category = "Admin"
This means access control is per-command rather than per-level, and custom permissions can be created for fine-grained control:
# A custom command only for guild leaders
class CmdGuildPromote(MuxCommand):
key = "guildpromote"
locks = "cmd:tag(guild_leader, roles)"
3.5 Builder vs Admin vs Implementor — Access Patterns
The distinction between builder, admin, and implementor access is consistent across codebases despite different implementation details:
| Role | Can Do | Cannot Do | Typical Level |
|---|---|---|---|
| Builder | Create/edit rooms, mobs, objects, help files, area resets | Modify players, ban/freeze, access player data, change game config | Merc 37, CircleMUD 31 (LVL_IMMORT), SMAUG 51-53, Evennia Builder |
| Admin | Everything builders can + player management, punishment, snoop, monitoring, ban/freeze | Modify the game engine, set implementor-level fields, advance to implementor | Merc 38-39, CircleMUD 32-33, SMAUG 55-60, Evennia Admin |
| Implementor | Everything — advance players, trust, shutdown, set any field, unrestricted access | Nothing is off-limits | Merc 40, CircleMUD 34, SMAUG 62-65, Evennia Developer / Superuser |
Key distinction in ROM/Merc: The trust command allows precise access control without level promotion. A builder trusted to level 39 can use God commands without being a God. This is more flexible than CircleMUD’s rigid four-tier system but less granular than Evennia’s per-command locks.
Key distinction in Evennia: The Superuser flag bypasses all locks entirely. This is separate from the Developer permission. Superusers can’t properly test locks because they always pass — hence the quell command.
Sources
- CircleMUD Wizard Commands (wizhelp.txt)
- CircleMUD Administrator’s Manual
- Merc MUD help.are (command reference)
- ROM 2.4 QuickMUD help (rom.are)
- ROM 2.4 OLC help (olc.hlp)
- SMAUG Documentation (SMAUGDOC.txt)
- SMAUG Level Hierarchy (forum)
- SMAUG GitHub Repository
- SmaugMuds Forum — First Immortal
- Evennia — Permissions
- Evennia — Locks
- Evennia — Channels
- Evennia — Web Admin
- Evennia — Admin Commands API
- Evennia — Building Commands API
- Evennia — Building Quickstart
- DikuMUD Wiki — Wizarding 101
- MUD Wiki — Online Creation
- SWmud Snooping Rules
- LIMA Mudlib Privacy Docs
- CircleMUD Adding Levels WTFAQ