[DiscordArchive] So i started a wotlk azerothcore build server, hosted for me and my friends play all together, and m
[DiscordArchive] So i started a wotlk azerothcore build server, hosted for me and my friends play all together, and m
Archived author: Mithria • Posted: 2025-08-15T00:26:06.372000+00:00
Original source
So item_template has two columns that control this. ScalingStatDistribution and ScalingStatValue
ScalingStatDistribution is a direct row id reference to ScalingStatDistribution.dbc and ScalingStatValue is a bitmask of columns 3-24 from ScalingStatValues.dbc expressed as a standard bitmask using values 1-8388608 (aka, column 3 is value 1, column 24 is value 8388608)
now, some columns in that bitmask are mutually exclusive and cannot be used together.
the long and short of it:
lets say you want +300 spell power on an item at level 80 using normal stat progression. We would add a new row to ScalingStatDistribution.dbc and give it a new unique ID. set StaID_1 to 45 (spell power), leave all other stats as -1 (although you would set these if you want more than 1 stat), then set Bonus_1 to 30928, and MaxLevel to 80. then for our item_template item, we set ScalingStatDistribution to the row ID that we just added to the dbc, and set ScalingStatValue to 1 (normal progression)
so where did that 30928 come from? Well since we're using ScalingStatValue = 1 (normal stat progression), we go to ScalingStatValue.dbc and look at the column that matches that bitmask (in this case, column 3 (see above)). If we look at what value in column 3 corresponds to level 80, its 97. So to determine the Bonus_1 number used above, we can use the following formula:
(stat / budget) * 10000 = Bonus
where Stat is the desired stat value @ level 80, and budget is the number taken from the column we are using out of ScalingStatValues.dbc which corresponds to level 80.
For example, we wanted spell power to be 300 at level 80, using normal stat progression. So for our formula, we know the value of stat, and the value of budget will be the number from ScalingStatValues.dbc which is used at CharLevel = 80. in this case it will be 97.
(300 / 97) * 10000 = 30928 (rounded)
Archived author: Mithria • Posted: 2025-08-15T00:30:04.954000+00:00
Original source
the columns that are mutually exclusive from ScalingStatValues.dbc are:
the following columns cannot be
used together:
`3, 4, 5, 6, 18, 19`
`7, 8, 9, 10, 20, 21, 22, 23, 24`
`11, 12, 13, 14, 15, 16`
`17`