Placed NPCs & the Adventurer's Guide

Where characters stand, which worlds they reach, and what pressing F opens

Overview

Every character this mod places in the world - the Adventurer's Guide, quest givers, board attendants, anything a content pack stands somewhere - is described by one placement file. It says who stands there, which worlds they stand in, where in each world, whether they appear at all, and what pressing the interact key opens.

The Adventurer's Guide is an ordinary placement authored exactly that way, so everything on this page applies to it and to a character of your own equally. Talking to the Guide opens a two-panel hub: a grid of one-click icon tiles on the left, with the main board's active bounties previewed on the right. The first time a player talks to the Guide it runs a short guided welcome that introduces the whole mod before dropping them at the hub.

Jar-bundled assetServer/ZiggfreedCommon/NpcPlacements/<id>.json

Readable inside the mod jar, overridable by id from a content pack. The filename is the placement id.

Override configmods/ziggfreedcommon/npc-placements.json

The server owner's switch: turn a placement off without editing anybody's file.

spawn-hub.json and quest-givers.json are retired

On the first start after upgrading, mods/mmoskilltree/spawn-hub.json, quest-givers.json and spawn-hub-placements.json are renamed in place to .legacy and a single warning in the log names what replaced them. Nothing is deleted, and nothing in those files is read any more. Where a character stands is a placement file; whether one appears is mods/ziggfreedcommon/npc-placements.json.

The placement file

Two placements ship in the jar - the Guide at world spawn and the Guide again in the Forgotten Temple - and they are the shortest way to learn the shape. This is the Adventurer's Guide at world spawn:

{
  "Name": "Mmo_Hub",
  "Enabled": true,
  "Identity": { "Role": "Mmo_Hub" },
  "Where": { "Match": ["default"] },
  "Anchor": {
    "WorldSpawn": {
      "Offset": { "X": 2.5 },
      "Yaw": 180.0
    }
  },
  "Lifecycle": { "KeepAlive": true, "Respawn": true, "Fortify": true },
  "Interact": { "Dialogue": "Mmo_Hub_Intro" }
}

In one pass: Identity is who stands there, Where is which worlds (unwritten means the ordinary persistent world - if your main world is called something else, this is the leaf to change), Anchor is where in each world, Requires gates whether the character appears at all, Lifecycle is the opt-in upkeep that keeps a service character reachable, and Interact is what pressing the interact key opens. The full field-by-field reference - every group, the anchors, identity and aliases, the press-F destination list, and the role files - lives on Authoring Dialogues & Placed NPCs; this page stays with what a server owner does day to day.

The same character, in a second world

The temple Guide names the spawn Guide as its Parent and writes only what differs. The role, the anchor, the upkeep knobs and the conversation all come down from the parent, so re-tuning the Guide in one file re-tunes both:

{
  "Name": "Mmo_Hub_Forgotten_Temple",
  "Parent": "Mmo_Hub",
  "Where": { "GameplayConfig": ["ForgottenTemple"] },
  "Identity": {
    "NpcId": "Mmo_Hub_Temple",
    "Aliases": ["Mmo_Hub"]
  }
}

The temple is an instance world, rebuilt with a fresh name every visit, so it is targeted by its gameplay-config key rather than by name. The primary id Mmo_Hub_Temple exists nowhere else, so a quest step aimed at it can only be credited by talking to the Guide standing down there. The alias Mmo_Hub means every quest bound to the Guide at spawn is offered, credited and handed in here too.

The Mastery Trainer (mastery pack)

The Mastery Trainer stands across from the Guide in the temple - but only when the free MMO Skill Mastery Pack is installed. The pack ships the whole character: the role and model, the nameplate and hint keys, the conversation, and the placement below. Pressing the interact key starts a conversation (the trainer has quests to hand out on the way to the mastery menu), and the placement is gated on the mastery feature being switched on, so on a server without mastery the trainer never appears at all rather than standing there refusing:

{
  "Name": "Mmo_Mastery_Trainer_Temple",
  "Enabled": true,
  "Where": { "GameplayConfig": ["ForgottenTemple"] },
  "Identity": { "Role": "Mmo_Mastery_Trainer" },
  "Anchor": {
    "Structure": {
      "MarkerIds": ["Temple_Kweebec_Merchant_Static"],
      "Offset": { "X": 3 },
      "Yaw": 180.0
    }
  },
  "Requires": {
    "Factors": [
      { "Factor": "mmoskilltree:feature", "Param": "mastery", "Min": 1.0 }
    ]
  },
  "Lifecycle": { "KeepAlive": true, "Respawn": true, "Fortify": true },
  "Interact": { "Dialogue": "Mmo_Mastery_Trainer" }
}

