Minor tweaks

- Enemy evasion and accuracy are now calculated using the enemy mod DB
- Base per-level modifiers now use the Level multiplier
This commit is contained in:
Openarl
2016-11-01 18:00:15 +10:00
parent 3f371e3d6d
commit 1c875d139a
9 changed files with 61 additions and 56 deletions

View File

@@ -307,9 +307,17 @@ function CalcBreakdownClass:AddModSection(sectionData)
if tag.type == "Condition" then
desc = "Condition: "..self:FormatModName(tag.var)
elseif tag.type == "Multiplier" then
desc = baseVal.." per "..self:FormatModName(tag.var)
if tag.base then
desc = (row.mod.type == "BASE" and string.format("%+g", tag.base) or tag.base.."%").." + "..math.abs(row.mod.value).." per "..self:FormatModName(tag.var)
else
desc = baseVal.." per "..self:FormatModName(tag.var)
end
elseif tag.type == "PerStat" then
desc = baseVal.." per "..tag.div.." "..self:FormatModName(tag.stat)
if tag.base then
desc = (row.mod.type == "BASE" and string.format("%+g", tag.base) or tag.base.."%").." + "..math.abs(row.mod.value).." per "..tag.div.." "..self:FormatModName(tag.var)
else
desc = baseVal.." per "..tag.div.." "..self:FormatModName(tag.stat)
end
elseif tag.type == "SkillName" then
desc = "Skill: "..tag.skillName
elseif tag.type == "SlotNumber" then

View File

