提示:表格向左滑动,可以看到更多内容。或横屏观看可能效果更佳(在浏览器打开,设置手机屏幕自动旋转)
Overview
This file controls the functionalities for each possible stat on a unit
These defined stats are used to form modifiers for the Properties.txt file
Any column field name starting with “*” is considered a comment field and is not used by the game
Data Fields
Stat – Defines the unique pointer for this stat, which is used in other files
Send Other – Boolean Field. If equals 1, then only add the stat to a new monster if the that has no state and has an item mask. If equals 0, then ignore this.
Signed – Boolean Field. If equals 1, then the stat will be treated as a signed integer, meaning that it can be either a positive or negative value. If equals 0, then stat will be treated as an unsigned integer, meaning that it can only be a positive value. This only affects stats with state bits.
Send Bits – Controls how many bits of data for the stat to send to the game client, essentially controlling the max value possible for the stat. Signed values should have less than 32 bits, otherwise they will be treated as unsigned values.
Send Param Bits – Controls how many bits of data for the stat’s parameter value to send to the client for a unit. This value is always treated as a signed integer.
UpdateAnimRate – Boolean Field. If equals 1, then the stat will notify that game to handle and adjust the speed of the unit when the stat changes. If equals 0, then ignore this. This is only checked for stats with states or for specific skill server functions including 30, 61, 71.
Saved – Boolean Field. If equals 1, then this state will be inserted in the change list to be stored in the Character Save file. If equals 0, then ignore this.
CSvSigned – Boolean Field. If equals 1, then the stat will be saved as a signed integer in the Character Save file. If equals 0, then the stat will be saved as an unsigned integer in the Character Save file. This is only used if the “Saved” field is enabled.
CSvBits – Controls how many bits of data for the stat to send to save in the Character Save file. Signed values should have less than 32 bits, otherwise they will be treated as unsigned values. This is only used if the “Saved” field is enabled.
CSvParam – Controls how many bits of data for the stat’s parameter value to save in the Character Save file. This value is always treated as a signed integer. This is only used if the “Saved” field is enabled.
fCallback – Boolean Field. If equals 1, then any changes to the stat will call the Callback function which will update thgecharacter’s states, skills, or item events based on the changed stat value. If equals 0, then ignore this.
fMin – Boolean Field. If equals 1, then the stat will have a minimum value that cannot be reduced further than that value (See “MinAccr” field). If equals 0, then ignore this.
MinAccr – The minimum value of a stat. This is only used if the “fMin” field is enabled.
Encode – Controls how the stat will modify an item’s buy, sell, and repair costs. This field uses a code value to select a function to handle the calculations. This field relies on the “Add”, “Multiply” and “ValShift” fields. The baseline Stat Value is first modified using the “ValShift” field to shift the bits. This Stat Value is then used in the calculations by one of the selected functions.
Code | Parameters | Description |
0(or empty) | AddMultiply | Buy Cost += [Stat Value] * [“Multiply”] / 1024 + [“Add”]Sell Cost += [Stat Value] * [“Multiply”] / 1024 + [“Add”]Repair Cost += [Stat Value] * [“Multiply”] / 1024 + [“Add”] |
1 | Use the stat’s parameter value to determine the skill ID used.Use the stat’s value to determine the skill level.Obtain the “cost mult” and “cost add” values from the skill linked in this stat’s parameter (see skills.txt).The Stat Value is considered the skill’s level.Buy Cost += [Stat Value] * [“cost mult”] / 1024 + [“cost add”]Sell Cost += [Stat Value] * [“cost mult”] / 4096 + [“cost add”]Repair Cost += [Stat Value] * [“cost mult”] / 1024 + [“cost add”] | |
2 | Use the stat’s parameter value to determine both the skill ID and skill level.Obtain the “cost mult” and “cost add” values from the determined skill ID (see skills.txt).Buy Cost += [Stat Value] * [“cost mult”] / 1024 + [“cost add”]Sell Cost += [Stat Value] * [“cost mult”] / 4096 + [“cost add”]Repair Cost += [Stat Value] * [“cost mult”] / 1024 + [“cost add”] | |
3 | Same as function 2 | |
4 | AddMultiply | Obtains the stat’s min and max values based on the By Time bit masks and uses them to calculate the average value or Baseline stat value.Buy Cost += [Baseline] * [“Multiply”] / 1024 + [“Add”]Sell Cost += [Baseline] * [“Multiply”] / 1024 + [“Add”]Repair Cost += [Baseline] * [“Multiply”] / 1024 + [“Add”] |
Add – Used as a possible parameter value for the “Encode” function. Flat integer modification to the Unique item’s buy, sell, and repair costs. This is added after the “Multiply” field has modified the costs.
Multiply – Used as a possible parameter value for the “Encode” function. Multiplicative modifier for the item’s buy, sell, and repair costs. The way this value is used depends on the Encode function selected.
ValShift – Used to shift the stat’s input value by a number of bits to obtain the actual value when performing calculations (such as for the “Encode” function).
1.09-Save Bits – Controls how many bits of data are allocated for the overall size of the stat when saving/reading an item from a Character Save. This value can be treated as a signed or unsigned integer, depending on the stat. This field is only used for items saved in a game version of Patch 1.09d or older.
1.09-Save Add – Controls how many bits of data are allocated for the stat’s value when saving/reading an item from a Character Save. This value is treated as a signed integer. This field is only used for items saved in a game version of Patch 1.09d or older.
Save Bits – Controls how many bits of data are allocated for the overall size of the stat when saving/reading an item from a Character Save. This value can be treated as a signed or unsigned integer, depending on the stat.
Save Add – Controls how many bits of data are allocated for the stat’s value when saving/reading an item from a Character Save. This value is treated as a signed integer.
Save Param Bits – Controls how many bits of data for the stat’s parameter value to use when saving/reading an item from a Character Save. This value is always treated as an unsigned integer.
keepzero – Boolean Field. If equals 1, then this stat will remain on the stat change list, when being updated, even if that stat value is 0. If equals 0, then ignore this.
op – This is the stat operator, used for advanced stat modification when calculating the value of a stat. This can involves using this stat and its value to modify another stat’s value. This use a function ID to determine what to calculate.
Code | Parameters | Description |
0(or empty) | No Operator. Just add the stat normally | |
1 | op stat1 op stat2 op stat3 | Percent Operator. Gets the value of “op stat#” and multiplies it by a percentage increase equal to this stat’s value:[“op stat#”] += [“op stat#”] * value / 100 |
2 | op param op base op stat1 op stat2 op stat3 | By Level Operator. Gets value of “op stat#” and uses it as a multiplier with “op param” as the divisor:[“op stat#”] += [“op stat#”] * [“op base”] << [“op param”] |
3 | op param op base op stat1 op stat2 op stat3 | By Level Percent Operator. Gets value of “op stat#” and uses it as a multiplier with “op param” as the divisor. Then it uses this value as a percentage increase to “op stat#”:percent = [“op stat#”] * [“op base”] << [“op param”][“op stat#”] = [“op stat#”] * percent / 100 |
4 | op param op base op stat1 op stat2 op stat3 | By Level Source Operator. Gets value of “op stat#” for the item (not the unit) and uses it as a multiplier with “op param” as the divisor:[“op stat#”] += [“op stat#”] * [“op base”] << [“op param”] |
5 | op param op base op stat1 op stat2 op stat3 | By Level Source Percent Operator. Gets value of “op stat#” for the item (not the unit) and uses it as a multiplier with “op param” as the divisor. Then it uses this value as a percentage increase to “op stat#”:percent = [“op stat#”] * [“op base”] << [“op param”][“op stat#”] = [“op stat#”] * percent / 100 |
6 | op stat1 op stat2 op stat3 | By Time Operator. Gets the value of “op stat#” and increases it by a delta value which depends on game’s time of day. The delta is calculated by using the stat’s min and max as a range of increase/decrease and biasing this value with the current progress of game’s time of day[“op stat#”] += [“op stat#”] * [delta] |
7 | op stat1 op stat2 op stat3 | By Time Percent Operator. Gets the value of “op stat#” and multiplies it by a percentage. This percentage is determined by obtaining “op stat#” and a delta value which depends on game’s time of day. The delta is calculated by using the stat’s min and max as a range of increase/decrease and biasing this value with the current progress of game’s time of daypercent = [“op stat#”] * [delta][“op stat#”] = [“op stat#”] * percent / 100 |
8 | op stat1 op stat2 op stat3 | Energy Operator. This will only apply for stats on the player. Gets the value of “op stat#” and multiplies it by the related “ManaPerMagic” field from the charstats.txt file. This is then bit shifted by the baseline Mana bit value, MANA_SHIFT = 8, with the fourths value calculation from the “ManaPerMagic” field.[“op stat#”] = [“op stat#”] * [“ManaPerMagic”] << (MANA_SHIFT – 2) |
9 | op stat1 op stat2 op stat3 | Vitality Operator. This will only apply for stats on the player.If the stat is “maxstamina”, then the operator will get the value of “op stat#” and multiply it by the related “StaminaPerVitality” field from the charstats.txt file. This is then bit shifted by the baseline Stamina bit value, STAMINA_SHIFT = 8, with the fourths value calculation from the “StaminaPerVitality” field:[“op stat#”] = [“op stat#”] * [“StaminaPerVitality”] << (STAMINA_SHIFT – 2) If the stat is not “maxstamina”, then the operator will get the value of “op stat#” and multiply it by the related “LifePerVitality” field from the charstats.txt file. This is then bit shifted by the baseline Life bit value, LIFE_SHIFT = 8, with the fourths value calculation from the “LifePerVitality” field:[“op stat#”] = [“op stat#”] * [“LifePerVitality”] << (LIFE_SHIFT – 2) |
10 | Currently not being used. Does nothing. | |
11 | op stat1 op stat2 op stat3 | Player Percent Operator. This will only apply for stats on units. Gets the value of “op stat#” and multiplies it by a percentage increase equal to this stat’s value:[“op stat#”] += [“op stat#”] * value / 100 |
12 | Currently not being used. Does nothing. | |
13 | op stat1 op stat2 op stat3 | Item Percent Operator. This will only apply for stats on items. Gets the value of “op stat#” and multiplies it by a percentage increase equal to this stat’s value:[“op stat#”] += [“op stat#”] * value / 100 |
op param – Used as a possible parameter value for the “op” function.
op base – Used as a possible parameter value for the “op” function.
op stat1 (to opstat3) – Used as a possible parameter value for the “op” function.
direct – Boolean Field. If equals 1, then when the stat is being updated in certain skill functions having to do with state changes, the stat will update in relation to its “maxstat” field to ensure that it never exceeds that value. If equals 0, then ignore this, and the stat will simply update in these cases. This only applies to skills that use skill server function 65, 66, 81, and 82.
maxstat – Controls which stat is associated with this stat to be treated as the maximum version of this stat. This means that 2 stats are essentially linked so that there can be a current version of the stat and a maximum version to control the cap of stat’s value. This is used for Life, Mana, Stamina, and Durability. This field relies on the “direct” field to be enabled unless it is being used for the healing potion item spell.
damagerelated – Boolean Field. If equals 1, then this stat will be exclusive to the item and will not add to the unit. If equals 0, then ignore this, and the stat will always add to the unit. This is typically used for weapons and is important when dual wielding weapons so that when a unit attacks, then one weapon’s stats do not stack with another weapon’s stats.
itemevent1 & itemevent2 – Uses an event that will activate the specified function defined by “itemeventfunc#”. This points to the ID of an event defined in the events.txt file.
event | Description |
(empty) | Do nothing. |
hitbymissile | Unit is hit by a missile |
damagedinmelee | Unit takes damage from a melee attack |
damagedbymissile | Unit takes damage from a missile |
attackedinmelee | Unit is attacked by a melee attack |
doactive | Unit used a skill |
domeleedamage | Unit dealt damage with a melee attack |
domissiledamage | Unit dealt damage with a missile |
domeleeattack | Unit used a melee attack |
domissileattack | Unit used a missile attack |
kill | Unit killed another Unit |
killed | Unit dies |
absorbdamage | Unit takes damage |
levelup | Unit gained a Level |
death | Monster dies |
itemeventfunc1 & itemeventfunc2 – Specifies the function to use after the related item event occurred. Functions are defined by a numeric ID code. This is only applied based on the “itemevent#” field definition.
Code | Description |
0(or empty) | Do nothing. |
1 | Applies the effects of the Sorceress Chilling Armor skill |
2 | Applies the effects of the Sorceress Frozen Armor skill |
3 | Applies the effects of the Sorceress Shiver Armor skill |
4 | Applies the effects of the Necromancer Iron Maiden skill, causing damage taken to be dealt to the attacker |
5 | Applies the effects of the Necromancer Life Tap skill on monsters. Usable only on monsters when cast by players. |
6 | Attacker Takes Physical Damage |
7 | Applies knockback on the target, moving the target backwards from the attacker and being briefly stunned during this time. Chances depend on the “small” and “large” flags from the monstats2.txt file. |
8 | Applies the effects Barbarian Howl skill on monsters, causing them to run away in fear. Does not work on Champion or Unique monsters. |
9 | Applies the effects of the Necromancer Dim Vision skill to a target. Effectiveness is reduced from missile attacks. |
10 | Attacker Takes Lightning Damage |
11 | Attacker Takes Fire Damage |
12 | Attacker Takes Cold Damage |
13 | A percentage of damage taken will also reduce the user’s mana by that amount |
14 | Applies the Freeze effect on the target. Effectiveness is reduced from missile attacks. |
15 | Applies Open Wounds damage on the target, which causes life damage over time |
16 | Applies Crushing Blow damage on the target. Damage depends on if the target is a Player, Mercenary, Boss monster, Unique monster, Champion monster, or normal monster. |
17 | Restores mana to the user that performed the kill |
18 | Restores life to the user that performed the kill on a Demon monster |
19 | · Applies the slow state on the target which reduces that target’s attack speed and movement speed· If the target is a player, Champion monster, Unique Monster, Boss, or mercenary, then the max slow value is 50· If the target is a Super monster, then the max slow value is 75· Otherwise, the max slow value is 90. |
20 | Use a skill against the target after the user is attacks or hits the enemy |
21 | Use a skill against the attacker after the user is hit by an attack. If there is no attacker, then the skill is cast at the user’s location |
22 | Applies the effects of the Necromancer Bone Armor skill, absorbing physical damage taken |
23 | · Transfers damage dealt by a pet as healing that is split between the pet and its owner (Used by the Necromancer Blood Golem pet)· Uses the linked skill’s “calc2” field from the skills.txt file to determine the total healing percentage· Uses the linked skill’s “calc3” field from the skills.txt file to determine the healing percentage that is split to the pet’s owner |
24 | · Absorb a percentage any damage taken and deals that damage to Mana instead of Life (Used by the Sorceress Energy Shield skill)· Uses the linked skill’s “calc1” and “calc2” fields from the skills.txt file to determine the mana to Damage ratio conversion |
25 | Apply the effects of the Druid Cyclone armor skill, absorbing Fire, Cold, and Lightning damage taken |
26 | · Transfers damage taken from the pet to its owner (Used by the Necromancer Blood Golem pet)· The percentage of damage transferred is defined in the linked skill’s “Param5” field from the skills.txt file |
27 | · Applies the “item_slow” stat which reduces the target’s attack speed and movement speed (Used by the Necromancer Clay Golem pet)· If the target is a Champion or Unique monster, then the max slow value is 50. Otherwise, the max slow value is 90. |
28 | Restores life to the user that performed a kill |
29 | Applies the “restinpeace” state which essentially the corpse of a killed monster, making it unusable |
30 | Cast a skill when the item event occurs, either with without a target |
31 | Reanimates the targeted enemy as a pet monster for the user. Only applies on units classified as monsters, and not Champions or Uniques. |
32 | Use a skill to deal area radius damage around the user |
33 | Use a skill’s linked sub-skill from the “sumskill1” in the skills.txt file |
descpriority – Controls how this stat is sorted in item tooltips. This field is compared to the same field on other stats to determine how to order the stats. The higher the value means that the stat will be sorted higher than other stats. If more than 1 stat has the same “descpriority” value, then they will be listed in the order defined in this data file.
descfunc – Controls how the stat is displayed in tooltips. Uses an ID value to select a description function to format the string value.
Code | Parameters | Description |
0 | No display. Do nothing. | |
1 | descval descstrpos descstrneg | Plus or Minus· If value > 0, “+[value] [descstr]”· If value < 0, “-[value] [descstr]” |
2 | descval descstrpos descstrneg | Percent· “[value] [descstr]” |
3 | descval descstrpos descstrneg | String· “[value] [descstr]” |
4 | descval descstrpos descstrneg | Plus Percent· “+[value]% [descstr]” |
5 | descval descstrpos descstrneg | Percent 128· “+[value * 100 / 128]% [descstr]” |
6 | descval descstrpos descstrneg descstr2 | Plus or Minus Per Level· If value > 0, “+[value] [descstr] [descstr2]”· If value < 0, “-[value] [descstr] [descstr2]” |
7 | descval descstrpos descstrneg descstr2 | Percent Per Level· “[value]% [descstr] [descstr2]” |
8 | descval descstrpos descstrneg descstr2 | Plus Percent Per Level· “+[value]% [descstr] [descstr2]” |
9 | descval descstrpos descstrneg descstr2 | String Per Level· “[value] [descstr] [descstr2]” |
10 | descval descstrpos descstrneg descstr2 | Percent 128 Per Level· “[value * 100 / 128]% [descstr] [descstr2]” |
11 | Repair· Uses the string ModStre9t and inserts the value into this string | |
12 | descval descstrpos descstrneg | Plus Sub One· If value > 1, then use “+[value] [descstr]”· Else, use “[value] [descstr]” or “-[value] [descstr]” |
13 | Add Class Skill· Uses the “StrAllSkills” from the charstats.txt file | |
14 | Add Tab Skill· Uses “StrSkillTab#” from the charstats.txt file based on related tab being modified | |
15 | descstrpos | Proc Skill· Gets the skill name, skill level, and chance percent to insert into the “descstrpos” string |
16 | descstrpos descstrneg | Aura· Gets the skill name, and uses the stat’s value for the skill level and inserts these values into the designated “descstr” string |
17 | descstrpos descstrneg | Plus Minus By Time· Gets the proper value based on the time of day and inserts this value into the “descstr” string· Uses the following strings for the second part of the description, depending on the time selected: ModStre9d, ModStre9e, ModStre9f, ModStre9g |
18 | descstrpos descstrneg | (Same as function 17) |
19 | descstrpos descstrneg descstr2 | Sprintf Num· Uses the Sprintf string function with the designated “descstr” string and adds “descstr2” if that value is not empty |
20 | descval descstrpos descstrneg | Minus Percent· “[value * -1]% [descstr]” |
21 | descstrpos descstrneg descstr2 | Minus Percent Per Level· “[value * -1]% [descstr] [descstr2]”· If “descstr2” is empty, then default to using the increaseswithplaylevelX string |
22 | descstrpos descstrneg | Versus Monster Percent· Uses “strplur” from the MonType.txt file based on the monster type selected, and inserts this value into the designated “descstr” string |
23 | descstrpos descstrneg | Reanimate· Obtains the related “NameStr” string from the monstats.txt file and inserts this string into the designated “descstr” string |
24 | descstrpos descstrneg | Charges· Obtains the skill, skill level, max charges, and current charges and inserts these values into the designated “descstr” string |
25 | descval descstrpos descstrneg | Minus· If desval equals 1, then use “+[value * -1] [descstr]”· If desval equals 2, then use “[descstr] +[value * -1]” |
26 | descval descstrpos descstrneg descstr2 | Minus Per Level· (Same as function 25) |
27 | descstrpos descstrneg | Single Skill· Obtains the “str name” field from skilldesc.txt file and the “StrClassOnly” field from the charstats.txt file· Uses the stat value as the skill level· Combines these values into the designated “descstr” string |
28 | descstrpos descstrneg | Non Class Skill· Obtains the “str name” field from skilldesc.txt file· Uses the stat value as the skill level· Combines these values into the designated “descstr” string |
29 | descstrpos descstrneg descstr2 | Sprintf num positive· Same as function 19, except the it uses the absolute value of [value] |
descval – Used as a possible parameter value for the “descfunc” function. This controls the how the value of the stat is displayed.
Code | Description |
0 | Do not show the value of the stat |
1 | Shows the value of the stat at the start of its description |
2 | Shows the value of the stat at the end of its description |
descstrpos – Used as a possible parameter value for the “descfunc” function. This uses a string to display the item stat in a tooltip when its value is positive.
descstrneg – Used as a possible parameter value for the “descfunc” function. This uses a string to display the item stat in a tooltip when its value is negative.
descstr2 – Used as a possible parameter value for the “descfunc” function. This uses a string to append to an item stat’s string in a tooltip.
dgrp – Assigns the stat to a group ID value. If all stats with a matching “dgrp” value are applied on the unit, then instead of displaying each stat individually, the group description will be applied instead (see “dgrpfunc” field)
dgrpfunc – Controls how the shared group of stats is displayed in tooltips. Uses an ID value to select a description function to format the string value. This function IDs are exactly the same as the “descfunc” field, see that description for more details.
dgrpval – Used as a possible parameter value for the “dgrpfunc” function. This controls the how the value of the stat is displayed. (Functions the same as the “descval” field)
dgrpstrpos – Used as a possible parameter value for the “dgrpfunc” function. This uses a string to display the item stat in a tooltip when its value is positive.
dgrpstrneg – Used as a possible parameter value for the “dgrpfunc” function. This uses a string to display the item stat in a tooltip when its value is negative.
dgrpstr2 – Used as a possible parameter value for the “dgrpfunc” function. This uses a string to append to an item stat’s string in a tooltip.
stuff – Used as a bit shift value for handling the conversion of skill IDs and skill levels to bit values for the stat. Controls the numeric range of possible skill IDs and skill levels for charge based items. This value cannot be less than or equal to 0, or greater than 8, otherwise it will default to 6. The row that this value appears in the data file is unrelated, since this is a universally applied value.
advdisplay – Controls how the stat appears in the Advanced Stats UI
Code | Description |
0(or empty) | The stat will never appear on the Advanced Stats UI |
1 | The stat will always show on the Advanced Stats UI |
2 | The stat will only show on the Advanced Stats UI if the value is greater than 0 |