What a spell pays the skills it trains, and how to retune it.
Cast XP
Every successful cast of an ability pays XP to that ability's Linked Skills — a heal trains Restoration, a fireball trains Destruction, a blink trains Arcana. It is paid once per cast, in proportion to what the cast actually did, and it is separate from the damage and kill XP a damage spell already earns.
Set it up
1. Open Database → Abilities and pick the ability.
2. On Costs & Effects, add the skill it should train under Linked Skills.
No linked skill, no cast XP — and a linked ability's other XP (damage, kill
shares) goes to those same skills too.
3. Leave Cast XP empty unless you want a specific number. Empty means
automatic: the field's placeholder shows exactly what the cast will pay
(Auto (8)), recalculated as you change mana cost and cooldown.
4. Optional — retune the automatic base for the whole world in
Database → Skills → XP Rewards (see below).
5. Optional — change the anti-spam window in
Database → Combat → Skill & XP → Cast XP Interval.
6. Save, then Publish. A managed server keeps its own database and only
sees the change after a publish.
Fields
| Field | Where | What it does |
|---|---|---|
| Linked Skills | Abilities → the ability → Costs & Effects | The skills this ability trains. Every kind of XP it earns is split evenly between them (each share is at least 1). Empty = the ability trains nothing. |
| Cast XP | Abilities → the ability → Costs & Effects | XP one full cast pays those skills. Empty = the automatic amount below. 0 = this ability never pays cast XP. |
| Action / Skill / Base XP / Tier Multiplier | Skills → XP Rewards | What one action pays. The cast_spell row's Base XP is the base of the automatic formula; craft is the fallback for recipes with no XP of their own. |
| Cast XP Interval | Combat → Skill & XP | Minimum milliseconds between two cast-XP payouts for the same player and ability. Default 2000; 0 turns it off. |
The automatic amount
Cast XP = 5 + (mana cost ÷ 10) + (cooldown seconds ÷ 4)Expensive spells and long cooldowns are pressed less often, so they pay more per
press. The 5 is the cast_spell Base XP from Skills → XP Rewards when you
have authored one (the starter content ships 3), and the result is never
below 1.
| Spell | Mana | Cooldown | Pays |
|---|---|---|---|
| Healing | 25 | 0.5 s | 8 |
| Grand Healing | 300 | 0.5 s | 35 |
| Heavenly Shield | 0 | 60 s | 20 |
| Fireball | 50 | 0.7 s | 10 |
What counts as "the cast did something"
| Kind of ability | Pays when |
|---|---|
| Damage | At least one hostile target takes damage. Paid on the first hit — an area burst, a volley of arrows and a piercing beam each pay once, not once per victim. |
| Heal | It restored health. The payout scales with how much: a heal that tops up half of what it could have healed pays half. Healing a full-health ally pays nothing. |
| Buff / debuff / status | At least one status effect actually landed. One that was resisted, blocked by immunity or diminished away did nothing, so it pays nothing. |
| Convert resource | It moved a resource. |
| Teleport / blink / pull | Something actually moved. |
| Summon / raise dead | At least one minion appeared. |
Gotchas
- A spell with no Linked Skills trains nothing. This is the most common
- A linked spell no longer trains your weapon skill. All XP from an ability
- Heals pay for healing, not for casting. Spamming a heal on a full-health
- Casts out of combat pay half. Anything but a damage cast is halved while
- The interval is per player and per ability. Casting the same buff five
- 0 means never. Empty means automatic — they are different values, and the
- Procs, chain bounces and channel ticks pay nothing extra. An on-hit
- Refused casts pay nothing — out of range, no target, not enough mana.
- World XP boosts still apply — event boosts, premium and xpGain
- Publish after changing it. Cast XP lives on the ability row, the base on
Why my cast paid nothing
The game server writes the reason to its log the first time each one happens (and again after a publish): no Linked Skills, Cast XP set to 0, the cast did nothing, or it landed inside the interval window.