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 quadraticParameters
| Parameter | Default | Effect |
|---|---|---|
baseXpPerLevel | 300 | Controls early game difficulty |
levelScaleMultiplier | 200 | Controls 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 endgameMax 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
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.jsonunderdefaultMaxLevelandmaxLevels
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)
| Level | XP Required | Difficulty |
|---|---|---|
| 10 | ~14,270 | Early game |
| 25 | ~95,573 | Early-mid |
| 50 | ~446,222 | Mid game |
| 80 | ~2,274,045 | Late game |
| 100 | ~10,000,000 | Endgame 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.0MPlayer 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), orhybrid(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;0counts 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