Smart Roam

A party out-levels a spot faster than the spot stops giving XP. The party notices for you — and tells you before it moves.

What it says

When the spot goes stale, the leader posts in party chat:

The xp’s slowing down here — let’s head to Cruma Marshlands for the level 40 mobs. (.smartroam stay to hold)

Two reasons it will ever give:

It says Because
“The xp’s slowing down here” XP per hour dropped below what the party should be earning
“These mobs are getting low for us” The party out-levelled the mobs outright

The first catches a stale spot while the levels still look fine on paper. The second is the backstop.

Solo, it says nothing — no party to talk to.

Talking back

You type What happens
.smartroam stay Holds the current spot. The party will re-check later
.smartroam better “Find me something better” — evaluates immediately, skipping the usual wait
.smartroam easier “This is too hard” — looks for a lower band instead
.smartroam status Asks where the party’s head is at

.smartroam enable / disable turns the whole behaviour on or off.

When it can’t help

A request that finds nothing gets an answer, not silence:

There’s nothing easier nearby that’s worth our time — let’s keep at it here.

This is about the best spot around for our level right now — let’s keep grinding.

The request is then cleared — no promise left hanging.

Status replies

.smartroam status answers privately, with whichever applies:

  • “A move is in progress — .smartroam stay to cancel it.”
  • “You asked for easier content; the party is weighing it.”
  • “You asked for a better spot; the party is looking.”
  • “You held the last move; the party will re-check later.”

How it picks

A region brain sees the whole region at once, and weighs:

Factor Meaning
Band fit Right mob level for the party’s average level, not its highest member
Region fill Prefers under-populated zones — spreading the world out is part of the goal
No reach cap A far open-field destination isn’t rejected for distance

Then the party walks it, in ~2,500-unit legs (one long move order stalls). Journeys of ~23,000 units verified.

Limits

It won’t Why
Cross regions Moves you within a region. A party topped out on Talking Island won’t bridge to the catacombs — a known gap
Move at the ceiling At a region’s last band it stops offering and stays. Out-levelling everything reachable should go quiet

It’s smart roam because it knows when not to move.

Under the hood

What the decision reads

A party re-checks its spot on a timer and compares two things:

Signal What it measures
XP per hour What the party is earning against what a party of its level should earn
Level gap How far the party has climbed above the mobs it is killing

The first catches a spot going stale while the levels still look fine on paper. The second is the backstop for when it has been left far too long.

Where this comes from

  • Design: docs/design/region-brain-smart-roam.md.
  • Live code: the roam decision runs in shell/sim/CombatSimLayer.java; the commands are dispatched from shell/command/CommandDispatch.java.
  • Zone bands: the same zone-facts derivation the Zones page renders, so a destination is chosen against measured mob levels.

Message templates verified verbatim against CombatSimLayer.java (announce at :5549-5556, no-move replies at :5582-5584, status notes at :6049-6070). Behaviour per the 2026-07-19 smart-roam landing. Authored prose — re-verify the quoted lines against source if the dialogue changes.

← back to l2everdream.com