The admin editor
packages/editor is a standalone web app (no game client
involved) for managing everything that lives in the content database. It
talks to the server over plain REST, and edits reach connected players
immediately (see Architecture) — no
server restart, and usually no client reconnect either.
The shell is a single toolbar (Database, Open Live Game, account chip,
Sign Out) over a canvas-first map workspace — maps are the primary view,
since MS6 is a live multiplayer world, not single-player desktop
software with a menu bar and an undo stack. Everything else (Items,
NPCs, Spells, Shops, System, Accounts, access-gated per your
AccessLevel) opens in the Database dialog:
a category rail on the left, the editor for whichever record you picked
on the right.
Access levels
Every account has an AccessLevel (packages/shared/src/enumerations.ts).
The very first account ever registered on a fresh database is
automatically granted Creator, the highest level — that's
your way in on a new install.
| Level | Value | Can do |
|---|---|---|
| None | 0 | Regular player |
| Monitor | 1 | Kick/ban players (in-game admin commands) |
| Mapper | 2 | + Edit maps |
| Developer | 3 | + Edit items, NPCs, spells, shops, server config, accounts |
| Creator | 4 | + Change other accounts' access level |
What's editable
Items
All 15 ItemType variants — weapons, armor, consumables, keys, currency, spell-teaching items, warp items.
NPCs
Stats, behavior, sight radius, loot table, sprite.
Spells
Type, MP cost, level/class requirements, visual effect, includes a live particle-effect preview.
Shops
Trade slots (cost item/qty → reward item/qty), repair flag, join/leave messages.
Maps
The full tile-grid editor — layers, tile attributes, NPC spawn slots, warps, map linking.
Server Config
Game name, map dimensions, seamless-maps toggle, login music.
Accounts
Look up accounts, view characters, adjust access level.
The list → edit pattern
Inside the Database dialog, Items, NPCs, spells, shops, and accounts all follow the same shape: a searchable table (capped at 300 rows with a "refine your search" hint beyond that) that you click a row's Edit link on to open that record's form, with a breadcrumb back to the list. Saving posts the record over REST and shows an inline ✓ confirmation. The map editor (outside the dialog, in the main workspace) is the one exception — it's a bespoke canvas-based tile-grid tool, not a form.
Visual asset pickers
Fields that reference an image — an item's picture, an NPC's sprite
sheet, a spell's icon, a map's parallax background — open a picker
(components/AssetPicker.ts) instead of taking a raw numeric
ID or filename: a searchable grid of thumbnails pulled from
GET /api/content/asset-files/:category, with a "None" tile
and the current selection highlighted. Character sheets render as their
down-facing idle frame rather than the whole walk sheet.
The map editor
Opens directly on a map (no extra click to "enter edit mode"), centered on that map's actual content. The chipset picker on the left drives painting on whichever of the 9 tile layers (or the attribute layer) is selected; right-click erases on the current layer/attribute instead of painting. A Coordinates toggle above the canvas overlays each tile's x,y — handy for finding the exact tile to put in a map's Boot X/Y (or any other coordinate field) — and a live X/Y readout follows the mouse. Zoom (100%–200%, defaulting to 100% on open) is independent of that overlay.
If you're adding a new editor
See New Content Types — the short
version is: copy ItemEditor.ts or ShopEditor.ts
(the two simplest existing examples) as your starting point for the
list/form structure, and add a typed saveX()/getAllX()
pair to packages/editor/src/api.ts.