Configuration

Server owner guide to customization

Admin UI

The fastest way to configure common settings is via /mmoadmin:

Admin configuration page showing general settings, boost stacking limits, and action buttons
  • Disable XP in Creative - Toggle whether creative mode players gain XP
  • Skill Permissions - Toggle permission-based skill access
  • Item Rewards - Enable/disable item rewards at milestones
  • Boost Stacking Limits - Configure max multiplier, active boost caps, and stack mode
  • Allow Skill Tree Reset - Toggle whether players can respec their reward choices
  • Max Levels - Set a default max level for all skills (shipped default: 200) and override it per-skill. XP stops being awarded once a skill reaches its cap
  • Milestone Announcements - Run commands when players reach configurable level milestones (e.g., broadcast achievements with /say)
  • Award Boost - Grant boost permissions or tokens to players
  • Mob Kill XP - Configure per-mob XP values and weapon scaling for kill-only combat mode
  • Edit XP Maps - Visually edit XP values per skill
  • Edit Rewards - Visual editor for command rewards per skill and level
  • Edit Skill Tree - Customize skill tree reward tiers, levels, and choices
  • Edit Tokens - Browse and modify XP token and boost token values
  • Almanac Tab - When the menus show the Almanac tab: whenever the Almanac lists a season (the default), only while a season runs, or never. It is stored in mods/ziggfreedcommon/almanac.json as $MenuTab (Show, OnlyWhileLive)

Changes made via /mmoadmin are saved immediately to the config files.

Two different numbers: content cap vs. configurable ceiling

The shipped skill tree is designed and tuned through level 100 - every default reward tier and node stops there. The defaultMaxLevel a fresh server actually ships with is 200, the shipped default you change in custom-skills.json or from the admin UI, leaving headroom above the designed content for a server owner who wants to author further tiers. defaultMaxLevel and per-skill overrides only floor-clamp to 1, but the default hybrid formula's level curve stops at 200, so a max level set higher has no effect under it. See Max Levels.

In-Game Help Guide

Every admin page has a ? button that opens a contextual help card for that specific feature. Each card has an Overview, How It Works, Examples, and Tips section, plus a link to the full online docs. The help content is localized through the standard language files so translated servers get a fully localized guide.

Config Files

The mod's own configs live in mods/mmoskilltree/ (29 files plus the quests/, achievements/, and optional localization/ folders). A second folder, mods/ziggfreedcommon/, is generated by the required companion jar and holds the files listed further down.

Prefer a content pack for content