@@ -141,17 +141,17 @@ function ModDBClass:Sum(modType, cfg, arg1, arg2, arg3, arg4, arg5, arg6, arg7,
local mult = (self.multipliers[tag.var] or 0)
if type(value) == "table" then
value = copyTable(value)
value.value = value.value * mult
value.value = value.value * mult + (tag.base or 0)
else
value = value * mult
value = value * mult + (tag.base or 0)
end
elseif tag.type == "PerStat" then
local mult = m_floor((self.stats[tag.stat] or 0) / tag.div + 0.0001) + (tag.base or 0)
local mult = m_floor((self.stats[tag.stat] or 0) / tag.div + 0.0001)
if type(value) == "table" then
value = copyTable(value)
value.value = value.value * mult
value.value = value.value * mult + (tag.base or 0)
else
value = value * mult
value = value * mult + (tag.base or 0)
end
elseif tag.type == "Condition" then
if not self.conditions[tag.var] then

View File

@@ -111,17 +111,17 @@ function ModListClass:Sum(modType, cfg, arg1, arg2, arg3, arg4, arg5, arg6, arg7
local mult = (self.multipliers[tag.var] or 0)
if type(value) == "table" then
value = copyTable(value)
value.value = value.value * mult
value.value = value.value * mult + (tag.base or 0)
else
value = value * mult
value = value * mult + (tag.base or 0)
end
elseif tag.type == "PerStat" then
local mult = m_floor((self.stats[tag.stat] or 0) / tag.div + 0.0001) + (tag.base or 0)
local mult = m_floor((self.stats[tag.stat] or 0) / tag.div + 0.0001)
if type(value) == "table" then
value = copyTable(value)
value.value = value.value * mult
value.value = value.value * mult + (tag.base or 0)
else
value = value * mult
value = value * mult + (tag.base or 0)
end
elseif tag.type == "Condition" then
if not self.conditions[tag.var] then

View File

@@ -990,21 +990,21 @@ gems["Enfeeble"] = {
skillTypes = { [2] = true, [11] = true, [12] = true, [17] = true, [18] = true, [19] = true, [26] = true, [32] = true, [36] = true, },
baseMods = {
skill("castTime", 0.5),
mod("CritChance", "INC", -25), --"critical_strike_chance_+%" = -25
mod("CritChance", "INC", -25, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"critical_strike_chance_+%" = -25
--"base_deal_no_damage" = ?
skill("debuff", true),
},
qualityMods = {
mod("Accuracy", "INC", -0.5), --"accuracy_rating_+%" = -0.5
mod("CritChance", "INC", -0.5), --"critical_strike_chance_+%" = -0.5
mod("Accuracy", "INC", -0.5, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"accuracy_rating_+%" = -0.5
mod("CritChance", "INC", -0.5, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"critical_strike_chance_+%" = -0.5
},
levelMods = {
[1] = skill("manaCost", nil),
[2] = skill("duration", nil), --"base_skill_effect_duration"
[3] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%"
[4] = mod("Accuracy", "INC", nil), --"accuracy_rating_+%"
--[5] = "enfeeble_damage_+%_final"
[6] = mod("CritMultiplier", "BASE", nil), --"base_critical_strike_multiplier_+"
[4] = mod("Accuracy", "INC", nil, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"accuracy_rating_+%"
[5] = mod("Damage", "MORE", nil, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"enfeeble_damage_+%_final"
[6] = mod("CritMultiplier", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"base_critical_strike_multiplier_+"
},
levels = {
[1] = { 24, 9, 0, -18, -21, -21, },

View File

@@ -67,10 +67,10 @@ gems["Additional Accuracy"] = {
baseMods = {
},
qualityMods = {
mod("Accuracy", "INC", 1), --"accuracy_rating_+%" = 1
mod("Accuracy", "INC", 1, 0, 0, nil), --"accuracy_rating_+%" = 1
},
levelMods = {
[1] = mod("Accuracy", "BASE", nil), --"accuracy_rating"
[1] = mod("Accuracy", "BASE", nil, 0, 0, nil), --"accuracy_rating"
},
levels = {
[1] = { 74, },

View File

@@ -322,7 +322,7 @@ gems["Controlled Destruction"] = {
excludeSkillTypes = { },
baseMods = {
mod("ManaCost", "MORE", 30),
mod("CritChance", "INC", -100), --"critical_strike_chance_+%" = -100
mod("CritChance", "INC", -100, 0, 0, nil), --"critical_strike_chance_+%" = -100
},
qualityMods = {
mod("Damage", "INC", 0.5, ModFlag.Spell, 0, nil), --"spell_damage_+%" = 0.5
@@ -667,10 +667,10 @@ gems["Increased Critical Damage"] = {
mod("ManaCost", "MORE", 30),
},
qualityMods = {
mod("CritMultiplier", "BASE", 0.75), --"base_critical_strike_multiplier_+" = 0.75
mod("CritMultiplier", "BASE", 0.75, 0, 0, nil), --"base_critical_strike_multiplier_+" = 0.75
},
levelMods = {
[1] = mod("CritMultiplier", "BASE", nil), --"base_critical_strike_multiplier_+"
[1] = mod("CritMultiplier", "BASE", nil, 0, 0, nil), --"base_critical_strike_multiplier_+"
},
levels = {
[1] = { 75, },
@@ -716,11 +716,11 @@ gems["Increased Critical Strikes"] = {
mod("ManaCost", "MORE", 15),
},
qualityMods = {
mod("CritChance", "INC", 1), --"critical_strike_chance_+%" = 1
mod("CritChance", "INC", 1, 0, 0, nil), --"critical_strike_chance_+%" = 1
},
levelMods = {
[1] = mod("CritChance", "INC", nil), --"critical_strike_chance_+%"
[2] = mod("CritChance", "BASE", nil), --"additional_base_critical_strike_chance"
[1] = mod("CritChance", "INC", nil, 0, 0, nil), --"critical_strike_chance_+%"
[2] = mod("CritChance", "BASE", nil, 0, 0, nil), --"additional_base_critical_strike_chance"
},
levels = {
[1] = { 50, 1, },
@@ -1044,7 +1044,7 @@ gems["Power Charge On Critical"] = {
mod("ManaCost", "MORE", 10),
},
qualityMods = {
mod("CritChance", "INC", 1), --"critical_strike_chance_+%" = 1
mod("CritChance", "INC", 1, 0, 0, nil), --"critical_strike_chance_+%" = 1
},
levelMods = {
--[1] = "add_power_charge_on_critical_strike_%"

View File

@@ -165,7 +165,7 @@ return {
extra = "{0:output:HitChance}%",
flag = "attack",
{ label = "Accuracy", { format = "{0:output:Accuracy}", { breakdown = "Accuracy" }, { modName = "Accuracy", cfg = "skill" }, }, },
{ label = "Chance to Hit", { format = "{0:output:HitChance}%", { breakdown = "HitChance" }, }, },
{ label = "Chance to Hit", { format = "{0:output:HitChance}%", { breakdown = "HitChance" }, { label = "Enemy Evasion modifiers", modName = "Evasion", enemy = true }, }, },
} },
{ 1, "SkillTypeStats", 1, "Skill type-specific Stats", data.colorCodes.OFFENCE, {
{ label = "Duration Mod", flag = "duration", { format = "x {2:output:DurationMod}", { breakdown = "DurationMod"}, { modName = "Duration", cfg = "skill" }, }, },
@@ -280,7 +280,7 @@ return {
{ label = "Total Increased", { format = "{0:mod:1}%", { modName = { "Evasion", "ArmourAndEvasion", "Defences" }, modType = "INC" }, }, },
{ label = "Total More", { format = "{0:mod:1}%", { modName = { "Evasion", "ArmourAndEvasion", "Defences" }, modType = "MORE" }, }, },
{ label = "Total", { format = "{0:output:Evasion}", { breakdown = "Evasion" }, }, },
{ label = "Evade Chance", { format = "{0:output:EvadeChance}%", { breakdown = "EvadeChance" }, }, },
{ label = "Evade Chance", { format = "{0:output:EvadeChance}%", { breakdown = "EvadeChance" }, { label = "Enemy Accuracy modifiers", modName = "Accuracy", enemy = true }, }, },
} },
{ 1, "Resist", 3, "Resists", data.colorCodes.DEFENCE, {
extra = data.colorCodes.FIRE.."{0:output:FireResist}+{0:output:FireResistOverCap}^7/"..data.colorCodes.COLD.."{0:output:ColdResist}+{0:output:ColdResistOverCap}^7/"..data.colorCodes.LIGHTNING.."{0:output:LightningResist}+{0:output:LightningResistOverCap}",

View File

@@ -571,13 +571,12 @@ local function initEnv(build, mode)
for _, stat in pairs({"Str","Dex","Int"}) do
modDB:NewMod(stat, "BASE", classStats["base_"..stat:lower()], "Base")
end
local level = build.characterLevel
modDB.multipliers["Level"] = level
modDB:NewMod("Life", "BASE", 38 + level * 12, "Base")
modDB:NewMod("Mana", "BASE", 34 + level * 6, "Base")
modDB.multipliers["Level"] = m_max(1, m_min(100, build.characterLevel))
modDB:NewMod("Life", "BASE", 12, "Base", { type = "Multiplier", var = "Level", base = 38 })
modDB:NewMod("Mana", "BASE", 6, "Base", { type = "Multiplier", var = "Level", base = 34 })
modDB:NewMod("ManaRegen", "BASE", 0.0175, "Base", { type = "PerStat", stat = "Mana", div = 1 })
modDB:NewMod("Evasion", "BASE", 53 + level * 3, "Base")
modDB:NewMod("Accuracy", "BASE", (level - 1) * 2, "Base")
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("FireResistMax", "BASE", 75, "Base")
modDB:NewMod("FireResist", "BASE", -60, "Base")
modDB:NewMod("ColdResistMax", "BASE", 75, "Base")
@@ -635,6 +634,9 @@ local function initEnv(build, mode)
-- Initialise enemy modifier database
local enemyDB = common.New("ModDB")
env.enemyDB = enemyDB
env.enemyLevel = m_max(1, m_min(100, env.configInput.enemyLevel and env.configInput.enemyLevel or m_min(env.build.characterLevel, 84)))
enemyDB:NewMod("Accuracy", "BASE", data.monsterAccuracyTable[env.enemyLevel], "Base")
enemyDB:NewMod("Evasion", "BASE", data.monsterEvasionTable[env.enemyLevel], "Base")
-- Add mods from the config tab
modDB:AddList(build.configTab.modList)
@@ -1389,13 +1391,12 @@ local function performCalcs(env)
if modDB:Sum("FLAG", nil, "CannotEvade") then
output.EvadeChance = 0
else
local attackerLevel = m_max(1, m_min(#data.monsterAccuracyTable, env.configInput.enemyLevel and env.configInput.enemyLevel or m_min(env.build.characterLevel, 84)))
local attackerAccuracy = data.monsterAccuracyTable[attackerLevel]
output.EvadeChance = 100 - calcHitChance(output.Evasion, attackerAccuracy)
local enemyAccuracy = round(calcVal(enemyDB, "Accuracy"))
output.EvadeChance = 100 - calcHitChance(output.Evasion, enemyAccuracy)
if breakdown then
breakdown.EvadeChance = {
"^7Enemy level: "..attackerLevel..(env.configInput.enemyLevel and " ^8(overridden from the Configuration tab" or " ^8(can be overridden in the Configuration tab)"),
"^7Average enemy accuracy: "..attackerAccuracy,
"^7Enemy level: "..env.enemyLevel..(env.configInput.enemyLevel and " ^8(overridden from the Configuration tab" or " ^8(can be overridden in the Configuration tab)"),
"^7Average enemy accuracy: "..enemyAccuracy,
"^7Approximate evade chance: "..output.EvadeChance.."%",
}
end
@@ -1695,16 +1696,12 @@ local function performCalcs(env)
if not isAttack or modDB:Sum("FLAG", skillCfg, "CannotBeEvaded") or env.weaponData1.CannotBeEvaded then
output.HitChance = 100
else
local targetLevel = m_max(1, m_min(#data.monsterEvasionTable, env.configInput.enemyLevel and env.configInput.enemyLevel or m_min(env.build.characterLevel, 84)))
local targetEvasion = data.monsterEvasionTable[targetLevel]
if env.mode_effective then
targetEvasion = targetEvasion * calcMod(enemyDB, "Evasion")
end
output.HitChance = calcHitChance(targetEvasion, output.Accuracy)
local enemyEvasion = round(calcVal(enemyDB, "Evasion"))
output.HitChance = calcHitChance(enemyEvasion, output.Accuracy)
if breakdown then
breakdown.HitChance = {
"^7Enemy level: "..targetLevel..(env.configInput.enemyLevel and " ^8(overridden from the Configuration tab" or " ^8(can be overridden in the Configuration tab)"),
"^7Average enemy evasion: "..targetEvasion,
"^7Enemy level: "..env.enemyLevel..(env.configInput.enemyLevel and " ^8(overridden from the Configuration tab" or " ^8(can be overridden in the Configuration tab)"),
"^7Average enemy evasion: "..enemyEvasion,
"^7Approximate hit chance: "..output.HitChance.."%",
}
end

View File

@@ -10,7 +10,7 @@
<File sha1="603844f95685ac389597c11c0bf32eb5887fb3d3" name="changelog.txt" part="program"/>
<File sha1="aef7145f378d0a1d5dc6f5f2d3c08d2a1b6ef264" name="Classes/BuildListControl.lua" part="program"/>
<File sha1="f41793d6cbf037cddab2079bf9445cf096e295cf" name="Classes/ButtonControl.lua" part="program"/>
<File sha1="f53350ff705cafc3088a13740faf8106d1b8ec93" name="Classes/CalcBreakdownControl.lua" part="program"/>
<File sha1="4f43a9507cf7e18f07d2f19fda9f83e12558c407" name="Classes/CalcBreakdownControl.lua" part="program"/>
<File sha1="5bb6ef0eb3a0fa5f7ef88fecffadddd95013cd2a" name="Classes/CalcSectionControl.lua" part="program"/>
<File sha1="dd707e5d9fefe00cbbbd51cefa94b6de04347b65" name="Classes/CalcsTab.lua" part="program"/>
<File sha1="c8c603b9cae464de06f04dd6ab2e0530dc897bbc" name="Classes/CheckBoxControl.lua" part="program"/>
@@ -26,8 +26,8 @@
<File sha1="b547357491a4faec1d007ae44604b75e05a2613c" name="Classes/ItemSlotControl.lua" part="program"/>
<File sha1="e470dc81148fc9079a0a31ea3b24f5f04754c331" name="Classes/ItemsTab.lua" part="program"/>
<File sha1="e577edeea7685cb2b0cd0d00b901a458ae45add0" name="Classes/LabelControl.lua" part="program"/>
<File sha1="252c918bcc4e9149dec54cda8de0d915a6e1fe45" name="Classes/ModDB.lua" part="program"/>
<File sha1="3fc9c1f4cd593e84c6b4c5ec238c5179adda8a18" name="Classes/ModList.lua" part="program"/>
<File sha1="a26d1a34424222856ad018ac43e3c7895d7f05b5" name="Classes/ModDB.lua" part="program"/>
<File sha1="5d8eda690e99ec64bda7379d3d4f8952a21b361a" name="Classes/ModList.lua" part="program"/>
<File sha1="6f8f98d6ee505af53441c1fe9ad74fbff86d56ad" name="Classes/PassiveSpec.lua" part="program"/>
<File sha1="9a6bce38a62d9c07851cdd095e91f088e37cea4e" name="Classes/PassiveTree.lua" part="program"/>
<File sha1="98496bc834a2a7e46210f7ad8f3e7b3954ae2582" name="Classes/PassiveTreeView.lua" part="program"/>
@@ -43,8 +43,8 @@
<File sha1="4b7675c8b4fe71cade7dd3d70793df1ed8022d01" name="Classes/UndoHandler.lua" part="program"/>
<File sha1="11f9b77ce58cd280d93aacbebda6441d4252a965" name="Modules/Build.lua" part="program"/>
<File sha1="c03a7796aea3e9aa832fbb92c1f674ef5af690ca" name="Modules/BuildList.lua" part="program"/>
<File sha1="5e989c9041fed870d387fd8809620722cc911661" name="Modules/Calcs.lua" part="program"/>
<File sha1="2a22fd89b1b436db0f458c95e53d07fd33eeac63" name="Modules/CalcSections.lua" part="program"/>
<File sha1="e41f604623976a26bfbd780c2c993aae8b13044b" name="Modules/Calcs.lua" part="program"/>
<File sha1="8d5d8bb89acf6cca9b3c276b522daf8a35d51714" name="Modules/CalcSections.lua" part="program"/>
<File sha1="f207df4010cb3c7bc6cce98be2529a3b8a708b8f" name="Modules/Common.lua" part="program"/>
<File sha1="132f51b4be7890360f478df52bc6c77772db75cc" name="Modules/Data.lua" part="program"/>
<File sha1="5ddfa4a5904cefbf2755c231797175c8ae24ac49" name="Modules/ItemTools.lua" part="program"/>
@@ -56,11 +56,11 @@
<File sha1="698c46ec242133014f6904d276b27106580ea392" name="Data/New.lua" part="program"/>
<File sha1="4bda866bb45169b51bd193039a87d7bcc6cbacaa" name="Data/Rares.lua" part="program"/>
<File sha1="48ae2fa7c8fb4de252e264431eb5d80bf835d566" name="Data/Gems/act_dex.lua" part="program"/>
<File sha1="e2198488e5a0cb18645eea93ad14fabc73cde20f" name="Data/Gems/act_int.lua" part="program"/>
<File sha1="24e96dbdd899bb6a550bbc9735b0598b440c510a" name="Data/Gems/act_int.lua" part="program"/>
<File sha1="bec392131a513e81be5119805a94ef362bcf56ce" name="Data/Gems/act_str.lua" part="program"/>
<File sha1="f6d7bc0e523b7d97fd3f2a8d2f09476716757ce1" name="Data/Gems/other.lua" part="program"/>
<File sha1="1ed3fdba7925c4711f093edd42024d3eb33215d5" name="Data/Gems/sup_dex.lua" part="program"/>
<File sha1="e007dabf995914dd3ab2a2445ed705d9884d0b85" name="Data/Gems/sup_int.lua" part="program"/>
<File sha1="15b395ccfb372c8a318a28e801e09e287ef20db8" name="Data/Gems/sup_dex.lua" part="program"/>
<File sha1="ef83aa4fcf18a13bcfe442c5c6aaae63fa439dba" name="Data/Gems/sup_int.lua" part="program"/>
<File sha1="225a744e5ebc2c897c341d960e792d2bfd855f8a" name="Data/Gems/sup_str.lua" part="program"/>
<File sha1="e2bfaf8d42553867fff91aa7267dbae4e3ca460e" name="Data/Bases/amulet.lua" part="program"/>
<File sha1="78410a8a3ee33ad331fee2abd83e235fe5b702f6" name="Data/Bases/axe.lua" part="program"/>