# NPC system

NPCs are placed in the world using [Marketplace Hammer](marketplace-hammer.md), a build-mode tool. Once placed, you configure an NPC through its own settings panel — no config file needed for the NPC itself (though you can export one for reuse, see [Saved NPCs](../configs/saved-npcs.md)).

## NPC types

An NPC's **Type** decides what it does, and which profile folder its **Profile** field looks into:

| Type | Profile comes from | See |
|---|---|---|
| `None` | — | No mechanic — a decorative or dialogue-only NPC. |
| `Trader` | Traders | [Traders](../configs/traders.md) |
| `Info` | Server Info | [Server Info](../configs/server-infos.md) |
| `Teleporter` | Teleporters | [Teleporters](../configs/teleporters.md) |
| `Feedback` | — | No config folder — posts player feedback to the Feedback Discord webhook. |
| `Banker` | Bankers | [Bankers](../configs/bankers.md) |
| `Gambler` | Gamblers | [Gamblers](../configs/gamblers.md) |
| `Quests` | Quest Profiles | [Quest Profiles](../configs/quest-profiles.md) |
| `Buffer` | Buffer Profiles | [Buffer Profiles](../configs/buffer-profiles.md) |
| `Transmog` | Transmogrifications | [Transmogrification](../configs/transmogrification.md) |
| `Marketplace` | — | The player-to-player auction NPC — no setup needed, works immediately. |
| `Mail` | — | Opens the mail menu. |

Every NPC also has an optional **Dialogue** field, separate from its Type — any NPC, including `None`, can have a full conversation attached (see [Dialogues](../configs/dialogues.md)).

## Core identity settings

![Main NPC settings panel](../images/screenshots/FYmh7jk.png)

| Setting | What it does |
|---|---|
| Type | One of the types above. |
| Name Override | A custom display name. |
| Profile | Which profile this NPC uses, from the folder matching its Type. |
| Model/Prefab Override | Swaps the NPC's appearance for a different creature/character model — supports the animation-swap trick and randomized pools, see [Prefabs and text markup](../concepts/prefabs-and-assets.md). |
| Dialogue | A dialogue ID from [Dialogues](../configs/dialogues.md). |
| Pin Icon | The map pin shown for this NPC, if any. |
| Visibility Condition | A [condition](../concepts/conditions.md), same syntax as anywhere else it's used. Leave it empty and the NPC is visible to everyone, as before. Set one and the whole NPC — not just a dialogue option — disappears client-side for any player who doesn't currently pass it, re-checked every couple of seconds. In debug mode ([`OverrideDebug`](../setup/server-config.md)), a hidden NPC shows a placeholder marker instead of vanishing outright, so you can still find it while testing. |

## Appearance settings

![Fashion panel](../images/screenshots/9QHD0cX.png)

Set through the NPC's fashion panel: left/right hand items, helmet, chest, legs, cape, hair, hair color, beard, beard color, skin color, model scale, hidden-item toggles, greeting/farewell text and animations, crafting animation, interact sound and animation, text size/height, and periodic idle animation/sound.

Most appearance fields accept a **space-separated list** of options — when you place a [Saved NPC](../configs/saved-npcs.md) template, one of them is picked at random (an even chance for each, first and last included), so a single template can produce visual variety across several placements. The pick is made once, at the moment you place the NPC, and is stored on that NPC — it never re-rolls, not on a reload and not on a restart. There is a catch with placing several copies in a row, see [Known gaps](../reference/known-gaps.md#a-saved-npc-template-rolls-its-random-picks-only-once-per-session). Greeting/farewell text also supports [dynamic placeholders](../concepts/prefabs-and-assets.md#dynamic-text-keyword) like `%playername%`.

Periodic animation and periodic sound make the NPC occasionally play an idle animation or sound on their own — separate from [Random NPC Speech](../configs/random-npc-speech.md), which handles idle *text* barks instead.

### Wearing several items in one slot

Since 10.0.2 the item fields — left/right hand, left/right back (the hidden-item slots), helmet, cape, chest, legs, hair and beard — also take a **comma-separated** list, and *every* entry is equipped at once:

| Field | Example | Result |
|---|---|---|
| Left back item | `SwordIron, ShieldBlackmetal` | Both carried on the NPC's back. |
| Chest | `ArmorRootChest, ArmorTrollLeatherChest` | Both layered on. |
| Hair / beard | `4, 10` / `12, 13` | Both styles worn together. |

Mind the difference between the two list styles: **spaces** mean "pick one at random" (only when placing a Saved NPC template — nothing picks for you in the fashion panel), **commas** mean "wear all of them". You can combine them — put spaces between the alternatives and none inside a group: `4,10 7` is either hairstyles 4 and 10 together, or hairstyle 7.

That matters when the NPC comes from a [Saved NPC](../configs/saved-npcs.md) template: placing one cuts every list at its spaces and keeps a single piece *before* any commas are read, so `SwordIron, ShieldBlackmetal` (note the space) ends up as just one of the two. In a template, write a group with no spaces — `SwordIron,ShieldBlackmetal`. In the fashion panel of an NPC you've already placed there's no random step, so a comma list with spaces after the commas works as written — and a space-separated list of alternatives does not get split into options there, so don't type one.

## Patrol routes

Give an NPC a patrol route two ways:

- **Record it in-game**: while holding Marketplace Hammer, drop waypoints as you walk the route, then confirm — the route is copied for you to paste into a `SetNPCPatrol` command (see [Commands](../concepts/commands.md)).
- **Script it**: use the `SetNPCPatrol` command from a dialogue or quest event to set or change a patrol route on the fly.

## Related

- [Marketplace Hammer](marketplace-hammer.md) — the placement tool.
- [Saved NPCs](../configs/saved-npcs.md) — exporting an NPC setup as a reusable template.
- [Random NPC Speech](../configs/random-npc-speech.md) — idle bark text.
