Talent Tree
The Talent Tree replaces the master skill tree window. You build the whole tree in XML: three category columns, rows (tiers) of nodes, and what each node does. Players spend points on nodes, one rank at a time, and can reset the whole tree for Zen.
Opening the Window#
- Press N, or click the Master button in the Character (C) window.
- Both only work when the server sent a tree (plugin on and at least one node loaded). Otherwise nothing opens.
- Reset Tree in the window refunds every point for
RespecZenZen (a confirm box shows the price).
File Location#
Data/Plugins/Characters/TalentTree.xml the live tree
Data/Plugins/Characters/TalentTree.vanilla.xml the vanilla S6 master tree as talent nodes (not loaded)
Only TalentTree.xml is read. To use the vanilla tree, copy TalentTree.vanilla.xml over TalentTree.xml and reload.
Dependencies#
| Depends On | Purpose |
|---|---|
| Common.dat | MasterSkillTreePoint = points per master level when PointSource="MasterLevel" |
| Skill.txt | Skill ids for Target (SKILLMOD / GRANT nodes) and class/evolution rules for granted skills |
| MasterSkillTree.txt | SKILLMOD_VALUE nodes use the master skill index as their node Id |
| Reset System | PointSource="Reset" and the SYSTEM_RESET_LEVEL_CUT effect |
| DataServer | Table dbo.TalentTree (Name varchar(10), Blob varbinary(512)). Run the shipped dbo.TalentTree.Table.sql once |
| Client | Receives the whole tree at login (game data sync type 33). No client file to edit |
Root#
<TalentTree Enabled="true" PointSource="MasterLevel" PointsPerLevel="1" MinLevel="1"
PointsPerReset="5" Respec="true" RespecZen="10000000">
| Attribute | Type | Default | Shipped | Effect |
|---|---|---|---|---|
Enabled | true/false | false | true | Master switch. Off = no tree, no window, nothing applied |
PointSource | MasterLevel / Level / Reset / Manual | MasterLevel | MasterLevel | Where spendable points come from (see below). Unknown value = MasterLevel |
PointsPerLevel | 0-255 | 0 | 1 | Points per level-up. Level source only |
MinLevel | 0-65535 | 400 | 1 | Level-ups below this give no points. Level source only |
PointsPerReset | 0-255 | 0 | 5 | Points per normal reset. Reset source only |
Respec | true/false | true | true | Allow Reset Tree |
RespecZen | 0-4294967295 | 10000000 | 10000000 | Zen price of Reset Tree |
Point Sources#
| Source | Points come from | Stored in |
|---|---|---|
MasterLevel | The character's Master Points (the ones master levels give, MasterSkillTreePoint per level). Spending a point takes one Master Point | The character row (Master Points) |
Level | PointsPerLevel for every level-up at or above MinLevel | dbo.TalentTree |
Reset | PointsPerReset for every normal reset. Grand and master resets give nothing | dbo.TalentTree |
Manual | Nothing automatic. Only the GM command | dbo.TalentTree |
Category#
Exactly three columns exist, Id 0, 1 and 2.
<Category Id="0" Name="Offense" Filter=""/>
| Attribute | Type | Default | Effect |
|---|---|---|---|
Id | 0-2 | - | Column. Other values are ignored |
Name | string (23 chars) | "" | Column title |
Filter | class list | "" (all) | Default class filter for every node in this column. A node's own Filter wins |
Class list: DW, DK, FE, MG, DL, SU, RF, joined with commas and no spaces ("DK,MG").
Node#
<Node Id="1002" Cat="0" Tier="1" Col="0" Name="Infernal Might" Icon="0" Filter="DW"
Effect="SKILLMOD_DMG_PCT" Target="14" MaxLevel="3" Values="8,18,30" TierPoints="5"
Desc="Inferno damage +%v%"/>
| Attribute | Type | Default | Effect |
|---|---|---|---|
Id | 1-65535 | - | Unique node id. 0 is reserved. Saved per character, never renumber a live node |
Cat | 0-2 | 0 | Column (category) |
Tier | 0-255 | 0 | Row. 0 = top. The window scrolls for deep trees |
Col | 0-255 | 0 | Order inside the row, left to right. The row's nodes are spread evenly across the column |
Icon | 0-59 | 0 | Skill icon sheet index. Above 59 is set to 0 with a log line. 0 on a SKILLMOD or GRANT node = use the Target skill's icon |
MaxLevel | 1-20 | 1 | Number of ranks. Above 20 is cut to 20 |
Effect | name | - | What the node does. See Effects. Unknown name = node skipped |
Values | list | - | Value per rank: "8,18,30". Needs at least MaxLevel numbers, extra numbers are ignored |
PerLevel | int | 0 | Used only when Values is missing: rank N = PerLevel x N |
Target | skill id | 0 | The skill for SKILLMOD and GRANT effects |
Requires | "node:rank" | none | Another node must have this rank first. "1002" alone = rank 1 |
TierPoints | int | 0 | Points the character must have spent in this column on rows above this one |
Filter | class list | category's | Classes that may take the node. Empty = use the category filter |
Gate | text | none | Equipment condition (see Gates) |
Name | string (31 chars) | ? | Node title |
Desc | string (95 chars) | "" | Tooltip line. %v is replaced by the value of the current rank |
Catalog limit: 400 nodes. Nodes past 400 are dropped with a log line.
Effects#
Stats (apply while the node is ranked and its gate is met):
| Effect | Value means |
|---|---|
STAT_ADD_STRENGTH / _DEXTERITY / _VITALITY / _ENERGY / _LEADERSHIP | + that stat |
STAT_ADD_LIFE / STAT_ADD_MANA / STAT_ADD_BP / STAT_ADD_SD | + max HP / mana / AG / SD |
STAT_DEFENSE | + defense |
STAT_DEFENSE_RATE_PCT | + % of the character's current defense success rate |
STAT_DEFENSE_RATE_PVP | + defense success rate vs players |
STAT_ATTACK_RATE / STAT_ATTACK_RATE_PVP | + attack success rate (all / vs players) |
STAT_CRIT_DMG_RATE | + % chance of critical damage |
STAT_EXC_DMG_RATE | + % chance of excellent damage |
STAT_DOUBLE_DMG_RATE / STAT_TRIPLE_DMG_RATE | + % chance of double / triple damage |
STAT_IGNORE_DEF_RATE | + % chance to ignore defense |
STAT_REFLECT | + % chance to reflect a hit's full damage back |
STAT_HP_RECOVERY / STAT_MP_RECOVERY / STAT_SD_RECOVERY / STAT_BP_RECOVERY | + regen rate of HP / mana / SD / AG (% of max per tick) |
STAT_MP_COST_REDUCE | - % mana cost of skills |
STAT_RESIST_ICE / _POISON / _LIGHTNING | + resistance to the freeze / poison / shock effect |
STAT_HUNT_HP / STAT_HUNT_MP / STAT_HUNT_SD | + % of max HP / mana / SD restored per kill |
STAT_RESTORE_HP_OFFENSE / _MP_OFFENSE / _SD_OFFENSE | + % chance to fully restore HP / mana / SD when attacking |
STAT_RESTORE_HP_DEFENSE / _MP_DEFENSE | + % chance to fully restore HP / mana when hit |
STAT_PHYS_DMG / _MIN / _MAX | + physical damage (min and max / min only / max only) |
STAT_MAGIC_DMG / _MIN / _MAX | + wizardry damage (min and max / min only / max only) |
STAT_CURSE_DMG | + curse damage (min and max) |
STAT_ATTACK_SPEED | + attack speed and magic speed |
STAT_DMG_PVP | + damage vs players |
STAT_DURA_WEAPON_ARMOR / _JEWELRY / _GUARDIAN / _PET | Durability of weapons+armor / rings+pendants / guardian pets / pets lasts % longer |
STAT_DEFENSE_BY_LEADERSHIP | + 1 defense per value points of Command |
SYSTEM_EXP_PCT / SYSTEM_MASTER_EXP_PCT | + % experience / master experience |
SYSTEM_DROP_PCT / SYSTEM_ZEN_PCT | + % item drop rate / Zen drop |
SYSTEM_RESET_LEVEL_CUT | - levels needed to reset in the Reset System |
Skills (use Target = skill id):
| Effect | Value means |
|---|---|
SKILLMOD_DMG_PCT | + % of the skill's own base damage. Physical weapon skills (Twisting Slash, Triple Shot, Killing Blow) have 0 base damage and gain nothing: use SKILLMOD_DMG_FLAT for those |
SKILLMOD_DMG_FLAT | + flat damage to that skill |
SKILLMOD_UPGRADE_TO | Swaps the learned Target skill for the skill id in Values (per rank). See the warning below |
SKILLMOD_VALUE | Feeds the old master-skill value with the same index. The node Id must equal the MasterSkillTree.txt index. Used for buff strength, summon stats, Dark Spirit, combo damage and similar. Used heavily by the vanilla file |
GRANT_SKILL | Teaches the Target skill while the node is ranked. Removed again on Reset Tree or when the node is gone |
Gates#
A gate makes a node work only with certain gear. Gates apply to STAT effects and SKILLMOD_VALUE. They do not switch off SKILLMOD damage, upgrades or granted skills.
| Gate | Active when |
|---|---|
Wing:<index> | Wing slot holds item 12,<index> |
ArmorSet | The character has a full armor set bonus |
Shield | Left hand holds a shield (group 6) |
Weapon:<group> | Right hand holds any item of that group |
Weapon:<group>,<twohand> | Same, and two-handed (1) or one-handed (0) |
Weapon:<group>,<twohand>,<slot>,<excludeIndex> | Item of the group in that wear slot (0 right, 1 left), held in that hand, and not item index excludeIndex |
Item:<slot>,<group>,<index> | That exact item is in that wear slot |
Important Behavior#
- Allocate rules, in order: class filter, skill check (GRANT / UPGRADE only), rank not maxed, at least 1 point free,
Requiresmet,TierPointsmet. One click = one rank. The allocation saves at once. - Load order is forgiving: a node with Id 0, a duplicate Id,
Catabove 2, an unknownEffect, or fewerValuesthanMaxLevelis skipped with a log line. A node whoseRequiresnode does not exist is skipped, and that chain cascades. - Removed nodes: ranks in a node that no longer exists are dropped on the player's next login. With
Level/Reset/Manualsources those points come back. WithMasterLevelthey do not: the Master Points were already spent. Tell players to Reset Tree before you remove nodes. - Changing
PointSourceon a live server mixes two point pools. Wipedbo.TalentTree(and give players a fresh start) when you switch. - Turning the tree off keeps every allocation in the database. Turning it back on restores them.
- A character can hold ranks in up to 120 different nodes.
- Values reach the client as 16-bit numbers. Keep them between -32768 and 32767 so the tooltip matches.
- Reload:
/reload pluginsre-reads the file. The client tree is sent at login, so players relog to see layout or text changes.
The Vanilla File#
TalentTree.vanilla.xml is the S6 master skill tree (257 nodes) written as talent nodes, with per-class filters and the vanilla value curves. It uses PointSource="MasterLevel", so master levels pay for it exactly like the old tree.
Ten vanilla rows that grant a master skill are left out: those skills use ids 300+ that the client cannot cast. Nodes that needed one of them as a prerequisite are left out too.
GM Command#
Needs GM authority (Authority 2 or higher).
| Command | Effect |
|---|---|
/talent points <n> | Gives the character n points. With MasterLevel it adds Master Points |
Examples#
Every level from 200 gives 1 point. Reset Tree costs 5M Zen.
<TalentTree Enabled="true" PointSource="Level" PointsPerLevel="1" MinLevel="200"
Respec="true" RespecZen="5000000">
<Category Id="0" Name="Offense"/>
<Category Id="1" Name="Defense"/>
<Category Id="2" Name="Utility"/>
<Node Id="2000" Cat="1" Tier="0" Col="0" Name="Toughness" Icon="45"
Effect="STAT_ADD_LIFE" MaxLevel="5" PerLevel="50" Desc="Maximum Life +%v"/>
<Node Id="2001" Cat="1" Tier="1" Col="0" Name="Iron Skin" Icon="46"
Effect="STAT_DEFENSE" MaxLevel="5" PerLevel="6" TierPoints="5" Desc="Defense +%v"/>
</TalentTree>
Dark Wizard only. Rank 2 of Infernal Might unlocks Hellfire Mastery.
<Node Id="1002" Cat="0" Tier="1" Col="0" Name="Infernal Might" Icon="0" Filter="DW"
Effect="SKILLMOD_DMG_PCT" Target="14" MaxLevel="3" Values="8,18,30"
TierPoints="5" Desc="Inferno damage +%v%"/>
<Node Id="1003" Cat="0" Tier="2" Col="0" Name="Hellfire Mastery" Icon="0" Filter="DW"
Effect="SKILLMOD_DMG_PCT" Target="10" MaxLevel="3" Values="10,20,34"
Requires="1002:2" TierPoints="10" Desc="Hell Fire damage +%v%"/>
Only while a two-handed sword is in the right hand.
<Node Id="2100" Cat="0" Tier="0" Col="2" Name="Greatsword" Icon="0" Filter="DK,MG"
Effect="STAT_PHYS_DMG" MaxLevel="10" PerLevel="6" Gate="Weapon:0,1"
Desc="Min and max damage +%v with a two-handed sword"/>