Item Level Curve

Replaces the fixed vanilla +level bonus with your own table. Each curve lists the bonus at +1 through +15 for one stat, and you assign it to item ranges. Items no curve covers keep the vanilla bonus.

File Location#

Data/Plugins/Items/ItemLevelCurve.xml

Loaded together with the item data (Item.xml), before shops and bags create items.

Dependencies#

Depends OnPurpose
Item.xmlItem groups and numbers used in <Range>; the item's base damage / defense
ItemTiersBaseMul is applied after the level bonus
ItemImplicitWizardry and curse damage scale there, not here
ClientReceives the curves at login (game data sync type 41) and uses the same math in tooltips

Root#

<ItemLevelCurve Enable="1">
AttributeTypeDefaultEffect
Enable0/110 = vanilla bonus for every item. Use 1/0, not true/false (true reads as 0)

Curve#

<Curve Name="Weapons" Stat="Damage"
       Flat   ="2 4 6 8 10 12 17 22 27 35 45 57 71 88 110"
       Percent="0 0 0 0 0 0  2  4  6 10 15 21 28 36  45">
  <Range Section="0"/>
</Curve>
AttributeTypeDefaultEffect
Namestring (31 chars)""Label for log lines
StatDamage / Defense / DefenseRate / MagicDefense-Which stat this curve owns. Unknown = curve skipped
Flat15 numbersall 0Flat bonus at +1 .. +15
Percent15 numbersall 0% of the item's +0 value added at +1 .. +15. One decimal allowed (2.5)

Bonus at +L = Flat[L] + (+0 value x Percent[L] / 100)

  • Numbers are totals at that level, not steps. +13 uses the 13th number only.
  • Separate with spaces or commas.
  • Fewer than 15 numbers: the last one repeats (logged as a warning).
  • Negative numbers become 0. Flat is rounded to a whole number, Percent to one decimal.
  • A curve needs at least one of Flat / Percent, or it is skipped.
  • A curve whose numbers go down at some level still loads, with a warning.
  • Items above +15 use the +15 value.
StatChanges
DamageWeapon min and max damage (each uses its own +0 value)
DefenseDefense of armor, shields, wings, anything with defense
DefenseRateShield block rate (defense success rate)
MagicDefenseMagic defense

"+0 value" is the item's stat before the level bonus, after the excellent / ancient base boost. So excellent and ancient items get a bigger percent part.

Range#

AttributeTypeDefaultEffect
Section0-15noneItem group. Alone = the whole group (items 0-511)
Minint0 with SectionFirst item. With Section: item number in the group. Without: absolute number (Group x 512 + Index), required
Maxint511 with SectionLast item. Same rules as Min

An invalid range (Max below Min, out of bounds, or missing Min/Max without Section) is skipped. A curve with no valid range is skipped.

Shipped Values vs Vanilla#

Bonus to max damage on a weapon with 100 max damage at +0 (armor defense uses the same shipped curve):

LevelVanillaShipped
+132
+396
+61812
+72117 + 2 = 19
+92727 + 6 = 33
+103135 + 10 = 45
+113645 + 15 = 60
+124257 + 21 = 78
+134971 + 28 = 99
+145788 + 36 = 124
+1566110 + 45 = 155

Vanilla = +3 per level, plus a small extra from +10 (2nd/3rd wings and some others use their own per-level step). On a 200-damage weapon the shipped +15 bonus is 110 + 90 = 200.

Important Behavior#

  • First curve wins, per stat. Curves are checked in file order. Put special curves above general ones. A Damage curve and a Defense curve on the same item do not conflict.
  • Uncovered items keep vanilla, stat by stat. Shields, wings, block rate and magic defense are vanilla in the shipped file.
  • Shields: the shield Defense curve replaces vanilla's +1 per level. The ancient shield bonus is added after it.
  • Reload: /reload item re-reads this file with the item data and refreshes the client table. Items already in memory keep their old bonus, so players relog to see new values on items they carry.

Examples#

<ItemLevelCurve Enable="0">
</ItemLevelCurve>

Common Issues#

Last updated October 1, 2026