- 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
60 lines
2.1 KiB
Lua
60 lines
2.1 KiB
Lua
-- 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
|