Author quests, achievements, abilities, wallets, shops, boards, bonus drops and NPC placements as a content pack, a folder of JSON, zipped, dropped into the server's Mods/ folder and loaded at restart, so an update never overwrites your work. The files in the table below are server-side tuning and per-id overrides. See Content Packs and Publishing.
FilePurposeType
skill-config.jsonCore settings: leveling formula, default language, permissions, placed-block tracking, combat-XP mode + blacklist, boost-stacking limits, damage cap, dodge timing. Detailed guideTraditional
database.jsonPlayer-data backend selector + tunables (ecs default | postgres | mysql): pool, flush, connection timeout, dbDownPolicy; holds no credentials. The file itself is unchanged in 1.6.0; what a database row holds is: a player's quests and achievements are ONE record (the shared library's), stored under one PROGRESS domain beside SKILLS, STATISTICS and STATIONS. The separate QUESTS and ACHIEVEMENTS domains an earlier 1.6.0 build wrote are not read; a row left under either simply sits in the table.Standalone
hud-layout.jsonWhere each on-screen HUD sits and how it behaves, keyed by HUD: its position, whether it is enabled at all, and how long a transient card stays up (durationMs). Covers the quest tracker, the ability cooldown row, and the cards the optional MMO Mob Scaling mod adds. Only the keys you set are stored; a HUD with no entry uses its own default.Override
ability-settings.jsonServer-wide ability toggle plus dodge/counterattack timing (dodge window, armed-slot duration). Detailed guideOverride
ability-overrides.jsonPer-ability owner tuning layer over the pack-authorable Server/MMOSkillTree/Abilities/*.json assets; a partial body (e.g. just Cooldown) overlays per-leaf onto the folded ability instead of replacing it wholesale. Replaced the retired abilities.json. Detailed guideOverride
power-level.jsonOwner overlay for the Power Level formula (pillar weights, clamp range, per-mode COMBAT_ONLY/BALANCED/COMPLETIONIST tuning) over the jar-bundled defaults; folds defaults < pack < owner per leaf.Override
ability-clamps.jsonThe safety rails on ability-modifier stacking: per-stat min/max bounds that folded gear and mastery bonuses can never push past. Each entry under "clamps" is a PascalCase fragment over the pack-authorable Server/MMOSkillTree/ModifierClamps/ assets, overriding just the bound you name per stat key; a key the table has no entry for declares a new clamp. /mmoconfig reload picks up an edit without a restart. Detailed guideOverride
mastery.jsonMastery on/off, respec rules (respec.defaultRefundPercent), the statSacrifice.minRemaining floors, and per-track tuning at schema v3: each entry under "tracks" is a PascalCase track fragment in the same schema a pack authors (Server/MMOSkillTree/Masteries/), merged per leaf over the loaded track of that id, so one price can change and everything else stays the pack's; {"Enabled": false} parks a track. A pre-1.6.0 file still carrying old-format track bodies (the lower-case target/nodes grammar or the retired extends/params DSL) is moved to a timestamped backup/ copy on first start with one notice; the web Migration Converter rewrites it into the v3 overlay. The tracks themselves ship as content (a content pack, or your own JSON assets). Detailed guideOverride
combat-text.jsonColored floating combat text (red crit, gold level-up): master and per-event toggles plus a color per event, as a hex code like #FF3B3B.Override
feedback.jsonSound + optional camera-shake cues per moment (crit, finisher, kill, level-up, bounty); combat sounds ship off by default.Override
npc-placements.jsonOn/off switch for every placed NPC (the Adventurer's Guide, quest givers, anything a pack places): {"<placementId>": {"enabled": false}}, or "*" to disable them all; a disable despawns the NPC already standing. Where an NPC stands, which worlds it appears in, and what pressing F does are content (Server/ZiggfreedCommon/NpcPlacements/<id>.json), not settings, so this file is only the kill switch. Lives in mods/ziggfreedcommon/, not mods/mmoskilltree/ (a ziggfreed-common owner file); /mmonpc manages it live. Replaces the retired spawn-hub.json and quest-givers.json. Detailed guideOverride
dialogues.jsonYour own version of any conversation on the server. Conversations are content, authored in one folder every mod reads back (Server/ZiggfreedCommon/Dialogues/<id>.json), and this file is a bare map keyed by conversation id, exactly like its sibling owner files: each entry is folded over the stored conversation LEAF BY LEAF, so you restate only the nodes and fields you want changed and everything else survives. Top-level keys starting with $ are reserved ($Comment, $SchemaVersion). Lives in mods/ziggfreedcommon/, not mods/mmoskilltree/ (a ziggfreed-common owner file); replaces the retired mods/mmoskilltree/dialogues.json, which is renamed to .legacy on first start.Override
world-rules.jsonPer-world rules matched through a Where block (four wildcard Match patterns - Foo_* prefix, *_Foo suffix, *Foo* contains, bare * - or the world's own stable GameplayConfig key, needed for instanced worlds that carry both a prefix and a random suffix). The gameplay knobs live in one nested Rules block per rule (1.6.0): XP multiplier, combined abilities + HUD toggle, weapon-combat toggle, per-world disabled/allowed skills, and the StatBonusesEnabled switch (strips/restores persistent stat rewards on world entry/exit, independent of the combat-time-only CombatBonusesEnabled); the flat 1.5.x spelling of those knobs still works this release, with one boot warning per rule naming the nested group (a nested leaf wins over its flat twin). The old flat Match string (no Where wrapper) was retired outright: a rule still carrying it matches no world at all until it is rewritten, and the server logs one warning per affected rule naming the replacement. /mmomigrate --action=owner and the web Migration Converter make both moves for you.Override
xp-maps.jsonXP per block / item / weapon for each skill. Detailed guideOverride
bonus-drops.jsonEverything extra a broken block or a killed mob hands over on top of its own normal drops: which moment a row answers for (BreakBlock / KillMob), which block or mob it covers, the odds, and what it gives (a shared loot table, a drop list, an exact item, a command, a reward). New in 1.6.0, folding luck-loot.json and mob-drops.json into one table (converted in place on first boot, every override carried across); retunes or switches off any shipped row by name, or adds your own with no content pack. Detailed guideOverride
skill-tree.jsonMilestone levels, reward choices, multi-select tiers, and ability-unlock placement. Detailed guideOverride
command-rewards.jsonItem rewards and commands granted at skill milestones. Detailed guideOverride
mob-kill-xp.jsonPer-mob base XP for kill-only combat mode. Detailed guideOverride
mob-drop-commands.jsonOpt-in command-based mob drops (dropList key) with chance and notifications; ships with zero default pools, off by default since 1.5.0. Schema 4: the per-command delay and the requiredTier filter are retired, each named in its own boot warning when an old file still carries it, and a pool's commands always run immediately in the order written. It stays the simple kill-only surface beside bonus-drops.json, and is consulted first for a kill. Detailed guideOverride
pending-rewards.jsonNot something you edit directly - the durable runtime spool holding a reward that couldn't be delivered immediately (an admin completing a quest for an offline player), paid out the next time that player connects. Entries are keyed by player UUID only, so a queued reward with no resolvable UUID refuses loudly instead of queueing into the dark. Replaces pending-quest-rewards.json, which is drained into it once on the first boot after upgrading and then backed up; any entry that was keyed by name instead of UUID stays in the backup and is named in the notice.Standalone
xp-tokens.jsonXP token amounts, boost multipliers / durations, and enable / disable. Detailed guideOverride
item-requirements.jsonSkill-level requirements for items, weapons, and blocks. Detailed guideOverride
action-requirements.jsonTool-type requirements for blocks and weapon-type requirements for mobs. Detailed guideOverride
boost-templates.jsonPermission-based boost definitions (multiplier, duration, cooldown). Detailed guideOverride
custom-skills.jsonCustom skill definitions and built-in skill enable / disable. Detailed guideOverride
white-label.jsonServer branding (name, description, logo) on UI pages. A whole-record file, not an override layer: every save from the White Label admin page rewrites the whole file, and /mmoconfig reload re-reads a hand-edited copy.Standalone
menu-theme.jsonThe server-wide active menu theme, written by /mmotheme and the in-game theme picker. A whole-record write, not an override layer; /mmoconfig reload re-reads a hand-edited copy.Standalone
reward-icons.jsonPer-skill / per-target / per-reward-type icon overrides.Override
integrations.jsonEnable / disable / prioritize mod integrations (auto-generated). Detailed guideOverride
quests/Migrated on the first start after 1.6.1: every quest here is rewritten into mods/ziggfreedcommon/quests/<Id>.json, one file per quest in the shared shape, the original renamed .legacy beside it, with one startup notice naming every file, quest and dropped field. Not read any more; author new quests in the new folder. Detailed guideFolder
achievements/Per-achievement definition files: criteria, milestones, server-first claims. Detailed guideFolder
localization/All display text in any language (overrides the jar-bundled .lang files). Detailed guideFolder

Shared library files (mods/ziggfreedcommon/)

The required ZiggfreedCommon jar keeps its own folder beside this one, because it owns the engines behind wallets, storefronts, boards, placed NPCs and the placed-block ledger. Some of these are yours to edit; the runtime stores are not.

FilePurpose
quests/Your own quests, one file per quest named after the quest id (Gather_Copper.json is gather_copper), in the same shape a content pack ships under Server/ZiggfreedCommon/Quests/. A file named after a quest the jar or a pack ships merges leaf by leaf over it, so a file holding only {"Enabled": false} switches that quest off and one holding only an Amount retunes one step; a new name is a quest of your own, and Parent works as in a pack. Read afresh on every publish (/zigprogress reload, /mmoquestadmin reload, a hot re-import). The older mods/mmoskilltree/quests/ files are migrated into it on the first start after 1.6.1. Detailed guide
npc-placements.jsonThe on/off switch for every placed NPC: {"<placementId>": {"enabled": false}}, or "*" to disable them all. An entry naming one placement may also carry any of the fields a pack authors, read over what the packs say leaf by leaf, so {"Hallows_Eve_Old_Jack_Temple": {"Where": {"Match": ["default"]}}} moves a character to another world, and anything written against that placement (a storefront, a board or a line whose Where names it under Placement) follows. /mmonpc edits the switch live. Detailed guide
currencies.jsonOwner overrides for wallets, by currency id and leaf by leaf: retune a cap, change an icon or colour, or switch a wallet off without touching the pack that shipped it. Detailed guide
shops.jsonOwner overrides for storefronts, by shop id and leaf by leaf: reorder the shelves, retitle one, or close a shop with {"<id>": {"Enabled": false}}. Detailed guide
shop-pools.jsonOwner overrides for the rotating pools a storefront draws its offers from: how often the rotation turns over, how many slots it fills, and what a reroll costs. Detailed guide
boards.jsonOwner overrides for bounty boards, by board id and leaf by leaf: rotation cadence, the slot and difficulty mix, reroll cost and cap, the accept requirements per band, or {"<id>": {"Enabled": false}} to take a board down. Detailed guide
dialogues.jsonThe owner layer over every conversation: a bare map keyed by conversation id, like its sibling owner files. An entry is merged leaf by leaf over the stored Server/ZiggfreedCommon/Dialogues/<id>.json conversation, so a partial entry retunes just the nodes it names; $-prefixed top-level keys are reserved ($Comment, $SchemaVersion). Replaces the retired mods/mmoskilltree/dialogues.json, whose contents are not carried across. Detailed guide
hud-rows.jsonOwner overrides for the rows the activity ledger draws, one per XP source, by row id and leaf by leaf: switch a source off, recolour it, or hold it on screen longer ({"wood_off": {"Source": "WOOD", "Enabled": false}}); an id no pack shipped stands on its own by naming its Source. Detailed guide
hud-panels.jsonOwner overrides for the shared HUD panels (the XP bars, the activity ledger, the quest tracker), by panel id and leaf by leaf: the spot a panel sits at ({"World_Bars": {"Placement": "Bottom_Left"}}), its offset, how many lines it shows. The HUD settings page writes this file for everyone and re-reads it. Each panel's Player group (Show.Default, Show.Locked, Spot.Locked) sets what players may change about it on their Settings tab. Detailed guide
hud-spots.jsonOwner overrides for the spots a panel can sit at, by spot id: nudge a shipped spot ({"Bottom_Left": {"Position": {"OffsetY": 40}}}) or add a spot of your own by naming it here. Detailed guide
player-settings.jsonDefaults and locks over each player's own settings, keyed Default: QuestTracker (Show.Default, Show.Locked, Spot.Locked) and Notifications.Level (Default: EveryUpdate, Milestones, Finishes or None; Locked). A locked choice leaves the Settings tab for everyone, and each player's own choice comes back when you unlock it ({"Default": {"Notifications": {"Level": {"Default": "Milestones"}}}}). Detailed guide
calendar.jsonThe switches over every calendar event (a yearly season, such as Seasons of Orbis's Hallows_Eve), keyed by event id and leaf by leaf over what the packs ship: {"<id>": {"Enabled": false}} takes one event away, a Window moves its days ({"Hallows_Eve": {"Window": {"End": "10-31"}}}), and {"$Enabled": false} switches every event off. An event switched off is gone, the same as between its dates: content gated on it leaves until it is back. /zigcalendar reload reads the file again. Detailed guide
almanac.json$Enabled turns the Almanac on or off; $MenuTab (Show, OnlyWhileLive) says when the menus show its tab: by default whenever the Almanac lists a season, {"$MenuTab": {"OnlyWhileLive": true}} only while one runs, {"$MenuTab": {"Show": false}} never. The admin General page's Almanac Tab dropdown writes it for you. Every other key is a season's page override, keyed by its event id. Detailed guide
reputation.json$Enabled switches every reputation on the server off ({"$Enabled": false}). Every other key is a reputation id, retuned leaf by leaf over what the packs ship ({"Hallows_Eve_Old_Jack": {"Cap": 9000}}) or switched off with {"<id>": {"Enabled": false}}. A reputation switched off answers no gate, pays no reward and leaves the page; the standing players hold is kept. Detailed guide
gear-sets.jsonOwner overrides for gear sets (items that pay a bonus when worn or held together), by set id and leaf by leaf over what the packs ship: {"Hallows_Eve_Hallowed": {"Enabled": false}} switches a set off for everyone, and an id no pack ships is read as a new set. Bonuses replaces whole, so retuning one tier means restating every tier you keep. Read when the gear sets load, so restart the server after editing it. Detailed guide
bonus-rows.jsonOwner overrides for bonus rows (an extra find that a broken block, a kill or a hand harvest can pay on top of what the game gives), by row id and leaf by leaf: {"Hallows_Eve_Pumpkin_Find": {"Enabled": false}} takes a row out, and Chance retunes its odds in percent ({"<id>": {"Chance": {"Base": 15.0}}}). An id no pack ships stands on its own as a new row. Read when the rows load, so restart the server after editing it. Detailed guide
reward-chests.jsonOwner overrides for reward chests (the chest a won boss fight leaves, and the chests a rare kill or break leaves), by chest id and leaf by leaf over what the packs ship: {"Zc_Spoils_Chest": {"Despawn": {"Lifetime": 600}}} keeps every boss chest up for ten minutes, and an id no pack ships is a chest of your own. A key starting with $ is not a chest. Detailed guide
titles.jsonOwner overrides for titles (what a player can earn and show beside their name), by title id and leaf by leaf over what the packs ship: {"Hallows_Eve_Hallowed": {"Enabled": false}} hides a title from the picker, menus and Records without taking it from anyone who earned it, {"<id>": {"Hidden": true}} keeps it secret until earned, and Order moves it in the picker (lower sorts first). An id no pack ships is read as a new title. Two server-wide switches sit beside them: "$Chat": true shows a player's title in chat too, and "$AutoShow": false stops a new title from showing itself for a player who shows none. Read when the titles load, so restart the server after editing it. Detailed guide
stats.jsonThe settings for Records, the menu tab that ranks every player: {"$Enabled": false} turns stats off (the tab goes and counting stops, and what players have is kept), Weekly ({"StartsOn": "Sunday", "Zone": "America/New_York"}) and Monthly ({"Zone": ...}) set when a week or a month turns over, Season ({"Event": "Hallows_Eve"}) limits the season tabs to one event, and any other name with "Kind": "Range" adds a date range of your own. Detailed guide
encounter-rules.jsonOwner overrides for the bosses without a boss bar whose kill counts as a boss fight won, by rule id in lower case: {"bear_voidtaken": {"Enabled": false}} makes that kill count as a kill and nothing more. Re-read by /zigencounter reload. Detailed guide
hud-cards.jsonOne leaf, Color, over the frame every HUD card shares (both bar panels, the quest tracker, a mod's own panel on the same base): six hex digits tint the shipped frame, eight add a transparency ({"Default": {"Color": "#ffffffb8"}} dims every card to about 72 percent at once). A card with a Color of its own wins. Detailed guide
quest-indicators.jsonOwner overrides for what a character shows over their head and on the map per quest situation (Available, InProgress, Collect, TurnIn), leaf by leaf over the shipped Default ({"Default": {"InProgress": {"Overhead": {"Enabled": false}}}}); a quest or a single step narrows it further in its own file. Detailed guide
encounters.jsonOwner overrides for boss encounters, by encounter id and leaf by leaf: take a boss out of rotation ({"<id>": {"Enabled": false}}) or retune its scaling ({"<id>": {"Scale": {"HealthPerMember": 0.5}}}). Re-read by /zigencounter reload. Detailed guide
encounter-participation.jsonOwner overrides for an encounter's participation rules (which players a fight credits), by rule id and leaf by leaf. Re-read by /zigencounter reload. Detailed guide
dungeons.jsonOwner overrides for dungeons, by dungeon id and leaf by leaf over what the packs ship: {"<id>": {"Enabled": false}} closes a dungeon, {"<id>": {"Share": {"AreasPerCopy": 2}, "Copy": {"EmptyCloseSeconds": 30}}} sets how many parties share one copy and how many seconds an empty copy stands before it closes, and an id no pack ships is a dungeon of your own. A key starting with $ ($Comment, $SchemaVersion) is not a dungeon. Read when the dungeons load, so restart the server after editing it. Detailed guide
placed-blocks.jsonRetired in 1.6.1: the 1.6.0 file that remembered which blocks a player placed is renamed to .legacy on first boot with one notice and its rows are not carried across. A placement is one bit on the chunk the block sits in now, saved and loaded with it, with nothing left to scan or grow; blocks placed before the update stop being remembered, everything after is guarded as before. The two remaining knobs (trackPlacedBlocks, placedItemExpireMinutes) live in skill-config.json. Detailed guide
stats-board.jsonNot something you edit - the rankings Records shows, which the server writes for itself, keyed by player UUID. Back it up with the world. Detailed guide
npc-placement-ledger.jsonNot something you edit - the runtime record of which placements have already been placed in which world, so a restart does not spawn a second copy of the same character. Detailed guide

What each one holds, and which content folders they override, is on ZiggfreedCommon: shared engines & files.

Upgrading from 1.5.x?

A batch of owner files changed shape or retired in 1.6.0, and the server converts what it safely can at first boot. Upgrading to 1.6.0 is the one walkthrough: what converts itself, what /mmomigrate does for you, and every retired file with its replacement.

Config Types

Override-Based Configs

Most config files (hud-layout.json, ability-settings.json, ability-overrides.json, power-level.json, ability-clamps.json, mastery.json, combat-text.json, feedback.json, npc-placements.json, dialogues.json, world-rules.json, xp-maps.json, bonus-drops.json, skill-tree.json, command-rewards.json, mob-kill-xp.json, mob-drop-commands.json, xp-tokens.json, item-requirements.json, action-requirements.json, boost-templates.json, custom-skills.json, reward-icons.json, integrations.json) use an override system:

  • Files store only your customizations, not all defaults
  • Your changes are preserved across mod updates
  • New defaults are added automatically
  • Use /mmoconfig diff to see what you've changed
  • Use /mmoconfig trim to remove redundant XP entries - rows that merely restate a built-in value. It applies to XP overrides only; every other override layer merges field by field over an asset rather than restating it whole, so there is nothing redundant for a trim to find

Traditional Configs

Other configs store all values and may be regenerated on version updates. Your old config is backed up automatically.

Quick Config Examples

# Set diamond to 150 XP
/mmoconfig mining --args=Rock_Gem_Diamond|150

# All ores give 25 XP (wildcard pattern)
/mmoconfig mining --args=Ore_|25

# Disable a default pattern
/mmoconfig disable --args=mining|Wood_Log

# View your customizations
/mmoconfig diff --args=mining

# Remove a customization (revert to default)
/mmoconfig remove --args=mining|Rock_Gem_Diamond

# Harder early game
/mmoconfig basexp --args=400

# Easier endgame
/mmoconfig scale --args=150

Detailed Guides

  • Content Packs - Author content as a pack
  • XP Values Configuration - Customize XP per block, item, and weapon
  • Leveling Formula - Understand and tune the XP curve
  • Anti-Exploit Features - Placed block tracking, entity blacklist
  • Skill Tree - Customize reward tiers, choices, and combat targeting
  • Command Rewards - Customize item rewards at skill milestones
  • Mob Kill XP - Configure per-mob XP values and weapon scaling for kill-only combat mode
  • Mob Drop Commands - The simple kill surface: run console commands or a native item drop when a mob dies
  • Bonus Drops - Everything extra a broken block or a killed mob hands over, in one table you can re-tune row by row
  • ZiggfreedCommon - What the required companion jar owns, its content folders, its owner files, and its commands
  • Quests - Create quests with objectives, prerequisites, and rewards
  • XP Tokens - Configure consumable XP tokens and boost tokens
  • Achievements - Player achievement system with points, meta-chains, and server-first claims
  • Power Level - Multi-pillar power formula for the optional MMO Mob Scaling companion mod

Notification Tuning

Combat can produce a lot of floating notifications - damage numbers, XP gains, crits, defense blocks, combo finishers. Two knobs control the noise level:

  • Notification batching - notificationBatchMs in skill-config.json (100 to 5000ms, default 1000) aggregates same-type notifications into one combined number.
  • Per-type toggles - players can silence individual notification channels (critical hits, lifesteal, defense blocks, fall damage, combo damage) from the Settings page, while keeping everything else on.

Reference Files

The mods/mmoskilltree/_reference/ folder holds read-only copies of the defaults the mod keeps in its own code, one defaults-<config>.json for each config that has them: XP values, mob kill XP, item and action requirements, the skill tree, command rewards and reward icons. Each file shows what the mod ships, not what packs add, and it is rewritten only when its contents change. The skill tree's file is the one exception: it follows your own milestone settings. The mod never reads these files, so editing one does nothing.

A config built on assets has no reference file. Its defaults are the asset files inside the jar, or in the pack that adds the feature, and you can read them there or in the in-game Asset Editor. World rules, power level, bonus drops, abilities and mastery tracks all work this way.

Older reference files that nothing writes any more, such as defaults-luck-loot.json and defaults-mastery.json, are deleted from the folder at start-up. The built-in lucky-find rows are readable files inside the jar now, at Server/MMOSkillTree/BonusDrops/, and each one carries comments explaining what it does. See Bonus Drops.

Hot Reload

Most config changes can be applied without restart:

  • /mmoconfig reload - Reload all configs from files
  • /mmoconfig reloadlang - Reload language files
  • /mmoconfig reloaddefaults - Reset to built-in defaults
  • /mmoability reload - Re-read the ability catalogue and your ability overrides
  • /mmoquestadmin reload - Re-read the MMO's own quest files and pack layers
  • /zigprogress reload - Fold the shared quest and achievement assets again and publish them

Wallets, storefronts and boards reload with the asset stores rather than through a config command of their own, because their content lives in the shared library's folders. Run /zigcommerce validate afterwards to confirm the catalogue reads the way you meant it to.

Backing up and restoring your configuration and player data is covered once, on Server Operations: Backup & Recovery.