Content Packs

Extend MMO Skill Tree with a data-only Hytale asset pack - no Java required

Overview

Third parties can add or override MMO Skill Tree content - quests, achievements, conversations, placed NPCs, storefronts, contract boards, abilities, XP tuning and more - without writing any Java, by shipping a standard Hytale asset pack: a .zip (or folder) of JSON dropped into the server's mods directory. The engine discovers, loads, and merges your pack at server start.

Pack content lives in two trees, and which one a type belongs to is decided by who owns the engine that reads it:

  • Server/ZiggfreedCommon/ - the shared library types: quests, achievements, achievement categories and point milestones, conversations, NPC placements and identities, currencies, storefronts, shelves, offers, boards, contracts, reward kinds, loot tables and feedback moments.
  • Server/MMOSkillTree/ - everything this mod owns on its own: abilities and ability improvements, custom skills, bonus drops, XP maps, mob-kill XP, item and action requirements, boost templates, command rewards, mastery tracks, power-level tuning.

One pack may ship both trees. See ZiggfreedCommon: shared engines & files for the owner's view of the shared half.

Who this is for

  • Server owners who want to customize content beyond the admin dashboard, and keep those customizations in a portable pack they can move between servers.
  • Content creators shipping quest packs, class packs, or total conversions on CurseForge.
  • Translators contributing new languages (see Translation Packs).

What packs can add

Each links to its entry in the Content Type Reference:

What packs cannot add

  • Skill-tree nodes (including SCHOOL_RESIST) - owner config only (skill-tree.json overrides), even though the reward type and the damage schools it targets are otherwise pack-referenceable.
  • XP tokens - can be tweaked through config, but not created from pack data.

Abilities and custom skills moved off this list in 1.6.0

Active abilities and custom skills were code-backed before 1.6.0. Both are now fully pack-authorable structured asset types (Server/MMOSkillTree/Abilities/ and Server/MMOSkillTree/CustomSkills/) - see Ability authoring and Custom Skills.

Reference packs

Real, production packs you can learn from, each demonstrating a different slice of the system:

Every pack above ships as a companion download alongside the mod on CurseForge - see Companion Mods & Content Packs for what each one needs installed and the install order.

In-repo examples for abilities and gear stats

Two smaller, in-repo example packs (not shipped standalone on CurseForge) demonstrate the 1.6.0 authoring surface end to end: an AbilityMod that improves an existing ability (Ability authoring) and a gear-stat pack that ships items granting MMO_* stats and a tool with a fortune-style tag stat (Gear stats). Treat them as authoring references, not installable content packs.

Quick start

Already shipping a pack? 1.6.0 changed several pack file shapes

Server/MMOSkillTree/LuckLoot became BonusDrops, dialogue SetFlag/Flag/NotFlag became Once and a declared Memories map, the no-op Talk action became MarkTalked, and named world selectors became an inline Where block. Walk your pack through Migrating a content pack to 1.6.0 - a checklist with the full before/after for every break - or run it through the web Migration Converter for a one-click pass.

A content pack is a manifest plus JSON under one or both content trees:

MyMmoPack.zip
├── manifest.json
└── Server/
    ├── ZiggfreedCommon/
    │   ├── Quests/MyStudio/Dragons/Dragon_Hunt.json
    │   └── Achievements/MyStudio/Combat/First_Blood.json
    └── MMOSkillTree/
        ├── Control/MyMmoPack.json        (optional - per-type add/replace mode)
        ├── XpMaps/MyMmoPack.json
        └── BonusDrops/Dragon_Hoard.json

The manifest

Only Name is required and IncludesAssetPack must be true. No Main class is needed - this is a data-only pack.

{
  "Group": "YourStudio",
  "Name": "MyMmoPack",
  "Version": "1.0.0",
  "ServerVersion": "*",
  "IncludesAssetPack": true
}
FieldTypeDefaultDescription
Name*--Unique pack name; also the key used in your Control file.
IncludesAssetPack*--Must be true so Hytale loads the bundled assets.
Group-optionalYour studio / namespace.
Version-optionalPack version string.
ServerVersion-optional"*" = any server version.
* required

Add your first quest

A shared-schema quest is one file, with no envelope and no Id field: the file is the quest, and its id is the filename, lower-cased. Put it in a namespace folder of your own so your files never sit beside somebody else's.

// Server/ZiggfreedCommon/Quests/MyStudio/Dragons/Dragon_Hunt.json
{
  "Name": "Dragon_Hunt",
  "Text":    { "TitleKey": "quest.dragon_hunt.title",
               "FlavorKey": "quest.dragon_hunt.flavor" },
  "Listing": { "Category": "main", "SortOrder": 10 },
  "Objectives": {
    "slay": { "Kind": "KILL_ENTITY", "Target": "Trork", "MatchMode": "CONTAINS", "Amount": 5 }
  },
  "Rewards": {
    "Claim": [
      { "Kind": "Mmo_Xp", "Params": { "Skill": "SWORDS", "Amount": "500" } }
    ]
  }
}

Rewards holds two lists. Auto lands the instant the quest settles; Claim - the default, used above - waits in the quest log until the player collects it. See the two buckets.

The older path still loads

Content written before 1.6.0 at Server/MMOSkillTree/Quests/<id>.json (and the matching Achievements/ folder) still loads through a compat reader, unchanged - see The older shape. Author anything new in the shared shape above.

Install and verify

  1. Zip the folder so manifest.json sits at the zip root - see Building the zip for the exact packaging rules, including the forward-slash entry-name caveat on Windows.
  2. Drop the zip (or the unzipped folder) into your server's mods directory - the same place MMO Skill Tree itself lives.
  3. Start the server.
  4. Look for lines like these confirming the pack loaded:
[AssetPacks] Registered MMO content asset stores
[AssetPacks] Quest pack layer applied (1 entries, mode=add) - N quests effective

Exporting your server's own content as a pack

/mmopacks --action=export --name=<MyPack> writes your server's custom quests and achievements out as a loadable pack zip under packs/ - the fastest way to get a working starting point. Both arguments bind by name only, never positionally. The exporter emits the same shared Server/ZiggfreedCommon/ layout described above, so the result is ready to author further without conversion.

Where to go next