Leveling Formula

Understand the XP curve

Available Formulas

Hybrid (Default)

Combines OSRS-style exponential scaling with a quadratic floor:

XP = OSRS_component + (base × level × (level-1) / 2)
  • OSRS component uses 2^(level/7) - each level requires ~10% more XP
  • Quadratic floor ensures early/mid levels aren't too easy
  • Level 100 = ~10 million XP

Legacy

Simple quadratic formula:

XP = base × level × (level-1) / 2
  • Easier endgame (~1.5M XP at level 100)
  • Good for casual servers

Switching Formulas

/mmoconfig formula --args=hybrid    # OSRS-style (default)
/mmoconfig formula --args=legacy    # Easier quadratic

Parameters

ParameterDefaultEffect
baseXpPerLevel300Controls early game difficulty
levelScaleMultiplier200Controls endgame curve steepness

Adjusting Parameters

/mmoconfig basexp --args=400    # Harder early game
/mmoconfig basexp --args=200    # Easier early game
/mmoconfig scale --args=150     # Easier endgame
/mmoconfig scale --args=250     # Harder endgame

Max Levels

A fresh server ships with a default max level of 200 for every skill. You can change the default max level and set per-skill overrides via the admin dashboard (/mmoadmin -> Max Levels section).

Content cap vs. runtime ceiling

The shipped skill-tree content (default tiers and reward nodes) is designed and tuned through level 100; nothing default exists above that level. The 200 default max level is runtime headroom, not a second content tier - it lets a server owner author their own tiers past 100 without raising the cap first. There is no hard-coded upper limit either: defaultMaxLevel and per-skill overrides only floor-clamp to 1, so you can raise the ceiling past 200 if you add your own content that far.

How It Works

  • Default Max Level - applies to every skill unless overridden (shipped default: 200)
  • Per-Skill Overrides - set individual skills higher or lower than the default. Leave a field blank to use the default
  • XP Stops at Cap - once a skill reaches its max level, no further XP is awarded for that skill
  • Persisted - settings are saved to mods/mmoskilltree/custom-skills.json under defaultMaxLevel and maxLevels

A content pack can add a whole new skill, but the max level for every skill, built-in or pack-added, is still the server owner's setting in custom-skills.json; your file always wins. See Pack-added skills.

Example: JSON Config

{
  "defaultMaxLevel": 50,
  "maxLevels": {
    "MINING": 75,
    "SWORDS": 100
  }
}

In this example, most skills cap at 50, but Mining caps at 75 and Swords at 100.

Tips

  • Lowering the max level does not remove existing XP - players keep their XP but their displayed level is capped
  • Skill tree rewards tied to levels above the new cap remain claimed if they were already earned
  • Use the "Save All" button in the admin dashboard to update the default and all per-skill overrides at once

XP Requirements (Default Settings)

LevelXP RequiredDifficulty
10~14,270Early game
25~95,573Early-mid
50~446,222Mid game
80~2,274,045Late game
100~10,000,000Endgame mastery

Milestone Preview

When changing formula or parameters, the command shows milestone XP:

XP required: Lv10=14.3k | Lv25=95.6k | Lv50=446.2k | Lv80=2.3M | Lv100=10.0M

Player Impact

Warning: Changing the formula affects existing players! Players may have lower levels than before if XP requirements increase.
  • Skill tree rewards are automatically validated
  • Rewards may be revoked if player no longer meets level requirements
  • Stat bonuses are recalculated

Rested XP

Rested XP is a bonus pool a player earns for time spent away from the server. While a pool holds anything, every XP gain in that skill is multiplied by restedXpMultiplier until the pool drains, so a player coming back after a break catches up faster. It is there for a real break, not a moment away: an absence shorter than restedXpMinOfflineMinutes earns nothing, and past that the whole stretch counts, clamped by restedXpMaxOfflineHours. A quick relog resets the clock.

// skill-config.json
{
  "restedXpMode": "flat",
  "restedXpPerHour": 250,
  "restedXpPercentPerHour": 5.0,
  "restedXpMaxPool": 50000,
  "restedXpMultiplier": 2.0,
  "restedXpMaxOfflineHours": 168,
  "restedXpMinOfflineMinutes": 30
}
  • restedXpMode - off, flat (XP per hour away, the same for every skill), percent (a share of each skill's next-level XP per hour away), or hybrid (both added together)
  • restedXpPerHour - the flat rate (default 250)
  • restedXpPercentPerHour - the percent rate (default 5)
  • restedXpMaxPool - the most a skill's pool can hold (default 50,000)
  • restedXpMultiplier - the boost applied while a pool holds anything (default 2.0)
  • restedXpMaxOfflineHours - the longest absence that keeps earning (default 168, one week)
  • restedXpMinOfflineMinutes - the shortest absence that earns anything (default 30; 0 counts every gap)

Every one of these is on the admin dashboard's Rested XP page (/mmoadmin), including the minimum absence beside the offline cap, and Reset to Defaults hands back the values above. /mmoconfig restedxp --args=<off|flat|percent|hybrid> switches the mode from the console; with no argument it prints the window the server is running.

Validation Triggers

These commands trigger player validation:

  • /mmoconfig formula
  • /mmoconfig basexp
  • /mmoconfig scale
  • /mmoconfig reload
  • /mmoconfig reloaddefaults