Files
PathOfBuilding/Modules/CalcTools.lua
Openarl 6b287e2ea5 Release 1.4.8
- Added Damage Taken calculations and Calcs tab section
- Added self-degen calculations
- Added combined avoidance chances to Calcs tab
- Added support for Arrow Dancing
- Various minor fixes
2017-05-02 23:10:42 +10:00

77 lines
2.1 KiB
Lua

-- Path of Building
--
-- Module: Calc Tools
-- Various functions used by the calculation modules
--
local pairs = pairs
local m_floor = math.floor
local m_min = math.min
local m_max = math.max
calcLib = { }
-- Calculate and combine INC/MORE modifiers for the given modifier names
function calcLib.mod(modDB, cfg, ...)
return (1 + (modDB:Sum("INC", cfg, ...)) / 100) * modDB:Sum("MORE", cfg, ...)
end
-- Calculate value
function calcLib.val(modDB, name, cfg)
local baseVal = modDB:Sum("BASE", cfg, name)
if baseVal ~= 0 then
return baseVal * calcLib.mod(modDB, cfg, name)
else
return 0
end
end
-- Calculate hit chance
function calcLib.hitChance(evasion, accuracy)
local rawChance = accuracy / (accuracy + (evasion / 4) ^ 0.8) * 100
return m_max(m_min(round(rawChance), 95), 5)
end
-- Calculate physical damage reduction from armour
function calcLib.armourReduction(armour, raw)
return round(armour / (armour + raw * 10) * 100)
end
-- Check if given support gem can support the given skill types
function calcLib.gemCanSupportTypes(gem, skillTypes)
for _, skillType in pairs(gem.data.excludeSkillTypes) do
if skillTypes[skillType] then
return false
end
end
if not gem.data.requireSkillTypes[1] then
return true
end
for _, skillType in pairs(gem.data.requireSkillTypes) do
if skillTypes[skillType] then
return true
end
end
return false
end
-- Check if given support gem can support the given active skill
function calcLib.gemCanSupport(gem, activeSkill)
if gem.data.unsupported then
return false
end
if activeSkill.summonSkill then
return calcLib.gemCanSupport(gem, activeSkill.summonSkill)
end
if activeSkill.minionSkillTypes and calcLib.gemCanSupportTypes(gem, activeSkill.minionSkillTypes) then
return true
end
return calcLib.gemCanSupportTypes(gem, activeSkill.skillTypes)
end
-- Check if given gem is of the given type ("all", "strength", "melee", etc)
function calcLib.gemIsType(gem, type)
local tags = gem.data.gemTags
return tags and (type == "all" or (type == "elemental" and (tags.fire or tags.cold or tags.lightning)) or tags[type])
end