Catch-Up System

The Catch-Up System gives characters who are behind the server's leading progress a scaling EXP, zen, and item-drop bonus. The bonus grows with how far behind the character is and shrinks to nothing once they reach the front. It is free, always on, and drives an always-on HUD element that shows the current server leader. The math uses the Nth-place player as the anchor so a single mule cannot inflate everyone's rates.

File Location#

Data/Plugins/Characters/CatchUpSystem.xml

How the Bonus Is Computed#

Each character has a progress score:

score = GrandReset * GrandResetWeight + MasterReset * MasterResetWeight + Reset * MaxLevel + Level

MaxLevel here is the hard character level cap (400). It is a fixed constant, not a configurable value - in particular it is deliberately not the MaxLevelUp key, which controls how many level-ups a single experience award may grant.

The system finds the anchor score (the score of the Nth-place player set by Anchor Rank) and computes a gap ratio:

ratio = (anchorScore - myScore) / anchorScore     clamped to 0 .. RatioCap

Each bonus is then ratio raised to that bonus's shape exponent, times that bonus's cap:

expPct      = round( ratio ^ ExpShape   * MaxExpBonusPct )
dropPct(cat)= round( ratio ^ Shape[cat] * MaxPct[cat] )     (0 if the category is disabled)

A character at or above the anchor gets ratio 0 and no bonus. Item quality (luck, excellent options) is never boosted - only drop chance and amount.

Shape (Curve Exponent)#

Shape controls how the bonus scales with the gap. Each bonus has its own Shape.

ShapeCurveEffect
1.0LinearBonus is proportional to how far behind the character is
Greater than 1.0Back-loadedSmall until far behind, then ramps up
Less than 1.0Front-loadedLarge bonus even when only a little behind

Configuration#

<CatchUpSystem Enable="1">
  <Score GrandResetWeight="100000" MasterResetWeight="10000"/>
  <Anchor Rank="10" RatioCap="1.0"/>
  <Curve MaxExpBonusPct="1500" Shape="1.0"/>
  <Drop>
    <NormalItem Enable="1" MaxPct="300" Shape="1.0"/>
    <Zen        Enable="1" MaxPct="300" Shape="1.0"/>
    <RareTable  Enable="1" MaxPct="100" Shape="1.0"/>
    <ExcSet     Enable="1" MaxPct="100" Shape="1.0"/>
  </Drop>
  <Display Title="CATCH-UP EXP"/>
</CatchUpSystem>

Root#

AttributeTypeRangeDefaultEffect
Enableint (0/1)0-11Master switch. Also drives HUD visibility. 0 disables all bonuses and the HUD

Score#

Weights that convert progress into the comparison score.

AttributeTypeRangeDefaultEffect
GrandResetWeightintraw100000Points per grand reset in the score. Should exceed one full reset's worth (MaxLevel) so a grand reset outranks stacked resets
MasterResetWeightintraw10000Points per master reset in the score

Anchor#

Which ranked player the bonus is measured against, and the cap on the gap ratio.

AttributeTypeRangeDefaultEffect
Rankint1-100010The ranked position whose score is the anchor. Values below 1 or above 1000 are clamped. The HUD still shows the #1 player regardless of this value
RatioCapnumber0.0-1.01.0Upper clamp on the gap ratio. 1.0 = no cap (full bonus at maximum gap). A value at or below 0 is treated as 1.0; above 1.0 is clamped to 1.0

Curve (EXP)#

AttributeTypeRangeDefaultEffect
MaxExpBonusPctint0+1500Maximum extra EXP percent at the full gap. 1500 = up to +1500% (16x) EXP. Negative values are clamped to 0
Shapenumberabove 01.0EXP curve exponent. See Shape table. A value at or below 0 is treated as 1.0

Drop#

Four independent drop categories, each with its own enable, cap, and curve. Category caps are in percent added to the base chance or amount.

CategoryDefault EnableDefault MaxPctBoosts
NormalItem1300Base-game item drop chance
Zen1300Zen amount dropped
RareTable1100Custom / rare drops from ItemDrop.xml
ExcSet1100Excellent and set-item drop chance

Per-category attributes:

AttributeTypeRangeDefaultEffect
Enableint (0/1)0-110 = this category gets no bonus (its percent is always 0)
MaxPctint0+see aboveMaximum extra percent at the full gap. Negative values are clamped to 0
Shapenumberabove 01.0This category's curve exponent. A value at or below 0 is treated as 1.0

Display#

AttributeTypeRangeDefaultEffect
Titlestring--HUD label text. Present in the shipped template for readability; the HUD title is rendered client-side and this attribute is not consumed by the server loader

Important Behavior#

  • The anchor drives the math; the HUD always shows the #1 player. Setting Rank higher than 1 lets everyone below the top group still earn a bonus without a single leader zeroing it out.
  • The score uses live reset / master-reset / grand-reset / level values, so a character's bonus drops as they progress and rises again after each reset.
  • Item quality is never affected. The drop categories change chance and amount only, not which options an item rolls.
  • Disabling a drop category (Enable="0") forces its bonus to 0 regardless of MaxPct or Shape.
  • Changes take effect after a plugin reload or GameServer restart. Anchor recomputation and the HUD update as players enter the world, reset, or teleport.

Examples#

<CatchUpSystem Enable="1">
  <Score GrandResetWeight="100000" MasterResetWeight="10000"/>
  <Anchor Rank="10" RatioCap="1.0"/>
  <Curve MaxExpBonusPct="1500" Shape="1.0"/>
  <Drop>
    <NormalItem Enable="1" MaxPct="300" Shape="1.0"/>
    <Zen        Enable="1" MaxPct="300" Shape="1.0"/>
    <RareTable  Enable="1" MaxPct="100" Shape="1.0"/>
    <ExcSet     Enable="1" MaxPct="100" Shape="1.0"/>
  </Drop>
  <Display Title="CATCH-UP EXP"/>
</CatchUpSystem>

Common Issues#

Last updated August 20, 2026