diff --git a/Classes/ConfigTab.lua b/Classes/ConfigTab.lua index a9aa13a8..73096d4c 100644 --- a/Classes/ConfigTab.lua +++ b/Classes/ConfigTab.lua @@ -320,8 +320,12 @@ local varList = { modList:NewMod("CritChanceLucky", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) end }, { var = "projectileDistance", type = "number", label = "Projectile travel distance:", ifFlag = "projectile" }, - { var = "conditionEnemyMoving", type = "check", label = "Is the enemy Moving?", ifFlag = "bleed", apply = function(val, modList, enemyModList) - modList:NewMod("Damage", "MORE", 500, "Movement", 0, KeywordFlag.Bleed) + { var = "conditionEnemyMoving", type = "check", label = "Is the enemy Moving?", ifFlag = "bleed", apply = function(val, modList, enemyModList, build) + if build.targetVersion == "2_6" then + modList:NewMod("Damage", "MORE", 500, "Movement", 0, KeywordFlag.Bleed) + else + modList:NewMod("Damage", "MORE", 100, "Movement", 0, KeywordFlag.Bleed) + end end }, { var = "conditionEnemyFullLife", type = "check", label = "Is the enemy on Full Life?", ifEnemyCond = "FullLife", apply = function(val, modList, enemyModList) enemyModList:NewMod("Condition:FullLife", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) @@ -729,15 +733,15 @@ function ConfigTabClass:BuildModList() if varData.apply then if varData.type == "check" then if input[varData.var] then - varData.apply(true, modList, enemyModList) + varData.apply(true, modList, enemyModList, self.build) end elseif varData.type == "number" then if input[varData.var] and input[varData.var] ~= 0 then - varData.apply(input[varData.var], modList, enemyModList) + varData.apply(input[varData.var], modList, enemyModList, self.build) end elseif varData.type == "list" then if input[varData.var] then - varData.apply(input[varData.var], modList, enemyModList) + varData.apply(input[varData.var], modList, enemyModList, self.build) end end end diff --git a/Data/3_0/Skills/act_dex.lua b/Data/3_0/Skills/act_dex.lua index e13fc3c9..e6105be4 100644 --- a/Data/3_0/Skills/act_dex.lua +++ b/Data/3_0/Skills/act_dex.lua @@ -352,7 +352,7 @@ skills["ChargedAttack"] = { mod("Speed", "MORE", 60, ModFlag.Attack), --"active_skill_attack_speed_+%_final" = 60 --"charged_attack_damage_per_stack_+%_final" = 20 --"is_area_damage" = ? - nil, --"base_skill_show_average_damage_instead_of_dps" = ? + --"base_skill_show_average_damage_instead_of_dps" = ? --"skill_can_add_multiple_charges_per_action" = ? skill("radius", 14), mod("Damage", "MORE", 120, ModFlag.Attack, 0, { type = "SkillPart", skillPart = 2 }), @@ -446,7 +446,7 @@ skills["BladeVortex"] = { --"is_area_damage" = ? --"skill_can_add_multiple_charges_per_action" = ? --"action_ignores_crit_tracking" = ? - nil, --"base_skill_show_average_damage_instead_of_dps" = ? + --"base_skill_show_average_damage_instead_of_dps" = ? skill("radius", 15), mod("Damage", "MORE", 150, ModFlag.Spell, 0, { type = "SkillPart", skillPart = 2 }), mod("Damage", "MORE", 300, ModFlag.Spell, 0, { type = "SkillPart", skillPart = 3 }), @@ -2072,7 +2072,7 @@ skills["FlickerStrike"] = { mod("Speed", "MORE", 20, ModFlag.Attack), --"flicker_strike_more_attack_speed_+%_final" = 20 mod("Speed", "INC", 10, ModFlag.Attack, 0, { type = "Multiplier", var = "FrenzyCharge" }), --"base_attack_speed_+%_per_frenzy_charge" = 10 --"ignores_proximity_shield" = ? - nil, --"base_skill_show_average_damage_instead_of_dps" = ? + --"base_skill_show_average_damage_instead_of_dps" = ? }, qualityMods = { mod("Damage", "INC", 1, 0, 0, nil), --"damage_+%" = 1 diff --git a/Data/3_0/Skills/act_int.lua b/Data/3_0/Skills/act_int.lua index 8753e605..13368b07 100644 --- a/Data/3_0/Skills/act_int.lua +++ b/Data/3_0/Skills/act_int.lua @@ -2048,7 +2048,7 @@ skills["Flameblast"] = { skill("CritChance", 5), --"charged_blast_spell_damage_+%_final_per_stack" = 110 --"is_area_damage" = ? - nil, --"base_skill_show_average_damage_instead_of_dps" = ? + --"base_skill_show_average_damage_instead_of_dps" = ? mod("Damage", "MORE", 990, 0, 0, { type = "SkillPart", skillPart = 2 }), skill("dpsMultiplier", 0.1, { type = "SkillPart", skillPart = 2 }), }, @@ -5526,7 +5526,7 @@ skills["Wither"] = { baseMods = { skill("castTime", 0.28), mod("ChaosDamageTaken", "INC", 7, 0, 0, { type = "GlobalEffect", effectType = "Debuff" }), --"chaos_damage_taken_+%" = 7 - nil, --"base_skill_effect_duration" = 500 + --"base_skill_effect_duration" = 500 skill("duration", 2), --"base_secondary_skill_effect_duration" = 2000 skill("stackCount", 5, { type = "SkillPart", skillPart = 2 }), skill("stackCount", 10, { type = "SkillPart", skillPart = 3 }), diff --git a/Data/3_0/Skills/minion.lua b/Data/3_0/Skills/minion.lua index ad6a7d67..54bd4c55 100644 --- a/Data/3_0/Skills/minion.lua +++ b/Data/3_0/Skills/minion.lua @@ -21,8 +21,6 @@ skills["ChaosElementalCascadeSummoned"] = { skill("castTime", 0.8), skill("damageEffectiveness", 0.6), skill("cooldown", 3.5), - skill("PhysicalMin", 9), --"spell_minimum_base_physical_damage" = 9 - skill("PhysicalMax", 13), --"spell_maximum_base_physical_damage" = 13 --"upheaval_number_of_spikes" = 6 mod("Speed", "INC", 0, ModFlag.Cast), --"base_cast_speed_+%" = 0 --"skill_art_variation" = 3 @@ -34,9 +32,47 @@ skills["ChaosElementalCascadeSummoned"] = { }, levelMods = { [1] = skill("levelRequirement", nil), + [2] = skill("PhysicalMin", nil), --"spell_minimum_base_physical_damage" + [3] = skill("PhysicalMax", nil), --"spell_maximum_base_physical_damage" }, levels = { - [1] = { 4, }, + [1] = { 4, 9, 13, }, + [2] = { 7, 12, 18, }, + [3] = { 9, 14, 22, }, + [4] = { 12, 19, 28, }, + [5] = { 16, 26, 39, }, + [6] = { 20, 35, 52, }, + [7] = { 27, 55, 83, }, + [8] = { 28, 59, 89, }, + [9] = { 29, 63, 94, }, + [10] = { 32, 76, 114, }, + [11] = { 36, 96, 145, }, + [12] = { 40, 122, 182, }, + [13] = { 45, 161, 242, }, + [14] = { 49, 201, 301, }, + [15] = { 50, 212, 318, }, + [16] = { 52, 236, 354, }, + [17] = { 56, 292, 438, }, + [18] = { 60, 360, 539, }, + [19] = { 64, 441, 662, }, + [20] = { 65, 464, 696, }, + [21] = { 66, 488, 733, }, + [22] = { 67, 514, 770, }, + [23] = { 68, 540, 810, }, + [24] = { 69, 568, 852, }, + [25] = { 70, 597, 895, }, + [26] = { 71, 627, 941, }, + [27] = { 72, 659, 989, }, + [28] = { 73, 693, 1039, }, + [29] = { 74, 728, 1091, }, + [30] = { 75, 764, 1146, }, + [31] = { 76, 803, 1204, }, + [32] = { 77, 843, 1264, }, + [33] = { 78, 885, 1328, }, + [34] = { 79, 929, 1394, }, + [35] = { 80, 975, 1463, }, + [36] = { 81, 1024, 1535, }, + [37] = { 82, 1074, 1611, }, }, } skills["SandstormChaosElementalSummoned"] = { @@ -52,7 +88,6 @@ skills["SandstormChaosElementalSummoned"] = { baseMods = { skill("castTime", 1), skill("cooldown", 8), - skill("ChaosDot", 14.533333333333), --"base_chaos_damage_to_deal_per_minute" = 872 skill("duration", 5), --"base_skill_effect_duration" = 5000 --"active_skill_area_of_effect_radius_+%_final" = 0 --"skill_art_variation" = 2 @@ -62,9 +97,46 @@ skills["SandstormChaosElementalSummoned"] = { }, levelMods = { [1] = skill("levelRequirement", nil), + [2] = skill("ChaosDot", nil), --"base_chaos_damage_to_deal_per_minute" }, levels = { - [1] = { 3, }, + [1] = { 3, 14.533333333333, }, + [2] = { 5, 17.383333333333, }, + [3] = { 8, 21.95, }, + [4] = { 11, 26.95, }, + [5] = { 15, 34.3, }, + [6] = { 20, 44.75, }, + [7] = { 24, 54.183333333333, }, + [8] = { 28, 64.7, }, + [9] = { 29, 67.516666666667, }, + [10] = { 32, 76.383333333333, }, + [11] = { 36, 89.366666666667, }, + [12] = { 40, 103.75, }, + [13] = { 45, 123.9, }, + [14] = { 49, 141.93333333333, }, + [15] = { 50, 146.73333333333, }, + [16] = { 52, 156.7, }, + [17] = { 56, 178.11666666667, }, + [18] = { 60, 201.73333333333, }, + [19] = { 64, 227.73333333333, }, + [20] = { 65, 234.63333333333, }, + [21] = { 66, 241.68333333333, }, + [22] = { 67, 248.91666666667, }, + [23] = { 68, 256.31666666667, }, + [24] = { 69, 263.9, }, + [25] = { 70, 271.65, }, + [26] = { 71, 279.6, }, + [27] = { 72, 287.73333333333, }, + [28] = { 73, 296.05, }, + [29] = { 74, 304.58333333333, }, + [30] = { 75, 313.3, }, + [31] = { 76, 322.21666666667, }, + [32] = { 77, 331.35, }, + [33] = { 78, 340.7, }, + [34] = { 79, 350.26666666667, }, + [35] = { 80, 360.06666666667, }, + [36] = { 81, 370.08333333333, }, + [37] = { 82, 380.33333333333, }, }, } skills["FireElementalFlameRedSummoned"] = { @@ -82,8 +154,6 @@ skills["FireElementalFlameRedSummoned"] = { baseMods = { skill("castTime", 0.25), skill("damageEffectiveness", 0.2), - skill("FireMin", 6), --"spell_minimum_base_fire_damage" = 6 - skill("FireMax", 8), --"spell_maximum_base_fire_damage" = 8 --"skill_art_variation" = 4 mod("Speed", "MORE", -89, ModFlag.Cast), --"active_skill_cast_speed_+%_final" = -89 --"spell_maximum_action_distance_+%" = -77 @@ -95,9 +165,45 @@ skills["FireElementalFlameRedSummoned"] = { }, levelMods = { [1] = skill("levelRequirement", nil), + [2] = skill("FireMin", nil), --"spell_minimum_base_fire_damage" + [3] = skill("FireMax", nil), --"spell_maximum_base_fire_damage" }, levels = { - [1] = { 3, }, + [1] = { 3, 6, 8, }, + [2] = { 5, 7, 11, }, + [3] = { 8, 10, 14, }, + [4] = { 12, 14, 21, }, + [5] = { 15, 18, 27, }, + [6] = { 19, 24, 37, }, + [7] = { 20, 26, 39, }, + [8] = { 21, 28, 42, }, + [9] = { 26, 40, 61, }, + [10] = { 30, 53, 79, }, + [11] = { 34, 69, 103, }, + [12] = { 38, 88, 133, }, + [13] = { 43, 120, 180, }, + [14] = { 45, 135, 203, }, + [15] = { 53, 215, 323, }, + [16] = { 58, 285, 428, }, + [17] = { 62, 356, 534, }, + [18] = { 63, 376, 565, }, + [19] = { 66, 443, 665, }, + [20] = { 67, 468, 702, }, + [21] = { 68, 494, 741, }, + [22] = { 69, 522, 782, }, + [23] = { 70, 550, 825, }, + [24] = { 71, 581, 871, }, + [25] = { 72, 612, 919, }, + [26] = { 73, 646, 969, }, + [27] = { 74, 681, 1022, }, + [28] = { 75, 718, 1078, }, + [29] = { 76, 757, 1136, }, + [30] = { 77, 798, 1198, }, + [31] = { 78, 841, 1262, }, + [32] = { 79, 887, 1330, }, + [33] = { 80, 934, 1402, }, + [34] = { 81, 985, 1477, }, + [35] = { 82, 1037, 1556, }, }, } skills["FireElementalMortarSummoned"] = { @@ -117,8 +223,6 @@ skills["FireElementalMortarSummoned"] = { skill("cooldown", 6), --"monster_projectile_variation" = 3 --"projectile_spread_radius" = 15 - skill("FireMin", 152), --"spell_minimum_base_fire_damage" = 152 - skill("FireMax", 228), --"spell_maximum_base_fire_damage" = 228 --"spell_maximum_action_distance_+%" = -33 --"is_area_damage" = ? --"base_is_projectile" = ? @@ -127,9 +231,40 @@ skills["FireElementalMortarSummoned"] = { }, levelMods = { [1] = skill("levelRequirement", nil), + [2] = skill("FireMin", nil), --"spell_minimum_base_fire_damage" + [3] = skill("FireMax", nil), --"spell_maximum_base_fire_damage" }, levels = { - [1] = { 34, }, + [1] = { 34, 152, 228, }, + [2] = { 36, 170, 254, }, + [3] = { 38, 188, 283, }, + [4] = { 40, 209, 314, }, + [5] = { 42, 232, 347, }, + [6] = { 44, 256, 384, }, + [7] = { 46, 283, 425, }, + [8] = { 48, 312, 468, }, + [9] = { 50, 344, 516, }, + [10] = { 52, 379, 568, }, + [11] = { 54, 416, 625, }, + [12] = { 56, 457, 686, }, + [13] = { 58, 502, 753, }, + [14] = { 60, 550, 826, }, + [15] = { 62, 603, 904, }, + [16] = { 64, 660, 990, }, + [17] = { 66, 722, 1083, }, + [18] = { 68, 789, 1184, }, + [19] = { 69, 825, 1237, }, + [20] = { 70, 862, 1293, }, + [21] = { 72, 941, 1412, }, + [22] = { 74, 1027, 1540, }, + [23] = { 76, 1120, 1680, }, + [24] = { 78, 1220, 1831, }, + [25] = { 80, 1329, 1994, }, + [26] = { 82, 1447, 2171, }, + [27] = { 84, 1575, 2363, }, + [28] = { 86, 1713, 2570, }, + [29] = { 88, 1863, 2794, }, + [30] = { 90, 2025, 3037, }, }, } skills["FireElementalConeSummoned"] = { @@ -246,8 +381,6 @@ skills["IceElementalSpearSummoned"] = { baseMods = { skill("castTime", 1), skill("cooldown", 4), - skill("ColdMin", 10), --"spell_minimum_base_cold_damage" = 10 - skill("ColdMax", 15), --"spell_maximum_base_cold_damage" = 15 --"monster_reverse_point_blank_damage_-%_at_minimum_range" = 25 --"base_is_projectile" = ? }, @@ -255,9 +388,47 @@ skills["IceElementalSpearSummoned"] = { }, levelMods = { [1] = skill("levelRequirement", nil), + [2] = skill("ColdMin", nil), --"spell_minimum_base_cold_damage" + [3] = skill("ColdMax", nil), --"spell_maximum_base_cold_damage" }, levels = { - [1] = { 3, }, + [1] = { 3, 10, 15, }, + [2] = { 5, 12, 18, }, + [3] = { 8, 16, 24, }, + [4] = { 11, 21, 31, }, + [5] = { 15, 28, 42, }, + [6] = { 20, 40, 60, }, + [7] = { 24, 51, 77, }, + [8] = { 28, 65, 97, }, + [9] = { 29, 69, 103, }, + [10] = { 32, 81, 122, }, + [11] = { 36, 101, 152, }, + [12] = { 40, 125, 187, }, + [13] = { 45, 161, 241, }, + [14] = { 49, 196, 293, }, + [15] = { 50, 205, 308, }, + [16] = { 52, 226, 339, }, + [17] = { 56, 273, 409, }, + [18] = { 60, 328, 493, }, + [19] = { 64, 394, 591, }, + [20] = { 65, 412, 618, }, + [21] = { 66, 431, 646, }, + [22] = { 67, 450, 676, }, + [23] = { 68, 471, 706, }, + [24] = { 69, 492, 738, }, + [25] = { 70, 514, 772, }, + [26] = { 71, 537, 806, }, + [27] = { 72, 562, 842, }, + [28] = { 73, 587, 880, }, + [29] = { 74, 613, 919, }, + [30] = { 75, 640, 960, }, + [31] = { 76, 668, 1002, }, + [32] = { 77, 698, 1046, }, + [33] = { 78, 728, 1092, }, + [34] = { 79, 760, 1140, }, + [35] = { 80, 793, 1190, }, + [36] = { 81, 828, 1241, }, + [37] = { 82, 864, 1295, }, }, } skills["LightningGolemArcSummoned"] = { @@ -276,17 +447,58 @@ skills["LightningGolemArcSummoned"] = { skill("damageEffectiveness", 0.6), skill("CritChance", 5), skill("cooldown", 8), - skill("LightningMin", 1), --"spell_minimum_base_lightning_damage" = 1 - skill("LightningMax", 8), --"spell_maximum_base_lightning_damage" = 8 skill("duration", 8), --"base_skill_effect_duration" = 8000 }, qualityMods = { }, levelMods = { [1] = skill("levelRequirement", nil), + [2] = skill("LightningMin", nil), --"spell_minimum_base_lightning_damage" + [3] = skill("LightningMax", nil), --"spell_maximum_base_lightning_damage" }, levels = { - [1] = { 1, }, + [1] = { 1, 1, 8, }, + [2] = { 2, 1, 9, }, + [3] = { 4, 1, 11, }, + [4] = { 7, 2, 14, }, + [5] = { 10, 2, 18, }, + [6] = { 13, 2, 22, }, + [7] = { 16, 3, 27, }, + [8] = { 19, 4, 32, }, + [9] = { 22, 4, 39, }, + [10] = { 25, 5, 46, }, + [11] = { 28, 6, 54, }, + [12] = { 31, 7, 62, }, + [13] = { 34, 8, 72, }, + [14] = { 36, 9, 80, }, + [15] = { 38, 10, 88, }, + [16] = { 40, 11, 96, }, + [17] = { 42, 12, 105, }, + [18] = { 44, 13, 115, }, + [19] = { 46, 14, 126, }, + [20] = { 48, 15, 137, }, + [21] = { 50, 17, 149, }, + [22] = { 52, 18, 162, }, + [23] = { 54, 20, 176, }, + [24] = { 56, 21, 191, }, + [25] = { 58, 23, 208, }, + [26] = { 60, 25, 225, }, + [27] = { 62, 27, 244, }, + [28] = { 64, 29, 264, }, + [29] = { 66, 32, 285, }, + [30] = { 68, 34, 308, }, + [31] = { 69, 36, 320, }, + [32] = { 70, 37, 333, }, + [33] = { 72, 40, 359, }, + [34] = { 74, 43, 387, }, + [35] = { 76, 46, 417, }, + [36] = { 78, 50, 449, }, + [37] = { 80, 54, 484, }, + [38] = { 82, 58, 521, }, + [39] = { 84, 62, 560, }, + [40] = { 86, 67, 602, }, + [41] = { 88, 72, 647, }, + [42] = { 90, 77, 695, }, }, } skills["MonsterProjectileSpellLightningGolemSummoned"] = { @@ -301,8 +513,6 @@ skills["MonsterProjectileSpellLightningGolemSummoned"] = { baseMods = { skill("castTime", 1), skill("CritChance", 5), - skill("LightningMin", 2), --"spell_minimum_base_lightning_damage" = 2 - skill("LightningMax", 18), --"spell_maximum_base_lightning_damage" = 18 --"monster_projectile_variation" = 11 mod("Speed", "MORE", -15, ModFlag.Cast), --"active_skill_cast_speed_+%_final" = -15 --"spell_maximum_action_distance_+%" = -40 @@ -312,9 +522,52 @@ skills["MonsterProjectileSpellLightningGolemSummoned"] = { }, levelMods = { [1] = skill("levelRequirement", nil), + [2] = skill("LightningMin", nil), --"spell_minimum_base_lightning_damage" + [3] = skill("LightningMax", nil), --"spell_maximum_base_lightning_damage" }, levels = { - [1] = { 1, }, + [1] = { 1, 2, 18, }, + [2] = { 2, 2, 21, }, + [3] = { 4, 3, 26, }, + [4] = { 7, 4, 35, }, + [5] = { 10, 5, 45, }, + [6] = { 13, 6, 58, }, + [7] = { 16, 8, 72, }, + [8] = { 19, 10, 89, }, + [9] = { 22, 12, 108, }, + [10] = { 25, 15, 131, }, + [11] = { 28, 17, 157, }, + [12] = { 31, 21, 187, }, + [13] = { 34, 25, 221, }, + [14] = { 36, 27, 247, }, + [15] = { 38, 31, 275, }, + [16] = { 40, 34, 306, }, + [17] = { 42, 38, 340, }, + [18] = { 44, 42, 378, }, + [19] = { 46, 46, 418, }, + [20] = { 48, 51, 463, }, + [21] = { 50, 57, 511, }, + [22] = { 52, 63, 565, }, + [23] = { 54, 69, 623, }, + [24] = { 56, 76, 686, }, + [25] = { 58, 84, 755, }, + [26] = { 60, 92, 830, }, + [27] = { 62, 101, 912, }, + [28] = { 64, 111, 1001, }, + [29] = { 66, 122, 1098, }, + [30] = { 68, 134, 1204, }, + [31] = { 69, 140, 1261, }, + [32] = { 70, 147, 1319, }, + [33] = { 72, 161, 1445, }, + [34] = { 74, 176, 1581, }, + [35] = { 76, 192, 1729, }, + [36] = { 78, 210, 1889, }, + [37] = { 80, 229, 2064, }, + [38] = { 82, 250, 2254, }, + [39] = { 84, 273, 2460, }, + [40] = { 86, 298, 2683, }, + [41] = { 88, 325, 2926, }, + [42] = { 90, 354, 3189, }, }, } skills["LightningGolemWrath"] = { @@ -332,20 +585,157 @@ skills["LightningGolemWrath"] = { baseMods = { skill("castTime", 0.8), skill("cooldown", 12), - mod("LightningMin", "BASE", 1, ModFlag.Attack, 0, { type = "GlobalEffect", effectType = "Aura" }), --"attack_minimum_added_lightning_damage" = 1 - mod("LightningMax", "BASE", 1, ModFlag.Attack, 0, { type = "GlobalEffect", effectType = "Aura" }), --"attack_maximum_added_lightning_damage" = 1 skill("duration", 4), --"base_skill_effect_duration" = 4000 - mod("LightningMin", "BASE", 1, ModFlag.Spell, 0, { type = "GlobalEffect", effectType = "Aura" }), --"spell_minimum_added_lightning_damage" = 1 - mod("LightningMax", "BASE", 1, ModFlag.Spell, 0, { type = "GlobalEffect", effectType = "Aura" }), --"spell_maximum_added_lightning_damage" = 1 --"base_deal_no_damage" = ? }, qualityMods = { }, levelMods = { [1] = skill("levelRequirement", nil), + [2] = mod("LightningMin", "BASE", nil, ModFlag.Attack, 0, { type = "GlobalEffect", effectType = "Aura" }), --"attack_minimum_added_lightning_damage" + [3] = mod("LightningMax", "BASE", nil, ModFlag.Attack, 0, { type = "GlobalEffect", effectType = "Aura" }), --"attack_maximum_added_lightning_damage" + [4] = mod("LightningMin", "BASE", nil, ModFlag.Spell, 0, { type = "GlobalEffect", effectType = "Aura" }), --"spell_minimum_added_lightning_damage" + [5] = mod("LightningMax", "BASE", nil, ModFlag.Spell, 0, { type = "GlobalEffect", effectType = "Aura" }), --"spell_maximum_added_lightning_damage" }, levels = { - [1] = { 1, }, + [1] = { 1, 1, 1, 1, 1, }, + [2] = { 8, 1, 2, 1, 1, }, + [3] = { 16, 1, 4, 1, 2, }, + [4] = { 24, 1, 6, 1, 3, }, + [5] = { 34, 1, 9, 1, 5, }, + [6] = { 36, 1, 10, 1, 6, }, + [7] = { 38, 1, 10, 1, 6, }, + [8] = { 40, 1, 11, 1, 7, }, + [9] = { 42, 1, 12, 1, 7, }, + [10] = { 44, 1, 13, 1, 8, }, + [11] = { 46, 2, 14, 1, 9, }, + [12] = { 48, 2, 15, 1, 9, }, + [13] = { 50, 2, 17, 1, 10, }, + [14] = { 52, 2, 18, 1, 11, }, + [15] = { 54, 2, 19, 1, 12, }, + [16] = { 56, 2, 21, 1, 12, }, + [17] = { 58, 2, 22, 1, 13, }, + [18] = { 60, 3, 24, 2, 14, }, + [19] = { 62, 3, 25, 2, 15, }, + [20] = { 64, 3, 27, 2, 16, }, + [21] = { 66, 3, 29, 2, 17, }, + [22] = { 68, 3, 31, 2, 19, }, + [23] = { 69, 4, 32, 2, 19, }, + [24] = { 70, 4, 33, 2, 20, }, + [25] = { 72, 4, 35, 2, 21, }, + [26] = { 74, 4, 37, 2, 22, }, + [27] = { 76, 4, 40, 3, 24, }, + [28] = { 78, 5, 42, 3, 25, }, + [29] = { 80, 5, 45, 3, 27, }, + [30] = { 82, 5, 48, 3, 29, }, + [31] = { 84, 6, 51, 3, 31, }, + [32] = { 86, 6, 54, 4, 33, }, + [33] = { 88, 6, 58, 4, 35, }, + [34] = { 90, 7, 61, 4, 37, }, + }, +} +skills["PlayerRagingSpiritMeleeAttack"] = { + name = "Melee Attack", + hidden = true, + color = 4, + description = "Strike your foes down with a powerful blow.", + skillTypes = { [1] = true, [48] = true, [6] = true, [3] = true, [25] = true, [28] = true, [24] = true, }, + baseFlags = { + attack = true, + melee = true, + }, + baseMods = { + skill("castTime", 1), + }, + qualityMods = { + }, + levelMods = { + [1] = skill("levelRequirement", nil), + [2] = mod("Damage", "MORE", nil, ModFlag.Hit), --"active_skill_damage_+%_final" + }, + levels = { + [1] = { 4, 76, }, + [2] = { 6, 75, }, + [3] = { 9, 74, }, + [4] = { 12, 73, }, + [5] = { 15, 72, }, + [6] = { 19, 71, }, + [7] = { 23, 70, }, + [8] = { 28, 69, }, + [9] = { 33, 68, }, + [10] = { 39, 67, }, + [11] = { 43, 66, }, + [12] = { 46, 65, }, + [13] = { 49, 64, }, + [14] = { 52, 63, }, + [15] = { 55, 62, }, + [16] = { 58, 61, }, + [17] = { 61, 60, }, + [18] = { 64, 59, }, + [19] = { 66, 58, }, + [20] = { 68, 57, }, + [21] = { 70, 56, }, + [22] = { 72, 55, }, + [23] = { 74, 54, }, + [24] = { 76, 53, }, + [25] = { 78, 52, }, + [26] = { 80, 51, }, + [27] = { 82, 50, }, + [28] = { 84, 49, }, + [29] = { 86, 48, }, + [30] = { 88, 47, }, + }, +} +skills["RagingSpiritMeleeAttack"] = { + name = "Melee Attack", + hidden = true, + color = 4, + description = "Strike your foes down with a powerful blow.", + skillTypes = { [1] = true, [48] = true, [6] = true, [3] = true, [25] = true, [28] = true, [24] = true, }, + baseFlags = { + attack = true, + melee = true, + }, + baseMods = { + skill("castTime", 1), + }, + qualityMods = { + }, + levelMods = { + [1] = skill("levelRequirement", nil), + [2] = mod("Damage", "MORE", nil, ModFlag.Hit), --"active_skill_damage_+%_final" + }, + levels = { + [1] = { 4, 76, }, + [2] = { 6, 71, }, + [3] = { 9, 66, }, + [4] = { 12, 61, }, + [5] = { 15, 56, }, + [6] = { 19, 52, }, + [7] = { 23, 47, }, + [8] = { 28, 42, }, + [9] = { 33, 37, }, + [10] = { 39, 32, }, + [11] = { 43, 28, }, + [12] = { 46, 23, }, + [13] = { 49, 18, }, + [14] = { 52, 12, }, + [15] = { 55, 10, }, + [16] = { 58, 7, }, + [17] = { 61, 5, }, + [18] = { 64, 2, }, + [19] = { 66, 0, }, + [20] = { 68, -2, }, + [21] = { 70, -4, }, + [22] = { 72, -7, }, + [23] = { 74, -10, }, + [24] = { 76, -10, }, + [25] = { 78, -10, }, + [26] = { 80, -10, }, + [27] = { 82, -10, }, + [28] = { 84, -10, }, + [29] = { 86, -10, }, + [30] = { 88, -10, }, }, } skills["SpectralSkullShieldCharge"] = { @@ -412,8 +802,47 @@ skills["SkeletonProjectileCold"] = { }, levels = { [1] = { 4, 5, 3, 5, }, - [2] = { 19, 4, 11, 17, }, - [3] = { 68, 4, 687, 1071, }, + [2] = { 7, 5, 4, 6, }, + [3] = { 10, 5, 6, 8, }, + [4] = { 15, 5, 8, 13, }, + [5] = { 19, 4, 11, 17, }, + [6] = { 20, 4, 12, 18, }, + [7] = { 25, 4, 17, 26, }, + [8] = { 28, 4, 21, 32, }, + [9] = { 29, 4, 22, 34, }, + [10] = { 30, 4, 24, 36, }, + [11] = { 33, 4, 29, 43, }, + [12] = { 34, 4, 31, 46, }, + [13] = { 37, 4, 37, 55, }, + [14] = { 39, 4, 42, 62, }, + [15] = { 43, 4, 53, 79, }, + [16] = { 44, 4, 56, 84, }, + [17] = { 47, 4, 66, 99, }, + [18] = { 48, 4, 70, 105, }, + [19] = { 51, 4, 82, 124, }, + [20] = { 58, 4, 121, 181, }, + [21] = { 61, 4, 141, 212, }, + [22] = { 62, 4, 149, 223, }, + [23] = { 63, 4, 157, 236, }, + [24] = { 64, 4, 165, 248, }, + [25] = { 65, 4, 174, 261, }, + [26] = { 66, 4, 184, 275, }, + [27] = { 67, 4, 193, 290, }, + [28] = { 68, 4, 687, 1071, }, + [29] = { 69, 4, 723, 1128, }, + [30] = { 70, 4, 761, 1187, }, + [31] = { 71, 4, 801, 1249, }, + [32] = { 72, 4, 843, 1315, }, + [33] = { 73, 4, 887, 1383, }, + [34] = { 74, 4, 933, 1455, }, + [35] = { 75, 4, 981, 1530, }, + [36] = { 76, 4, 1032, 1609, }, + [37] = { 77, 4, 1085, 1692, }, + [38] = { 78, 4, 1141, 1779, }, + [39] = { 79, 4, 1200, 1870, }, + [40] = { 80, 4, 1261, 1966, }, + [41] = { 81, 4, 1325, 2066, }, + [42] = { 82, 4, 1393, 2171, }, }, } skills["SkeletonProjectileFire"] = { @@ -441,8 +870,47 @@ skills["SkeletonProjectileFire"] = { }, levels = { [1] = { 4, 5, 4, 6, }, - [2] = { 19, 4, 14, 21, }, - [3] = { 68, 4, 840, 1309, }, + [2] = { 7, 5, 5, 8, }, + [3] = { 10, 5, 7, 10, }, + [4] = { 15, 5, 10, 15, }, + [5] = { 19, 4, 14, 21, }, + [6] = { 20, 4, 15, 22, }, + [7] = { 25, 4, 21, 32, }, + [8] = { 28, 4, 26, 39, }, + [9] = { 29, 4, 27, 41, }, + [10] = { 30, 4, 29, 44, }, + [11] = { 33, 4, 35, 53, }, + [12] = { 34, 4, 38, 56, }, + [13] = { 37, 4, 45, 68, }, + [14] = { 39, 4, 51, 76, }, + [15] = { 43, 4, 64, 96, }, + [16] = { 44, 4, 68, 102, }, + [17] = { 47, 4, 81, 121, }, + [18] = { 48, 4, 85, 128, }, + [19] = { 51, 4, 101, 151, }, + [20] = { 58, 4, 147, 221, }, + [21] = { 61, 4, 173, 259, }, + [22] = { 62, 4, 182, 273, }, + [23] = { 63, 4, 192, 288, }, + [24] = { 64, 4, 202, 303, }, + [25] = { 65, 4, 213, 320, }, + [26] = { 66, 4, 224, 337, }, + [27] = { 67, 4, 236, 354, }, + [28] = { 68, 4, 840, 1309, }, + [29] = { 69, 4, 884, 1378, }, + [30] = { 70, 4, 930, 1451, }, + [31] = { 71, 4, 979, 1527, }, + [32] = { 72, 4, 1030, 1607, }, + [33] = { 73, 4, 1084, 1690, }, + [34] = { 74, 4, 1140, 1778, }, + [35] = { 75, 4, 1200, 1870, }, + [36] = { 76, 4, 1262, 1967, }, + [37] = { 77, 4, 1327, 2068, }, + [38] = { 78, 4, 1395, 2175, }, + [39] = { 79, 4, 1466, 2286, }, + [40] = { 80, 4, 1541, 2403, }, + [41] = { 81, 4, 1620, 2525, }, + [42] = { 82, 4, 1702, 2654, }, }, } skills["SkeletonProjectileLightning"] = { @@ -470,15 +938,54 @@ skills["SkeletonProjectileLightning"] = { }, levels = { [1] = { 4, 5, 3, 8, }, - [2] = { 19, 4, 10, 29, }, - [3] = { 68, 4, 409, 1221, }, + [2] = { 7, 5, 4, 11, }, + [3] = { 10, 5, 5, 14, }, + [4] = { 15, 5, 7, 22, }, + [5] = { 19, 4, 10, 29, }, + [6] = { 20, 4, 10, 31, }, + [7] = { 25, 4, 15, 45, }, + [8] = { 28, 4, 18, 54, }, + [9] = { 29, 4, 19, 58, }, + [10] = { 30, 4, 21, 62, }, + [11] = { 31, 4, 22, 66, }, + [12] = { 34, 4, 26, 79, }, + [13] = { 37, 4, 32, 95, }, + [14] = { 39, 4, 36, 107, }, + [15] = { 43, 4, 45, 136, }, + [16] = { 44, 4, 48, 144, }, + [17] = { 47, 4, 57, 170, }, + [18] = { 48, 4, 60, 180, }, + [19] = { 51, 4, 71, 213, }, + [20] = { 52, 4, 75, 225, }, + [21] = { 58, 4, 104, 311, }, + [22] = { 62, 4, 128, 384, }, + [23] = { 63, 4, 135, 405, }, + [24] = { 64, 4, 142, 427, }, + [25] = { 65, 4, 150, 449, }, + [26] = { 66, 4, 158, 473, }, + [27] = { 67, 4, 166, 498, }, + [28] = { 68, 4, 409, 1221, }, + [29] = { 69, 4, 431, 1285, }, + [30] = { 70, 4, 454, 1353, }, + [31] = { 71, 4, 477, 1424, }, + [32] = { 72, 4, 502, 1498, }, + [33] = { 73, 4, 529, 1577, }, + [34] = { 74, 4, 556, 1658, }, + [35] = { 75, 4, 585, 1744, }, + [36] = { 76, 4, 615, 1834, }, + [37] = { 77, 4, 647, 1929, }, + [38] = { 78, 4, 680, 2028, }, + [39] = { 79, 4, 715, 2132, }, + [40] = { 80, 4, 751, 2241, }, + [41] = { 81, 4, 790, 2355, }, + [42] = { 82, 4, 830, 2475, }, }, } skills["RockGolemSlam"] = { name = "Slam", hidden = true, color = 1, - skillTypes = { [1] = true, [11] = true, [6] = true, }, + skillTypes = { [1] = true, [11] = true, }, baseFlags = { attack = true, melee = true, @@ -486,7 +993,6 @@ skills["RockGolemSlam"] = { }, baseMods = { skill("castTime", 1), - skill("damageEffectiveness", 1.75), mod("Damage", "MORE", 75, ModFlag.Attack), skill("cooldown", 6), mod("Speed", "MORE", -20, ModFlag.Attack), --"active_skill_attack_speed_+%_final" = -20 @@ -542,7 +1048,7 @@ skills["ZombieSlam"] = { name = "Slam", hidden = true, color = 4, - skillTypes = { [1] = true, [11] = true, [6] = true, }, + skillTypes = { [1] = true, [11] = true, }, baseFlags = { attack = true, melee = true, @@ -591,7 +1097,6 @@ skills["SpiderMinionLeapSlam"] = { }, baseMods = { skill("castTime", 1.4), - skill("damageEffectiveness", 1.5), mod("Damage", "MORE", 50, ModFlag.Attack), skill("cooldown", 2), --"skill_art_variation" = 3 diff --git a/Data/3_0/Skills/spectre.lua b/Data/3_0/Skills/spectre.lua index 00ce92a7..11acfc3a 100644 --- a/Data/3_0/Skills/spectre.lua +++ b/Data/3_0/Skills/spectre.lua @@ -42,9 +42,34 @@ skills["BanditExplosiveArrow"] = { }, levels = { [1] = { 2, 5, 7, 10, }, - [2] = { 10, 5, 15, 22, }, - [3] = { 20, 4, 33, 49, }, - [4] = { 68, 4, 764, 1146, }, + [2] = { 4, 5, 8, 12, }, + [3] = { 5, 5, 9, 14, }, + [4] = { 6, 5, 10, 15, }, + [5] = { 10, 5, 15, 22, }, + [6] = { 12, 5, 18, 26, }, + [7] = { 14, 5, 21, 31, }, + [8] = { 16, 5, 24, 36, }, + [9] = { 18, 5, 28, 42, }, + [10] = { 20, 4, 33, 49, }, + [11] = { 45, 4, 152, 228, }, + [12] = { 62, 4, 376, 564, }, + [13] = { 66, 4, 460, 691, }, + [14] = { 67, 4, 484, 726, }, + [15] = { 68, 4, 764, 1146, }, + [16] = { 69, 4, 803, 1204, }, + [17] = { 70, 4, 844, 1266, }, + [18] = { 71, 4, 887, 1331, }, + [19] = { 72, 4, 932, 1398, }, + [20] = { 73, 4, 980, 1469, }, + [21] = { 74, 4, 1029, 1544, }, + [22] = { 75, 4, 1081, 1621, }, + [23] = { 76, 4, 1135, 1703, }, + [24] = { 77, 4, 1192, 1788, }, + [25] = { 78, 4, 1252, 1877, }, + [26] = { 79, 4, 1314, 1971, }, + [27] = { 80, 4, 1379, 2069, }, + [28] = { 81, 4, 1448, 2171, }, + [29] = { 82, 4, 1519, 2279, }, }, } skills["BeastCleave"] = { @@ -158,7 +183,39 @@ skills["BullCharge"] = { }, levels = { [1] = { 2, }, - [2] = { 68, }, + [2] = { 6, }, + [3] = { 10, }, + [4] = { 14, }, + [5] = { 18, }, + [6] = { 22, }, + [7] = { 26, }, + [8] = { 30, }, + [9] = { 34, }, + [10] = { 38, }, + [11] = { 42, }, + [12] = { 46, }, + [13] = { 50, }, + [14] = { 54, }, + [15] = { 58, }, + [16] = { 61, }, + [17] = { 63, }, + [18] = { 66, }, + [19] = { 67, }, + [20] = { 68, }, + [21] = { 69, }, + [22] = { 70, }, + [23] = { 71, }, + [24] = { 72, }, + [25] = { 73, }, + [26] = { 74, }, + [27] = { 75, }, + [28] = { 76, }, + [29] = { 77, }, + [30] = { 78, }, + [31] = { 79, }, + [32] = { 80, }, + [33] = { 81, }, + [34] = { 82, }, }, } skills["ChaosDegenAura"] = { @@ -174,15 +231,50 @@ skills["ChaosDegenAura"] = { }, baseMods = { skill("castTime", 1), - skill("ChaosDot", 1.2833333333333), --"base_chaos_damage_to_deal_per_minute" = 77 }, qualityMods = { }, levelMods = { [1] = skill("levelRequirement", nil), + [2] = skill("ChaosDot", nil), --"base_chaos_damage_to_deal_per_minute" }, levels = { - [1] = { 3, }, + [1] = { 3, 1.2833333333333, }, + [2] = { 5, 1.6, }, + [3] = { 8, 2.1333333333333, }, + [4] = { 10, 2.55, }, + [5] = { 12, 3.0166666666667, }, + [6] = { 14, 3.5333333333333, }, + [7] = { 17, 4.4333333333333, }, + [8] = { 20, 5.5, }, + [9] = { 24, 7.2, }, + [10] = { 30, 10.516666666667, }, + [11] = { 31, 11.166666666667, }, + [12] = { 36, 15, }, + [13] = { 41, 19.9, }, + [14] = { 44, 23.466666666667, }, + [15] = { 51, 34.083333333333, }, + [16] = { 52, 35.916666666667, }, + [17] = { 57, 46.433333333333, }, + [18] = { 60, 54.033333333333, }, + [19] = { 65, 69.283333333333, }, + [20] = { 66, 72.766666666667, }, + [21] = { 67, 76.416666666667, }, + [22] = { 68, 80.233333333333, }, + [23] = { 69, 84.233333333333, }, + [24] = { 70, 88.416666666667, }, + [25] = { 71, 92.8, }, + [26] = { 72, 97.366666666667, }, + [27] = { 73, 102.16666666667, }, + [28] = { 74, 107.16666666667, }, + [29] = { 75, 112.4, }, + [30] = { 76, 117.88333333333, }, + [31] = { 77, 123.6, }, + [32] = { 78, 129.6, }, + [33] = { 79, 135.85, }, + [34] = { 80, 142.4, }, + [35] = { 81, 149.25, }, + [36] = { 82, 156.4, }, }, } skills["DelayedBlastSpectre"] = { @@ -197,17 +289,52 @@ skills["DelayedBlastSpectre"] = { baseMods = { skill("castTime", 1), skill("cooldown", 1.3), - skill("PhysicalMin", 3), --"spell_minimum_base_physical_damage" = 3 - skill("PhysicalMax", 5), --"spell_maximum_base_physical_damage" = 5 --"is_area_damage" = ? }, qualityMods = { }, levelMods = { [1] = skill("levelRequirement", nil), + [2] = skill("PhysicalMin", nil), --"spell_minimum_base_physical_damage" + [3] = skill("PhysicalMax", nil), --"spell_maximum_base_physical_damage" }, levels = { - [1] = { 3, }, + [1] = { 3, 3, 5, }, + [2] = { 5, 4, 6, }, + [3] = { 8, 5, 8, }, + [4] = { 10, 6, 9, }, + [5] = { 12, 8, 11, }, + [6] = { 14, 9, 13, }, + [7] = { 17, 11, 17, }, + [8] = { 20, 14, 21, }, + [9] = { 24, 19, 28, }, + [10] = { 30, 28, 42, }, + [11] = { 31, 30, 45, }, + [12] = { 36, 41, 61, }, + [13] = { 41, 55, 82, }, + [14] = { 44, 65, 98, }, + [15] = { 51, 97, 146, }, + [16] = { 52, 103, 154, }, + [17] = { 57, 135, 202, }, + [18] = { 60, 159, 238, }, + [19] = { 65, 207, 310, }, + [20] = { 66, 218, 327, }, + [21] = { 67, 230, 345, }, + [22] = { 68, 242, 363, }, + [23] = { 69, 255, 382, }, + [24] = { 70, 269, 403, }, + [25] = { 71, 283, 424, }, + [26] = { 72, 298, 447, }, + [27] = { 73, 313, 470, }, + [28] = { 74, 330, 495, }, + [29] = { 75, 347, 521, }, + [30] = { 76, 365, 548, }, + [31] = { 77, 384, 577, }, + [32] = { 78, 404, 607, }, + [33] = { 79, 425, 638, }, + [34] = { 80, 447, 671, }, + [35] = { 81, 470, 706, }, + [36] = { 82, 495, 742, }, }, } skills["DemonFemaleRangedProjectile"] = { @@ -249,8 +376,6 @@ skills["DemonModularBladeVortexSpectre"] = { baseMods = { skill("castTime", 0.5), skill("CritChance", 6), - skill("PhysicalMin", 2), --"spell_minimum_base_physical_damage" = 2 - skill("PhysicalMax", 4), --"spell_maximum_base_physical_damage" = 4 skill("duration", 5), --"base_skill_effect_duration" = 5000 --"maximum_number_of_spinning_blades" = 5 --"active_skill_area_of_effect_radius_+%_final" = 0 @@ -263,9 +388,45 @@ skills["DemonModularBladeVortexSpectre"] = { }, levelMods = { [1] = skill("levelRequirement", nil), + [2] = skill("PhysicalMin", nil), --"spell_minimum_base_physical_damage" + [3] = skill("PhysicalMax", nil), --"spell_maximum_base_physical_damage" }, levels = { - [1] = { 3, }, + [1] = { 3, 2, 4, }, + [2] = { 5, 3, 4, }, + [3] = { 8, 4, 6, }, + [4] = { 10, 5, 7, }, + [5] = { 12, 6, 8, }, + [6] = { 14, 6, 10, }, + [7] = { 17, 8, 12, }, + [8] = { 20, 10, 15, }, + [9] = { 25, 14, 21, }, + [10] = { 28, 17, 25, }, + [11] = { 31, 20, 30, }, + [12] = { 36, 27, 41, }, + [13] = { 41, 36, 54, }, + [14] = { 46, 47, 70, }, + [15] = { 51, 61, 92, }, + [16] = { 52, 64, 97, }, + [17] = { 57, 83, 124, }, + [18] = { 65, 123, 185, }, + [19] = { 66, 129, 194, }, + [20] = { 67, 136, 204, }, + [21] = { 68, 143, 214, }, + [22] = { 69, 150, 224, }, + [23] = { 70, 157, 236, }, + [24] = { 71, 165, 247, }, + [25] = { 72, 173, 259, }, + [26] = { 73, 181, 272, }, + [27] = { 74, 190, 285, }, + [28] = { 75, 199, 299, }, + [29] = { 76, 209, 313, }, + [30] = { 77, 219, 328, }, + [31] = { 78, 229, 344, }, + [32] = { 79, 240, 360, }, + [33] = { 80, 252, 378, }, + [34] = { 81, 264, 395, }, + [35] = { 82, 276, 414, }, }, } skills["ExperimenterDetonateDead"] = { @@ -297,8 +458,36 @@ skills["ExperimenterDetonateDead"] = { }, levels = { [1] = { 3, 7, 6, 9, }, - [2] = { 33, 5, 29, 44, }, - [3] = { 60, 4, 70, 105, }, + [2] = { 5, 7, 7, 10, }, + [3] = { 8, 7, 9, 13, }, + [4] = { 12, 7, 11, 17, }, + [5] = { 16, 7, 14, 21, }, + [6] = { 20, 7, 17, 25, }, + [7] = { 25, 7, 21, 32, }, + [8] = { 32, 7, 28, 42, }, + [9] = { 33, 5, 29, 44, }, + [10] = { 34, 5, 30, 46, }, + [11] = { 45, 5, 45, 67, }, + [12] = { 53, 5, 57, 86, }, + [13] = { 54, 5, 59, 88, }, + [14] = { 60, 4, 70, 105, }, + [15] = { 66, 4, 83, 125, }, + [16] = { 67, 4, 85, 128, }, + [17] = { 68, 4, 88, 132, }, + [18] = { 69, 4, 90, 135, }, + [19] = { 70, 4, 93, 139, }, + [20] = { 71, 4, 95, 143, }, + [21] = { 72, 4, 98, 146, }, + [22] = { 73, 4, 100, 150, }, + [23] = { 74, 4, 103, 154, }, + [24] = { 75, 4, 106, 158, }, + [25] = { 76, 4, 108, 163, }, + [26] = { 77, 4, 111, 167, }, + [27] = { 78, 4, 114, 171, }, + [28] = { 79, 4, 117, 176, }, + [29] = { 80, 4, 120, 180, }, + [30] = { 81, 4, 123, 185, }, + [31] = { 82, 4, 126, 189, }, }, } skills["FireMonsterWhirlingBlades"] = { @@ -321,7 +510,6 @@ skills["FireMonsterWhirlingBlades"] = { }, baseMods = { skill("castTime", 2.6), - skill("FireDot", 1.5833333333333), --"whirling_blades_base_ground_fire_damage_to_deal_per_minute" = 95 skill("duration", 6), --"base_skill_effect_duration" = 6000 mod("Speed", "INC", -50, ModFlag.Attack, 0, nil), --"attack_speed_+%" = -50 --"monster_flurry" = 1 @@ -332,9 +520,43 @@ skills["FireMonsterWhirlingBlades"] = { }, levelMods = { [1] = skill("levelRequirement", nil), + [2] = skill("FireDot", nil), --"whirling_blades_base_ground_fire_damage_to_deal_per_minute" }, levels = { - [1] = { 3, }, + [1] = { 3, 1.5833333333333, }, + [2] = { 5, 2.0666666666667, }, + [3] = { 8, 3, }, + [4] = { 11, 4.2333333333333, }, + [5] = { 15, 6.4833333333333, }, + [6] = { 19, 9.6833333333333, }, + [7] = { 23, 14.166666666667, }, + [8] = { 27, 20.4, }, + [9] = { 28, 22.316666666667, }, + [10] = { 32, 31.7, }, + [11] = { 40, 62.316666666667, }, + [12] = { 47, 110.18333333333, }, + [13] = { 50, 139.96666666667, }, + [14] = { 55, 207.4, }, + [15] = { 60, 305.51666666667, }, + [16] = { 64, 414.95, }, + [17] = { 65, 447.75, }, + [18] = { 66, 483.03333333333, }, + [19] = { 67, 521.03333333333, }, + [20] = { 68, 561.91666666667, }, + [21] = { 69, 605.9, }, + [22] = { 70, 653.23333333333, }, + [23] = { 71, 704.15, }, + [24] = { 72, 758.91666666667, }, + [25] = { 73, 817.81666666667, }, + [26] = { 74, 881.16666666667, }, + [27] = { 75, 949.28333333333, }, + [28] = { 76, 1022.5333333333, }, + [29] = { 77, 1101.2833333333, }, + [30] = { 78, 1185.9333333333, }, + [31] = { 79, 1276.9166666667, }, + [32] = { 80, 1374.7166666667, }, + [33] = { 81, 1479.8333333333, }, + [34] = { 82, 1592.7833333333, }, }, } skills["FlamebearerFlameBlue"] = { @@ -372,7 +594,33 @@ skills["FlamebearerFlameBlue"] = { levels = { [1] = { 4, 2, 3, -78, }, [2] = { 8, 3, 5, -75, }, - [3] = { 68, 248, 372, -75, }, + [3] = { 16, 7, 10, -75, }, + [4] = { 20, 9, 13, -75, }, + [5] = { 29, 17, 25, -75, }, + [6] = { 34, 23, 34, -75, }, + [7] = { 39, 31, 47, -75, }, + [8] = { 45, 45, 67, -75, }, + [9] = { 51, 63, 95, -75, }, + [10] = { 58, 93, 140, -75, }, + [11] = { 62, 116, 174, -75, }, + [12] = { 64, 129, 194, -75, }, + [13] = { 66, 144, 216, -75, }, + [14] = { 67, 152, 228, -75, }, + [15] = { 68, 248, 372, -75, }, + [16] = { 69, 261, 392, -75, }, + [17] = { 70, 276, 413, -75, }, + [18] = { 71, 291, 436, -75, }, + [19] = { 72, 306, 459, -75, }, + [20] = { 73, 323, 484, -75, }, + [21] = { 74, 340, 510, -75, }, + [22] = { 75, 358, 537, -75, }, + [23] = { 76, 377, 566, -75, }, + [24] = { 77, 397, 596, -75, }, + [25] = { 78, 418, 627, -75, }, + [26] = { 79, 440, 660, -75, }, + [27] = { 80, 464, 695, -75, }, + [28] = { 81, 488, 732, -75, }, + [29] = { 82, 514, 770, -75, }, }, } skills["GhostPirateBladeVortexSpectre"] = { @@ -389,8 +637,6 @@ skills["GhostPirateBladeVortexSpectre"] = { baseMods = { skill("castTime", 0.5), skill("CritChance", 6), - skill("PhysicalMin", 2), --"spell_minimum_base_physical_damage" = 2 - skill("PhysicalMax", 4), --"spell_maximum_base_physical_damage" = 4 skill("duration", 5), --"base_skill_effect_duration" = 5000 --"maximum_number_of_spinning_blades" = 5 --"active_skill_area_of_effect_radius_+%_final" = 0 @@ -403,9 +649,45 @@ skills["GhostPirateBladeVortexSpectre"] = { }, levelMods = { [1] = skill("levelRequirement", nil), + [2] = skill("PhysicalMin", nil), --"spell_minimum_base_physical_damage" + [3] = skill("PhysicalMax", nil), --"spell_maximum_base_physical_damage" }, levels = { - [1] = { 3, }, + [1] = { 3, 2, 4, }, + [2] = { 5, 3, 4, }, + [3] = { 8, 4, 6, }, + [4] = { 10, 5, 7, }, + [5] = { 12, 6, 8, }, + [6] = { 14, 6, 10, }, + [7] = { 17, 8, 12, }, + [8] = { 20, 10, 15, }, + [9] = { 25, 14, 21, }, + [10] = { 28, 17, 25, }, + [11] = { 31, 20, 30, }, + [12] = { 36, 27, 41, }, + [13] = { 41, 36, 54, }, + [14] = { 46, 47, 70, }, + [15] = { 51, 61, 92, }, + [16] = { 52, 64, 97, }, + [17] = { 57, 83, 124, }, + [18] = { 65, 123, 185, }, + [19] = { 66, 129, 194, }, + [20] = { 67, 136, 204, }, + [21] = { 68, 143, 214, }, + [22] = { 69, 150, 224, }, + [23] = { 70, 157, 236, }, + [24] = { 71, 165, 247, }, + [25] = { 72, 173, 259, }, + [26] = { 73, 181, 272, }, + [27] = { 74, 190, 285, }, + [28] = { 75, 199, 299, }, + [29] = { 76, 209, 313, }, + [30] = { 77, 219, 328, }, + [31] = { 78, 229, 344, }, + [32] = { 79, 240, 360, }, + [33] = { 80, 252, 378, }, + [34] = { 81, 264, 395, }, + [35] = { 82, 276, 414, }, }, } skills["GoatmanFireMagmaOrb"] = { @@ -426,7 +708,7 @@ skills["GoatmanFireMagmaOrb"] = { skill("cooldown", 3), --"projectile_spread_radius" = 0 mod("ProjectileCount", "BASE", 0), --"number_of_additional_projectiles" = 0 - --"fire_mortar_second_hit_damage_+%_final" = 0 + --"fire_mortar_second_hit_damage_+%_final" = -60 mod("Speed", "INC", 30, ModFlag.Cast), --"base_cast_speed_+%" = 30 mod("ChainCount", "BASE", 2), --"number_of_additional_projectiles_in_chain" = 2 --"is_area_damage" = ? @@ -441,7 +723,40 @@ skills["GoatmanFireMagmaOrb"] = { }, levels = { [1] = { 3, 11, 16, }, - [2] = { 68, 1149, 1531, }, + [2] = { 5, 14, 20, }, + [3] = { 8, 18, 27, }, + [4] = { 12, 26, 39, }, + [5] = { 15, 33, 49, }, + [6] = { 19, 44, 65, }, + [7] = { 20, 47, 70, }, + [8] = { 21, 50, 75, }, + [9] = { 26, 69, 104, }, + [10] = { 30, 89, 133, }, + [11] = { 34, 113, 169, }, + [12] = { 38, 142, 212, }, + [13] = { 43, 187, 280, }, + [14] = { 45, 208, 312, }, + [15] = { 53, 316, 474, }, + [16] = { 58, 407, 611, }, + [17] = { 62, 497, 746, }, + [18] = { 63, 522, 783, }, + [19] = { 66, 604, 907, }, + [20] = { 67, 634, 952, }, + [21] = { 68, 1149, 1531, }, + [22] = { 69, 1205, 1607, }, + [23] = { 70, 1265, 1686, }, + [24] = { 71, 1326, 1769, }, + [25] = { 72, 1391, 1855, }, + [26] = { 73, 1459, 1945, }, + [27] = { 74, 1530, 2040, }, + [28] = { 75, 1604, 2138, }, + [29] = { 76, 1681, 2241, }, + [30] = { 77, 1762, 2349, }, + [31] = { 78, 1846, 2462, }, + [32] = { 79, 1935, 2579, }, + [33] = { 80, 2027, 2702, }, + [34] = { 81, 2123, 2831, }, + [35] = { 82, 2224, 2965, }, }, } skills["GoatmanMoltenShell"] = { @@ -531,6 +846,7 @@ skills["GuardianArc"] = { mod("Speed", "MORE", -80, ModFlag.Cast), --"active_skill_cast_speed_+%_final" = -80 --"spell_maximum_action_distance_+%" = -50 --"skill_art_variation" = 1 + mod("Speed", "INC", -80, ModFlag.Cast), --"base_cast_speed_+%" = -80 }, qualityMods = { }, @@ -541,7 +857,40 @@ skills["GuardianArc"] = { }, levels = { [1] = { 2, 2, 6, }, - [2] = { 70, 113, 338, }, + [2] = { 4, 2, 7, }, + [3] = { 8, 3, 10, }, + [4] = { 12, 5, 14, }, + [5] = { 15, 6, 17, }, + [6] = { 18, 7, 21, }, + [7] = { 21, 9, 26, }, + [8] = { 25, 11, 32, }, + [9] = { 28, 13, 39, }, + [10] = { 32, 16, 48, }, + [11] = { 38, 22, 66, }, + [12] = { 46, 32, 97, }, + [13] = { 51, 41, 122, }, + [14] = { 56, 51, 154, }, + [15] = { 62, 67, 200, }, + [16] = { 64, 73, 218, }, + [17] = { 66, 79, 238, }, + [18] = { 67, 83, 248, }, + [19] = { 68, 86, 259, }, + [20] = { 69, 90, 270, }, + [21] = { 70, 113, 338, }, + [22] = { 71, 118, 353, }, + [23] = { 72, 123, 368, }, + [24] = { 73, 128, 383, }, + [25] = { 74, 133, 400, }, + [26] = { 75, 139, 416, }, + [27] = { 76, 145, 434, }, + [28] = { 77, 151, 452, }, + [29] = { 78, 157, 471, }, + [30] = { 79, 164, 491, }, + [31] = { 80, 170, 511, }, + [32] = { 81, 177, 532, }, + [33] = { 82, 185, 554, }, + [34] = { 83, 192, 577, }, + [35] = { 84, 200, 601, }, }, } skills["HalfSkeletonPuncture"] = { @@ -566,9 +915,10 @@ skills["HalfSkeletonPuncture"] = { baseMods = { skill("castTime", 1), skill("cooldown", 7.5), - --"active_skill_bleeding_damage_+%_final" = 46 + skill("bleedBasePercent", 14.5), --"base_bleed_on_hit_still_%_of_physical_damage_to_deal_per_minute" = 870 + --"base_bleed_on_hit_moving_%_of_physical_damage_to_deal_per_minute" = 4370 + --"bleed_on_hit_base_duration" = 5000 --"melee_range_+" = 20 - --"global_bleed_on_hit" = ? mod("BleedChance", "BASE", 100), }, qualityMods = { @@ -578,7 +928,39 @@ skills["HalfSkeletonPuncture"] = { }, levels = { [1] = { 2, }, - [2] = { 14, }, + [2] = { 6, }, + [3] = { 10, }, + [4] = { 14, }, + [5] = { 18, }, + [6] = { 22, }, + [7] = { 26, }, + [8] = { 30, }, + [9] = { 34, }, + [10] = { 38, }, + [11] = { 42, }, + [12] = { 46, }, + [13] = { 50, }, + [14] = { 54, }, + [15] = { 58, }, + [16] = { 61, }, + [17] = { 63, }, + [18] = { 66, }, + [19] = { 67, }, + [20] = { 68, }, + [21] = { 69, }, + [22] = { 70, }, + [23] = { 71, }, + [24] = { 72, }, + [25] = { 73, }, + [26] = { 74, }, + [27] = { 75, }, + [28] = { 76, }, + [29] = { 77, }, + [30] = { 78, }, + [31] = { 79, }, + [32] = { 80, }, + [33] = { 81, }, + [34] = { 82, }, }, } skills["IguanaProjectile"] = { @@ -636,8 +1018,39 @@ skills["IncaMinionProjectile"] = { }, levels = { [1] = { 4, 5, 2, 3, 3, 5, }, - [2] = { 21, 4, 7, 10, 10, 15, }, - [3] = { 68, 4, 101, 151, 151, 227, }, + [2] = { 9, 5, 3, 5, 5, 7, }, + [3] = { 13, 5, 4, 6, 6, 9, }, + [4] = { 17, 5, 5, 8, 8, 12, }, + [5] = { 21, 4, 7, 10, 10, 15, }, + [6] = { 22, 4, 7, 10, 10, 15, }, + [7] = { 25, 4, 8, 12, 12, 18, }, + [8] = { 32, 4, 11, 16, 16, 24, }, + [9] = { 39, 4, 14, 22, 22, 33, }, + [10] = { 45, 4, 18, 27, 27, 41, }, + [11] = { 47, 4, 20, 29, 29, 44, }, + [12] = { 48, 4, 20, 30, 30, 46, }, + [13] = { 52, 4, 23, 35, 35, 53, }, + [14] = { 56, 4, 27, 40, 40, 60, }, + [15] = { 63, 4, 34, 51, 51, 76, }, + [16] = { 64, 4, 35, 53, 53, 79, }, + [17] = { 65, 4, 36, 54, 54, 81, }, + [18] = { 66, 4, 37, 56, 56, 84, }, + [19] = { 67, 4, 39, 58, 58, 87, }, + [20] = { 68, 4, 101, 151, 151, 227, }, + [21] = { 69, 4, 104, 156, 156, 234, }, + [22] = { 70, 4, 107, 161, 161, 242, }, + [23] = { 71, 4, 110, 166, 166, 249, }, + [24] = { 72, 4, 114, 172, 171, 257, }, + [25] = { 73, 4, 118, 177, 176, 265, }, + [26] = { 74, 4, 121, 182, 182, 274, }, + [27] = { 75, 4, 125, 188, 188, 282, }, + [28] = { 76, 4, 129, 194, 193, 291, }, + [29] = { 77, 4, 133, 200, 199, 300, }, + [30] = { 78, 4, 137, 206, 205, 309, }, + [31] = { 79, 4, 141, 212, 212, 319, }, + [32] = { 80, 4, 145, 219, 218, 328, }, + [33] = { 81, 4, 150, 226, 225, 338, }, + [34] = { 82, 4, 154, 232, 232, 349, }, }, } skills["InsectSpawnerSpit"] = { @@ -652,19 +1065,52 @@ skills["InsectSpawnerSpit"] = { baseMods = { skill("castTime", 1), --"base_is_projectile" = 1 - mod("FireMin", "BASE", 1, ModFlag.Attack, 0, nil), --"attack_minimum_added_fire_damage" = 1 - mod("FireMax", "BASE", 1, ModFlag.Attack, 0, nil), --"attack_maximum_added_fire_damage" = 1 - mod("PhysicalMin", "BASE", 2, ModFlag.Attack, 0, nil), --"attack_minimum_added_physical_damage" = 2 - mod("PhysicalMax", "BASE", 3, ModFlag.Attack, 0, nil), --"attack_maximum_added_physical_damage" = 3 --"monster_reverse_point_blank_damage_-%_at_minimum_range" = 30 }, qualityMods = { }, levelMods = { [1] = skill("levelRequirement", nil), + [2] = mod("FireMin", "BASE", nil, ModFlag.Attack, 0, nil), --"attack_minimum_added_fire_damage" + [3] = mod("FireMax", "BASE", nil, ModFlag.Attack, 0, nil), --"attack_maximum_added_fire_damage" + [4] = mod("PhysicalMin", "BASE", nil, ModFlag.Attack, 0, nil), --"attack_minimum_added_physical_damage" + [5] = mod("PhysicalMax", "BASE", nil, ModFlag.Attack, 0, nil), --"attack_maximum_added_physical_damage" }, levels = { - [1] = { 2, }, + [1] = { 2, 1, 1, 2, 3, }, + [2] = { 5, 1, 2, 3, 4, }, + [3] = { 8, 2, 2, 4, 6, }, + [4] = { 11, 2, 3, 6, 7, }, + [5] = { 15, 3, 4, 8, 10, }, + [6] = { 18, 3, 5, 9, 12, }, + [7] = { 22, 4, 7, 12, 15, }, + [8] = { 26, 6, 8, 15, 19, }, + [9] = { 28, 6, 9, 17, 21, }, + [10] = { 34, 9, 13, 24, 29, }, + [11] = { 41, 12, 19, 34, 42, }, + [12] = { 49, 18, 27, 49, 62, }, + [13] = { 50, 19, 29, 52, 65, }, + [14] = { 55, 24, 36, 65, 81, }, + [15] = { 60, 30, 45, 81, 101, }, + [16] = { 64, 36, 54, 97, 121, }, + [17] = { 65, 37, 56, 101, 126, }, + [18] = { 66, 39, 58, 105, 131, }, + [19] = { 67, 41, 61, 110, 137, }, + [20] = { 68, 42, 64, 115, 143, }, + [21] = { 69, 44, 66, 119, 149, }, + [22] = { 70, 46, 69, 125, 156, }, + [23] = { 71, 48, 72, 130, 162, }, + [24] = { 72, 50, 75, 136, 169, }, + [25] = { 73, 52, 78, 141, 177, }, + [26] = { 74, 55, 82, 147, 184, }, + [27] = { 75, 57, 85, 154, 192, }, + [28] = { 76, 59, 89, 160, 200, }, + [29] = { 77, 62, 93, 167, 208, }, + [30] = { 78, 64, 96, 174, 217, }, + [31] = { 79, 67, 101, 181, 226, }, + [32] = { 80, 70, 105, 188, 236, }, + [33] = { 81, 73, 109, 196, 245, }, + [34] = { 82, 76, 114, 204, 255, }, }, } skills["KaomWarriorGroundSlam"] = { @@ -693,6 +1139,39 @@ skills["KaomWarriorGroundSlam"] = { }, levels = { [1] = { 2, }, + [2] = { 6, }, + [3] = { 10, }, + [4] = { 14, }, + [5] = { 18, }, + [6] = { 22, }, + [7] = { 26, }, + [8] = { 30, }, + [9] = { 34, }, + [10] = { 38, }, + [11] = { 42, }, + [12] = { 46, }, + [13] = { 50, }, + [14] = { 54, }, + [15] = { 58, }, + [16] = { 61, }, + [17] = { 63, }, + [18] = { 66, }, + [19] = { 67, }, + [20] = { 68, }, + [21] = { 69, }, + [22] = { 70, }, + [23] = { 71, }, + [24] = { 72, }, + [25] = { 73, }, + [26] = { 74, }, + [27] = { 75, }, + [28] = { 76, }, + [29] = { 77, }, + [30] = { 78, }, + [31] = { 79, }, + [32] = { 80, }, + [33] = { 81, }, + [34] = { 82, }, }, } skills["KaomWarriorMoltenStrike"] = { @@ -736,6 +1215,39 @@ skills["KaomWarriorMoltenStrike"] = { }, levels = { [1] = { 2, }, + [2] = { 6, }, + [3] = { 10, }, + [4] = { 14, }, + [5] = { 18, }, + [6] = { 22, }, + [7] = { 26, }, + [8] = { 30, }, + [9] = { 34, }, + [10] = { 38, }, + [11] = { 42, }, + [12] = { 46, }, + [13] = { 50, }, + [14] = { 54, }, + [15] = { 58, }, + [16] = { 61, }, + [17] = { 63, }, + [18] = { 66, }, + [19] = { 67, }, + [20] = { 68, }, + [21] = { 69, }, + [22] = { 70, }, + [23] = { 71, }, + [24] = { 72, }, + [25] = { 73, }, + [26] = { 74, }, + [27] = { 75, }, + [28] = { 76, }, + [29] = { 77, }, + [30] = { 78, }, + [31] = { 79, }, + [32] = { 80, }, + [33] = { 81, }, + [34] = { 82, }, }, } skills["MassFrenzy"] = { @@ -800,7 +1312,29 @@ skills["MinerThrowFireSpectre"] = { [9] = { 28, 22.283333333333, 2.8, 10, 15, }, [10] = { 32, 28.833333333333, 2.9, 13, 19, }, [11] = { 40, 47.016666666667, 3, 21, 32, }, - [12] = { 79, 387.08333333333, 4, 174, 261, }, + [12] = { 47, 70.566666666667, 3, 32, 48, }, + [13] = { 48, 74.683333333333, 3, 34, 50, }, + [14] = { 55, 110.18333333333, 3, 50, 74, }, + [15] = { 60, 144.41666666667, 3, 65, 97, }, + [16] = { 64, 178.61666666667, 3, 80, 121, }, + [17] = { 65, 188.28333333333, 3, 85, 127, }, + [18] = { 66, 198.43333333333, 3, 89, 134, }, + [19] = { 67, 209.1, 3, 94, 141, }, + [20] = { 68, 220.3, 3, 99, 149, }, + [21] = { 69, 232.05, 3, 104, 157, }, + [22] = { 70, 244.4, 3, 110, 165, }, + [23] = { 71, 257.35, 3, 116, 174, }, + [24] = { 72, 270.96666666667, 3, 122, 183, }, + [25] = { 73, 285.25, 3, 128, 193, }, + [26] = { 74, 300.25, 3, 135, 203, }, + [27] = { 75, 315.98333333333, 3, 142, 213, }, + [28] = { 76, 332.5, 3, 150, 224, }, + [29] = { 77, 349.81666666667, 3, 157, 236, }, + [30] = { 78, 368.01666666667, 3, 166, 248, }, + [31] = { 79, 387.08333333333, 4, 174, 261, }, + [32] = { 80, 407.1, 4, 183, 275, }, + [33] = { 81, 428.1, 4, 193, 289, }, + [34] = { 82, 450.13333333333, 4, 203, 304, }, }, } skills["MonsterArc"] = { @@ -831,11 +1365,38 @@ skills["MonsterArc"] = { }, levels = { [1] = { 3, 20, 2, 7, }, - [2] = { 8, 19, 4, 12, }, - [3] = { 12, 18, 6, 17, }, - [4] = { 25, 17, 17, 50, }, - [5] = { 32, 16, 27, 82, }, - [6] = { 70, 16, 288, 864, }, + [2] = { 5, 20, 3, 9, }, + [3] = { 8, 19, 4, 12, }, + [4] = { 12, 18, 6, 17, }, + [5] = { 15, 18, 8, 23, }, + [6] = { 18, 18, 10, 29, }, + [7] = { 21, 18, 12, 37, }, + [8] = { 25, 17, 17, 50, }, + [9] = { 32, 16, 27, 82, }, + [10] = { 38, 16, 41, 123, }, + [11] = { 46, 16, 68, 205, }, + [12] = { 52, 16, 99, 298, }, + [13] = { 56, 16, 127, 380, }, + [14] = { 62, 16, 181, 542, }, + [15] = { 66, 16, 229, 686, }, + [16] = { 67, 16, 242, 727, }, + [17] = { 68, 16, 257, 770, }, + [18] = { 69, 16, 272, 816, }, + [19] = { 70, 16, 288, 864, }, + [20] = { 71, 16, 305, 915, }, + [21] = { 72, 16, 323, 969, }, + [22] = { 73, 16, 342, 1026, }, + [23] = { 74, 16, 362, 1086, }, + [24] = { 75, 16, 383, 1150, }, + [25] = { 76, 16, 406, 1217, }, + [26] = { 77, 16, 429, 1288, }, + [27] = { 78, 16, 454, 1362, }, + [28] = { 79, 16, 480, 1441, }, + [29] = { 80, 16, 508, 1525, }, + [30] = { 81, 16, 537, 1612, }, + [31] = { 82, 16, 568, 1705, }, + [32] = { 83, 16, 601, 1803, }, + [33] = { 84, 16, 635, 1906, }, }, } skills["MonsterCausticArrow"] = { @@ -861,7 +1422,6 @@ skills["MonsterCausticArrow"] = { --"active_skill_area_of_effect_radius_+%_final" = 0 --"monster_penalty_against_minions_damage_+%_final_vs_player_minions" = -25 --"ground_caustic_art_variation" = 2 - --"projectile_damage_modifiers_apply_to_skill_dot" = ? }, qualityMods = { }, @@ -873,16 +1433,40 @@ skills["MonsterCausticArrow"] = { }, levels = { [1] = { 3, 10, 1.2, 1.4833333333333, }, - [2] = { 12, 9, 1.2, 3.5833333333333, }, - [3] = { 26, 8, 1.2, 10.183333333333, }, - [4] = { 67, 8, 1.2, 109.1, }, - [5] = { 68, 8, 2.4, 160.91666666667, }, - [6] = { 69, 8, 2.5, 169.5, }, - [7] = { 70, 8, 2.6, 178.51666666667, }, - [8] = { 71, 8, 2.7, 187.98333333333, }, - [9] = { 72, 8, 2.8, 197.91666666667, }, - [10] = { 73, 8, 2.9, 208.35, }, - [11] = { 74, 8, 3, 219.3, }, + [2] = { 5, 10, 1.2, 1.85, }, + [3] = { 8, 10, 1.2, 2.5, }, + [4] = { 12, 9, 1.2, 3.5833333333333, }, + [5] = { 15, 9, 1.2, 4.5833333333333, }, + [6] = { 19, 9, 1.2, 6.2166666666667, }, + [7] = { 20, 9, 1.2, 6.7, }, + [8] = { 21, 9, 1.2, 7.2, }, + [9] = { 26, 8, 1.2, 10.183333333333, }, + [10] = { 30, 8, 1.2, 13.25, }, + [11] = { 34, 8, 1.2, 17.05, }, + [12] = { 38, 8, 1.2, 21.766666666667, }, + [13] = { 43, 8, 1.2, 29.25, }, + [14] = { 45, 8, 1.2, 32.85, }, + [15] = { 53, 8, 1.2, 51.516666666667, }, + [16] = { 58, 8, 1.2, 67.666666666667, }, + [17] = { 62, 8, 1.2, 83.833333333333, }, + [18] = { 63, 8, 1.2, 88.4, }, + [19] = { 66, 8, 1.2, 103.53333333333, }, + [20] = { 67, 8, 1.2, 109.1, }, + [21] = { 68, 8, 2.4, 160.91666666667, }, + [22] = { 69, 8, 2.5, 169.5, }, + [23] = { 70, 8, 2.6, 178.51666666667, }, + [24] = { 71, 8, 2.7, 187.98333333333, }, + [25] = { 72, 8, 2.8, 197.91666666667, }, + [26] = { 73, 8, 2.9, 208.35, }, + [27] = { 74, 8, 3, 219.3, }, + [28] = { 75, 8, 3, 230.8, }, + [29] = { 76, 8, 3, 242.86666666667, }, + [30] = { 77, 8, 3, 255.51666666667, }, + [31] = { 78, 8, 3, 268.8, }, + [32] = { 79, 8, 3, 282.75, }, + [33] = { 80, 8, 3, 297.36666666667, }, + [34] = { 81, 8, 3, 312.7, }, + [35] = { 82, 8, 3, 328.8, }, }, } skills["MonsterCausticBomb"] = { @@ -921,10 +1505,41 @@ skills["MonsterCausticBomb"] = { levels = { [1] = { 4, 4, 5, 3.5, }, [2] = { 7, 5, 7, 4.7833333333333, }, - [3] = { 12, 8, 11, 7.4833333333333, }, - [4] = { 16, 11, 15, 10.3, }, - [5] = { 20, 15, 20, 13.85, }, - [6] = { 76, 357, 476, 330.81666666667, }, + [3] = { 9, 6, 8, 5.7666666666667, }, + [4] = { 12, 8, 11, 7.4833333333333, }, + [5] = { 16, 11, 15, 10.3, }, + [6] = { 20, 15, 20, 13.85, }, + [7] = { 27, 24, 32, 22.283333333333, }, + [8] = { 28, 26, 34, 23.766666666667, }, + [9] = { 29, 27, 36, 25.333333333333, }, + [10] = { 32, 33, 44, 30.566666666667, }, + [11] = { 36, 42, 56, 38.966666666667, }, + [12] = { 40, 53, 71, 49.283333333333, }, + [13] = { 45, 71, 94, 65.5, }, + [14] = { 49, 88, 118, 81.75, }, + [15] = { 50, 93, 124, 86.333333333333, }, + [16] = { 52, 104, 139, 96.233333333333, }, + [17] = { 56, 129, 172, 119.16666666667, }, + [18] = { 60, 159, 212, 147.03333333333, }, + [19] = { 64, 195, 260, 180.83333333333, }, + [20] = { 65, 206, 274, 190.33333333333, }, + [21] = { 66, 216, 288, 200.3, }, + [22] = { 67, 228, 303, 210.76666666667, }, + [23] = { 68, 239, 319, 221.73333333333, }, + [24] = { 69, 252, 336, 233.21666666667, }, + [25] = { 70, 265, 353, 245.28333333333, }, + [26] = { 71, 279, 371, 257.91666666667, }, + [27] = { 72, 293, 390, 271.15, }, + [28] = { 73, 308, 410, 285.03333333333, }, + [29] = { 74, 324, 431, 299.58333333333, }, + [30] = { 75, 340, 453, 314.83333333333, }, + [31] = { 76, 357, 476, 330.81666666667, }, + [32] = { 77, 375, 500, 347.55, }, + [33] = { 78, 394, 526, 365.1, }, + [34] = { 79, 414, 552, 383.46666666667, }, + [35] = { 80, 435, 580, 402.71666666667, }, + [36] = { 81, 457, 609, 422.88333333333, }, + [37] = { 82, 480, 639, 444, }, }, } skills["MonsterDischarge"] = { @@ -961,7 +1576,40 @@ skills["MonsterDischarge"] = { }, levels = { [1] = { 4, 7, 20, 10, 14, 8, 12, }, - [2] = { 68, 252, 756, 358, 537, 293, 440, }, + [2] = { 7, 9, 27, 13, 19, 10, 16, }, + [3] = { 10, 11, 34, 16, 24, 13, 20, }, + [4] = { 12, 13, 40, 19, 28, 15, 23, }, + [5] = { 15, 16, 49, 23, 35, 19, 29, }, + [6] = { 20, 23, 68, 32, 49, 26, 40, }, + [7] = { 27, 34, 103, 49, 73, 40, 60, }, + [8] = { 28, 36, 108, 51, 77, 42, 63, }, + [9] = { 29, 38, 115, 54, 81, 44, 67, }, + [10] = { 32, 45, 134, 64, 95, 52, 78, }, + [11] = { 36, 55, 165, 78, 117, 64, 96, }, + [12] = { 40, 67, 200, 95, 142, 78, 116, }, + [13] = { 45, 85, 254, 120, 180, 98, 148, }, + [14] = { 49, 101, 304, 144, 217, 118, 177, }, + [15] = { 50, 106, 318, 151, 226, 124, 185, }, + [16] = { 52, 116, 348, 165, 248, 135, 203, }, + [17] = { 64, 194, 582, 276, 414, 226, 339, }, + [18] = { 65, 202, 607, 288, 432, 236, 353, }, + [19] = { 66, 211, 633, 300, 450, 245, 368, }, + [20] = { 67, 220, 659, 313, 469, 256, 384, }, + [21] = { 68, 252, 756, 358, 537, 293, 440, }, + [22] = { 69, 262, 787, 373, 560, 305, 458, }, + [23] = { 70, 273, 820, 389, 583, 318, 477, }, + [24] = { 71, 285, 854, 405, 607, 331, 497, }, + [25] = { 72, 296, 889, 422, 632, 345, 517, }, + [26] = { 73, 309, 926, 439, 658, 359, 539, }, + [27] = { 74, 321, 964, 457, 685, 374, 561, }, + [28] = { 75, 334, 1003, 475, 713, 389, 584, }, + [29] = { 76, 348, 1044, 495, 742, 405, 607, }, + [30] = { 77, 362, 1086, 515, 772, 421, 632, }, + [31] = { 78, 377, 1130, 536, 803, 438, 657, }, + [32] = { 79, 392, 1175, 557, 836, 456, 684, }, + [33] = { 80, 407, 1222, 579, 869, 474, 711, }, + [34] = { 81, 424, 1271, 603, 904, 493, 740, }, + [35] = { 82, 441, 1322, 627, 940, 513, 769, }, }, } skills["MonsterEnduringCry"] = { @@ -1082,7 +1730,40 @@ skills["MonsterFireball"] = { }, levels = { [1] = { 3, 5, 7, }, - [2] = { 68, 861, 1335, }, + [2] = { 5, 6, 9, }, + [3] = { 8, 8, 12, }, + [4] = { 10, 10, 14, }, + [5] = { 12, 11, 17, }, + [6] = { 14, 13, 20, }, + [7] = { 17, 17, 26, }, + [8] = { 20, 21, 32, }, + [9] = { 25, 30, 45, }, + [10] = { 28, 37, 55, }, + [11] = { 31, 45, 67, }, + [12] = { 36, 61, 91, }, + [13] = { 41, 82, 122, }, + [14] = { 46, 109, 163, }, + [15] = { 51, 144, 216, }, + [16] = { 52, 152, 228, }, + [17] = { 57, 199, 299, }, + [18] = { 65, 304, 456, }, + [19] = { 66, 320, 480, }, + [20] = { 67, 337, 506, }, + [21] = { 68, 861, 1336, }, + [22] = { 69, 906, 1406, }, + [23] = { 70, 954, 1480, }, + [24] = { 71, 1004, 1557, }, + [25] = { 72, 1056, 1639, }, + [26] = { 73, 1111, 1724, }, + [27] = { 74, 1169, 1814, }, + [28] = { 75, 1230, 1908, }, + [29] = { 76, 1293, 2006, }, + [30] = { 77, 1360, 2110, }, + [31] = { 78, 1430, 2218, }, + [32] = { 79, 1503, 2332, }, + [33] = { 80, 1580, 2451, }, + [34] = { 81, 1660, 2576, }, + [35] = { 82, 1745, 2707, }, }, } skills["MonsterFireBomb"] = { @@ -1119,7 +1800,40 @@ skills["MonsterFireBomb"] = { }, levels = { [1] = { 4, 4, 7, 3.0333333333333, }, - [2] = { 68, 885, 1328, 614.58333333333, }, + [2] = { 7, 6, 9, 4.3, }, + [3] = { 10, 8, 13, 5.9, }, + [4] = { 12, 10, 16, 7.2, }, + [5] = { 16, 15, 23, 10.433333333333, }, + [6] = { 20, 21, 32, 14.75, }, + [7] = { 27, 37, 56, 25.983333333333, }, + [8] = { 28, 40, 61, 28.066666666667, }, + [9] = { 34, 63, 95, 44.083333333333, }, + [10] = { 40, 98, 147, 67.95, }, + [11] = { 45, 139, 208, 96.35, }, + [12] = { 49, 182, 274, 126.63333333333, }, + [13] = { 50, 195, 293, 135.48333333333, }, + [14] = { 54, 255, 382, 177.03333333333, }, + [15] = { 58, 332, 498, 230.43333333333, }, + [16] = { 62, 430, 646, 298.88333333333, }, + [17] = { 64, 490, 734, 339.98333333333, }, + [18] = { 65, 522, 783, 362.51666666667, }, + [19] = { 66, 557, 835, 386.46666666667, }, + [20] = { 67, 593, 890, 411.91666666667, }, + [21] = { 68, 885, 1328, 614.58333333333, }, + [22] = { 69, 943, 1414, 654.85, }, + [23] = { 70, 1005, 1507, 697.65, }, + [24] = { 71, 1070, 1605, 743.13333333333, }, + [25] = { 72, 1140, 1710, 791.45, }, + [26] = { 73, 1214, 1820, 842.78333333333, }, + [27] = { 74, 1292, 1938, 897.31666666667, }, + [28] = { 75, 1376, 2063, 955.25, }, + [29] = { 76, 1464, 2196, 1016.7666666667, }, + [30] = { 77, 1558, 2337, 1082.1166666667, }, + [31] = { 78, 1658, 2487, 1151.5, }, + [32] = { 79, 1764, 2646, 1225.1833333333, }, + [33] = { 80, 1877, 2815, 1303.4, }, + [34] = { 81, 1996, 2995, 1386.45, }, + [35] = { 82, 2123, 3185, 1474.6166666667, }, }, } skills["MonsterFlickerStrike"] = { @@ -1180,8 +1894,6 @@ skills["MonsterFlameRedCannibal"] = { baseMods = { skill("castTime", 0.25), skill("damageEffectiveness", 0.25), - skill("FireMin", 2), --"spell_minimum_base_fire_damage" = 2 - skill("FireMax", 3), --"spell_maximum_base_fire_damage" = 3 --"skill_repeat_count" = 8 --"skill_art_variation" = 2 --"spell_maximum_action_distance_+%" = -75 @@ -1196,9 +1908,45 @@ skills["MonsterFlameRedCannibal"] = { }, levelMods = { [1] = skill("levelRequirement", nil), + [2] = skill("FireMin", nil), --"spell_minimum_base_fire_damage" + [3] = skill("FireMax", nil), --"spell_maximum_base_fire_damage" }, levels = { - [1] = { 3, }, + [1] = { 3, 2, 3, }, + [2] = { 5, 2, 3, }, + [3] = { 8, 3, 5, }, + [4] = { 12, 5, 7, }, + [5] = { 15, 6, 9, }, + [6] = { 19, 9, 13, }, + [7] = { 20, 10, 14, }, + [8] = { 21, 10, 16, }, + [9] = { 26, 16, 23, }, + [10] = { 30, 21, 31, }, + [11] = { 34, 28, 42, }, + [12] = { 38, 37, 56, }, + [13] = { 43, 52, 79, }, + [14] = { 45, 60, 90, }, + [15] = { 53, 102, 153, }, + [16] = { 58, 140, 210, }, + [17] = { 62, 180, 271, }, + [18] = { 63, 192, 288, }, + [19] = { 66, 231, 347, }, + [20] = { 67, 246, 369, }, + [21] = { 68, 262, 393, }, + [22] = { 69, 278, 418, }, + [23] = { 70, 296, 444, }, + [24] = { 71, 315, 472, }, + [25] = { 72, 335, 502, }, + [26] = { 73, 356, 534, }, + [27] = { 74, 378, 567, }, + [28] = { 75, 402, 602, }, + [29] = { 76, 427, 640, }, + [30] = { 77, 453, 680, }, + [31] = { 78, 481, 722, }, + [32] = { 79, 511, 767, }, + [33] = { 80, 543, 814, }, + [34] = { 81, 576, 864, }, + [35] = { 82, 612, 918, }, }, } skills["MonsterLeapSlam"] = { @@ -1225,7 +1973,6 @@ skills["MonsterLeapSlam"] = { }, baseMods = { skill("castTime", 1.4), - skill("damageEffectiveness", 1.5), mod("Damage", "MORE", 50, ModFlag.Attack), --"skill_art_variation" = 1 --"is_area_damage" = ? @@ -1268,7 +2015,40 @@ skills["MonsterLesserMultiFireballSpectre"] = { }, levels = { [1] = { 3, 4, 5, }, - [2] = { 68, 584, 876, }, + [2] = { 5, 4, 7, }, + [3] = { 8, 6, 9, }, + [4] = { 12, 9, 13, }, + [5] = { 15, 11, 16, }, + [6] = { 19, 15, 22, }, + [7] = { 20, 16, 24, }, + [8] = { 21, 17, 26, }, + [9] = { 26, 24, 36, }, + [10] = { 30, 31, 47, }, + [11] = { 34, 40, 60, }, + [12] = { 38, 51, 77, }, + [13] = { 43, 69, 103, }, + [14] = { 45, 77, 115, }, + [15] = { 53, 120, 180, }, + [16] = { 58, 157, 236, }, + [17] = { 62, 194, 291, }, + [18] = { 63, 205, 307, }, + [19] = { 66, 239, 359, }, + [20] = { 67, 252, 378, }, + [21] = { 68, 584, 876, }, + [22] = { 69, 615, 922, }, + [23] = { 70, 647, 970, }, + [24] = { 71, 681, 1021, }, + [25] = { 72, 716, 1075, }, + [26] = { 73, 754, 1131, }, + [27] = { 74, 793, 1189, }, + [28] = { 75, 834, 1251, }, + [29] = { 76, 877, 1316, }, + [30] = { 77, 922, 1384, }, + [31] = { 78, 970, 1455, }, + [32] = { 79, 1019, 1529, }, + [33] = { 80, 1072, 1607, }, + [34] = { 81, 1126, 1689, }, + [35] = { 82, 1183, 1775, }, }, } skills["MonsterLightningArrow"] = { @@ -1315,16 +2095,50 @@ skills["MonsterLightningThorns"] = { skill("castTime", 1), skill("cooldown", 3.5), skill("duration", 3.5), --"base_skill_effect_duration" = 3500 - --"minimum_lightning_damage_to_return_when_hit" = 3 - --"maximum_lightning_damage_to_return_when_hit" = 10 }, qualityMods = { }, levelMods = { [1] = skill("levelRequirement", nil), + --[2] = "minimum_lightning_damage_to_return_when_hit" + --[3] = "maximum_lightning_damage_to_return_when_hit" }, levels = { - [1] = { 3, }, + [1] = { 3, 3, 10, }, + [2] = { 5, 4, 13, }, + [3] = { 8, 6, 17, }, + [4] = { 12, 8, 24, }, + [5] = { 16, 11, 32, }, + [6] = { 24, 18, 55, }, + [7] = { 28, 23, 70, }, + [8] = { 29, 25, 74, }, + [9] = { 32, 29, 88, }, + [10] = { 38, 41, 123, }, + [11] = { 44, 57, 170, }, + [12] = { 50, 77, 231, }, + [13] = { 51, 81, 243, }, + [14] = { 52, 85, 255, }, + [15] = { 56, 103, 310, }, + [16] = { 60, 125, 376, }, + [17] = { 63, 145, 434, }, + [18] = { 65, 159, 476, }, + [19] = { 66, 166, 499, }, + [20] = { 67, 174, 523, }, + [21] = { 68, 183, 548, }, + [22] = { 69, 191, 574, }, + [23] = { 70, 200, 601, }, + [24] = { 71, 210, 629, }, + [25] = { 72, 219, 658, }, + [26] = { 73, 230, 689, }, + [27] = { 74, 240, 721, }, + [28] = { 75, 252, 755, }, + [29] = { 76, 263, 790, }, + [30] = { 77, 275, 826, }, + [31] = { 78, 288, 864, }, + [32] = { 79, 301, 903, }, + [33] = { 80, 315, 945, }, + [34] = { 81, 329, 988, }, + [35] = { 82, 344, 1032, }, }, } skills["MonsterMultiFireballSpectre"] = { @@ -1355,7 +2169,40 @@ skills["MonsterMultiFireballSpectre"] = { }, levels = { [1] = { 3, 3, 5, }, - [2] = { 68, 511, 766, }, + [2] = { 5, 4, 6, }, + [3] = { 8, 5, 8, }, + [4] = { 12, 7, 11, }, + [5] = { 15, 10, 14, }, + [6] = { 19, 13, 19, }, + [7] = { 20, 14, 21, }, + [8] = { 21, 15, 22, }, + [9] = { 26, 21, 32, }, + [10] = { 30, 27, 41, }, + [11] = { 34, 35, 53, }, + [12] = { 38, 45, 67, }, + [13] = { 43, 60, 90, }, + [14] = { 45, 67, 101, }, + [15] = { 53, 105, 157, }, + [16] = { 58, 137, 206, }, + [17] = { 62, 170, 255, }, + [18] = { 63, 179, 269, }, + [19] = { 66, 209, 314, }, + [20] = { 67, 221, 331, }, + [21] = { 68, 511, 766, }, + [22] = { 69, 538, 807, }, + [23] = { 70, 566, 849, }, + [24] = { 71, 596, 894, }, + [25] = { 72, 627, 940, }, + [26] = { 73, 660, 989, }, + [27] = { 74, 694, 1041, }, + [28] = { 75, 730, 1095, }, + [29] = { 76, 768, 1151, }, + [30] = { 77, 807, 1211, }, + [31] = { 78, 849, 1273, }, + [32] = { 79, 892, 1338, }, + [33] = { 80, 938, 1406, }, + [34] = { 81, 985, 1478, }, + [35] = { 82, 1035, 1553, }, }, } skills["MonsterProjectileWeakness"] = { @@ -1385,8 +2232,10 @@ skills["MonsterProjectileWeakness"] = { }, levels = { [1] = { 25, 10.4, 54, 22, 32, }, - [2] = { 55, 10.9, 70, 24, 34, }, - [3] = { 60, 10.9, 95, 24, 34, }, + [2] = { 36, 10.4, 54, 22, 32, }, + [3] = { 47, 10.4, 54, 22, 32, }, + [4] = { 55, 10.9, 70, 24, 34, }, + [5] = { 60, 10.9, 95, 24, 34, }, }, } skills["MonsterProximityShield"] = { @@ -1433,20 +2282,21 @@ skills["MonsterPuncture"] = { }, baseMods = { skill("castTime", 1), + --"bleed_on_hit_base_duration" = 5000 --"skill_can_fire_arrows" = ? - --"global_bleed_on_hit" = ? mod("BleedChance", "BASE", 100), }, qualityMods = { }, levelMods = { [1] = skill("levelRequirement", nil), - --[2] = "active_skill_bleeding_damage_+%_final" + [2] = skill("bleedBasePercent", nil), --"base_bleed_on_hit_still_%_of_physical_damage_to_deal_per_minute" + --[3] = "base_bleed_on_hit_moving_%_of_physical_damage_to_deal_per_minute" }, levels = { - [1] = { 9, 45, }, - [2] = { 30, 107, }, - [3] = { 60, 158, }, + [1] = { 9, 14.5, 4370, }, + [2] = { 30, 20.666666666667, 6210, }, + [3] = { 60, 25.833333333333, 7730, }, }, } skills["MonsterRighteousFireWhileSpectred"] = { @@ -1462,7 +2312,6 @@ skills["MonsterRighteousFireWhileSpectred"] = { }, baseMods = { skill("castTime", 1), - skill("FireDot", 1.5833333333333), --"base_fire_damage_to_deal_per_minute" = 95 --"skill_art_variation" = 1 --"active_skill_area_of_effect_radius_+%_final" = 0 }, @@ -1470,9 +2319,48 @@ skills["MonsterRighteousFireWhileSpectred"] = { }, levelMods = { [1] = skill("levelRequirement", nil), + [2] = skill("FireDot", nil), --"base_fire_damage_to_deal_per_minute" }, levels = { - [1] = { 3, }, + [1] = { 3, 1.5833333333333, }, + [2] = { 5, 2.05, }, + [3] = { 8, 2.9, }, + [4] = { 10, 3.6, }, + [5] = { 12, 4.4166666666667, }, + [6] = { 14, 5.3666666666667, }, + [7] = { 17, 7.1166666666667, }, + [8] = { 20, 9.3333333333333, }, + [9] = { 24, 13.15, }, + [10] = { 27, 16.866666666667, }, + [11] = { 28, 18.3, }, + [12] = { 31, 23.25, }, + [13] = { 36, 34.283333333333, }, + [14] = { 41, 49.933333333333, }, + [15] = { 44, 62.266666666667, }, + [16] = { 48, 83.183333333333, }, + [17] = { 50, 95.983333333333, }, + [18] = { 52, 110.61666666667, }, + [19] = { 57, 157, }, + [20] = { 63, 237.28333333333, }, + [21] = { 64, 254.01666666667, }, + [22] = { 65, 271.86666666667, }, + [23] = { 66, 290.93333333333, }, + [24] = { 67, 311.28333333333, }, + [25] = { 68, 332.98333333333, }, + [26] = { 69, 356.16666666667, }, + [27] = { 70, 380.88333333333, }, + [28] = { 71, 407.25, }, + [29] = { 72, 435.38333333333, }, + [30] = { 73, 465.38333333333, }, + [31] = { 74, 497.38333333333, }, + [32] = { 75, 531.5, }, + [33] = { 76, 567.88333333333, }, + [34] = { 77, 606.68333333333, }, + [35] = { 78, 648.03333333333, }, + [36] = { 79, 692.11666666667, }, + [37] = { 80, 739.1, }, + [38] = { 81, 789.18333333333, }, + [39] = { 82, 842.56666666667, }, }, } skills["MonsterShockNova"] = { @@ -1501,7 +2389,38 @@ skills["MonsterShockNova"] = { }, levels = { [1] = { 4, 3, 10, }, - [2] = { 68, 377, 1132, }, + [2] = { 8, 5, 15, }, + [3] = { 11, 6, 19, }, + [4] = { 12, 7, 20, }, + [5] = { 17, 10, 29, }, + [6] = { 22, 13, 40, }, + [7] = { 29, 20, 60, }, + [8] = { 31, 22, 67, }, + [9] = { 35, 28, 83, }, + [10] = { 37, 31, 92, }, + [11] = { 40, 36, 107, }, + [12] = { 45, 46, 137, }, + [13] = { 50, 58, 173, }, + [14] = { 55, 73, 218, }, + [15] = { 58, 83, 250, }, + [16] = { 65, 113, 340, }, + [17] = { 66, 118, 355, }, + [18] = { 67, 124, 371, }, + [19] = { 68, 377, 1132, }, + [20] = { 69, 393, 1182, }, + [21] = { 70, 410, 1233, }, + [22] = { 71, 428, 1286, }, + [23] = { 72, 446, 1342, }, + [24] = { 73, 465, 1400, }, + [25] = { 74, 485, 1459, }, + [26] = { 75, 506, 1522, }, + [27] = { 76, 528, 1587, }, + [28] = { 77, 550, 1654, }, + [29] = { 78, 573, 1724, }, + [30] = { 79, 597, 1796, }, + [31] = { 80, 623, 1872, }, + [32] = { 81, 649, 1950, }, + [33] = { 82, 676, 2032, }, }, } skills["MonsterSpark"] = { @@ -1536,11 +2455,40 @@ skills["MonsterSpark"] = { [1] = { 4, 20, 2, 7, 0, }, [2] = { 8, 19, 3, 10, 0, }, [3] = { 11, 18, 4, 12, 1, }, - [4] = { 25, 17, 10, 29, 1, }, - [5] = { 29, 16, 12, 36, 1, }, - [6] = { 31, 16, 13, 40, 2, }, - [7] = { 66, nil, 61, 183, 2, }, - [8] = { 68, nil, 145, 435, 2, }, + [4] = { 12, 18, 4, 13, 1, }, + [5] = { 15, 18, 5, 16, 1, }, + [6] = { 20, 18, 7, 22, 1, }, + [7] = { 25, 17, 10, 29, 1, }, + [8] = { 29, 16, 12, 36, 1, }, + [9] = { 31, 16, 13, 40, 2, }, + [10] = { 32, 16, 14, 42, 2, }, + [11] = { 34, 16, 15, 46, 2, }, + [12] = { 37, 16, 18, 54, 2, }, + [13] = { 40, 16, 21, 62, 2, }, + [14] = { 42, 16, 22, 67, 2, }, + [15] = { 45, 16, 26, 77, 2, }, + [16] = { 50, 16, 32, 96, 2, }, + [17] = { 51, 16, 33, 100, 2, }, + [18] = { 52, 16, 35, 104, 2, }, + [19] = { 54, 16, 38, 113, 2, }, + [20] = { 58, 16, 44, 133, 2, }, + [21] = { 66, nil, 61, 183, 2, }, + [22] = { 67, nil, 63, 190, 2, }, + [23] = { 68, nil, 145, 435, 2, }, + [24] = { 69, nil, 151, 452, 2, }, + [25] = { 70, nil, 157, 470, 2, }, + [26] = { 71, nil, 163, 488, 2, }, + [27] = { 72, nil, 169, 507, 2, }, + [28] = { 73, nil, 176, 527, 2, }, + [29] = { 74, nil, 182, 547, 2, }, + [30] = { 75, nil, 189, 568, 2, }, + [31] = { 76, nil, 197, 590, 2, }, + [32] = { 77, nil, 204, 612, 2, }, + [33] = { 78, nil, 212, 636, 2, }, + [34] = { 79, nil, 220, 660, 2, }, + [35] = { 80, nil, 228, 684, 2, }, + [36] = { 81, nil, 237, 710, 2, }, + [37] = { 82, nil, 246, 737, 2, }, }, } skills["MonsterSplitFireballSpectre"] = { @@ -1571,7 +2519,40 @@ skills["MonsterSplitFireballSpectre"] = { }, levels = { [1] = { 3, 4, 6, }, - [2] = { 68, 628, 941, }, + [2] = { 5, 5, 7, }, + [3] = { 8, 6, 10, }, + [4] = { 12, 9, 14, }, + [5] = { 15, 12, 18, }, + [6] = { 19, 16, 24, }, + [7] = { 20, 17, 26, }, + [8] = { 21, 18, 28, }, + [9] = { 26, 26, 39, }, + [10] = { 30, 34, 50, }, + [11] = { 34, 43, 65, }, + [12] = { 38, 55, 82, }, + [13] = { 43, 74, 111, }, + [14] = { 45, 83, 124, }, + [15] = { 53, 129, 193, }, + [16] = { 58, 169, 253, }, + [17] = { 62, 209, 313, }, + [18] = { 63, 220, 330, }, + [19] = { 66, 257, 386, }, + [20] = { 67, 271, 406, }, + [21] = { 68, 628, 941, }, + [22] = { 69, 661, 991, }, + [23] = { 70, 695, 1043, }, + [24] = { 71, 732, 1098, }, + [25] = { 72, 770, 1155, }, + [26] = { 73, 810, 1216, }, + [27] = { 74, 852, 1279, }, + [28] = { 75, 897, 1345, }, + [29] = { 76, 943, 1414, }, + [30] = { 77, 992, 1487, }, + [31] = { 78, 1042, 1564, }, + [32] = { 79, 1096, 1644, }, + [33] = { 80, 1152, 1728, }, + [34] = { 81, 1211, 1816, }, + [35] = { 82, 1272, 1908, }, }, } skills["MonsterWarlordsMark"] = { @@ -1635,9 +2616,12 @@ skills["NecromancerConductivity"] = { }, levels = { [1] = { 10, -20, 14, }, - [2] = { 41, -25, 16, }, - [3] = { 58, -30, 18, }, - [4] = { 71, -40, 20, }, + [2] = { 40, -20, 14, }, + [3] = { 41, -25, 16, }, + [4] = { 57, -25, 16, }, + [5] = { 58, -30, 18, }, + [6] = { 70, -30, 18, }, + [7] = { 71, -40, 20, }, }, } skills["NecromancerElementalWeakness"] = { @@ -1671,9 +2655,12 @@ skills["NecromancerElementalWeakness"] = { }, levels = { [1] = { 10, -20, }, - [2] = { 40, -25, }, - [3] = { 56, -30, }, - [4] = { 71, -40, }, + [2] = { 39, -20, }, + [3] = { 40, -25, }, + [4] = { 55, -25, }, + [5] = { 56, -30, }, + [6] = { 70, -30, }, + [7] = { 71, -40, }, }, } skills["NecromancerEnfeeble"] = { @@ -1738,9 +2725,12 @@ skills["NecromancerFlammability"] = { }, levels = { [1] = { 10, -20, 14, }, - [2] = { 41, -25, 16, }, - [3] = { 58, -30, 18, }, - [4] = { 71, -40, 20, }, + [2] = { 40, -20, 14, }, + [3] = { 41, -25, 16, }, + [4] = { 57, -25, 16, }, + [5] = { 58, -30, 18, }, + [6] = { 70, -30, 18, }, + [7] = { 71, -40, 20, }, }, } skills["NecromancerFrostbite"] = { @@ -1773,9 +2763,12 @@ skills["NecromancerFrostbite"] = { }, levels = { [1] = { 10, -20, 14, }, - [2] = { 41, -25, 16, }, - [3] = { 58, -30, 18, }, - [4] = { 71, -40, 20, }, + [2] = { 40, -20, 14, }, + [3] = { 41, -25, 16, }, + [4] = { 57, -25, 16, }, + [5] = { 58, -30, 18, }, + [6] = { 70, -30, 18, }, + [7] = { 71, -40, 20, }, }, } skills["NecromancerProjectileWeakness"] = { @@ -1806,8 +2799,10 @@ skills["NecromancerProjectileWeakness"] = { }, levels = { [1] = { 25, 10.4, 54, 22, 32, }, - [2] = { 55, 10.9, 70, 24, 34, }, - [3] = { 60, 10.9, 95, 24, 34, }, + [2] = { 36, 10.4, 54, 22, 32, }, + [3] = { 47, 10.4, 54, 22, 32, }, + [4] = { 55, 10.9, 70, 24, 34, }, + [5] = { 60, 10.9, 95, 24, 34, }, }, } skills["NecromancerRaiseZombie"] = { @@ -1833,9 +2828,22 @@ skills["NecromancerRaiseZombie"] = { }, levels = { [1] = { 2, 3, }, - [2] = { 26, 4, }, - [3] = { 40, 5, }, - [4] = { 51, 6, }, + [2] = { 3, 3, }, + [3] = { 5, 3, }, + [4] = { 8, 3, }, + [5] = { 11, 3, }, + [6] = { 16, 3, }, + [7] = { 21, 3, }, + [8] = { 26, 4, }, + [9] = { 31, 4, }, + [10] = { 35, 4, }, + [11] = { 40, 5, }, + [12] = { 44, 5, }, + [13] = { 48, 5, }, + [14] = { 51, 6, }, + [15] = { 54, 6, }, + [16] = { 58, 6, }, + [17] = { 63, 6, }, }, } skills["NecromancerVulnerability"] = { @@ -1884,10 +2892,6 @@ skills["PyroChaosFireball"] = { skill("castTime", 0.85), skill("CritChance", 6), skill("cooldown", 3), - skill("FireMin", 3), --"spell_minimum_base_fire_damage" = 3 - skill("FireMax", 4), --"spell_maximum_base_fire_damage" = 4 - skill("ChaosMin", 2), --"spell_minimum_base_chaos_damage" = 2 - skill("ChaosMax", 2), --"spell_maximum_base_chaos_damage" = 2 --"spell_maximum_action_distance_+%" = -50 --"skill_art_variation" = 4 --"base_is_projectile" = ? @@ -1896,9 +2900,49 @@ skills["PyroChaosFireball"] = { }, levelMods = { [1] = skill("levelRequirement", nil), + [2] = skill("FireMin", nil), --"spell_minimum_base_fire_damage" + [3] = skill("FireMax", nil), --"spell_maximum_base_fire_damage" + [4] = skill("ChaosMin", nil), --"spell_minimum_base_chaos_damage" + [5] = skill("ChaosMax", nil), --"spell_maximum_base_chaos_damage" }, levels = { - [1] = { 3, }, + [1] = { 3, 3, 4, 2, 2, }, + [2] = { 5, 3, 5, 2, 3, }, + [3] = { 8, 4, 6, 3, 3, }, + [4] = { 10, 5, 7, 3, 4, }, + [5] = { 12, 6, 9, 4, 5, }, + [6] = { 14, 7, 10, 5, 6, }, + [7] = { 17, 8, 12, 6, 7, }, + [8] = { 20, 10, 15, 7, 8, }, + [9] = { 27, 15, 22, 10, 12, }, + [10] = { 28, 16, 24, 11, 13, }, + [11] = { 31, 19, 28, 12, 15, }, + [12] = { 36, 24, 36, 16, 20, }, + [13] = { 41, 31, 46, 21, 25, }, + [14] = { 49, 44, 66, 30, 37, }, + [15] = { 50, 46, 69, 31, 38, }, + [16] = { 52, 51, 76, 34, 42, }, + [17] = { 57, 63, 94, 42, 52, }, + [18] = { 63, 81, 122, 55, 67, }, + [19] = { 64, 85, 127, 57, 70, }, + [20] = { 65, 88, 132, 60, 73, }, + [21] = { 66, 92, 138, 62, 76, }, + [22] = { 67, 96, 144, 65, 79, }, + [23] = { 68, 100, 150, 67, 82, }, + [24] = { 69, 104, 156, 70, 86, }, + [25] = { 70, 108, 163, 73, 89, }, + [26] = { 71, 113, 169, 76, 93, }, + [27] = { 72, 117, 176, 79, 97, }, + [28] = { 73, 122, 183, 83, 101, }, + [29] = { 74, 127, 191, 86, 105, }, + [30] = { 75, 132, 199, 89, 109, }, + [31] = { 76, 138, 207, 93, 114, }, + [32] = { 77, 143, 215, 97, 118, }, + [33] = { 78, 149, 224, 101, 123, }, + [34] = { 79, 155, 233, 105, 128, }, + [35] = { 80, 161, 242, 109, 133, }, + [36] = { 81, 168, 252, 113, 139, }, + [37] = { 82, 175, 262, 118, 144, }, }, } skills["PyroFireball"] = { @@ -1929,7 +2973,42 @@ skills["PyroFireball"] = { }, levels = { [1] = { 3, 5, 7, }, - [2] = { 68, 497, 745, }, + [2] = { 5, 6, 9, }, + [3] = { 8, 8, 12, }, + [4] = { 10, 10, 14, }, + [5] = { 12, 11, 17, }, + [6] = { 14, 13, 20, }, + [7] = { 17, 17, 26, }, + [8] = { 20, 21, 32, }, + [9] = { 24, 28, 42, }, + [10] = { 28, 37, 55, }, + [11] = { 31, 45, 67, }, + [12] = { 36, 61, 91, }, + [13] = { 41, 82, 122, }, + [14] = { 46, 109, 163, }, + [15] = { 50, 136, 204, }, + [16] = { 52, 152, 228, }, + [17] = { 57, 199, 299, }, + [18] = { 63, 274, 411, }, + [19] = { 64, 288, 433, }, + [20] = { 65, 304, 456, }, + [21] = { 66, 320, 480, }, + [22] = { 67, 337, 506, }, + [23] = { 68, 497, 745, }, + [24] = { 69, 523, 785, }, + [25] = { 70, 551, 826, }, + [26] = { 71, 580, 869, }, + [27] = { 72, 610, 915, }, + [28] = { 73, 642, 962, }, + [29] = { 74, 675, 1012, }, + [30] = { 75, 710, 1065, }, + [31] = { 76, 747, 1120, }, + [32] = { 77, 785, 1178, }, + [33] = { 78, 825, 1238, }, + [34] = { 79, 868, 1301, }, + [35] = { 80, 912, 1368, }, + [36] = { 81, 958, 1438, }, + [37] = { 82, 1007, 1511, }, }, } skills["PyroSuicideExplosion"] = { @@ -1956,11 +3035,37 @@ skills["PyroSuicideExplosion"] = { }, levels = { [1] = { 3, 9, 14, nil, }, - [2] = { 9, 18, 27, nil, }, - [3] = { 13, 27, 40, nil, }, - [4] = { 18, 42, 62, nil, }, - [5] = { 23, 63, 94, nil, }, - [6] = { 27, 85, 128, nil, }, + [2] = { 5, 12, 18, nil, }, + [3] = { 9, 18, 27, nil, }, + [4] = { 12, 24, 37, nil, }, + [5] = { 13, 27, 40, nil, }, + [6] = { 18, 42, 62, nil, }, + [7] = { 23, 63, 94, nil, }, + [8] = { 27, 85, 128, nil, }, + [9] = { 28, 92, 138, nil, }, + [10] = { 35, 154, 231, nil, }, + [11] = { 49, 399, 599, nil, }, + [12] = { 50, 427, 640, nil, }, + [13] = { 58, 714, 1072, nil, }, + [14] = { 64, 1042, 1563, nil, }, + [15] = { 65, 1109, 1664, nil, }, + [16] = { 66, 1180, 1770, nil, }, + [17] = { 67, 1256, 1883, nil, }, + [18] = { 68, 1336, 2003, nil, }, + [19] = { 69, 1420, 2131, nil, }, + [20] = { 70, 1510, 2265, nil, }, + [21] = { 71, 1606, 2409, nil, }, + [22] = { 72, 1707, 2560, nil, }, + [23] = { 73, 1814, 2721, nil, }, + [24] = { 74, 1928, 2892, nil, }, + [25] = { 75, 2048, 3073, nil, }, + [26] = { 76, 2176, 3264, nil, }, + [27] = { 77, 2312, 3467, nil, }, + [28] = { 78, 2455, 3683, nil, }, + [29] = { 79, 2607, 3911, nil, }, + [30] = { 80, 2768, 4153, nil, }, + [31] = { 81, 2939, 4409, nil, }, + [32] = { 82, 3120, 4680, nil, }, }, } skills["RevenantSpellProjectileSpectre"] = { @@ -1975,8 +3080,6 @@ skills["RevenantSpellProjectileSpectre"] = { baseMods = { skill("castTime", 1), skill("cooldown", 3), - skill("LightningMin", 3), --"spell_minimum_base_lightning_damage" = 3 - skill("LightningMax", 7), --"spell_maximum_base_lightning_damage" = 7 --"monster_projectile_variation" = 7 --"base_number_of_projectiles_in_spiral_nova" = 3 --"projectile_spiral_nova_time_ms" = 150 @@ -1989,9 +3092,47 @@ skills["RevenantSpellProjectileSpectre"] = { }, levelMods = { [1] = skill("levelRequirement", nil), + [2] = skill("LightningMin", nil), --"spell_minimum_base_lightning_damage" + [3] = skill("LightningMax", nil), --"spell_maximum_base_lightning_damage" }, levels = { - [1] = { 3, }, + [1] = { 3, 3, 7, }, + [2] = { 5, 4, 9, }, + [3] = { 8, 6, 13, }, + [4] = { 11, 8, 18, }, + [5] = { 15, 11, 26, }, + [6] = { 20, 17, 40, }, + [7] = { 24, 24, 56, }, + [8] = { 28, 33, 77, }, + [9] = { 29, 36, 83, }, + [10] = { 32, 45, 104, }, + [11] = { 36, 60, 141, }, + [12] = { 40, 81, 188, }, + [13] = { 45, 115, 268, }, + [14] = { 49, 152, 354, }, + [15] = { 50, 162, 379, }, + [16] = { 52, 186, 434, }, + [17] = { 56, 243, 568, }, + [18] = { 60, 318, 741, }, + [19] = { 64, 413, 963, }, + [20] = { 65, 441, 1028, }, + [21] = { 66, 470, 1097, }, + [22] = { 67, 502, 1170, }, + [23] = { 68, 535, 1248, }, + [24] = { 69, 571, 1331, }, + [25] = { 70, 608, 1420, }, + [26] = { 71, 649, 1514, }, + [27] = { 72, 692, 1614, }, + [28] = { 73, 737, 1720, }, + [29] = { 74, 786, 1833, }, + [30] = { 75, 837, 1953, }, + [31] = { 76, 892, 2081, }, + [32] = { 77, 950, 2217, }, + [33] = { 78, 1012, 2361, }, + [34] = { 79, 1078, 2515, }, + [35] = { 80, 1148, 2678, }, + [36] = { 81, 1222, 2851, }, + [37] = { 82, 1301, 3035, }, }, } skills["SeawitchFrostbolt"] = { @@ -2021,7 +3162,40 @@ skills["SeawitchFrostbolt"] = { }, levels = { [1] = { 3, 8, 12, }, - [2] = { 68, 889, 1337, }, + [2] = { 5, 10, 15, }, + [3] = { 8, 14, 21, }, + [4] = { 10, 17, 25, }, + [5] = { 12, 20, 30, }, + [6] = { 14, 24, 35, }, + [7] = { 17, 30, 45, }, + [8] = { 20, 38, 57, }, + [9] = { 25, 54, 81, }, + [10] = { 28, 66, 99, }, + [11] = { 31, 80, 120, }, + [12] = { 36, 110, 165, }, + [13] = { 41, 149, 224, }, + [14] = { 46, 201, 301, }, + [15] = { 51, 267, 401, }, + [16] = { 52, 283, 424, }, + [17] = { 57, 374, 560, }, + [18] = { 65, 577, 865, }, + [19] = { 66, 609, 913, }, + [20] = { 67, 642, 963, }, + [21] = { 68, 889, 1337, }, + [22] = { 69, 937, 1410, }, + [23] = { 70, 988, 1486, }, + [24] = { 71, 1041, 1566, }, + [25] = { 72, 1097, 1651, }, + [26] = { 73, 1156, 1740, }, + [27] = { 74, 1218, 1833, }, + [28] = { 75, 1283, 1931, }, + [29] = { 76, 1351, 2034, }, + [30] = { 77, 1423, 2142, }, + [31] = { 78, 1499, 2255, }, + [32] = { 79, 1578, 2374, }, + [33] = { 80, 1661, 2500, }, + [34] = { 81, 1748, 2631, }, + [35] = { 82, 1840, 2769, }, }, } skills["SeaWitchScreech"] = { @@ -2050,7 +3224,40 @@ skills["SeaWitchScreech"] = { }, levels = { [1] = { 3, 1, 2, }, - [2] = { 68, 223, 347, }, + [2] = { 5, 1, 2, }, + [3] = { 6, 2, 2, }, + [4] = { 8, 2, 3, }, + [5] = { 10, 2, 3, }, + [6] = { 13, 3, 4, }, + [7] = { 17, 4, 6, }, + [8] = { 20, 5, 8, }, + [9] = { 24, 7, 10, }, + [10] = { 27, 8, 13, }, + [11] = { 29, 10, 14, }, + [12] = { 35, 14, 21, }, + [13] = { 42, 22, 33, }, + [14] = { 49, 33, 50, }, + [15] = { 51, 37, 56, }, + [16] = { 58, 56, 83, }, + [17] = { 64, 77, 116, }, + [18] = { 65, 82, 123, }, + [19] = { 66, 86, 130, }, + [20] = { 67, 91, 137, }, + [21] = { 68, 223, 347, }, + [22] = { 69, 235, 366, }, + [23] = { 70, 248, 386, }, + [24] = { 71, 262, 407, }, + [25] = { 72, 276, 430, }, + [26] = { 73, 291, 453, }, + [27] = { 74, 307, 478, }, + [28] = { 75, 324, 504, }, + [29] = { 76, 341, 531, }, + [30] = { 77, 360, 560, }, + [31] = { 78, 379, 590, }, + [32] = { 79, 400, 622, }, + [33] = { 80, 421, 655, }, + [34] = { 81, 444, 690, }, + [35] = { 82, 467, 727, }, }, } skills["SeaWitchWave"] = { @@ -2076,7 +3283,45 @@ skills["SeaWitchWave"] = { }, levels = { [1] = { 4, 6, 10, }, - [2] = { 68, 874, 1312, }, + [2] = { 6, 8, 12, }, + [3] = { 9, 10, 16, }, + [4] = { 12, 13, 20, }, + [5] = { 13, 14, 22, }, + [6] = { 14, 16, 23, }, + [7] = { 15, 17, 25, }, + [8] = { 18, 21, 31, }, + [9] = { 22, 27, 41, }, + [10] = { 25, 33, 49, }, + [11] = { 29, 42, 63, }, + [12] = { 31, 47, 71, }, + [13] = { 34, 56, 84, }, + [14] = { 38, 70, 105, }, + [15] = { 39, 74, 111, }, + [16] = { 40, 78, 117, }, + [17] = { 43, 91, 137, }, + [18] = { 49, 125, 187, }, + [19] = { 56, 176, 265, }, + [20] = { 58, 194, 292, }, + [21] = { 59, 204, 306, }, + [22] = { 60, 214, 321, }, + [23] = { 63, 247, 370, }, + [24] = { 66, 284, 427, }, + [25] = { 67, 298, 447, }, + [26] = { 68, 874, 1312, }, + [27] = { 69, 916, 1374, }, + [28] = { 70, 959, 1439, }, + [29] = { 71, 1004, 1507, }, + [30] = { 72, 1052, 1577, }, + [31] = { 73, 1101, 1651, }, + [32] = { 74, 1152, 1728, }, + [33] = { 75, 1206, 1809, }, + [34] = { 76, 1262, 1893, }, + [35] = { 77, 1320, 1980, }, + [36] = { 78, 1381, 2072, }, + [37] = { 79, 1445, 2167, }, + [38] = { 80, 1511, 2266, }, + [39] = { 81, 1580, 2370, }, + [40] = { 82, 1652, 2478, }, }, } skills["SkeletonMassBowProjectile"] = { @@ -2093,8 +3338,10 @@ skills["SkeletonMassBowProjectile"] = { --"monster_projectile_variation" = 12 --"spell_maximum_action_distance_+%" = -50 mod("ProjectileSpeed", "INC", 200), --"base_projectile_speed_+%" = 200 + --"base_bleed_on_hit_moving_%_of_physical_damage_to_deal_per_minute" = 3000 + skill("bleedBasePercent", 10), --"base_bleed_on_hit_still_%_of_physical_damage_to_deal_per_minute" = 600 + --"bleed_on_hit_base_duration" = 5000 --"base_is_projectile" = ? - --"global_bleed_on_hit" = ? mod("BleedChance", "BASE", 100), }, qualityMods = { @@ -2104,6 +3351,39 @@ skills["SkeletonMassBowProjectile"] = { }, levels = { [1] = { 2, }, + [2] = { 6, }, + [3] = { 10, }, + [4] = { 14, }, + [5] = { 18, }, + [6] = { 22, }, + [7] = { 26, }, + [8] = { 30, }, + [9] = { 34, }, + [10] = { 38, }, + [11] = { 42, }, + [12] = { 46, }, + [13] = { 50, }, + [14] = { 54, }, + [15] = { 58, }, + [16] = { 61, }, + [17] = { 63, }, + [18] = { 66, }, + [19] = { 67, }, + [20] = { 68, }, + [21] = { 69, }, + [22] = { 70, }, + [23] = { 71, }, + [24] = { 72, }, + [25] = { 73, }, + [26] = { 74, }, + [27] = { 75, }, + [28] = { 76, }, + [29] = { 77, }, + [30] = { 78, }, + [31] = { 79, }, + [32] = { 80, }, + [33] = { 81, }, + [34] = { 82, }, }, } skills["SkeletonSpark"] = { @@ -2139,10 +3419,39 @@ skills["SkeletonSpark"] = { [1] = { 4, 50, 2, 6, }, [2] = { 8, 48, 3, 9, }, [3] = { 11, 45, 4, 11, }, - [4] = { 20, 44, 7, 21, }, - [5] = { 28, 41, 11, 34, }, - [6] = { 29, 40, 12, 36, }, - [7] = { 68, 40, 351, 1052, }, + [4] = { 15, 45, 5, 15, }, + [5] = { 20, 44, 7, 21, }, + [6] = { 28, 41, 11, 34, }, + [7] = { 29, 40, 12, 36, }, + [8] = { 31, 40, 14, 41, }, + [9] = { 32, 40, 14, 43, }, + [10] = { 34, 40, 16, 48, }, + [11] = { 37, 40, 19, 56, }, + [12] = { 40, 40, 22, 65, }, + [13] = { 42, 40, 24, 72, }, + [14] = { 44, 40, 26, 79, }, + [15] = { 50, 40, 35, 105, }, + [16] = { 51, 40, 37, 110, }, + [17] = { 52, 40, 38, 115, }, + [18] = { 63, 40, 63, 189, }, + [19] = { 65, 40, 69, 206, }, + [20] = { 66, 40, 72, 215, }, + [21] = { 67, 40, 75, 225, }, + [22] = { 68, 40, 351, 1052, }, + [23] = { 69, 40, 366, 1098, }, + [24] = { 70, 40, 382, 1146, }, + [25] = { 71, 40, 398, 1195, }, + [26] = { 72, 40, 416, 1247, }, + [27] = { 73, 40, 434, 1301, }, + [28] = { 74, 40, 452, 1356, }, + [29] = { 75, 40, 471, 1414, }, + [30] = { 76, 40, 492, 1475, }, + [31] = { 77, 40, 512, 1537, }, + [32] = { 78, 40, 534, 1602, }, + [33] = { 79, 40, 557, 1670, }, + [34] = { 80, 40, 580, 1740, }, + [35] = { 81, 40, 604, 1813, }, + [36] = { 82, 40, 629, 1888, }, }, } skills["SkeletonTemporalChains"] = { @@ -2259,7 +3568,42 @@ skills["TarMortarTaster"] = { }, levels = { [1] = { 3, 5, 8, }, - [2] = { 68, 271, 407, }, + [2] = { 5, 6, 10, }, + [3] = { 8, 9, 13, }, + [4] = { 11, 11, 16, }, + [5] = { 15, 15, 22, }, + [6] = { 20, 21, 31, }, + [7] = { 24, 27, 40, }, + [8] = { 28, 34, 51, }, + [9] = { 29, 36, 54, }, + [10] = { 32, 43, 64, }, + [11] = { 36, 53, 79, }, + [12] = { 40, 65, 98, }, + [13] = { 45, 84, 126, }, + [14] = { 49, 102, 154, }, + [15] = { 50, 108, 161, }, + [16] = { 52, 118, 178, }, + [17] = { 56, 143, 214, }, + [18] = { 60, 172, 258, }, + [19] = { 64, 206, 309, }, + [20] = { 65, 216, 324, }, + [21] = { 66, 226, 338, }, + [22] = { 67, 236, 354, }, + [23] = { 68, 271, 407, }, + [24] = { 69, 284, 425, }, + [25] = { 70, 296, 445, }, + [26] = { 71, 310, 465, }, + [27] = { 72, 324, 485, }, + [28] = { 73, 338, 507, }, + [29] = { 74, 353, 530, }, + [30] = { 75, 369, 553, }, + [31] = { 76, 385, 577, }, + [32] = { 77, 402, 603, }, + [33] = { 78, 420, 629, }, + [34] = { 79, 438, 657, }, + [35] = { 80, 457, 686, }, + [36] = { 81, 477, 715, }, + [37] = { 82, 498, 746, }, }, } skills["UndyingWhirlingBlades"] = { diff --git a/Data/3_0/Skills/sup_dex.lua b/Data/3_0/Skills/sup_dex.lua index fbcacf3b..893482ea 100644 --- a/Data/3_0/Skills/sup_dex.lua +++ b/Data/3_0/Skills/sup_dex.lua @@ -1452,7 +1452,7 @@ skills["SupportPoison"] = { mod("PoisonChance", "BASE", 100), --"global_poison_on_hit" = ? }, qualityMods = { - mod("Duration", "INC", 0.5, 0, KeywordFlag.Poison), --"base_poison_duration_+%" = 0.5 + mod("EnemyPoisonDuration", "INC", 0.5), --"base_poison_duration_+%" = 0.5 }, levelMods = { [1] = nil, diff --git a/Data/Global.lua b/Data/Global.lua index 849cad27..34f5ea59 100644 --- a/Data/Global.lua +++ b/Data/Global.lua @@ -83,9 +83,11 @@ KeywordFlag.Trap = 0x001000 KeywordFlag.Mine = 0x002000 KeywordFlag.Totem = 0x004000 KeywordFlag.Minion = 0x008000 +KeywordFlag.Attack = 0x010000 +KeywordFlag.Spell = 0x020000 -- Skill effects -KeywordFlag.Poison = 0x010000 -KeywordFlag.Bleed = 0x020000 +KeywordFlag.Poison = 0x100000 +KeywordFlag.Bleed = 0x200000 -- Active skill types, used in ActiveSkills.dat and GrantedEffects.dat -- Had to reverse engineer this, not sure what all of the values mean diff --git a/Export/Skills/statmap.ini b/Export/Skills/statmap.ini index 5ddff032..9b5263e7 100644 --- a/Export/Skills/statmap.ini +++ b/Export/Skills/statmap.ini @@ -317,7 +317,7 @@ mod = flag("Condition:Fortify", { type = "Condition", var = "Combat" }) [base_poison_damage_+%] mod = mod("Damage", "INC", {val}, 0, KeywordFlag.Poison) [base_poison_duration_+%] -mod = mod("Duration", "INC", {val}, 0, KeywordFlag.Poison) +mod = mod("EnemyPoisonDuration", "INC", {val}) [base_killed_monster_dropped_item_quantity_+%] mod = mod("LootQuantity", "INC", {val}) [base_killed_monster_dropped_item_rarity_+%] diff --git a/Export/_statdesc.lua b/Export/_statdesc.lua index 4b6c849a..28be050c 100644 --- a/Export/_statdesc.lua +++ b/Export/_statdesc.lua @@ -61,7 +61,7 @@ do end for k, v in pairs(nk) do - print("'"..k.."' = '"..v.."'") + --print("'"..k.."' = '"..v.."'") end local function matchLimit(lang, val) diff --git a/Export/skills.lua b/Export/skills.lua index 0284ca78..db276162 100644 --- a/Export/skills.lua +++ b/Export/skills.lua @@ -377,7 +377,7 @@ directiveTable.mods = function(state, args, out) for _, mod in ipairs(gem.mods) do if not mod.perLevel then out:write('\t\t') - if mod.def then + if mod.def and mod.def ~= "nil" then out:write(mod.def:gsub("{val}",(mod.val or 0)*mod.mult):gsub("{global}",gem.global):gsub("{curse}",gem.curse), ', ') end if mod.id then diff --git a/Modules/Build.lua b/Modules/Build.lua index a06621c9..91ed253d 100644 --- a/Modules/Build.lua +++ b/Modules/Build.lua @@ -32,6 +32,12 @@ local mercilessBanditDropList = { { label = "Kraityn (Att. Speed)", banditId = "Kraityn" }, { label = "Alira (Cast Speed)", banditId = "Alira" }, } +local fooBanditDropList = { + { label = "2 Passive Points", banditId = "None" }, + { label = "Oak (Life Regen, Phys.Dmg. Reduction, Phys.Dmg)", banditId = "Oak" }, + { label = "Kraityn (Attack/Cast Speed, Attack Dodge, Move Speed)", banditId = "Kraityn" }, + { label = "Alira (Mana Regen, Crit Multiplier, Resists)", banditId = "Alira" }, +} local buildMode = common.New("ControlHost") @@ -47,7 +53,7 @@ function buildMode:Init(dbFileName, buildName, buildXML, targetVersion) main:SetMode("LIST") end - if not dbFileName and not targetVersion then + if not dbFileName and not targetVersion and not buildXML then self.targetVersion = nil self:OpenTargetVersionPopup(true) return @@ -55,6 +61,8 @@ function buildMode:Init(dbFileName, buildName, buildXML, targetVersion) self.abortSave = true + wipeTable(self.controls) + -- Controls: top bar, left side self.anchorTopBarLeft = common.New("Control", nil, 4, 4, 0, 20) self.controls.back = common.New("ButtonControl", {"LEFT",self.anchorTopBarLeft,"RIGHT"}, 0, 0, 60, 20, "<< Back", function() @@ -193,93 +201,6 @@ function buildMode:Init(dbFileName, buildName, buildXML, targetVersion) self.buildFlag = true end) - -- Controls: Side bar - self.anchorSideBar = common.New("Control", nil, 4, 36, 0, 0) - self.controls.modeImport = common.New("ButtonControl", {"TOPLEFT",self.anchorSideBar,"TOPLEFT"}, 0, 0, 134, 20, "Import/Export Build", function() - self.viewMode = "IMPORT" - end) - self.controls.modeImport.locked = function() return self.viewMode == "IMPORT" end - self.controls.modeNotes = common.New("ButtonControl", {"LEFT",self.controls.modeImport,"RIGHT"}, 4, 0, 58, 20, "Notes", function() - self.viewMode = "NOTES" - end) - self.controls.modeNotes.locked = function() return self.viewMode == "NOTES" end - self.controls.modeConfig = common.New("ButtonControl", {"TOPRIGHT",self.anchorSideBar,"TOPLEFT"}, 300, 0, 100, 20, "Configuration", function() - self.viewMode = "CONFIG" - end) - self.controls.modeConfig.locked = function() return self.viewMode == "CONFIG" end - self.controls.modeTree = common.New("ButtonControl", {"TOPLEFT",self.anchorSideBar,"TOPLEFT"}, 0, 26, 72, 20, "Tree", function() - self.viewMode = "TREE" - end) - self.controls.modeTree.locked = function() return self.viewMode == "TREE" end - self.controls.modeSkills = common.New("ButtonControl", {"LEFT",self.controls.modeTree,"RIGHT"}, 4, 0, 72, 20, "Skills", function() - self.viewMode = "SKILLS" - end) - self.controls.modeSkills.locked = function() return self.viewMode == "SKILLS" end - self.controls.modeItems = common.New("ButtonControl", {"LEFT",self.controls.modeSkills,"RIGHT"}, 4, 0, 72, 20, "Items", function() - self.viewMode = "ITEMS" - end) - self.controls.modeItems.locked = function() return self.viewMode == "ITEMS" end - self.controls.modeCalcs = common.New("ButtonControl", {"LEFT",self.controls.modeItems,"RIGHT"}, 4, 0, 72, 20, "Calcs", function() - self.viewMode = "CALCS" - end) - self.controls.modeCalcs.locked = function() return self.viewMode == "CALCS" end - self.controls.banditNormal = common.New("DropDownControl", {"TOPLEFT",self.anchorSideBar,"TOPLEFT"}, 0, 70, 100, 16, normalBanditDropList, function(index, value) - self.banditNormal = value.banditId - self.modFlag = true - self.buildFlag = true - end) - self.controls.banditNormalLabel = common.New("LabelControl", {"BOTTOMLEFT",self.controls.banditNormal,"TOPLEFT"}, 0, 0, 0, 14, "^7Normal Bandit:") - self.controls.banditCruel = common.New("DropDownControl", {"LEFT",self.controls.banditNormal,"RIGHT"}, 0, 0, 100, 16, mercilessBanditDropList, function(index, value) - self.banditCruel = value.banditId - self.modFlag = true - self.buildFlag = true - end) - self.controls.banditCruelLabel = common.New("LabelControl", {"BOTTOMLEFT",self.controls.banditCruel,"TOPLEFT"}, 0, 0, 0, 14, "^7Cruel Bandit:") - self.controls.banditMerciless = common.New("DropDownControl", {"LEFT",self.controls.banditCruel,"RIGHT"}, 0, 0, 100, 16, cruelBanditDropList, function(index, value) - self.banditMerciless = value.banditId - self.modFlag = true - self.buildFlag = true - end) - self.controls.banditMercilessLabel = common.New("LabelControl", {"BOTTOMLEFT",self.controls.banditMerciless,"TOPLEFT"}, 0, 0, 0, 14, "^7Merciless Bandit:") - self.controls.mainSkillLabel = common.New("LabelControl", {"TOPLEFT",self.anchorSideBar,"TOPLEFT"}, 0, 95, 300, 16, "^7Main Skill:") - self.controls.mainSocketGroup = common.New("DropDownControl", {"TOPLEFT",self.controls.mainSkillLabel,"BOTTOMLEFT"}, 0, 2, 300, 16, nil, function(index, value) - self.mainSocketGroup = index - self.modFlag = true - self.buildFlag = true - end) - self.controls.mainSkill = common.New("DropDownControl", {"TOPLEFT",self.controls.mainSocketGroup,"BOTTOMLEFT"}, 0, 2, 300, 16, nil, function(index, value) - local mainSocketGroup = self.skillsTab.socketGroupList[self.mainSocketGroup] - mainSocketGroup.mainActiveSkill = index - self.modFlag = true - self.buildFlag = true - end) - self.controls.mainSkillPart = common.New("DropDownControl", {"TOPLEFT",self.controls.mainSocketGroup,"BOTTOMLEFT"}, 0, 20, 150, 18, nil, function(index, value) - local mainSocketGroup = self.skillsTab.socketGroupList[self.mainSocketGroup] - mainSocketGroup.displaySkillList[mainSocketGroup.mainActiveSkill].activeGem.srcGem.skillPart = index - self.modFlag = true - self.buildFlag = true - end) - self.controls.mainSkillMinion = common.New("DropDownControl", {"TOPLEFT",self.controls.mainSocketGroup,"BOTTOMLEFT"}, 0, 20, 178, 18, nil, function(index, value) - local mainSocketGroup = self.skillsTab.socketGroupList[self.mainSocketGroup] - mainSocketGroup.displaySkillList[mainSocketGroup.mainActiveSkill].activeGem.srcGem.skillMinion = value.minionId - self.modFlag = true - self.buildFlag = true - end) - self.controls.mainSkillMinionLibrary = common.New("ButtonControl", {"LEFT",self.controls.mainSkillMinion,"RIGHT"}, 2, 0, 120, 18, "Manage Spectres...", function() - self:OpenSpectreLibrary() - end) - self.controls.mainSkillMinionSkill = common.New("DropDownControl", {"TOPLEFT",self.controls.mainSkillMinion,"BOTTOMLEFT"}, 0, 2, 200, 16, nil, function(index, value) - local mainSocketGroup = self.skillsTab.socketGroupList[self.mainSocketGroup] - mainSocketGroup.displaySkillList[mainSocketGroup.mainActiveSkill].activeGem.srcGem.skillMinionSkill = index - self.modFlag = true - self.buildFlag = true - end) - self.controls.statBox = common.New("TextListControl", {"TOPLEFT",self.controls.mainSocketGroup,"BOTTOMLEFT"}, 0, 62, 300, 0, {{x=170,align="RIGHT_X"},{x=174,align="LEFT"}}) - self.controls.statBox.height = function(control) - local x, y = control:GetPos() - return main.screenH - main.mainBarHeight - 4 - y - end - -- List of display stats -- This defines the stats in the side bar, and also which stats show in node/item comparisons -- This may be user-customisable in the future @@ -406,6 +327,102 @@ function buildMode:Init(dbFileName, buildName, buildXML, targetVersion) self.targetVersion = targetVersion end + -- Controls: Side bar + self.anchorSideBar = common.New("Control", nil, 4, 36, 0, 0) + self.controls.modeImport = common.New("ButtonControl", {"TOPLEFT",self.anchorSideBar,"TOPLEFT"}, 0, 0, 134, 20, "Import/Export Build", function() + self.viewMode = "IMPORT" + end) + self.controls.modeImport.locked = function() return self.viewMode == "IMPORT" end + self.controls.modeNotes = common.New("ButtonControl", {"LEFT",self.controls.modeImport,"RIGHT"}, 4, 0, 58, 20, "Notes", function() + self.viewMode = "NOTES" + end) + self.controls.modeNotes.locked = function() return self.viewMode == "NOTES" end + self.controls.modeConfig = common.New("ButtonControl", {"TOPRIGHT",self.anchorSideBar,"TOPLEFT"}, 300, 0, 100, 20, "Configuration", function() + self.viewMode = "CONFIG" + end) + self.controls.modeConfig.locked = function() return self.viewMode == "CONFIG" end + self.controls.modeTree = common.New("ButtonControl", {"TOPLEFT",self.anchorSideBar,"TOPLEFT"}, 0, 26, 72, 20, "Tree", function() + self.viewMode = "TREE" + end) + self.controls.modeTree.locked = function() return self.viewMode == "TREE" end + self.controls.modeSkills = common.New("ButtonControl", {"LEFT",self.controls.modeTree,"RIGHT"}, 4, 0, 72, 20, "Skills", function() + self.viewMode = "SKILLS" + end) + self.controls.modeSkills.locked = function() return self.viewMode == "SKILLS" end + self.controls.modeItems = common.New("ButtonControl", {"LEFT",self.controls.modeSkills,"RIGHT"}, 4, 0, 72, 20, "Items", function() + self.viewMode = "ITEMS" + end) + self.controls.modeItems.locked = function() return self.viewMode == "ITEMS" end + self.controls.modeCalcs = common.New("ButtonControl", {"LEFT",self.controls.modeItems,"RIGHT"}, 4, 0, 72, 20, "Calcs", function() + self.viewMode = "CALCS" + end) + self.controls.modeCalcs.locked = function() return self.viewMode == "CALCS" end + if self.targetVersion == "2_6" then + self.controls.banditNormal = common.New("DropDownControl", {"TOPLEFT",self.anchorSideBar,"TOPLEFT"}, 0, 70, 100, 16, normalBanditDropList, function(index, value) + self.banditNormal = value.banditId + self.modFlag = true + self.buildFlag = true + end) + self.controls.banditNormalLabel = common.New("LabelControl", {"BOTTOMLEFT",self.controls.banditNormal,"TOPLEFT"}, 0, 0, 0, 14, "^7Normal Bandit:") + self.controls.banditCruel = common.New("DropDownControl", {"LEFT",self.controls.banditNormal,"RIGHT"}, 0, 0, 100, 16, mercilessBanditDropList, function(index, value) + self.banditCruel = value.banditId + self.modFlag = true + self.buildFlag = true + end) + self.controls.banditCruelLabel = common.New("LabelControl", {"BOTTOMLEFT",self.controls.banditCruel,"TOPLEFT"}, 0, 0, 0, 14, "^7Cruel Bandit:") + self.controls.banditMerciless = common.New("DropDownControl", {"LEFT",self.controls.banditCruel,"RIGHT"}, 0, 0, 100, 16, cruelBanditDropList, function(index, value) + self.banditMerciless = value.banditId + self.modFlag = true + self.buildFlag = true + end) + self.controls.banditMercilessLabel = common.New("LabelControl", {"BOTTOMLEFT",self.controls.banditMerciless,"TOPLEFT"}, 0, 0, 0, 14, "^7Merciless Bandit:") + else + self.controls.bandit = common.New("DropDownControl", {"TOPLEFT",self.anchorSideBar,"TOPLEFT"}, 0, 70, 300, 16, fooBanditDropList, function(index, value) + self.bandit = value.banditId + self.modFlag = true + self.buildFlag = true + end) + self.controls.banditLabel = common.New("LabelControl", {"BOTTOMLEFT",self.controls.bandit,"TOPLEFT"}, 0, 0, 0, 14, "^7Bandit:") + end + self.controls.mainSkillLabel = common.New("LabelControl", {"TOPLEFT",self.anchorSideBar,"TOPLEFT"}, 0, 95, 300, 16, "^7Main Skill:") + self.controls.mainSocketGroup = common.New("DropDownControl", {"TOPLEFT",self.controls.mainSkillLabel,"BOTTOMLEFT"}, 0, 2, 300, 16, nil, function(index, value) + self.mainSocketGroup = index + self.modFlag = true + self.buildFlag = true + end) + self.controls.mainSkill = common.New("DropDownControl", {"TOPLEFT",self.controls.mainSocketGroup,"BOTTOMLEFT"}, 0, 2, 300, 16, nil, function(index, value) + local mainSocketGroup = self.skillsTab.socketGroupList[self.mainSocketGroup] + mainSocketGroup.mainActiveSkill = index + self.modFlag = true + self.buildFlag = true + end) + self.controls.mainSkillPart = common.New("DropDownControl", {"TOPLEFT",self.controls.mainSocketGroup,"BOTTOMLEFT"}, 0, 20, 150, 18, nil, function(index, value) + local mainSocketGroup = self.skillsTab.socketGroupList[self.mainSocketGroup] + mainSocketGroup.displaySkillList[mainSocketGroup.mainActiveSkill].activeGem.srcGem.skillPart = index + self.modFlag = true + self.buildFlag = true + end) + self.controls.mainSkillMinion = common.New("DropDownControl", {"TOPLEFT",self.controls.mainSocketGroup,"BOTTOMLEFT"}, 0, 20, 178, 18, nil, function(index, value) + local mainSocketGroup = self.skillsTab.socketGroupList[self.mainSocketGroup] + mainSocketGroup.displaySkillList[mainSocketGroup.mainActiveSkill].activeGem.srcGem.skillMinion = value.minionId + self.modFlag = true + self.buildFlag = true + end) + self.controls.mainSkillMinionLibrary = common.New("ButtonControl", {"LEFT",self.controls.mainSkillMinion,"RIGHT"}, 2, 0, 120, 18, "Manage Spectres...", function() + self:OpenSpectreLibrary() + end) + self.controls.mainSkillMinionSkill = common.New("DropDownControl", {"TOPLEFT",self.controls.mainSkillMinion,"BOTTOMLEFT"}, 0, 2, 200, 16, nil, function(index, value) + local mainSocketGroup = self.skillsTab.socketGroupList[self.mainSocketGroup] + mainSocketGroup.displaySkillList[mainSocketGroup.mainActiveSkill].activeGem.srcGem.skillMinionSkill = index + self.modFlag = true + self.buildFlag = true + end) + self.controls.statBox = common.New("TextListControl", {"TOPLEFT",self.controls.mainSocketGroup,"BOTTOMLEFT"}, 0, 62, 300, 0, {{x=170,align="RIGHT_X"},{x=174,align="LEFT"}}) + self.controls.statBox.height = function(control) + local x, y = control:GetPos() + return main.screenH - main.mainBarHeight - 4 - y + end + -- Initialise build components self.data = data[self.targetVersion] self.tree = main.tree[self.targetVersion] @@ -521,7 +538,7 @@ function buildMode:Load(xml, fileName) end self.characterLevel = tonumber(xml.attrib.level) or 1 self.controls.characterLevel:SetText(tostring(self.characterLevel)) - for _, diff in pairs({"banditNormal","banditCruel","banditMerciless"}) do + for _, diff in pairs({"bandit","banditNormal","banditCruel","banditMerciless"}) do self[diff] = xml.attrib[diff] or "None" end self.mainSocketGroup = tonumber(xml.attrib.mainSkillIndex) or tonumber(xml.attrib.mainSocketGroup) or 1 @@ -542,6 +559,7 @@ function buildMode:Save(xml) level = tostring(self.characterLevel), className = self.spec.curClassName, ascendClassName = self.spec.curAscendClassName, + bandit = self.bandit, banditNormal = self.banditNormal, banditCruel = self.banditCruel, banditMerciless = self.banditMerciless, @@ -610,8 +628,10 @@ function buildMode:OnFrame(inputEvents) self.controls.classDrop:SelByValue(self.spec.curClassId, "classId") self.controls.ascendDrop:SelByValue(self.spec.curAscendClassId, "ascendClassId") - for _, diff in pairs({"banditNormal","banditCruel","banditMerciless"}) do - self.controls[diff]:SelByValue(self[diff], "banditId") + for _, diff in pairs({"bandit","banditNormal","banditCruel","banditMerciless"}) do + if self.controls[diff] then + self.controls[diff]:SelByValue(self[diff], "banditId") + end end if self.buildFlag then diff --git a/Modules/CalcActiveSkill.lua b/Modules/CalcActiveSkill.lua index af6e1668..28e0e1b0 100644 --- a/Modules/CalcActiveSkill.lua +++ b/Modules/CalcActiveSkill.lua @@ -32,7 +32,7 @@ end -- Merge gem modifiers with given mod list function calcs.mergeGemMods(modList, gem) - for _, mod in ipairs(gem.data.baseMods) do + for _, mod in pairs(gem.data.baseMods) do if mod[1] then for _, subMod in ipairs(mod) do modList:AddMod(subMod) @@ -272,16 +272,16 @@ function calcs.buildActiveSkillModList(env, actor, activeSkill) if skillFlags.vaal then skillKeywordFlags = bor(skillKeywordFlags, KeywordFlag.Vaal) end - if skillFlags.lightning then + if skillTypes[SkillType.LightningSkill] then skillKeywordFlags = bor(skillKeywordFlags, KeywordFlag.Lightning) end - if skillFlags.cold then + if skillTypes[SkillType.ColdSkill] then skillKeywordFlags = bor(skillKeywordFlags, KeywordFlag.Cold) end - if skillFlags.fire then + if skillTypes[SkillType.FireSkill] then skillKeywordFlags = bor(skillKeywordFlags, KeywordFlag.Fire) end - if skillFlags.chaos then + if skillTypes[SkillType.ChaosSkill] then skillKeywordFlags = bor(skillKeywordFlags, KeywordFlag.Chaos) end if skillFlags.totem then @@ -291,6 +291,12 @@ function calcs.buildActiveSkillModList(env, actor, activeSkill) elseif skillFlags.mine then skillKeywordFlags = bor(skillKeywordFlags, KeywordFlag.Mine) end + if skillTypes[SkillType.Attack] then + skillKeywordFlags = bor(skillKeywordFlags, KeywordFlag.Attack) + end + if skillTypes[SkillType.Spell] then + skillKeywordFlags = bor(skillKeywordFlags, KeywordFlag.Spell) + end -- Get skill totem ID for totem skills -- This is used to calculate totem life diff --git a/Modules/CalcOffence-3_0.lua b/Modules/CalcOffence-3_0.lua index 3c88d068..7fd5b335 100644 --- a/Modules/CalcOffence-3_0.lua +++ b/Modules/CalcOffence-3_0.lua @@ -27,8 +27,8 @@ local isElemental = { Fire = true, Cold = true, Lightning = true } -- List of all damage types, ordered according to the conversion sequence local dmgTypeList = {"Physical", "Lightning", "Cold", "Fire", "Chaos"} --- Calculate min/max damage of a hit for the given damage type -local function calcHitDamage(actor, source, cfg, breakdown, damageType, ...) +-- Calculate min/max damage for the given damage type +local function calcDamage(actor, source, cfg, breakdown, damageType, ...) local modDB = actor.modDB local damageTypeMin = damageType.."Min" @@ -74,7 +74,7 @@ local function calcHitDamage(actor, source, cfg, breakdown, damageType, ...) local convMult = conversionTable[otherType][damageType] if convMult > 0 then -- Damage is being converted/gained from the other damage type - local min, max = calcHitDamage(actor, source, cfg, breakdown, otherType, damageType, ...) + local min, max = calcDamage(actor, source, cfg, breakdown, otherType, damageType, ...) addMin = addMin + min * convMult addMax = addMax + max * convMult end @@ -625,6 +625,7 @@ function calcs.offence(env, actor) output.PreEffectiveCritChance = 0 output.CritChance = 0 output.CritMultiplier = 0 + output.CritDegenMultiplier = 0 output.CritEffect = 1 else local baseCrit = source.CritChance or 0 @@ -691,6 +692,7 @@ function calcs.offence(env, actor) end if modDB:Sum("FLAG", cfg, "NoCritMultiplier") then output.CritMultiplier = 1 + output.CritDegenMultiplier = 1 else local extraDamage = modDB:Sum("BASE", cfg, "CritMultiplier") / 100 if env.mode_effective then @@ -705,6 +707,7 @@ function calcs.offence(env, actor) end end output.CritMultiplier = 1 + m_max(0, extraDamage) + output.CritDegenMultiplier = 1 + modDB:Sum("BASE", cfg, "CritDegenMultiplier") / 100 + modDB:Sum("BASE", cfg, "CritMultiplier") * modDB:Sum("BASE", cfg, "CritMultiplierAppliesToDegen") / 10000 end output.CritEffect = 1 - output.CritChance / 100 + output.CritChance / 100 * output.CritMultiplier if breakdown and output.CritEffect ~= 1 then @@ -745,7 +748,7 @@ function calcs.offence(env, actor) } } end - min, max = calcHitDamage(actor, source, cfg, breakdown and breakdown[damageType], damageType) + min, max = calcDamage(actor, source, cfg, breakdown and breakdown[damageType], damageType) local convMult = actor.conversionTable[damageType].mult local doubleChance = m_min(modDB:Sum("BASE", cfg, "DoubleDamageChance"), 100) if breakdown then @@ -1045,7 +1048,7 @@ function calcs.offence(env, actor) skillName = skillCfg.skillName, skillPart = skillCfg.skillPart, slotName = skillCfg.slotName, - flags = bor(band(skillCfg.flags, ModFlag.SourceMask), ModFlag.Dot, skillData.dotIsSpell and ModFlag.Spell or 0, skillData.dotIsArea and ModFlag.Area or 0), + flags = bor(ModFlag.Dot, skillData.dotIsSpell and ModFlag.Spell or 0, skillData.dotIsArea and ModFlag.Area or 0, skillData.dotIsProjectile and ModFlag.Projectile or 0), keywordFlags = skillCfg.keywordFlags } mainSkill.dotCfg = dotCfg @@ -1171,7 +1174,7 @@ function calcs.offence(env, actor) output.FreezeChanceOnCrit = output.FreezeChanceOnCrit * freezeMult end - local function calcSecondaryEffectBase(type, sourceHitDmg, sourceCritDmg) + local function calcAilmentDamage(type, sourceHitDmg, sourceCritDmg) -- Calculate the inflict chance and base damage of a secondary effect (bleed/poison/ignite/shock/freeze) local chanceOnHit, chanceOnCrit = output[type.."ChanceOnHit"], output[type.."ChanceOnCrit"] local chanceFromHit = chanceOnHit * (1 - output.CritChance / 100) @@ -1236,22 +1239,33 @@ function calcs.offence(env, actor) -- Calculate bleeding chance and damage if canDeal.Physical and (output.BleedChanceOnHit + output.BleedChanceOnCrit) > 0 then - local sourceHitDmg = output.PhysicalHitAverage - local sourceCritDmg = output.PhysicalCritAverage - local basePercent = skillData.bleedBasePercent or 10 - local baseVal = calcSecondaryEffectBase("Bleed", sourceHitDmg, sourceCritDmg) * basePercent / 100 + if not mainSkill.bleedCfg then + mainSkill.bleedCfg = { + skillName = skillCfg.skillName, + slotName = skillCfg.slotName, + flags = ModFlag.Dot, + keywordFlags = bor(skillCfg.keywordFlags, KeywordFlag.Bleed), + skillCond = { }, + } + end + local dotCfg = mainSkill.bleedCfg + local sourceHitDmg, sourceCritDmg + for pass = 1, 2 do + dotCfg.skillCond["CriticalStrike"] = (pass == 1) + local min, max = calcDamage(actor, source, dotCfg, nil, "Physical") + min = min * actor.conversionTable.Physical.mult + max = max * actor.conversionTable.Physical.mult + if pass == 1 then + sourceCritDmg = (min + max) / 2 * output.CritDegenMultiplier + else + sourceHitDmg = (min + max) / 2 + end + end + local basePercent = skillData.bleedBasePercent or 60 + local baseVal = calcAilmentDamage("Bleed", sourceHitDmg, sourceCritDmg) * basePercent / 100 if baseVal > 0 then skillFlags.bleed = true skillFlags.duration = true - if not mainSkill.bleedCfg then - mainSkill.bleedCfg = { - skillName = skillCfg.skillName, - slotName = skillCfg.slotName, - flags = bor(band(skillCfg.flags, ModFlag.SourceMask), ModFlag.Dot, skillData.dotIsSpell and ModFlag.Spell or 0), - keywordFlags = bor(skillCfg.keywordFlags, KeywordFlag.Bleed) - } - end - local dotCfg = mainSkill.bleedCfg local effMult = 1 if env.mode_effective then local resist = enemyDB:Sum("BASE", nil, "PhysicalDamageReduction") @@ -1262,16 +1276,14 @@ function calcs.offence(env, actor) globalBreakdown.BleedEffMult = breakdown.effMult("Physical", resist, 0, taken, effMult) end end - local inc = modDB:Sum("INC", dotCfg, "Damage", "PhysicalDamage") - local more = round(modDB:Sum("MORE", dotCfg, "Damage", "PhysicalDamage"), 2) - output.BleedDPS = baseVal * (1 + inc/100) * more * effMult - local durationMod = calcLib.mod(modDB, dotCfg, "Duration") * calcLib.mod(enemyDB, nil, "SelfBleedDuration") + output.BleedDPS = baseVal * effMult + local durationMod = calcLib.mod(modDB, dotCfg, "EnemyBleedDuration") * calcLib.mod(enemyDB, nil, "SelfBleedDuration") globalOutput.BleedDuration = 5 * durationMod * debuffDurationMult if breakdown then t_insert(breakdown.BleedDPS, s_format("x %.2f ^8(bleed deals %d%% per second)", basePercent/100, basePercent)) t_insert(breakdown.BleedDPS, s_format("= %.1f", baseVal)) t_insert(breakdown.BleedDPS, "Bleed DPS:") - breakdown.dot(breakdown.BleedDPS, baseVal, inc, more, nil, effMult, output.BleedDPS) + breakdown.dot(breakdown.BleedDPS, baseVal, 0, 1, nil, effMult, output.BleedDPS) if globalOutput.BleedDuration ~= 5 then globalBreakdown.BleedDuration = { "5.00s ^8(base duration)" @@ -1290,21 +1302,40 @@ function calcs.offence(env, actor) -- Calculate poison chance and damage if canDeal.Chaos and (output.PoisonChanceOnHit + output.PoisonChanceOnCrit) > 0 then - local sourceHitDmg = output.PhysicalHitAverage + output.ChaosHitAverage - local sourceCritDmg = output.PhysicalCritAverage + output.ChaosCritAverage - local baseVal = calcSecondaryEffectBase("Poison", sourceHitDmg, sourceCritDmg * modDB:Sum("MORE", cfg, "PoisonDamageOnCrit")) * 0.08 + if not mainSkill.poisonCfg then + mainSkill.poisonCfg = { + skillName = skillCfg.skillName, + slotName = skillCfg.slotName, + flags = ModFlag.Dot, + keywordFlags = bor(skillCfg.keywordFlags, KeywordFlag.Poison), + skillCond = { }, + } + end + local dotCfg = mainSkill.poisonCfg + local sourceHitDmg, sourceCritDmg + for pass = 1, 2 do + dotCfg.skillCond["CriticalStrike"] = (pass == 1) + local totalMin, totalMax = 0, 0 + do + local min, max = calcDamage(actor, source, dotCfg, nil, "Physical", "Chaos") + totalMin = totalMin + min * actor.conversionTable.Physical.mult + totalMax = totalMax + max * actor.conversionTable.Physical.mult + end + do + local min, max = calcDamage(actor, source, dotCfg, nil, "Chaos") + totalMin = totalMin + min + totalMax = totalMax + max + end + if pass == 1 then + sourceCritDmg = (totalMin + totalMax) / 2 * output.CritDegenMultiplier * modDB:Sum("MORE", cfg, "PoisonDamageOnCrit") + else + sourceHitDmg = (totalMin + totalMax) / 2 + end + end + local baseVal = calcAilmentDamage("Poison", sourceHitDmg, sourceCritDmg) * 0.16 if baseVal > 0 then skillFlags.poison = true skillFlags.duration = true - if not mainSkill.poisonCfg then - mainSkill.poisonCfg = { - skillName = skillCfg.skillName, - slotName = skillCfg.slotName, - flags = bor(band(skillCfg.flags, ModFlag.SourceMask), ModFlag.Dot, skillData.dotIsSpell and ModFlag.Spell or 0), - keywordFlags = bor(skillCfg.keywordFlags, KeywordFlag.Poison) - } - end - local dotCfg = mainSkill.poisonCfg local effMult = 1 if env.mode_effective then local resist = m_min(enemyDB:Sum("BASE", nil, "ChaosResist"), 75) @@ -1315,16 +1346,14 @@ function calcs.offence(env, actor) globalBreakdown.PoisonEffMult = breakdown.effMult("Chaos", resist, 0, taken, effMult) end end - local inc = modDB:Sum("INC", dotCfg, "Damage", "ChaosDamage") - local more = round(modDB:Sum("MORE", dotCfg, "Damage", "ChaosDamage"), 2) - output.PoisonDPS = baseVal * (1 + inc/100) * more * effMult + output.PoisonDPS = baseVal * effMult local durationBase if skillData.poisonDurationIsSkillDuration then durationBase = skillData.duration else durationBase = 2 end - local durationMod = calcLib.mod(modDB, dotCfg, "Duration") * calcLib.mod(enemyDB, nil, "SelfPoisonDuration") + local durationMod = calcLib.mod(modDB, dotCfg, "EnemyPoisonDuration") * calcLib.mod(enemyDB, nil, "SelfPoisonDuration") globalOutput.PoisonDuration = durationBase * durationMod * debuffDurationMult output.PoisonDamage = output.PoisonDPS * globalOutput.PoisonDuration if skillData.showAverage then @@ -1334,10 +1363,10 @@ function calcs.offence(env, actor) output.TotalPoisonDPS = output.PoisonDPS * output.TotalPoisonStacks end if breakdown then - t_insert(breakdown.PoisonDPS, "x 0.08 ^8(poison deals 8% per second)") + t_insert(breakdown.PoisonDPS, "x 0.16 ^8(poison deals 16% per second)") t_insert(breakdown.PoisonDPS, s_format("= %.1f", baseVal, 1)) t_insert(breakdown.PoisonDPS, "Poison DPS:") - breakdown.dot(breakdown.PoisonDPS, baseVal, inc, more, nil, effMult, output.PoisonDPS) + breakdown.dot(breakdown.PoisonDPS, baseVal, 0, 1, nil, effMult, output.PoisonDPS) if globalOutput.PoisonDuration ~= 2 then globalBreakdown.PoisonDuration = { s_format("%.2fs ^8(base duration)", durationBase) @@ -1377,15 +1406,35 @@ function calcs.offence(env, actor) -- Calculate ignite chance and damage if canDeal.Fire and (output.IgniteChanceOnHit + output.IgniteChanceOnCrit) > 0 then - local sourceHitDmg = 0 - local sourceCritDmg = 0 - if canDeal.Fire and not modDB:Sum("FLAG", cfg, "FireCannotIgnite") then - sourceHitDmg = sourceHitDmg + output.FireHitAverage - sourceCritDmg = sourceCritDmg + output.FireCritAverage + if not mainSkill.igniteCfg then + mainSkill.igniteCfg = { + skillName = skillCfg.skillName, + slotName = skillCfg.slotName, + flags = ModFlag.Dot, + keywordFlags = skillCfg.keywordFlags, + skillCond = { }, + } end - if canDeal.Cold and modDB:Sum("FLAG", cfg, "ColdCanIgnite") then - sourceHitDmg = sourceHitDmg + output.ColdHitAverage - sourceCritDmg = sourceCritDmg + output.ColdCritAverage + local dotCfg = mainSkill.igniteCfg + local sourceHitDmg, sourceCritDmg + for pass = 1, 2 do + dotCfg.skillCond["CriticalStrike"] = (pass == 1) + local totalMin, totalMax = 0, 0 + if canDeal.Fire and not modDB:Sum("FLAG", cfg, "FireCannotIgnite") then + local min, max = calcDamage(actor, source, dotCfg, nil, "Fire") + totalMin = totalMin + min * actor.conversionTable.Fire.mult + totalMax = totalMax + max * actor.conversionTable.Fire.mult + end + if canDeal.Cold and modDB:Sum("FLAG", cfg, "ColdCanIgnite") then + local min, max = calcDamage(actor, source, dotCfg, nil, "Cold", "Fire") + totalMin = totalMin + min * actor.conversionTable.Cold.mult + totalMax = totalMax + max * actor.conversionTable.Cold.mult + end + if pass == 1 then + sourceCritDmg = (totalMin + totalMax) / 2 * output.CritDegenMultiplier + else + sourceHitDmg = (totalMin + totalMax) / 2 + end end local igniteMode = env.configInput.igniteMode or "AVERAGE" if igniteMode == "CRIT" then @@ -1396,18 +1445,9 @@ function calcs.offence(env, actor) s_format("Ignite mode: %s ^8(can be changed in the Configuration tab)", igniteMode == "CRIT" and "Crit Damage" or "Average Damage") } end - local baseVal = calcSecondaryEffectBase("Ignite", sourceHitDmg, sourceCritDmg) * 0.2 + local baseVal = calcAilmentDamage("Ignite", sourceHitDmg, sourceCritDmg) * 0.4 if baseVal > 0 then skillFlags.ignite = true - if not mainSkill.igniteCfg then - mainSkill.igniteCfg = { - skillName = skillCfg.skillName, - slotName = skillCfg.slotName, - flags = bor(band(skillCfg.flags, ModFlag.SourceMask), ModFlag.Dot, skillData.dotIsSpell and ModFlag.Spell or 0), - keywordFlags = skillCfg.keywordFlags, - } - end - local dotCfg = mainSkill.igniteCfg local effMult = 1 if env.mode_effective then local resist = m_min(enemyDB:Sum("BASE", nil, "FireResist", "ElementalResist"), 75) @@ -1418,10 +1458,8 @@ function calcs.offence(env, actor) globalBreakdown.IgniteEffMult = breakdown.effMult("Fire", resist, 0, taken, effMult) end end - local inc = modDB:Sum("INC", dotCfg, "Damage", "FireDamage", "ElementalDamage") - local more = round(modDB:Sum("MORE", dotCfg, "Damage", "FireDamage", "ElementalDamage"), 2) local burnRateMod = calcLib.mod(modDB, cfg, "IgniteBurnRate") - output.IgniteDPS = baseVal * (1 + inc/100) * more * burnRateMod * effMult + output.IgniteDPS = baseVal * burnRateMod * effMult local incDur = modDB:Sum("INC", dotCfg, "EnemyIgniteDuration") + enemyDB:Sum("INC", nil, "SelfIgniteDuration") local moreDur = enemyDB:Sum("MORE", nil, "SelfIgniteDuration") globalOutput.IgniteDuration = 4 * (1 + incDur / 100) * moreDur / burnRateMod * debuffDurationMult @@ -1435,10 +1473,10 @@ function calcs.offence(env, actor) end end if breakdown then - t_insert(breakdown.IgniteDPS, "x 0.2 ^8(ignite deals 20% per second)") + t_insert(breakdown.IgniteDPS, "x 0.4 ^8(ignite deals 40% per second)") t_insert(breakdown.IgniteDPS, s_format("= %.1f", baseVal, 1)) t_insert(breakdown.IgniteDPS, "Ignite DPS:") - breakdown.dot(breakdown.IgniteDPS, baseVal, inc, more, burnRateMod, effMult, output.IgniteDPS) + breakdown.dot(breakdown.IgniteDPS, baseVal, 0, 1, burnRateMod, effMult, output.IgniteDPS) if skillFlags.igniteCanStack then breakdown.IgniteDamage = { } if isAttack then @@ -1485,6 +1523,7 @@ function calcs.offence(env, actor) end -- Calculate shock and freeze chance + duration modifier + -- FIXME Completely fucking wrong now if (output.ShockChanceOnHit + output.ShockChanceOnCrit) > 0 then local sourceHitDmg = 0 local sourceCritDmg = 0 @@ -1504,7 +1543,7 @@ function calcs.offence(env, actor) sourceHitDmg = sourceHitDmg + output.ChaosHitAverage sourceCritDmg = sourceCritDmg + output.ChaosCritAverage end - local baseVal = calcSecondaryEffectBase("Shock", sourceHitDmg, sourceCritDmg) + local baseVal = calcAilmentDamage("Shock", sourceHitDmg, sourceCritDmg) if baseVal > 0 then skillFlags.shock = true output.ShockDurationMod = 1 + modDB:Sum("INC", cfg, "EnemyShockDuration") / 100 + enemyDB:Sum("INC", nil, "SelfShockDuration") / 100 @@ -1524,7 +1563,7 @@ function calcs.offence(env, actor) sourceHitDmg = sourceHitDmg + output.LightningHitAverage sourceCritDmg = sourceCritDmg + output.LightningCritAverage end - local baseVal = calcSecondaryEffectBase("Freeze", sourceHitDmg, sourceCritDmg) + local baseVal = calcAilmentDamage("Freeze", sourceHitDmg, sourceCritDmg) if baseVal > 0 then skillFlags.freeze = true output.FreezeDurationMod = 1 + modDB:Sum("INC", cfg, "EnemyFreezeDuration") / 100 + enemyDB:Sum("INC", nil, "SelfFreezeDuration") / 100 diff --git a/Modules/CalcPerform.lua b/Modules/CalcPerform.lua index 273fb82e..93099c4a 100644 --- a/Modules/CalcPerform.lua +++ b/Modules/CalcPerform.lua @@ -310,6 +310,7 @@ function calcs.perform(env) env.minion.modDB:NewMod("Evasion", "BASE", env.data.monsterEvasionTable[env.minion.level], "Base") env.minion.modDB:NewMod("Accuracy", "BASE", env.data.monsterAccuracyTable[env.minion.level], "Base") env.minion.modDB:NewMod("CritMultiplier", "BASE", 30, "Base") + env.minion.modDB:NewMod("CritDegenMultiplier", "BASE", 30, "Base") env.minion.modDB:NewMod("FireResist", "BASE", env.minion.minionData.fireResist, "Base") env.minion.modDB:NewMod("ColdResist", "BASE", env.minion.minionData.coldResist, "Base") env.minion.modDB:NewMod("LightningResist", "BASE", env.minion.minionData.lightningResist, "Base") diff --git a/Modules/CalcSetup.lua b/Modules/CalcSetup.lua index 47f6c249..d7f6b42d 100644 --- a/Modules/CalcSetup.lua +++ b/Modules/CalcSetup.lua @@ -139,6 +139,7 @@ function calcs.initEnv(build, mode, override) modDB:NewMod("Evasion", "BASE", 3, "Base", { type = "Multiplier", var = "Level", base = 53 }) modDB:NewMod("Accuracy", "BASE", 2, "Base", { type = "Multiplier", var = "Level", base = -2 }) modDB:NewMod("CritMultiplier", "BASE", 50, "Base") + modDB:NewMod("CritDegenMultiplier", "BASE", 50, "Base") modDB:NewMod("FireResist", "BASE", -60, "Base") modDB:NewMod("ColdResist", "BASE", -60, "Base") modDB:NewMod("LightningResist", "BASE", -60, "Base") @@ -158,32 +159,50 @@ function calcs.initEnv(build, mode, override) modDB:NewMod("BlockChance", "BASE", 15, "Base", { type = "Condition", var = "DualWielding" }) -- Add bandit mods - if build.banditNormal == "Alira" then - modDB:NewMod("Mana", "BASE", 60, "Bandit") - elseif build.banditNormal == "Kraityn" then - modDB:NewMod("ElementalResist", "BASE", 10, "Bandit") - elseif build.banditNormal == "Oak" then - modDB:NewMod("Life", "BASE", 40, "Bandit") + if build.targetVersion == "2_6" then + if build.banditNormal == "Alira" then + modDB:NewMod("Mana", "BASE", 60, "Bandit") + elseif build.banditNormal == "Kraityn" then + modDB:NewMod("ElementalResist", "BASE", 10, "Bandit") + elseif build.banditNormal == "Oak" then + modDB:NewMod("Life", "BASE", 40, "Bandit") + else + modDB:NewMod("ExtraPoints", "BASE", 1, "Bandit") + end + if build.banditCruel == "Alira" then + modDB:NewMod("Speed", "INC", 5, "Bandit", ModFlag.Cast) + elseif build.banditCruel == "Kraityn" then + modDB:NewMod("Speed", "INC", 8, "Bandit", ModFlag.Attack) + elseif build.banditCruel == "Oak" then + modDB:NewMod("PhysicalDamage", "INC", 16, "Bandit") + else + modDB:NewMod("ExtraPoints", "BASE", 1, "Bandit") + end + if build.banditMerciless == "Alira" then + modDB:NewMod("PowerChargesMax", "BASE", 1, "Bandit") + elseif build.banditMerciless == "Kraityn" then + modDB:NewMod("FrenzyChargesMax", "BASE", 1, "Bandit") + elseif build.banditMerciless == "Oak" then + modDB:NewMod("EnduranceChargesMax", "BASE", 1, "Bandit") + else + modDB:NewMod("ExtraPoints", "BASE", 1, "Bandit") + end else - modDB:NewMod("ExtraPoints", "BASE", 1, "Bandit") - end - if build.banditCruel == "Alira" then - modDB:NewMod("Speed", "INC", 5, "Bandit", ModFlag.Cast) - elseif build.banditCruel == "Kraityn" then - modDB:NewMod("Speed", "INC", 8, "Bandit", ModFlag.Attack) - elseif build.banditCruel == "Oak" then - modDB:NewMod("PhysicalDamage", "INC", 16, "Bandit") - else - modDB:NewMod("ExtraPoints", "BASE", 1, "Bandit") - end - if build.banditMerciless == "Alira" then - modDB:NewMod("PowerChargesMax", "BASE", 1, "Bandit") - elseif build.banditMerciless == "Kraityn" then - modDB:NewMod("FrenzyChargesMax", "BASE", 1, "Bandit") - elseif build.banditMerciless == "Oak" then - modDB:NewMod("EnduranceChargesMax", "BASE", 1, "Bandit") - else - modDB:NewMod("ExtraPoints", "BASE", 1, "Bandit") + if build.bandit == "Alira" then + modDB:NewMod("ManaRegen", "BASE", 5, "Bandit") + modDB:NewMod("CritMultiplier", "BASE", 20, "Bandit") + modDB:NewMod("ElementalResist", "BASE", 15, "Bandit") + elseif build.bandit == "Kraityn" then + modDB:NewMod("Speed", "INC", 6, "Bandit") + modDB:NewMod("AttackDodgeChance", "BASE", 3, "Bandit") + modDB:NewMod("MovementSpeed", "INC", 6, "Bandit") + elseif build.bandit == "Oak" then + modDB:NewMod("LifeRegenPercent", "BASE", 1, "Bandit") + modDB:NewMod("PhysicalDamageReduction", "BASE", 2, "Bandit") + modDB:NewMod("PhysicalDamage", "INC", 20, "Bandit") + else + modDB:NewMod("ExtraPoints", "BASE", 2, "Bandit") + end end -- Initialise enemy modifier database diff --git a/Modules/ModParser-3_0.lua b/Modules/ModParser-3_0.lua index d30c967c..c2680405 100644 --- a/Modules/ModParser-3_0.lua +++ b/Modules/ModParser-3_0.lua @@ -285,13 +285,13 @@ local modNameList = { ["chill duration"] = "EnemyChillDuration", ["ignite duration"] = "EnemyIgniteDuration", ["duration of elemental ailments"] = { "EnemyShockDuration", "EnemyFreezeDuration", "EnemyChillDuration", "EnemyIgniteDuration" }, - -- Other debuffs + -- Other ailments ["to poison"] = "PoisonChance", ["to poison on hit"] = "PoisonChance", - ["poison duration"] = { "Duration", keywordFlags = KeywordFlag.Poison }, + ["poison duration"] = { "EnemyPoisonDuration" }, ["to cause bleeding"] = "BleedChance", ["to cause bleeding on hit"] = "BleedChance", - ["bleed duration"] = { "Duration", keywordFlags = KeywordFlag.Bleed }, + ["bleed duration"] = { "EnemyBleedDuration" }, -- Misc modifiers ["movement speed"] = "MovementSpeed", ["attack, cast and movement speed"] = { "Speed", "MovementSpeed" }, @@ -344,8 +344,8 @@ local modFlagList = { ["spell"] = { flags = ModFlag.Spell }, ["with spells"] = { flags = ModFlag.Spell }, ["for spells"] = { flags = ModFlag.Spell }, - ["with attacks"] = { flags = ModFlag.Attack }, - ["with attack skills"] = { flags = ModFlag.Attack }, + ["with attacks"] = { keywordFlags = KeywordFlag.Attack }, + ["with attack skills"] = { keywordFlags = KeywordFlag.Attack }, ["for attacks"] = { flags = ModFlag.Attack }, ["weapon"] = { flags = ModFlag.Weapon }, ["with weapons"] = { flags = ModFlag.Weapon }, @@ -634,6 +634,7 @@ local specialModList = { ["all bonuses from an equipped shield apply to your minions instead of you"] = { }, -- The node itself is detected by the code that handles it ["spend energy shield before mana for skill costs"] = { }, ["energy shield protects mana instead of life"] = { flag("EnergyShieldProtectsMana") }, + ["modifiers to critical strike multiplier also apply to damage multiplier for ailments from critical strikes at (%d+)%% of their value"] = function(num) return { mod("CritMultiplierAppliesToDegen", "BASE", num) } end, -- Ascendancy notables ["movement skills cost no mana"] = { mod("ManaCost", "MORE", -100, nil, 0, KeywordFlag.Movement) }, ["projectiles have (%d+)%% additional chance to pierce targets at the start of their movement, losing this chance as the projectile travels farther"] = function(num) return { mod("PierceChance", "BASE", num, { type = "DistanceRamp", ramp = {{10,1},{120,0}} }) } end, @@ -1277,7 +1278,7 @@ local function parseMod(line, order) end modValue = { tonumber(formCap[1]), tonumber(formCap[2]) } modName = { damageType.."Min", damageType.."Max" } - modFlag = modFlag or { flags = ModFlag.Attack } + modFlag = modFlag or { keywordFlags = KeywordFlag.Attack } elseif modForm == "DMGSPELLS" then local damageType = dmgTypes[formCap[3]] if not damageType then @@ -1285,7 +1286,7 @@ local function parseMod(line, order) end modValue = { tonumber(formCap[1]), tonumber(formCap[2]) } modName = { damageType.."Min", damageType.."Max" } - modFlag = modFlag or { flags = ModFlag.Spell } + modFlag = modFlag or { keywordFlags = KeywordFlag.Spell } elseif modForm == "DMGBOTH" then local damageType = dmgTypes[formCap[3]] if not damageType then @@ -1293,6 +1294,7 @@ local function parseMod(line, order) end modValue = { tonumber(formCap[1]), tonumber(formCap[2]) } modName = { damageType.."Min", damageType.."Max" } + modFlag = modFlag or { keywordFlags = bor(KeywordFlag.Attack, KeywordFlag.Spell) } end if not modName then return { }, line diff --git a/README.md b/README.md index 381146f1..86c50eee 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,14 @@ If you'd like to help support the development of Path of Building, I have a [Pat ![ss3](https://cloud.githubusercontent.com/assets/19189971/18089780/f0ff234a-6f04-11e6-8c88-6193fe59a5c4.png) ## Changelog +### 1.4.22 - 2017/06/09 + * Fixed bug causing certain skill stats to be ignored; this notably affected Blade Vortex and Wither +For 3.0 builds: + * Applied the Damage over Time changes + * The new DoT code hasn't been tested as thoroughly as it needs to be, so it may have mistakes + * Updated the bandit rewards + * Reverted some unintended changes to minion's skills made in 1.4.21 + ### 1.4.21 - 2017/06/08 For 3.0 builds: * Updated skills (except for skills used by minions and spectres) diff --git a/changelog.txt b/changelog.txt index b4ca082e..fd557738 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,10 @@ +VERSION[1.4.22][2017/06/09] + * Fixed bug causing certain skill stats to be ignored; this notably affected Blade Vortex and Wither +For 3.0 builds: + * Applied the Damage over Time changes + * The new DoT code hasn't been tested as thoroughly as it needs to be, so it may have mistakes + * Updated the bandit rewards + * Reverted some unintended changes to minion's skills made in 1.4.21 VERSION[1.4.21][2017/06/08] For 3.0 builds: * Updated skills (except for skills used by minions and spectres) diff --git a/manifest.xml b/manifest.xml index 230e036a..eb6a497b 100644 --- a/manifest.xml +++ b/manifest.xml @@ -1,20 +1,20 @@ - + - + - + @@ -47,32 +47,32 @@ - + - + - - + + - + - + - + @@ -163,13 +163,13 @@ - - + + - + - - + +