Files
PathOfBuilding/Modules/ItemTools.lua
Openarl 7f9a7352b1 Release 1.4.76
- Added Atziri's Reflection
- Corrected Ahn's Might stats
- "+X Melee Weapon Range" is now recognised correctly
- Fixed some item properties not being saved correctly
- Enabled async loading for most passive tree assets
2018-02-23 21:28:13 +10:00

60 lines
2.1 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- Path of Building
--
-- Module: Item Tools
-- Various functions for dealing with items.
--
local launch = ...
local t_insert = table.insert
local t_remove = table.remove
local m_min = math.min
local m_max = math.max
local m_floor = math.floor
itemLib = { }
-- Apply range value (0 to 1) to a modifier that has a range: (x to x) or (x-x to x-x)
function itemLib.applyRange(line, range)
return line:gsub("%((%d+)%-(%d+) to (%d+)%-(%d+)%)", "(%1-%2) to (%3-%4)")
:gsub("(%+?)%((%-?%d+) to (%d+)%)", "%1(%2-%3)")
:gsub("(%+?)%((%-?%d+)%-(%d+)%)",
function(plus, min, max)
local numVal = m_floor(tonumber(min) + range * (tonumber(max) - tonumber(min)) + 0.5)
if numVal < 0 then
if plus == "+" then
plus = ""
end
end
return plus .. tostring(numVal)
end)
:gsub("%((%d+%.?%d*)%-(%d+%.?%d*)%)",
function(min, max)
local numVal = m_floor((tonumber(min) + range * (tonumber(max) - tonumber(min))) * 10 + 0.5) / 10
return tostring(numVal)
end)
:gsub("%-(%d+%%) increased", function(num) return num.." reduced" end)
end
-- Clean item text by removing or replacing unsupported or redundant characters or sequences
function itemLib.sanitiseItemText(text)
-- Something something unicode support something grumble
return text:gsub("^%s+",""):gsub("%s+$",""):gsub("\r\n","\n"):gsub("%b<>",""):gsub("","-"):gsub("\226\128\147","-"):gsub("\226\136\146","-"):gsub("ö","o"):gsub("\195\182","o"):gsub("[\128-\255]","?")
end
function itemLib.formatModLine(modLine, dbMode)
local line = (not dbMode and modLine.range and itemLib.applyRange(modLine.line, modLine.range)) or modLine.line
if line:match("^%+?0%%? ") or line:match(" %+?0%%? ") or line:match(" 0%-0 ") or line:match(" 0 to 0 ") then -- Hack to hide 0-value modifiers
return
end
local colorCode
if modLine.extra then
colorCode = colorCodes.UNSUPPORTED
if launch.devModeAlt then
line = line .. " ^1'" .. modLine.extra .. "'"
end
else
colorCode = (modLine.crafted and colorCodes.CRAFTED) or (modLine.custom and colorCodes.CUSTOM) or colorCodes.MAGIC
end
return colorCode..line
end