It also shows the third anchor kind: instead of world spawn, the trainer stands at a worldgen structure marker inside the temple. The interact destination list, identity and aliases, and the role files a pack ships are all documented once on Authoring Dialogues & Placed NPCs.

Switching a placement off

Server owners never edit a placement file to turn one off. The owner layer is mods/ziggfreedcommon/npc-placements.json:

{
  "Mmo_Mastery_Trainer_Temple": { "enabled": false }
}

A single "*" entry stops every placement at once. A disable despawns what is already standing rather than merely declining to place it next time.

Admin commands

CommandWhat it does
/mmonpc listEvery placement targeting the world you are standing in, with its state: standing, pending, or held back with the reason it is held back
/mmonpc disable --arg1=mmo_hubWrite the owner switch and sweep immediately, despawning the Guide
/mmonpc enable --arg1=mmo_hubTurn it back on and place it again
/mmonpc disable --arg1=*Take every placement down at once
/mmonpc reconcileForce a sweep of the current world now, instead of waiting for the next one
/mmonpc list --arg1=structuresList the structure-marker sightings the anchor engine has recorded in this world, which is how you find a real marker to anchor a placement to. A marker is only knowable once its chunk has loaded, so walk near a generated village or camp first
/mmonpc list --arg1=markersScan the live entity store for the spawn-marker entities present right now. structures is what the engine recorded, markers is what actually exists, so the two disagreeing localizes a sighting problem in one command. A marker only exists while its chunk is loaded - stand near the structure and re-run
/mmonpc list --arg1=channelsEvery extension channel a mod has claimed, with the mod that claimed it, its failure count and its last failure message

The old spawn, remove and reset verbs are gone

Placing a character by hand is no longer how any of this works. A placement file decides where somebody stands, the sweep keeps the world matching it, and /mmonpc reconcile forces that sweep now. To move the Guide, edit its Anchor; to take it out, use the owner switch above.

Hub Tiles

The hub menu is feature-aware and only lists what your server has enabled. The left panel is a grid of icon tiles, each opening a section in one click:

  • Skills - your skill cards and leveling progress
  • Quests - your live quest log
  • Achievements - achievement chains and progress
  • Abilities - active abilities and bindings
  • Mastery - ability mastery nodes
  • Boosts - active XP boosts and tokens

When the relevant content is installed, the grid also adds a tile for every available bounty board plus the Token Shop, joined to the core tiles. The right panel previews the main board's active bounties with live progress when a bounty board is present. The hub self-gates which destinations it offers, so a server without those features simply shows the core tiles.

Guided Welcome Arc

The first time a player talks to the Adventurer's Guide it runs a short walkthrough that introduces the whole mod - skills and leveling, the skill tree, quests and achievements, abilities, mastery, currencies, bounties, the shop, and more - before dropping them at the hub. Each step shows a faithful preview of the matching screen built from the player's real data, so they know what to look for.

  • The arc offers a new player a short tutorial or a skip; both paths leave them with the Skill Menu Scroll, so the menu is always one item-use away.
  • It teaches the /xp command (and /skills) for opening the skills menu.
  • It only covers the features your server actually has turned on, and shows once per player automatically.
  • Players can re-open it any time with the "?" Help button tucked into the window header, also reachable from the left panel of the Skills menu.

The tutorial ships in the jar and works with no pack installed - breaking your first block hands over the Skill Menu Scroll automatically. With the free MMO Skill Quest Pack installed, finishing or skipping the tutorial opens the Emerald Wilds campaign, so the jar tutorial and the pack campaign read as one continuous start.

Best Practices

  • Leave Where at the default persistent world on a multi-world server so placed characters stay out of creative and minigame worlds; if your main world has another name, say so in Where.Match.
  • Target an instance world by its GameplayConfig key, never by name: an instance is rebuilt with a fresh name every visit.
  • Use Anchor.WorldSpawn's offset and yaw to nudge a character off the exact spawn point and face them toward arriving players. Keep the offset small in an instance, where players arrive through a portal and a big offset can put somebody inside a wall.
  • Turn a placement off from mods/ziggfreedcommon/npc-placements.json (or /mmonpc disable) rather than editing content you did not write - your switch survives updates.
  • Run /mmonpc list after any change: a placement held back tells you the reason, which is much faster than hunting for a character who never appeared.