Various small changes

Tree JSONs now converted to Lua instead of using library
This commit is contained in:
Openarl
2016-05-23 20:12:35 +10:00
parent 4201c6bfdf
commit 33a429386f
17 changed files with 466 additions and 437 deletions

View File

@@ -112,7 +112,7 @@ end
function SpecClass:SelectAscendClass(ascendClassId)
self.curAscendClassId = ascendClassId
local ascendClass = self.tree.classes[self.curClassId].classes[tostring(ascendClassId)] or { name = "" }
local ascendClass = self.tree.classes[self.curClassId].classes[ascendClassId] or { name = "" }
self.curAscendClassName = ascendClass.name
for id, node in pairs(self.allocNodes) do
if node.ascendancyName and node.ascendancyName ~= ascendClass.name then

View File

@@ -16,13 +16,17 @@ local m_tan = math.tan
local m_sqrt = math.sqrt
local t_insert = table.insert
local function jsonToLua(json)
return "return "..json:gsub("%[","{"):gsub("%]","}"):gsub('"(%d[%d%.]*)":','[%1]='):gsub('"([^"]+)":','["%1"]='):gsub("\\/","/")
end
local TreeClass = common.NewClass("PassiveTree", function(self)
MakeDir("TreeData")
ConPrintf("Loading JSON...")
local treeText, classText
local treeFile = io.open("TreeData/tree.json", "r")
local classFile = io.open("TreeData/classes.json", "r")
local treeFile = io.open("TreeData/tree.lua", "r")
local classFile = io.open("TreeData/classes.lua", "r")
if treeFile and classFile then
treeText = treeFile:read("*a")
treeFile:close()
@@ -44,22 +48,21 @@ local TreeClass = common.NewClass("PassiveTree", function(self)
end)
easy:perform()
easy:close()
treeText = page:match("var passiveSkillTreeData = (%b{})")
treeFile = io.open("TreeData/tree.json", "w")
treeText = jsonToLua(page:match("var passiveSkillTreeData = (%b{})"))
treeFile = io.open("TreeData/tree.lua", "w")
treeFile:write(treeText)
treeFile:close()
classText = page:match("ascClasses: (%b{})")
classFile = io.open("TreeData/classes.json", "w")
classText = jsonToLua(page:match("ascClasses: (%b{})"))
classFile = io.open("TreeData/classes.lua", "w")
classFile:write(classText)
classFile:close()
end
for k, v in pairs(common.json.decode(treeText)) do
for k, v in pairs(assert(loadstring(treeText))()) do
self[k] = v
end
self.classes = { }
for id, data in pairs(common.json.decode(classText)) do
self.classes[tonumber(id)] = data
data.classes["0"] = { name = "None" }
self.classes = assert(loadstring(classText))()
for classId, class in pairs(self.classes) do
class.classes[0] = { name = "None" }
end
self.size = m_min(self.max_x - self.min_x, self.max_y - self.min_y) * 1.1
@@ -141,7 +144,7 @@ local TreeClass = common.NewClass("PassiveTree", function(self)
local nodeMap = { }
local orbitMult = { [0] = 0, m_pi / 3, m_pi / 6, m_pi / 6, m_pi / 20 }
local orbitDist = { [0] = 0, 82, 162, 335, 493 }
for _, node in ipairs(self.nodes) do
for _, node in pairs(self.nodes) do
nodeMap[node.id] = node
if node.spc[1] then
node.type = "class"
@@ -162,7 +165,7 @@ local TreeClass = common.NewClass("PassiveTree", function(self)
node.overlay = nodeOverlay[node.type]
node.linkedId = { }
local group = self.groups[tostring(node.g)]
local group = self.groups[node.g]
group.ascendancyName = node.ascendancyName
if node.isAscendancyStart then
group.isAscendancyStart = true
@@ -229,7 +232,7 @@ local TreeClass = common.NewClass("PassiveTree", function(self)
for ascendClassId, ascendClass in pairs(class.classes) do
self.ascendNameMap[ascendClass.name] = {
classId = classId,
ascendClassId = tonumber(ascendClassId)
ascendClassId = ascendClassId
}
end
end

View File

@@ -250,11 +250,11 @@ function TreeViewClass:DrawTree(build, viewPort, inputEvents)
self:DrawAsset(tree.assets["Classes"..group.ascendancyName], scrX, scrY, scale)
SetDrawColor(1, 1, 1)
end
elseif group.oo["3"] then
elseif group.oo[3] then
self:DrawAsset(tree.assets.PSGroupBackground3, scrX, scrY, scale, true)
elseif group.oo["2"] then
elseif group.oo[2] then
self:DrawAsset(tree.assets.PSGroupBackground2, scrX, scrY, scale)
elseif group.oo["1"] then
elseif group.oo[1] then
self:DrawAsset(tree.assets.PSGroupBackground1, scrX, scrY, scale)
end
end

View File

@@ -59,7 +59,7 @@ gems["Bear Trap"] = {
showAverage = true,
base = {
skill_castTime = 1,
skill_damageEff = 2,
skill_damageEffectiveness = 2,
skill_critChanceBase = 5,
},
quality = {
@@ -105,7 +105,7 @@ gems["Blade Vortex"] = {
showAverage = true,
base = {
skill_castTime = 0.5,
skill_damageEff = 0.3,
skill_damageEffectiveness = 0.3,
skill_critChanceBase = 6,
skill_durationBase = 5,
},
@@ -150,7 +150,7 @@ gems["Bladefall"] = {
aoe = true,
base = {
skill_castTime = 0.8,
skill_damageEff = 0.9,
skill_damageEffectiveness = 0.9,
skill_critChanceBase = 5,
},
quality = {
@@ -531,7 +531,7 @@ gems["Elemental Hit"] = {
igniteChance = 10,
},
quality = {
elemInc = 1,
elementalInc = 1,
},
levels = {
[1] = { skill_manaCostBase = 6, part1_attack_fireMin = 4, part1_attack_fireMax = 8, part2_attack_coldMin = 3, part2_attack_coldMax = 6, part3_attack_lightningMin = 1, part3_attack_lightningMax = 13, },
@@ -571,7 +571,7 @@ gems["Ethereal Knives"] = {
projectile = true,
base = {
skill_castTime = 0.6,
skill_damageEff = 1,
skill_damageEffectiveness = 1,
skill_critChanceBase = 6,
},
quality = {
@@ -679,7 +679,7 @@ gems["Fire Trap"] = {
showAverage = true,
base = {
skill_castTime = 1,
skill_damageEff = 1,
skill_damageEffectiveness = 1,
skill_critChanceBase = 6,
skill_durationBase = 8,
},
@@ -730,7 +730,7 @@ gems["Freeze Mine"] = {
showAverage = true,
base = {
skill_castTime = 0.5,
skill_damageEff = 0.5,
skill_damageEffectiveness = 0.5,
},
quality = {
aoeRadiusInc = 0.5,
@@ -1007,7 +1007,7 @@ gems["Herald of Ice"] = {
cold = true,
base = {
skill_manaReservedPercent = 25,
skill_damageEff = 0.8,
skill_damageEffectiveness = 0.8,
},
quality = {
buff_coldInc = 0.75,
@@ -1111,7 +1111,7 @@ gems["Ice Trap"] = {
showAverage = true,
base = {
skill_castTime = 1,
skill_damageEff = 1.1,
skill_damageEffectiveness = 1.1,
skill_critChanceBase = 5,
},
quality = {
@@ -1328,36 +1328,36 @@ gems["Purity of Ice"] = {
auraRadiusInc = 1,
},
levels = {
[1] = { auraRadiusInc = 0, coldResistBase = 22, coldResistMaxBase = 0, },
[2] = { auraRadiusInc = 3, coldResistBase = 23, coldResistMaxBase = 0, },
[3] = { auraRadiusInc = 6, coldResistBase = 24, coldResistMaxBase = 0, },
[4] = { auraRadiusInc = 9, coldResistBase = 25, coldResistMaxBase = 0, },
[5] = { auraRadiusInc = 12, coldResistBase = 26, coldResistMaxBase = 1, },
[6] = { auraRadiusInc = 15, coldResistBase = 27, coldResistMaxBase = 1, },
[7] = { auraRadiusInc = 18, coldResistBase = 28, coldResistMaxBase = 1, },
[8] = { auraRadiusInc = 21, coldResistBase = 29, coldResistMaxBase = 1, },
[9] = { auraRadiusInc = 23, coldResistBase = 30, coldResistMaxBase = 1, },
[10] = { auraRadiusInc = 25, coldResistBase = 31, coldResistMaxBase = 1, },
[11] = { auraRadiusInc = 27, coldResistBase = 32, coldResistMaxBase = 2, },
[12] = { auraRadiusInc = 29, coldResistBase = 33, coldResistMaxBase = 2, },
[13] = { auraRadiusInc = 31, coldResistBase = 34, coldResistMaxBase = 2, },
[14] = { auraRadiusInc = 33, coldResistBase = 35, coldResistMaxBase = 2, },
[15] = { auraRadiusInc = 35, coldResistBase = 36, coldResistMaxBase = 2, },
[16] = { auraRadiusInc = 36, coldResistBase = 37, coldResistMaxBase = 2, },
[17] = { auraRadiusInc = 37, coldResistBase = 38, coldResistMaxBase = 3, },
[18] = { auraRadiusInc = 38, coldResistBase = 39, coldResistMaxBase = 3, },
[19] = { auraRadiusInc = 39, coldResistBase = 40, coldResistMaxBase = 3, },
[20] = { auraRadiusInc = 40, coldResistBase = 41, coldResistMaxBase = 4, },
[21] = { auraRadiusInc = 41, coldResistBase = 42, coldResistMaxBase = 4, },
[22] = { auraRadiusInc = 42, coldResistBase = 43, coldResistMaxBase = 4, },
[23] = { auraRadiusInc = 43, coldResistBase = 44, coldResistMaxBase = 5, },
[24] = { auraRadiusInc = 44, coldResistBase = 45, coldResistMaxBase = 5, },
[25] = { auraRadiusInc = 45, coldResistBase = 46, coldResistMaxBase = 5, },
[26] = { auraRadiusInc = 46, coldResistBase = 47, coldResistMaxBase = 5, },
[27] = { auraRadiusInc = 47, coldResistBase = 48, coldResistMaxBase = 5, },
[28] = { auraRadiusInc = 48, coldResistBase = 49, coldResistMaxBase = 5, },
[29] = { auraRadiusInc = 49, coldResistBase = 50, coldResistMaxBase = 5, },
[30] = { auraRadiusInc = 50, coldResistBase = 51, coldResistMaxBase = 5, },
[1] = { auraRadiusInc = 0, coldResist = 22, coldResistMax = 0, },
[2] = { auraRadiusInc = 3, coldResist = 23, coldResistMax = 0, },
[3] = { auraRadiusInc = 6, coldResist = 24, coldResistMax = 0, },
[4] = { auraRadiusInc = 9, coldResist = 25, coldResistMax = 0, },
[5] = { auraRadiusInc = 12, coldResist = 26, coldResistMax = 1, },
[6] = { auraRadiusInc = 15, coldResist = 27, coldResistMax = 1, },
[7] = { auraRadiusInc = 18, coldResist = 28, coldResistMax = 1, },
[8] = { auraRadiusInc = 21, coldResist = 29, coldResistMax = 1, },
[9] = { auraRadiusInc = 23, coldResist = 30, coldResistMax = 1, },
[10] = { auraRadiusInc = 25, coldResist = 31, coldResistMax = 1, },
[11] = { auraRadiusInc = 27, coldResist = 32, coldResistMax = 2, },
[12] = { auraRadiusInc = 29, coldResist = 33, coldResistMax = 2, },
[13] = { auraRadiusInc = 31, coldResist = 34, coldResistMax = 2, },
[14] = { auraRadiusInc = 33, coldResist = 35, coldResistMax = 2, },
[15] = { auraRadiusInc = 35, coldResist = 36, coldResistMax = 2, },
[16] = { auraRadiusInc = 36, coldResist = 37, coldResistMax = 2, },
[17] = { auraRadiusInc = 37, coldResist = 38, coldResistMax = 3, },
[18] = { auraRadiusInc = 38, coldResist = 39, coldResistMax = 3, },
[19] = { auraRadiusInc = 39, coldResist = 40, coldResistMax = 3, },
[20] = { auraRadiusInc = 40, coldResist = 41, coldResistMax = 4, },
[21] = { auraRadiusInc = 41, coldResist = 42, coldResistMax = 4, },
[22] = { auraRadiusInc = 42, coldResist = 43, coldResistMax = 4, },
[23] = { auraRadiusInc = 43, coldResist = 44, coldResistMax = 5, },
[24] = { auraRadiusInc = 44, coldResist = 45, coldResistMax = 5, },
[25] = { auraRadiusInc = 45, coldResist = 46, coldResistMax = 5, },
[26] = { auraRadiusInc = 46, coldResist = 47, coldResistMax = 5, },
[27] = { auraRadiusInc = 47, coldResist = 48, coldResistMax = 5, },
[28] = { auraRadiusInc = 48, coldResist = 49, coldResistMax = 5, },
[29] = { auraRadiusInc = 49, coldResist = 50, coldResistMax = 5, },
[30] = { auraRadiusInc = 50, coldResist = 51, coldResistMax = 5, },
}
}
gems["Rain of Arrows"] = {
@@ -1835,7 +1835,7 @@ gems["Wild Strike"] = {
part6_physicalGainAscold = 60,
},
quality = {
elemInc = 1,
elementalInc = 1,
},
levels = {
[1] = { attack_damageMore = 1.2, },

View File

@@ -10,7 +10,7 @@ gems["Arc"] = {
lightning = true,
base = {
skill_castTime = 0.8,
skill_damageEff = 0.7,
skill_damageEffectiveness = 0.7,
skill_critChanceBase = 5,
shockChance = 10,
},
@@ -58,7 +58,7 @@ gems["Arctic Breath"] = {
cold = true,
base = {
skill_castTime = 0.8,
skill_damageEff = 1,
skill_damageEffectiveness = 1,
skill_critChanceBase = 5,
},
quality = {
@@ -112,7 +112,7 @@ gems["Ball Lightning"] = {
},
base = {
skill_castTime = 0.8,
skill_damageEff = 0.2,
skill_damageEffectiveness = 0.2,
skill_critChanceBase = 5,
},
quality = {
@@ -202,7 +202,7 @@ gems["Cold Snap"] = {
cold = true,
base = {
skill_castTime = 0.85,
skill_damageEff = 1.2,
skill_damageEffectiveness = 1.2,
skill_critChanceBase = 5,
freezeChance = 30,
freeze_durationInc = 30,
@@ -308,7 +308,7 @@ gems["Discharge"] = {
base = {
skill_castTime = 1,
skill_critChanceBase = 7,
skill_damageEff = 1.5,
skill_damageEffectiveness = 1.5,
},
quality = {
aoeRadiusInc = 0.5,
@@ -402,7 +402,7 @@ gems["Essence Drain"] = {
chaos = true,
base = {
skill_critChanceBase = 5,
skill_damageEff = 0.6,
skill_damageEffectiveness = 0.6,
skill_castTime = 0.75,
skill_dotIsSpell = true,
skill_durationBase = 3.8,
@@ -450,7 +450,7 @@ gems["Fire Nova Mine"] = {
fire = true,
base = {
skill_castTime = 1,
skill_damageEff = 0.3,
skill_damageEffectiveness = 0.3,
skill_critChanceBase = 5,
},
quality = {
@@ -496,7 +496,7 @@ gems["Fireball"] = {
fire = true,
base = {
skill_castTime = 0.85,
skill_damageEff = 1,
skill_damageEffectiveness = 1,
skill_critChanceBase = 6,
},
quality = {
@@ -542,7 +542,7 @@ gems["Firestorm"] = {
fire = true,
base = {
skill_castTime = 0.9,
skill_damageEff = 0.3,
skill_damageEffectiveness = 0.3,
skill_critChanceBase = 6,
skill_durationBase = 2,
},
@@ -589,7 +589,7 @@ gems["Flame Dash"] = {
duration = true,
base = {
skill_castTime = 0.75,
skill_damageEff = 1,
skill_damageEffectiveness = 1,
skill_critChanceBase = 6,
skill_durationBase = 4,
},
@@ -635,7 +635,7 @@ gems["Flame Surge"] = {
fire = true,
base = {
skill_castTime = 0.5,
skill_damageEff = 1,
skill_damageEffectiveness = 1,
skill_critChanceBase = 6,
condMod_EnemyBurning_damageMore = 1.5,
},
@@ -689,7 +689,7 @@ gems["Flameblast"] = {
},
base = {
skill_castTime = 0.2,
skill_damageEff = 0.5,
skill_damageEffectiveness = 0.5,
skill_critChanceBase = 5,
part2_spell_damageMore = 12,
part2_castSpeedMore = 0.1,
@@ -742,7 +742,7 @@ gems["Freezing Pulse"] = {
spell = true,
base = {
skill_castTime = 0.65,
skill_damageEff = 1.25,
skill_damageEffectiveness = 1.25,
skill_critChanceBase = 6,
pierceChance = 100,
freezeChance = 25,
@@ -798,7 +798,7 @@ gems["Glacial Cascade"] = {
cold = true,
base = {
skill_castTime = 0.8,
skill_damageEff = 0.6,
skill_damageEffectiveness = 0.6,
skill_critChanceBase = 5,
},
quality = {
@@ -888,7 +888,7 @@ gems["Ice Nova"] = {
cold = true,
base = {
skill_castTime = 0.9,
skill_damageEff = 0.7,
skill_damageEffectiveness = 0.7,
skill_critChanceBase = 6,
},
quality = {
@@ -941,7 +941,7 @@ gems["Ice Spear"] = {
},
base = {
skill_castTime = 0.85,
skill_damageEff = 0.8,
skill_damageEffectiveness = 0.8,
skill_critChanceBase = 7,
part1_pierceChance = 100,
part2_critChanceInc = 600,
@@ -996,7 +996,7 @@ gems["Incinerate"] = {
},
base = {
skill_castTime = 0.2,
skill_damageEff = 0.3,
skill_damageEffectiveness = 0.3,
skill_baseCrit = 0,
pierceChance = 100,
part2_spell_damageMore = 2.5,
@@ -1095,7 +1095,7 @@ gems["Lightning Tendrils"] = {
lightning = true,
base = {
skill_castTime = 0.8,
skill_damageEff = 0.35,
skill_damageEffectiveness = 0.35,
skill_critChanceBase = 6,
},
quality = {
@@ -1141,7 +1141,7 @@ gems["Lightning Trap"] = {
lightning = true,
base = {
skill_castTime = 1,
skill_damageEff = 0.9,
skill_damageEffectiveness = 0.9,
skill_critChanceBase = 5,
},
quality = {
@@ -1189,7 +1189,7 @@ gems["Lightning Warp"] = {
showAverage = true,
base = {
skill_castTime = 1,
skill_damageEff = 0.6,
skill_damageEffectiveness = 0.6,
skill_critChanceBase = 5,
},
quality = {
@@ -1235,7 +1235,7 @@ gems["Magma Orb"] = {
fire = true,
base = {
skill_castTime = 0.7,
skill_damageEff = 1.25,
skill_damageEffectiveness = 1.25,
skill_critChanceBase = 5,
},
quality = {
@@ -1329,36 +1329,36 @@ gems["Purity of Elements"] = {
auraRadiusInc = 1,
},
levels = {
[1] = { auraRadiusInc = 0, elemResistBase = 12, },
[2] = { auraRadiusInc = 3, elemResistBase = 13, },
[3] = { auraRadiusInc = 6, elemResistBase = 14, },
[4] = { auraRadiusInc = 9, elemResistBase = 15, },
[5] = { auraRadiusInc = 12, elemResistBase = 15, },
[6] = { auraRadiusInc = 15, elemResistBase = 16, },
[7] = { auraRadiusInc = 18, elemResistBase = 17, },
[8] = { auraRadiusInc = 21, elemResistBase = 18, },
[9] = { auraRadiusInc = 23, elemResistBase = 19, },
[10] = { auraRadiusInc = 25, elemResistBase = 20, },
[11] = { auraRadiusInc = 27, elemResistBase = 20, },
[12] = { auraRadiusInc = 29, elemResistBase = 21, },
[13] = { auraRadiusInc = 31, elemResistBase = 22, },
[14] = { auraRadiusInc = 33, elemResistBase = 23, },
[15] = { auraRadiusInc = 35, elemResistBase = 24, },
[16] = { auraRadiusInc = 36, elemResistBase = 25, },
[17] = { auraRadiusInc = 37, elemResistBase = 25, },
[18] = { auraRadiusInc = 38, elemResistBase = 26, },
[19] = { auraRadiusInc = 39, elemResistBase = 27, },
[20] = { auraRadiusInc = 40, elemResistBase = 27, },
[21] = { auraRadiusInc = 41, elemResistBase = 28, },
[22] = { auraRadiusInc = 42, elemResistBase = 29, },
[23] = { auraRadiusInc = 43, elemResistBase = 29, },
[24] = { auraRadiusInc = 44, elemResistBase = 30, },
[25] = { auraRadiusInc = 45, elemResistBase = 31, },
[26] = { auraRadiusInc = 46, elemResistBase = 31, },
[27] = { auraRadiusInc = 47, elemResistBase = 32, },
[28] = { auraRadiusInc = 48, elemResistBase = 33, },
[29] = { auraRadiusInc = 49, elemResistBase = 33, },
[30] = { auraRadiusInc = 50, elemResistBase = 34, },
[1] = { auraRadiusInc = 0, elementalResist = 12, },
[2] = { auraRadiusInc = 3, elementalResist = 13, },
[3] = { auraRadiusInc = 6, elementalResist = 14, },
[4] = { auraRadiusInc = 9, elementalResist = 15, },
[5] = { auraRadiusInc = 12, elementalResist = 15, },
[6] = { auraRadiusInc = 15, elementalResist = 16, },
[7] = { auraRadiusInc = 18, elementalResist = 17, },
[8] = { auraRadiusInc = 21, elementalResist = 18, },
[9] = { auraRadiusInc = 23, elementalResist = 19, },
[10] = { auraRadiusInc = 25, elementalResist = 20, },
[11] = { auraRadiusInc = 27, elementalResist = 20, },
[12] = { auraRadiusInc = 29, elementalResist = 21, },
[13] = { auraRadiusInc = 31, elementalResist = 22, },
[14] = { auraRadiusInc = 33, elementalResist = 23, },
[15] = { auraRadiusInc = 35, elementalResist = 24, },
[16] = { auraRadiusInc = 36, elementalResist = 25, },
[17] = { auraRadiusInc = 37, elementalResist = 25, },
[18] = { auraRadiusInc = 38, elementalResist = 26, },
[19] = { auraRadiusInc = 39, elementalResist = 27, },
[20] = { auraRadiusInc = 40, elementalResist = 27, },
[21] = { auraRadiusInc = 41, elementalResist = 28, },
[22] = { auraRadiusInc = 42, elementalResist = 29, },
[23] = { auraRadiusInc = 43, elementalResist = 29, },
[24] = { auraRadiusInc = 44, elementalResist = 30, },
[25] = { auraRadiusInc = 45, elementalResist = 31, },
[26] = { auraRadiusInc = 46, elementalResist = 31, },
[27] = { auraRadiusInc = 47, elementalResist = 32, },
[28] = { auraRadiusInc = 48, elementalResist = 33, },
[29] = { auraRadiusInc = 49, elementalResist = 33, },
[30] = { auraRadiusInc = 50, elementalResist = 34, },
}
}
gems["Purity of Lightning"] = {
@@ -1373,36 +1373,36 @@ gems["Purity of Lightning"] = {
auraRadiusInc = 1,
},
levels = {
[1] = { auraRadiusInc = 0, lightningResistBase = 22, lightningResistMaxBase = 0, },
[2] = { auraRadiusInc = 3, lightningResistBase = 23, lightningResistMaxBase = 0, },
[3] = { auraRadiusInc = 6, lightningResistBase = 24, lightningResistMaxBase = 0, },
[4] = { auraRadiusInc = 9, lightningResistBase = 25, lightningResistMaxBase = 0, },
[5] = { auraRadiusInc = 12, lightningResistBase = 26, lightningResistMaxBase = 1, },
[6] = { auraRadiusInc = 15, lightningResistBase = 27, lightningResistMaxBase = 1, },
[7] = { auraRadiusInc = 18, lightningResistBase = 28, lightningResistMaxBase = 1, },
[8] = { auraRadiusInc = 21, lightningResistBase = 29, lightningResistMaxBase = 1, },
[9] = { auraRadiusInc = 23, lightningResistBase = 30, lightningResistMaxBase = 1, },
[10] = { auraRadiusInc = 25, lightningResistBase = 31, lightningResistMaxBase = 1, },
[11] = { auraRadiusInc = 27, lightningResistBase = 32, lightningResistMaxBase = 2, },
[12] = { auraRadiusInc = 29, lightningResistBase = 33, lightningResistMaxBase = 2, },
[13] = { auraRadiusInc = 31, lightningResistBase = 34, lightningResistMaxBase = 2, },
[14] = { auraRadiusInc = 33, lightningResistBase = 35, lightningResistMaxBase = 2, },
[15] = { auraRadiusInc = 35, lightningResistBase = 36, lightningResistMaxBase = 2, },
[16] = { auraRadiusInc = 36, lightningResistBase = 37, lightningResistMaxBase = 2, },
[17] = { auraRadiusInc = 37, lightningResistBase = 38, lightningResistMaxBase = 3, },
[18] = { auraRadiusInc = 38, lightningResistBase = 39, lightningResistMaxBase = 3, },
[19] = { auraRadiusInc = 39, lightningResistBase = 40, lightningResistMaxBase = 3, },
[20] = { auraRadiusInc = 40, lightningResistBase = 41, lightningResistMaxBase = 4, },
[21] = { auraRadiusInc = 41, lightningResistBase = 42, lightningResistMaxBase = 4, },
[22] = { auraRadiusInc = 42, lightningResistBase = 43, lightningResistMaxBase = 4, },
[23] = { auraRadiusInc = 43, lightningResistBase = 44, lightningResistMaxBase = 5, },
[24] = { auraRadiusInc = 44, lightningResistBase = 45, lightningResistMaxBase = 5, },
[25] = { auraRadiusInc = 45, lightningResistBase = 46, lightningResistMaxBase = 5, },
[26] = { auraRadiusInc = 46, lightningResistBase = 47, lightningResistMaxBase = 5, },
[27] = { auraRadiusInc = 47, lightningResistBase = 48, lightningResistMaxBase = 5, },
[28] = { auraRadiusInc = 48, lightningResistBase = 49, lightningResistMaxBase = 5, },
[29] = { auraRadiusInc = 49, lightningResistBase = 50, lightningResistMaxBase = 5, },
[30] = { auraRadiusInc = 50, lightningResistBase = 51, lightningResistMaxBase = 5, },
[1] = { auraRadiusInc = 0, lightningResist = 22, lightningResistMax = 0, },
[2] = { auraRadiusInc = 3, lightningResist = 23, lightningResistMax = 0, },
[3] = { auraRadiusInc = 6, lightningResist = 24, lightningResistMax = 0, },
[4] = { auraRadiusInc = 9, lightningResist = 25, lightningResistMax = 0, },
[5] = { auraRadiusInc = 12, lightningResist = 26, lightningResistMax = 1, },
[6] = { auraRadiusInc = 15, lightningResist = 27, lightningResistMax = 1, },
[7] = { auraRadiusInc = 18, lightningResist = 28, lightningResistMax = 1, },
[8] = { auraRadiusInc = 21, lightningResist = 29, lightningResistMax = 1, },
[9] = { auraRadiusInc = 23, lightningResist = 30, lightningResistMax = 1, },
[10] = { auraRadiusInc = 25, lightningResist = 31, lightningResistMax = 1, },
[11] = { auraRadiusInc = 27, lightningResist = 32, lightningResistMax = 2, },
[12] = { auraRadiusInc = 29, lightningResist = 33, lightningResistMax = 2, },
[13] = { auraRadiusInc = 31, lightningResist = 34, lightningResistMax = 2, },
[14] = { auraRadiusInc = 33, lightningResist = 35, lightningResistMax = 2, },
[15] = { auraRadiusInc = 35, lightningResist = 36, lightningResistMax = 2, },
[16] = { auraRadiusInc = 36, lightningResist = 37, lightningResistMax = 2, },
[17] = { auraRadiusInc = 37, lightningResist = 38, lightningResistMax = 3, },
[18] = { auraRadiusInc = 38, lightningResist = 39, lightningResistMax = 3, },
[19] = { auraRadiusInc = 39, lightningResist = 40, lightningResistMax = 3, },
[20] = { auraRadiusInc = 40, lightningResist = 41, lightningResistMax = 4, },
[21] = { auraRadiusInc = 41, lightningResist = 42, lightningResistMax = 4, },
[22] = { auraRadiusInc = 42, lightningResist = 43, lightningResistMax = 4, },
[23] = { auraRadiusInc = 43, lightningResist = 44, lightningResistMax = 5, },
[24] = { auraRadiusInc = 44, lightningResist = 45, lightningResistMax = 5, },
[25] = { auraRadiusInc = 45, lightningResist = 46, lightningResistMax = 5, },
[26] = { auraRadiusInc = 46, lightningResist = 47, lightningResistMax = 5, },
[27] = { auraRadiusInc = 47, lightningResist = 48, lightningResistMax = 5, },
[28] = { auraRadiusInc = 48, lightningResist = 49, lightningResistMax = 5, },
[29] = { auraRadiusInc = 49, lightningResist = 50, lightningResistMax = 5, },
[30] = { auraRadiusInc = 50, lightningResist = 51, lightningResistMax = 5, },
}
}
gems["Raise Spectre"] = {
@@ -1471,7 +1471,7 @@ gems["Shock Nova"] = {
},
base = {
skill_castTime = 0.75,
skill_damageEff = 0.6,
skill_damageEffectiveness = 0.6,
skill_critChanceBase = 6,
part1_spell_damageMore = 0.5,
shockChance = 20,
@@ -1519,7 +1519,7 @@ gems["Spark"] = {
lightning = true,
base = {
skill_castTime = 0.65,
skill_damageEff = 0.7,
skill_damageEffectiveness = 0.7,
skill_critChanceBase = 6,
skill_baseDur = 1.5,
},
@@ -1566,7 +1566,7 @@ gems["Storm Call"] = {
lightning = true,
base = {
skill_castTime = 0.5,
skill_damageEff = 0.8,
skill_damageEffectiveness = 0.8,
skill_critChanceBase = 6,
skill_durationBase = 1.5,
},

View File

@@ -217,7 +217,7 @@ gems["Flame Totem"] = {
fire = true,
base = {
skill_castTime = 0.25,
skill_damageEff = 0.25,
skill_damageEffectiveness = 0.25,
skill_critChanceBase = 5,
skill_durationBase = 8,
},
@@ -592,7 +592,7 @@ gems["Molten Shell"] = {
showAverage = true,
base = {
skill_castTime = 0.5,
skill_damageEff = 2,
skill_damageEffectiveness = 2,
skill_critChanceBase = 5,
skill_durationBase = 10,
},
@@ -708,36 +708,36 @@ gems["Purity of Fire"] = {
auraRadiusInc = 1,
},
levels = {
[1] = { auraRadiusInc = 0, fireResistBase = 22, fireResistMaxBase = 0, },
[2] = { auraRadiusInc = 3, fireResistBase = 23, fireResistMaxBase = 0, },
[3] = { auraRadiusInc = 6, fireResistBase = 24, fireResistMaxBase = 0, },
[4] = { auraRadiusInc = 9, fireResistBase = 25, fireResistMaxBase = 0, },
[5] = { auraRadiusInc = 12, fireResistBase = 26, fireResistMaxBase = 1, },
[6] = { auraRadiusInc = 15, fireResistBase = 27, fireResistMaxBase = 1, },
[7] = { auraRadiusInc = 18, fireResistBase = 28, fireResistMaxBase = 1, },
[8] = { auraRadiusInc = 21, fireResistBase = 29, fireResistMaxBase = 1, },
[9] = { auraRadiusInc = 23, fireResistBase = 30, fireResistMaxBase = 1, },
[10] = { auraRadiusInc = 25, fireResistBase = 31, fireResistMaxBase = 1, },
[11] = { auraRadiusInc = 27, fireResistBase = 32, fireResistMaxBase = 2, },
[12] = { auraRadiusInc = 29, fireResistBase = 33, fireResistMaxBase = 2, },
[13] = { auraRadiusInc = 31, fireResistBase = 34, fireResistMaxBase = 2, },
[14] = { auraRadiusInc = 33, fireResistBase = 35, fireResistMaxBase = 2, },
[15] = { auraRadiusInc = 35, fireResistBase = 36, fireResistMaxBase = 2, },
[16] = { auraRadiusInc = 36, fireResistBase = 37, fireResistMaxBase = 2, },
[17] = { auraRadiusInc = 37, fireResistBase = 38, fireResistMaxBase = 3, },
[18] = { auraRadiusInc = 38, fireResistBase = 39, fireResistMaxBase = 3, },
[19] = { auraRadiusInc = 39, fireResistBase = 40, fireResistMaxBase = 3, },
[20] = { auraRadiusInc = 40, fireResistBase = 41, fireResistMaxBase = 4, },
[21] = { auraRadiusInc = 41, fireResistBase = 42, fireResistMaxBase = 4, },
[22] = { auraRadiusInc = 42, fireResistBase = 43, fireResistMaxBase = 4, },
[23] = { auraRadiusInc = 43, fireResistBase = 44, fireResistMaxBase = 5, },
[24] = { auraRadiusInc = 44, fireResistBase = 45, fireResistMaxBase = 5, },
[25] = { auraRadiusInc = 45, fireResistBase = 46, fireResistMaxBase = 5, },
[26] = { auraRadiusInc = 46, fireResistBase = 47, fireResistMaxBase = 5, },
[27] = { auraRadiusInc = 47, fireResistBase = 48, fireResistMaxBase = 5, },
[28] = { auraRadiusInc = 48, fireResistBase = 49, fireResistMaxBase = 5, },
[29] = { auraRadiusInc = 49, fireResistBase = 50, fireResistMaxBase = 5, },
[30] = { auraRadiusInc = 50, fireResistBase = 51, fireResistMaxBase = 5, },
[1] = { auraRadiusInc = 0, fireResist = 22, fireResistMax = 0, },
[2] = { auraRadiusInc = 3, fireResist = 23, fireResistMax = 0, },
[3] = { auraRadiusInc = 6, fireResist = 24, fireResistMax = 0, },
[4] = { auraRadiusInc = 9, fireResist = 25, fireResistMax = 0, },
[5] = { auraRadiusInc = 12, fireResist = 26, fireResistMax = 1, },
[6] = { auraRadiusInc = 15, fireResist = 27, fireResistMax = 1, },
[7] = { auraRadiusInc = 18, fireResist = 28, fireResistMax = 1, },
[8] = { auraRadiusInc = 21, fireResist = 29, fireResistMax = 1, },
[9] = { auraRadiusInc = 23, fireResist = 30, fireResistMax = 1, },
[10] = { auraRadiusInc = 25, fireResist = 31, fireResistMax = 1, },
[11] = { auraRadiusInc = 27, fireResist = 32, fireResistMax = 2, },
[12] = { auraRadiusInc = 29, fireResist = 33, fireResistMax = 2, },
[13] = { auraRadiusInc = 31, fireResist = 34, fireResistMax = 2, },
[14] = { auraRadiusInc = 33, fireResist = 35, fireResistMax = 2, },
[15] = { auraRadiusInc = 35, fireResist = 36, fireResistMax = 2, },
[16] = { auraRadiusInc = 36, fireResist = 37, fireResistMax = 2, },
[17] = { auraRadiusInc = 37, fireResist = 38, fireResistMax = 3, },
[18] = { auraRadiusInc = 38, fireResist = 39, fireResistMax = 3, },
[19] = { auraRadiusInc = 39, fireResist = 40, fireResistMax = 3, },
[20] = { auraRadiusInc = 40, fireResist = 41, fireResistMax = 4, },
[21] = { auraRadiusInc = 41, fireResist = 42, fireResistMax = 4, },
[22] = { auraRadiusInc = 42, fireResist = 43, fireResistMax = 4, },
[23] = { auraRadiusInc = 43, fireResist = 44, fireResistMax = 5, },
[24] = { auraRadiusInc = 44, fireResist = 45, fireResistMax = 5, },
[25] = { auraRadiusInc = 45, fireResist = 46, fireResistMax = 5, },
[26] = { auraRadiusInc = 46, fireResist = 47, fireResistMax = 5, },
[27] = { auraRadiusInc = 47, fireResist = 48, fireResistMax = 5, },
[28] = { auraRadiusInc = 48, fireResist = 49, fireResistMax = 5, },
[29] = { auraRadiusInc = 49, fireResist = 50, fireResistMax = 5, },
[30] = { auraRadiusInc = 50, fireResist = 51, fireResistMax = 5, },
}
}
gems["Rallying Cry"] = {
@@ -845,7 +845,7 @@ gems["Shockwave Totem"] = {
duration = true,
base = {
skill_castTime = 0.6,
skill_damageEff = 0.6,
skill_damageEffectiveness = 0.6,
skill_critChanceBase = 5,
skill_durationBase = 8,
},

View File

@@ -67,7 +67,7 @@ gems["Vaal Arc"] = {
showAverage = true,
base = {
skill_castTime = 0.8,
skill_damageEff = 0.8,
skill_damageEffectiveness = 0.8,
skill_critChanceBase = 5,
shockChance = 100,
},
@@ -210,7 +210,7 @@ gems["Vaal Cold Snap"] = {
showAverage = true,
base = {
skill_castTime = 0.85,
skill_damageEff = 1.4,
skill_damageEffectiveness = 1.4,
skill_critChanceBase = 5,
skill_durationBase = 10,
},
@@ -398,7 +398,7 @@ gems["Vaal Fireball"] = {
showAverage = true,
base = {
skill_castTime = 0.85,
skill_damageEff = 1.25,
skill_damageEffectiveness = 1.25,
skill_critChanceBase = 6,
aoeRadiusInc = 50,
},
@@ -446,7 +446,7 @@ gems["Vaal Flameblast"] = {
showAverage = true,
base = {
skill_castTime = 1,
skill_damageEff = 0.6,
skill_damageEffectiveness = 0.6,
skill_critChanceBase = 5,
spell_damageMore = 12,
},
@@ -680,7 +680,7 @@ gems["Vaal Ice Nova"] = {
showAverage = true,
base = {
skill_castTime = 0.9,
skill_damageEff = 0.7,
skill_damageEffectiveness = 0.7,
skill_critChanceBase = 6,
},
quality = {
@@ -787,7 +787,7 @@ gems["Vaal Lightning Trap"] = {
showAverage = true,
base = {
skill_castTime = 1,
skill_damageEff = 0.9,
skill_damageEffectiveness = 0.9,
skill_critChanceBase = 5,
skill_durationBase = 4,
pierceChance = 100,
@@ -837,7 +837,7 @@ gems["Vaal Lightning Warp"] = {
showAverage = true,
base = {
skill_castTime = 1,
skill_damageEff = 0.5,
skill_damageEffectiveness = 0.5,
skill_critChanceBase = 5,
},
quality = {
@@ -885,7 +885,7 @@ gems["Vaal Molten Shell"] = {
showAverage = true,
base = {
skill_castTime = 0.5,
skill_damageEff = 2,
skill_damageEffectiveness = 2,
skill_critChanceBase = 5,
skill_durationBase = 10,
},
@@ -1117,7 +1117,7 @@ gems["Vaal Spark"] = {
showAverage = true,
base = {
skill_castTime = 0.65,
skill_damageEff = 0.4,
skill_damageEffectiveness = 0.4,
skill_critChanceBase = 5,
skill_durationBase = 2,
},
@@ -1209,7 +1209,7 @@ gems["Vaal Storm Call"] = {
showAverage = true,
base = {
skill_castTime = 0.5,
skill_damageEff = 0.8,
skill_damageEffectiveness = 0.8,
skill_critChanceBase = 6,
skill_durationBase = 3,
},

View File

@@ -1134,7 +1134,7 @@ gems["Void Manipulation"] = {
chaos = true,
base = {
manaCostMore = 1.2,
elemInc = -25,
elementalInc = -25,
},
quality = {
chaosInc = 0.5,

View File

@@ -232,39 +232,39 @@ gems["Elemental Focus"] = {
manaCostMore = 1.3,
},
quality = {
elemInc = 0.5,
elementalInc = 0.5,
},
levels = {
[1] = { elemMore = 1.3, },
[2] = { elemMore = 1.31, },
[3] = { elemMore = 1.32, },
[4] = { elemMore = 1.33, },
[5] = { elemMore = 1.34, },
[6] = { elemMore = 1.35, },
[7] = { elemMore = 1.36, },
[8] = { elemMore = 1.37, },
[9] = { elemMore = 1.38, },
[10] = { elemMore = 1.39, },
[11] = { elemMore = 1.4, },
[12] = { elemMore = 1.41, },
[13] = { elemMore = 1.42, },
[14] = { elemMore = 1.43, },
[15] = { elemMore = 1.44, },
[16] = { elemMore = 1.45, },
[17] = { elemMore = 1.46, },
[18] = { elemMore = 1.47, },
[19] = { elemMore = 1.48, },
[20] = { elemMore = 1.49, },
[21] = { elemMore = 1.5, },
[22] = { elemMore = 1.51, },
[23] = { elemMore = 1.52, },
[24] = { elemMore = 1.53, },
[25] = { elemMore = 1.54, },
[26] = { elemMore = 1.55, },
[27] = { elemMore = 1.56, },
[28] = { elemMore = 1.57, },
[29] = { elemMore = 1.58, },
[30] = { elemMore = 1.59, },
[1] = { elementalMore = 1.3, },
[2] = { elementalMore = 1.31, },
[3] = { elementalMore = 1.32, },
[4] = { elementalMore = 1.33, },
[5] = { elementalMore = 1.34, },
[6] = { elementalMore = 1.35, },
[7] = { elementalMore = 1.36, },
[8] = { elementalMore = 1.37, },
[9] = { elementalMore = 1.38, },
[10] = { elementalMore = 1.39, },
[11] = { elementalMore = 1.4, },
[12] = { elementalMore = 1.41, },
[13] = { elementalMore = 1.42, },
[14] = { elementalMore = 1.43, },
[15] = { elementalMore = 1.44, },
[16] = { elementalMore = 1.45, },
[17] = { elementalMore = 1.46, },
[18] = { elementalMore = 1.47, },
[19] = { elementalMore = 1.48, },
[20] = { elementalMore = 1.49, },
[21] = { elementalMore = 1.5, },
[22] = { elementalMore = 1.51, },
[23] = { elementalMore = 1.52, },
[24] = { elementalMore = 1.53, },
[25] = { elementalMore = 1.54, },
[26] = { elementalMore = 1.55, },
[27] = { elementalMore = 1.56, },
[28] = { elementalMore = 1.57, },
[29] = { elementalMore = 1.58, },
[30] = { elementalMore = 1.59, },
}
}
gems["Elemental Proliferation"] = {

View File

@@ -1017,38 +1017,38 @@ gems["Weapon Elemental Damage"] = {
manaCostMore = 1.4,
},
quality = {
weapon_elemInc = 0.5,
weapon_elementalInc = 0.5,
},
levels = {
[1] = { weapon_elemMore = 1.4, },
[2] = { weapon_elemMore = 1.41, },
[3] = { weapon_elemMore = 1.42, },
[4] = { weapon_elemMore = 1.43, },
[5] = { weapon_elemMore = 1.44, },
[6] = { weapon_elemMore = 1.45, },
[7] = { weapon_elemMore = 1.46, },
[8] = { weapon_elemMore = 1.47, },
[9] = { weapon_elemMore = 1.48, },
[10] = { weapon_elemMore = 1.49, },
[11] = { weapon_elemMore = 1.5, },
[12] = { weapon_elemMore = 1.51, },
[13] = { weapon_elemMore = 1.52, },
[14] = { weapon_elemMore = 1.53, },
[15] = { weapon_elemMore = 1.54, },
[16] = { weapon_elemMore = 1.55, },
[17] = { weapon_elemMore = 1.56, },
[18] = { weapon_elemMore = 1.57, },
[19] = { weapon_elemMore = 1.58, },
[20] = { weapon_elemMore = 1.59, },
[21] = { weapon_elemMore = 1.6, },
[22] = { weapon_elemMore = 1.61, },
[23] = { weapon_elemMore = 1.62, },
[24] = { weapon_elemMore = 1.63, },
[25] = { weapon_elemMore = 1.64, },
[26] = { weapon_elemMore = 1.65, },
[27] = { weapon_elemMore = 1.66, },
[28] = { weapon_elemMore = 1.67, },
[29] = { weapon_elemMore = 1.68, },
[30] = { weapon_elemMore = 1.69, },
[1] = { weapon_elementalMore = 1.4, },
[2] = { weapon_elementalMore = 1.41, },
[3] = { weapon_elementalMore = 1.42, },
[4] = { weapon_elementalMore = 1.43, },
[5] = { weapon_elementalMore = 1.44, },
[6] = { weapon_elementalMore = 1.45, },
[7] = { weapon_elementalMore = 1.46, },
[8] = { weapon_elementalMore = 1.47, },
[9] = { weapon_elementalMore = 1.48, },
[10] = { weapon_elementalMore = 1.49, },
[11] = { weapon_elementalMore = 1.5, },
[12] = { weapon_elementalMore = 1.51, },
[13] = { weapon_elementalMore = 1.52, },
[14] = { weapon_elementalMore = 1.53, },
[15] = { weapon_elementalMore = 1.54, },
[16] = { weapon_elementalMore = 1.55, },
[17] = { weapon_elementalMore = 1.56, },
[18] = { weapon_elementalMore = 1.57, },
[19] = { weapon_elementalMore = 1.58, },
[20] = { weapon_elementalMore = 1.59, },
[21] = { weapon_elementalMore = 1.6, },
[22] = { weapon_elementalMore = 1.61, },
[23] = { weapon_elementalMore = 1.62, },
[24] = { weapon_elementalMore = 1.63, },
[25] = { weapon_elementalMore = 1.64, },
[26] = { weapon_elementalMore = 1.65, },
[27] = { weapon_elementalMore = 1.66, },
[28] = { weapon_elementalMore = 1.67, },
[29] = { weapon_elementalMore = 1.68, },
[30] = { weapon_elementalMore = 1.69, },
}
}

View File

@@ -62,7 +62,7 @@ end
function calcs:Save(xml)
self.modFlag = false
for k, v in pairs(self.input) do
local child = {elem = "Input", attrib = {name = k}}
local child = { elem = "Input", attrib = {name = k} }
if type(v) == "number" then
child.attrib.number = tostring(v)
elseif type(v) == "boolean" then

View File

@@ -286,26 +286,30 @@ local function endWatch(env, key)
end
end
-- Calculate damage for the given damage type at the given limit ('Min'/'Max')
local function calcDamage(env, output, damageType, limit, ...)
-- Calculate min/max damage of a hit for the given damage type
local function calcHitDamage(env, output, damageType, ...)
local modDB = env.modDB
local isAttack = (env.mode == "ATTACK")
local damageTypeLimit = damageType..limit
local damageTypeMin = damageType.."Min"
local damageTypeMax = damageType.."Max"
-- Calculate base value
local baseVal
-- Calculate base values
local baseMin, baseMax
if isAttack then
baseVal = getMiscVal(modDB, "weapon1", damageTypeLimit, 0) + sumMods(modDB, false, damageTypeLimit)
baseMin = getMiscVal(modDB, "weapon1", damageTypeMin, 0) + sumMods(modDB, false, damageTypeMin)
baseMax = getMiscVal(modDB, "weapon1", damageTypeMax, 0) + sumMods(modDB, false, damageTypeMax)
else
baseVal = getMiscVal(modDB, "skill", damageTypeLimit, 0) + sumMods(modDB, false, damageTypeLimit) * getMiscVal(modDB, "skill", "damageEff", 1)
local damageEffectiveness = getMiscVal(modDB, "skill", "damageEffectiveness", 1)
baseMin = getMiscVal(modDB, "skill", damageTypeMin, 0) + sumMods(modDB, false, damageTypeMin) * damageEffectiveness
baseMax = getMiscVal(modDB, "skill", damageTypeMax, 0) + sumMods(modDB, false, damageTypeMax) * damageEffectiveness
end
-- Build lists of applicable modifier names
local addElemental = isElemental[damageType]
local inc = { damageType.."Inc", "damageInc" }
local more = { damageType.."More", "damageMore" }
local damageTypeStr = "total_"..damageTypeLimit
local damageTypeStr = "total_"..damageType
for i = 1, select('#', ...) do
local dstElem = select(i, ...)
damageTypeStr = damageTypeStr..dstElem
@@ -316,8 +320,8 @@ local function calcDamage(env, output, damageType, limit, ...)
end
if addElemental then
-- Damage is elemental or is being converted to elemental damage, add global elemental modifiers
t_insert(inc, "elemInc")
t_insert(more, "elemMore")
t_insert(inc, "elementalInc")
t_insert(more, "elementalMore")
end
-- Combine modifiers
@@ -331,22 +335,24 @@ local function calcDamage(env, output, damageType, limit, ...)
output[damageTypeStrMore] = sumMods(modDB, true, unpack(more))
endWatch(env, damageTypeStrMore)
end
local modMult = (1 + output[damageTypeStrInc] / 100) * output[damageTypeStrMore]
-- Apply modifiers
local val = baseVal * (1 + output[damageTypeStrInc] / 100) * output[damageTypeStrMore]
-- Apply conversions
-- Calculate conversions
if startWatch(env, damageTypeStr.."Conv") then
local add = 0
local addMin, addMax = 0, 0
local mult = 1
for _, otherType in pairs(dmgTypeList) do
if otherType ~= damageType then
-- Damage added or converted from the other damage type
local gain = sumMods(modDB, false, otherType.."GainAs"..damageType, otherType.."ConvertTo"..damageType) / 100
if gain > 0 then
add = add + calcDamage(env, output, otherType, limit, damageType, ...) * gain
if damageType ~= "physical" then
-- Damage added or converted from the other damage type
local gain = sumMods(modDB, false, otherType.."GainAs"..damageType, otherType.."ConvertTo"..damageType) / 100
if gain > 0 then
local min, max = calcHitDamage(env, output, otherType, damageType, ...)
addMin = addMin + min * gain
addMax = addMax + max * gain
end
end
if not (...) then
if damageType ~= "chaos" and not (...) then
-- Some of this damage type is being converted to the other type
-- Not applied to damage being calculated for conversion
local convTo = sumMods(modDB, false, damageType.."ConvertTo"..otherType) / 100
@@ -356,7 +362,8 @@ local function calcDamage(env, output, damageType, limit, ...)
end
end
end
output[damageTypeStr.."ConvAdd"] = add
output[damageTypeStr.."ConvAddMin"] = addMin
output[damageTypeStr.."ConvAddMax"] = addMax
output[damageTypeStr.."ConvMult"] = mult
endWatch(env, damageTypeStr.."Conv")
end
@@ -364,14 +371,16 @@ local function calcDamage(env, output, damageType, limit, ...)
-- Apply resistances
if not (...) and startWatch(env, damageTypeStr.."Resist") then
if addElemental and env.mode_effective then
output[damageTypeStr.."EffMult"] = 1 - m_min(getMiscVal(modDB, "effective", "elemResist", 0), 75) / 100 + sumMods(modDB, false, damageType.."Pen", "elemPen") / 100
output[damageTypeStr.."EffMult"] = 1 - m_min(getMiscVal(modDB, "effective", "elementalResist", 0), 75) / 100 + sumMods(modDB, false, damageType.."Pen", "elementalPen") / 100
else
output[damageTypeStr.."EffMult"] = 1
end
endWatch(env, damageTypeStr.."Resist")
end
return (val + output[damageTypeStr.."ConvAdd"]) * output[damageTypeStr.."ConvMult"] * ((...) and 1 or sumMods(modDB, true, damageType.."FinalMore") * output[damageTypeStr.."EffMult"])
local finalMult = (...) and 1 or (output[damageTypeStr.."ConvMult"] * sumMods(modDB, true, damageType.."FinalMore") * output[damageTypeStr.."EffMult"])
return (baseMin * modMult + output[damageTypeStr.."ConvAddMin"]) * finalMult,
(baseMax * modMult + output[damageTypeStr.."ConvAddMax"]) * finalMult
end
-- Initialise environment with skill, input and spec data
@@ -512,7 +521,7 @@ local function initEnv(input, build)
local modDB = { }
env.modDB = modDB
env.classId = build.spec.curClassId
local classStats = build.tree.characterData[tostring(env.classId)]
local classStats = build.tree.characterData[env.classId]
for _, stat in pairs({"str","dex","int"}) do
mod_dbMerge(modDB, "", stat.."Base", classStats["base_"..stat])
end
@@ -521,6 +530,10 @@ local function initEnv(input, build)
mod_dbMerge(modDB, "", "manaBase", 34 + level * 6)
mod_dbMerge(modDB, "", "evasionBase", 53 + level * 3)
mod_dbMerge(modDB, "", "accuracyBase", (level - 1) * 2)
mod_dbMerge(modDB, "", "fireResistMax", 75)
mod_dbMerge(modDB, "", "coldResistMax", 75)
mod_dbMerge(modDB, "", "lightningResistMax", 75)
mod_dbMerge(modDB, "", "chaosResistMax", 75)
mod_dbMerge(modDB, "", "blockChanceMax", 75)
mod_dbMerge(modDB, "", "powerMax", 3)
mod_dbMerge(modDB, "power", "critChanceInc", 50)
@@ -959,13 +972,16 @@ local function calcPrimary(env, output)
endWatch(env, "otherDef")
end
if startWatch(env, "resist") then
output.total_fireResist = sumMods(modDB, false, "fireResist", "elemResist") - 60
output.total_coldResist = sumMods(modDB, false, "coldResist", "elemResist") - 60
output.total_lightningResist = sumMods(modDB, false, "lightningResist", "elemResist") - 60
for _, elem in pairs({"fire", "cold", "lightning"}) do
output["total_"..elem.."Resist"] = sumMods(modDB, false, elem.."Resist", "elementalResist") - 60
output["total_"..elem.."ResistMax"] = sumMods(modDB, false, elem.."ResistMax")
end
if getMiscVal(modDB, nil, "chaosInoculation", false) then
output.total_chaosResist = 100
output.total_chaosResistMax = 100
else
output.total_chaosResist = sumMods(modDB, false, "chaosResist") - 60
output.total_chaosResistMax = sumMods(modDB, false, "chaosResistMax") - 60
end
endWatch(env, "resist")
end
@@ -997,8 +1013,7 @@ local function calcPrimary(env, output)
for _, damageType in pairs(dmgTypeList) do
local min, max
if startWatch(env, damageType) then
min = calcDamage(env, output, damageType, "Min")
max = calcDamage(env, output, damageType, "Max")
min, max = calcHitDamage(env, output, damageType)
output["total_"..damageType.."Min"] = min
output["total_"..damageType.."Max"] = max
output["total_"..damageType.."Avg"] = (min + max) / 2
@@ -1132,7 +1147,7 @@ local function calcPrimary(env, output)
trap = env.skillSpaceFlags.trap,
mine = env.skillSpaceFlags.mine,
})
output["total_"..damageType.."Dot"] = baseVal * (1 + sumMods(modDB, false, "damageInc", damageType.."Inc", isElemental[damageType] and "elemInc" or nil) / 100) * sumMods(modDB, true, "damageMore", damageType.."More", isElemental[damageType] and "elemMore" or nil)
output["total_"..damageType.."Dot"] = baseVal * (1 + sumMods(modDB, false, "damageInc", damageType.."Inc", isElemental[damageType] and "elementalInc" or nil) / 100) * sumMods(modDB, true, "damageMore", damageType.."More", isElemental[damageType] and "elementalMore" or nil)
end
endWatch(env, damageType.."Dot")
end
@@ -1204,7 +1219,7 @@ local function calcPrimary(env, output)
mine = env.skillSpaceFlags.mine,
})
local baseVal = output.total_fireAvg * output.total_critEffect * 0.2
output.ignite_dps = baseVal * (1 + sumMods(modDB, false, "damageInc", "fireInc", "elemInc") / 100) * sumMods(modDB, true, "damageMore", "fireMore", "elemMore")
output.ignite_dps = baseVal * (1 + sumMods(modDB, false, "damageInc", "fireInc", "elementalInc") / 100) * sumMods(modDB, true, "damageMore", "fireMore", "elementalMore")
output.ignite_duration = 4 * (1 + getMiscVal(modDB, "ignite", "durationInc", 0) / 100)
end
endWatch(env, "ignite")
@@ -1409,7 +1424,7 @@ function control.buildOutput(input, output, build)
local weaponDPS = (getMiscVal(env.modDB, weapon, damageType.."Min", 0) + getMiscVal(env.modDB, weapon, damageType.."Max", 0)) / 2 * getMiscVal(env.modDB, weapon, "attackRate", 1)
output[weapon.."_damageDPS"] = (output[weapon.."damageDPS"] or 0) + weaponDPS
if isElemental[damageType] then
output[weapon.."_elemDPS"] = (output[weapon.."_elemDPS"] or 0) + weaponDPS
output[weapon.."_elementalDPS"] = (output[weapon.."_elementalDPS"] or 0) + weaponDPS
end
output[weapon.."_"..damageType.."DPS"] = weaponDPS
end

View File

@@ -5,121 +5,6 @@
--
local grid = ...
local s_format = string.format
local m_abs = math.abs
local m_floor = math.floor
local m_min = math.min
local m_max = math.max
local pairs = pairs
local ipairs = ipairs
function formatNumSep(val, dec)
dec = dec or 0
val = val or 0
local neg = val < 0
val = m_floor(m_abs(val * 10 ^ dec))
local str = string.reverse(s_format("%.0f", val))
if #str < (dec + 1) then
str = str .. string.rep("0", dec + 1 - #str)
end
local ret = ""
local pDec, pThou = dec, 3
for ci = 1, #str do
local c = str:sub(ci, ci)
ret = c .. ret
if pDec > 0 then
pDec = pDec - 1
if pDec == 0 then
ret = "." .. ret
end
else
pThou = pThou - 1
if pThou == 0 and ci < #str then
ret = "," .. ret
pThou = 3
end
end
end
return (neg and "-" or "") .. ret
end
function getFormatNumSep(dec)
return function(val)
return formatNumSep(val, dec)
end
end
function formatRound(val, dec)
dec = dec or 0
return m_floor(val * 10 ^ dec + 0.5) / 10 ^ dec
end
function getFormatRound(dec)
return function(val)
return formatRound(val, dec)
end
end
function formatPercent(val, dec)
dec = dec or 0
return m_floor((val or 0) * 100 * 10 ^ dec) / 10 ^ dec .. "%"
end
function getFormatPercent(dec)
return function(val)
return formatPercent(val, dec)
end
end
function formatSec(val)
if val == 0 then
return "0s"
else
return s_format("%.2fs", val)
end
end
local function mkField(x, y, fieldType, name, format, width, list)
local isFunc = type(format) == "function"
grid:SetElem(x, y, {
type = fieldType,
name = name,
format = (isFunc or not format) and "number" or format,
formatFunc = isFunc and format,
align = (format == "string" or format == "choice") and "LEFT" or "RIGHT",
width = width,
list = list,
})
end
local function mkFieldWithLabel(x, y, fieldType, label, name, format, width, list)
grid:SetElem(x, y, {
type = "label",
text = label,
align = "RIGHT"
})
if type(name) == "table" then
for i, n in ipairs(name) do
if n then
mkField(x + i, y, fieldType, n, format)
end
end
else
mkField(x + 1, y, fieldType, name, format, width, list)
end
end
local function mkFieldTable(x, y, tbl)
for i, v in ipairs(tbl) do
if #v == 1 then
if type(v[1]) == "table" then
for c, l in ipairs(v[1]) do
grid:SetElem(x + c - 1, y + i - 1, { type = "label", text = l, align = c == 1 and "RIGHT" or "CENTER" })
end
else
grid:SetElem(x, y + i - 1, { type = "label", text = v[1], align = "RIGHT" })
end
elseif #v > 1 then
mkFieldWithLabel(x, y + i - 1, unpack(v))
end
end
end
local function fieldNames(pre, suf, spec)
return {
spec:match("p") and (pre.."_physical"..suf) or false,
@@ -128,7 +13,7 @@ local function fieldNames(pre, suf, spec)
spec:match("f") and (pre.."_fire"..suf) or false,
spec:match("h") and (pre.."_chaos"..suf) or false,
spec:match("a") and (pre.."_damage"..suf) or false,
spec:match("e") and (pre.."_elem"..suf) or false
spec:match("e") and (pre.."_elemental"..suf) or false
}
end
@@ -201,7 +86,7 @@ columns[3] = {
{ "output", "Gear %:", "gear_energyShieldInc" },
{ "output", "Total:", "total_energyShield", formatRound },
{ "output", "Recharge rate:", "total_energyShieldRecharge", getFormatRound(1) },
{ "output", "Recharge delay:", "total_energyShieldRechargeDelay", formatSec },
{ "output", "Recharge delay:", "total_energyShieldRechargeDelay", getFormatSec(2) },
{ "output", "Regen:", "total_energyShieldRegen", getFormatRound(1) },
{ },
{ "Evasion:" },
@@ -261,7 +146,7 @@ columns[5] = {
{ "input", "Enemy is Chilled?", "condEff_EnemyChilled", "check" },
{ "input", "Enemy is Frozen?", "condEff_EnemyFrozen", "check" },
{ "input", "Enemy is Shocked?", "condEff_EnemyShocked", "check" },
{ "input", "Enemy Elem. Resist:", "effective_elemResist" },
{ "input", "Enemy Elem. Resist:", "effective_elementalResist" },
{ },
{ "Crit Chance:" },
}, {
@@ -321,9 +206,9 @@ columns[5] = {
}, {
{ },
{ "Stun:" },
{ "output", "Stun Duration on You:", "stun_duration", formatSec },
{ "output", "Block Duration on You:", "stun_blockDuration", formatSec },
{ "output", "Duration on Enemies:", "stun_enemyDuration", formatSec },
{ "output", "Stun Duration on You:", "stun_duration", getFormatSec(2) },
{ "output", "Block Duration on You:", "stun_blockDuration", getFormatSec(2) },
{ "output", "Duration on Enemies:", "stun_enemyDuration", getFormatSec(2) },
{ "output", "Enemy Threshold Mod:", "stun_enemyThresholdMod", formatPercent },
}
}
@@ -355,7 +240,7 @@ columns[7] = {
{ "output", "Weapon Min:", fieldNames("gear_weapon2", "Min", "plcfh") },
{ "output", "Weapon Max:", fieldNames("gear_weapon2", "Max", "plcfh") },
{ "output", "Weapon APS:", "gear_weapon2_attackRate" },
{ "output", "Weapon DPS:", fieldNames("weaponon2", "DPS", "plcfhae"), getFormatRound(2) },
{ "output", "Weapon DPS:", fieldNames("weapon2", "DPS", "plcfhae"), getFormatRound(2) },
}, {
flag = "attack",
{ "output", "Spec Attack Dmg %:", fieldNames("spec_attack", "Inc", "pa") },
@@ -406,7 +291,7 @@ columns[7] = {
{ "output", "Attack Damage:", fieldNames("total", "", "plcfha") },
{ "output", "Average Damage:", "total_avg", getFormatRound(1) },
{ "output", "Attack Speed:", "total_speed", getFormatRound(2) },
{ "output", "Attack Time:", "total_time", getFormatRound(2) },
{ "output", "Attack Time:", "total_time", getFormatSec(2) },
{ "output", "Attack DPS:", "total_dps", getFormatRound(1) },
}, {
flag = "spell",
@@ -417,7 +302,7 @@ columns[7] = {
{ "output", "Spell Damage:", fieldNames("total", "", "plcfha") },
{ "output", "Average Damage:", "total_avg", getFormatRound(1) },
{ "output", "Cast Rate:", "total_speed", getFormatRound(2) },
{ "output", "Cast Time:", "total_time", getFormatRound(2) },
{ "output", "Cast Time:", "total_time", getFormatSec(2) },
{ "output", "Spell DPS:", "total_dps", getFormatRound(1) },
}, {
flag = "cast",
@@ -438,10 +323,10 @@ columns[7] = {
flag = "duration",
{ "output", "Spec Duration %:", "spec_durationInc" },
{ "output", "Skill Duration Mod:", "total_durationMod", formatPercent },
{ "output", "Skill Duration:", "total_duration", formatSec },
{ "output", "Skill Duration:", "total_duration", getFormatSec(2) },
}, {
flag = "trap",
{ "output", "Trap Cooldown:", "total_trapCooldown", formatSec },
{ "output", "Trap Cooldown:", "total_trapCooldown", getFormatSec(2) },
}, {
flag = "dot",
{ "output", "Spec DoT Dmg %:", fieldNames("spec_dot", "Inc", "pfa") },
@@ -453,7 +338,7 @@ columns[7] = {
{ "output", "Gear Bleed Chance %:", "gear_bleedChance" },
{ "output", "Bleed Chance:", "bleed_chance", formatPercent },
{ "output", "Bleed DPS:", "bleed_dps", getFormatRound(1) },
{ "output", "Bleed Duration:", "bleed_duration", formatSec },
{ "output", "Bleed Duration:", "bleed_duration", getFormatSec(2) },
}, {
flag = "poison",
{ "output", "Spec Poison Chance %:", "spec_poisonChance" },
@@ -461,14 +346,14 @@ columns[7] = {
{ "output", "Spec Poison Dmg %:", "spec_poison_damageInc" },
{ "output", "Poison Chance:", "poison_chance", formatPercent },
{ "output", "Poison DPS:", "poison_dps", getFormatRound(1) },
{ "output", "Poison Duration:", "poison_duration", formatSec },
{ "output", "Poison Duration:", "poison_duration", getFormatSec(2) },
}, {
flag = "ignite",
{ "output", "Spec Ignite Chance %:", "spec_igniteChance" },
{ "output", "Gear Ignite Chance %:", "gear_igniteChance" },
{ "output", "Ignite Chance:", "ignite_chance", formatPercent },
{ "output", "Ignite DPS:", "ignite_dps", getFormatRound(1) },
{ "output", "Ignite Duration:", "ignite_duration", formatSec },
{ "output", "Ignite Duration:", "ignite_duration", getFormatSec(2) },
}, {
flag = "shock",
{ "output", "Spec Shock Chance %:", "spec_shockChance" },
@@ -484,6 +369,52 @@ columns[7] = {
}
}
local function mkField(x, y, fieldType, name, format, width, list)
local isFunc = type(format) == "function"
grid:SetElem(x, y, {
type = fieldType,
name = name,
format = (isFunc or not format) and "number" or format,
formatFunc = isFunc and format,
align = (format == "string" or format == "choice") and "LEFT" or "RIGHT",
width = width,
list = list,
})
end
local function mkFieldWithLabel(x, y, fieldType, label, name, format, width, list)
grid:SetElem(x, y, {
type = "label",
text = label,
align = "RIGHT"
})
if type(name) == "table" then
for i, n in ipairs(name) do
if n then
mkField(x + i, y, fieldType, n, format)
end
end
else
mkField(x + 1, y, fieldType, name, format, width, list)
end
end
local function mkFieldTable(x, y, tbl)
for i, v in ipairs(tbl) do
if #v == 1 then
if type(v[1]) == "table" then
for c, l in ipairs(v[1]) do
grid:SetElem(x + c - 1, y + i - 1, { type = "label", text = l, align = c == 1 and "RIGHT" or "CENTER" })
end
else
grid:SetElem(x, y + i - 1, { type = "label", text = v[1], align = "RIGHT" })
end
elseif #v > 1 then
mkFieldWithLabel(x, y + i - 1, unpack(v))
end
end
end
local curFlags
return function(newFlags)

View File

@@ -4,12 +4,19 @@
-- Libaries, functions and classes used by various modules.
--
local s_format = string.format
local m_abs = math.abs
local m_floor = math.floor
local m_min = math.min
local m_max = math.max
local pairs = pairs
local ipairs = ipairs
common = { }
-- External libraries
common.curl = require("lcurl")
common.xml = require("xml")
common.json = require("dkjson")
common.base64 = require("base64")
common.newEditField = require("simplegraphic/editfield")
@@ -185,3 +192,77 @@ function isValueInArray(tbl, val)
end
end
end
-- Formats 1234.56 -> "1,234.5" [dec=1]
function formatNumSep(val, dec)
dec = dec or 0
val = val or 0
local neg = val < 0
val = m_floor(m_abs(val * 10 ^ dec))
local str = string.reverse(s_format("%.0f", val))
if #str < (dec + 1) then
str = str .. string.rep("0", dec + 1 - #str)
end
local ret = ""
local pDec, pThou = dec, 3
for ci = 1, #str do
local c = str:sub(ci, ci)
ret = c .. ret
if pDec > 0 then
pDec = pDec - 1
if pDec == 0 then
ret = "." .. ret
end
else
pThou = pThou - 1
if pThou == 0 and ci < #str then
ret = "," .. ret
pThou = 3
end
end
end
return (neg and "-" or "") .. ret
end
function getFormatNumSep(dec)
return function(val)
return formatNumSep(val, dec)
end
end
-- Formats 1234.56 -> "1234.6" [dec=1]
function formatRound(val, dec)
dec = dec or 0
return m_floor(val * 10 ^ dec + 0.5) / 10 ^ dec
end
function getFormatRound(dec)
return function(val)
return formatRound(val, dec)
end
end
-- Formats 12.3456 -> "1234.5%" [dec=1]
function formatPercent(val, dec)
dec = dec or 0
return m_floor((val or 0) * 100 * 10 ^ dec) / 10 ^ dec .. "%"
end
function getFormatPercent(dec)
return function(val)
return formatPercent(val, dec)
end
end
-- Formats 1234.56 -> "1234.5s" [dec=1]
function formatSec(val, dec)
dec = dec or 0
if val == 0 then
return "0s"
else
return s_format("%."..dec.."fs", val)
end
end
function getFormatSec(dec)
return function(val)
return formatSec(val, dec)
end
end

View File

@@ -69,8 +69,8 @@ local modNameList = {
["fire and cold resistances"] = { "fireResist", "coldResist" },
["fire and lightning resistances"] = { "fireResist", "lightningResist" },
["cold and lightning resistances"] = { "coldResist", "lightningResist" },
["elemental resistances"] = "elemResist",
["all elemental resistances"] = "elemResist",
["elemental resistances"] = "elementalResist",
["all elemental resistances"] = "elementalResist",
["all maximum resistances"] = { "fireResistMax", "coldResistMax", "lightningResistMax", "chaosResistMax" },
["chaos resistance"] = "chaosResist",
-- Other defences
@@ -150,7 +150,7 @@ local modNameList = {
["cold damage"] = "cold{suf}",
["fire damage"] = "fire{suf}",
["chaos damage"] = "chaos{suf}",
["elemental damage"] = "elem{suf}",
["elemental damage"] = "elemental{suf}",
-- Other damage forms
["attack damage"] = "attack_damage{suf}",
["physical attack damage"] = "attack_physical{suf}",
@@ -369,8 +369,8 @@ local penTypes = {
["lightning resistance"] = "lightningPen",
["cold resistance"] = "coldPen",
["fire resistance"] = "firePen",
["elemental resistance"] = "elemPen",
["elemental resistances"] = "elemPen",
["elemental resistance"] = "elementalPen",
["elemental resistances"] = "elementalPen",
}
local regenTypes = {
["life"] = "lifeRegen{suf}",

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<PoBVersion>
<Version number="0.1.2"/>
<Version number="0.1.3"/>
<Source part="program" url="https://raw.githubusercontent.com/Openarl/PathOfBuilding/{branch}/"/>
<Source url="https://raw.githubusercontent.com/Openarl/PathOfBuilding/{branch}/runtime-win32.zip" part="runtime" platform="win32"/>
<File sha1="4a805f9ced3587237123c082d057a9c50f711023" name="Launch.lua" part="program"/>
@@ -10,20 +10,20 @@
<File sha1="1571a47a5549a9ae38407b88012fda39f7ad1ce0" name="Classes/EditControl.lua" part="program"/>
<File sha1="586f56a915d711d7804b0168db8d994aaca19b6d" name="Classes/Grid.lua" part="program"/>
<File sha1="1ab906e8f0c24bd930e9c1cd6d079f4304e3d277" name="Classes/ItemSlot.lua" part="program"/>
<File sha1="ff2c50b66fc2805a30c2967f247ed5c2913a3412" name="Classes/PassiveSpec.lua" part="program"/>
<File sha1="5596212c676dc4ca2994a312ca491b6c96a0179f" name="Classes/PassiveTree.lua" part="program"/>
<File sha1="169af3ed2b9a2600c82e599432980795c9e190dd" name="Classes/PassiveTreeView.lua" part="program"/>
<File sha1="4a21bdf084c0e7785c2fda508de3cb94b7727f35" name="Modules/Build.lua" part="program"/>
<File sha1="01ee4834929a8c2a44bd0610c9b3ef526d8c875f" name="Classes/PassiveSpec.lua" part="program"/>
<File sha1="b337152ae657ab03cb93817f5e5796f899c14335" name="Classes/PassiveTree.lua" part="program"/>
<File sha1="13422db2949e02aae643ed68fbea3c1ae52495b0" name="Classes/PassiveTreeView.lua" part="program"/>
<File sha1="7b2bdbfa90bd979fb482dc9d840320e0e792bd4d" name="Modules/Build.lua" part="program"/>
<File sha1="1506291a69e8af3d388ab8008d3dc82d0453e32a" name="Modules/BuildList.lua" part="program"/>
<File sha1="784a723e92de656044f9b88dadf64811a9e8fb6d" name="Modules/Calcs.lua" part="program"/>
<File sha1="38eabf8c6012372393cf30411489e1bfb363826b" name="Modules/CalcsControl.lua" part="program"/>
<File sha1="5f0b00ae2efcf03c8b82ce62fdf7fe90134da0ab" name="Modules/CalcsView.lua" part="program"/>
<File sha1="cf3b4d40ddc30dba0230bcda4e9aeb5056673b4c" name="Modules/Common.lua" part="program"/>
<File sha1="f81b486a27bd94ae757ced571a36b5cb4d839cac" name="Modules/Data.lua" part="program"/>
<File sha1="9e46da96c639b066a9532de87b2ed4f7c8aef697" name="Modules/Items.lua" part="program"/>
<File sha1="d268d29fc8c5b30af891407d57247be460cb8034" name="Modules/Calcs.lua" part="program"/>
<File sha1="02a55476013e5875b767a17c4d8bfda80ba1fe70" name="Modules/CalcsControl.lua" part="program"/>
<File sha1="5f2dd8dcd60bc09c2634c04ef69ab9070282d4c2" name="Modules/CalcsView.lua" part="program"/>
<File sha1="8944df19825f55025bcca7a6c0af574dcef19b23" name="Modules/Common.lua" part="program"/>
<File sha1="4165f7e1146638036884ffd182f43756edf960d6" name="Modules/Data.lua" part="program"/>
<File sha1="3d8e072a09ee3cb442a113ac3dfd3ff74c8c3473" name="Modules/Items.lua" part="program"/>
<File sha1="44febf05f971e01fd9999f420822e3c09b8b2662" name="Modules/ItemTools.lua" part="program"/>
<File sha1="0fed968aa81a9732b54941f8f3a8d9f5a959d223" name="Modules/Main.lua" part="program"/>
<File sha1="9a2e8a8ce4b31c9402ef1f7bd861f2bd76b11328" name="Modules/ModParser.lua" part="program"/>
<File sha1="a37e128f8ab4483c2c59f63462d3bc7628724f7a" name="Modules/Main.lua" part="program"/>
<File sha1="0ca3a6775f21727e710f8175fdc91046111c4820" name="Modules/ModParser.lua" part="program"/>
<File sha1="f7969bfa98360e358166e42bbfd9062ac0c9445f" name="Modules/ModTools.lua" part="program"/>
<File sha1="284687ef19bb15b9a49017667730ec49aa63fd9d" name="Items/axe.lua" part="program"/>
<File sha1="9d78e5f1764a1a89f7543891f2f35108a30fd85c" name="Items/body.lua" part="program"/>
@@ -39,13 +39,13 @@
<File sha1="ff034fe42b62a7ab55bb619d5cd358b4c7d3a274" name="Items/staff.lua" part="program"/>
<File sha1="2dcf60c634646074bcb9794c110d7083ab74034c" name="Items/sword.lua" part="program"/>
<File sha1="23db9109ec01ec9358863de987108ca5bd63439c" name="Items/wand.lua" part="program"/>
<File sha1="4ac46a6205b363f622a34268733ba4b4b4a90f64" name="Gems/act_dex.lua" part="program"/>
<File sha1="175c4c9a0187e18c96f86494cb525afdf9cbda96" name="Gems/act_int.lua" part="program"/>
<File sha1="105045dd0eba69d72e67996b9ec374c2fb9e9732" name="Gems/act_str.lua" part="program"/>
<File sha1="03ebebcc7d780fc1443e5c7f38cf153563f0ea70" name="Gems/other.lua" part="program"/>
<File sha1="8b49e057fcf802e27250bc24122e3fc71f4c415c" name="Gems/sup_dex.lua" part="program"/>
<File sha1="4c38722e014ce3472cbf8d7bfcdf748b36f807cb" name="Gems/sup_int.lua" part="program"/>
<File sha1="553f9cd7c51710a41144f393890ace22f2dbdd24" name="Gems/sup_str.lua" part="program"/>
<File sha1="bf90daec2c5fee3ef27a959b8b93146e6e6a4a2c" name="Gems/act_dex.lua" part="program"/>
<File sha1="72bdbd301b49b657cd4bf7a9c2468d1a033dabb2" name="Gems/act_int.lua" part="program"/>
<File sha1="08d700d0d7b5dd004ee3635a3dde409291c9aa12" name="Gems/act_str.lua" part="program"/>
<File sha1="df5a40a7a7f065e82e4dbc47142f5450a319bff1" name="Gems/other.lua" part="program"/>
<File sha1="c78ff4f02629e4721cc390fc376b2730af3e8186" name="Gems/sup_dex.lua" part="program"/>
<File sha1="893e9ea09205d1c6f13e71023309bd995086e057" name="Gems/sup_int.lua" part="program"/>
<File sha1="ca302ef3222e31d1bc209f872975ae90d6723ba1" name="Gems/sup_str.lua" part="program"/>
<File sha1="e7ee7e5b6388facb7bf568517ecc401590757df7" name="Assets/ring.png" part="program"/>
<File platform="win32" sha1="273e71232abe8540635417aa69bdf58804ef2eec" name="PathOfBuilding.exe" part="runtime"/>
<File platform="win32" sha1="914d42ca1836c5152a5f60aad23020a86bcb46d9" name="lua51.dll" part="runtime"/>
@@ -84,7 +84,6 @@
<File sha1="526edb97597a06ed0d9689107a4e130a22faf810" name="SimpleGraphic/Fonts/Liberation Sans.32.tga" part="runtime"/>
<File sha1="31fdef9c0e2ad46df47123e7d81f5e8d4fe399ed" name="SimpleGraphic/Fonts/Liberation Sans.tgf" part="runtime"/>
<File sha1="18629865eb351e483178b6524fb3935cbc9b8297" name="lua/base64.lua" part="runtime"/>
<File sha1="16cbc26080996d9da827df42cb0844a25518eeb3" name="lua/dkjson.lua" part="runtime"/>
<File sha1="31e325cd40a9c0234c6265689cf70b97ef676f20" name="lua/sha1.lua" part="runtime"/>
<File sha1="859e09104842f91a4aaa9a4d9fadf667535877e2" name="lua/xml.lua" part="runtime"/>
<File sha1="694ba648276e1308c7bc769389352a6c5e5e6408" name="lua/simplegraphic/editfield.lua" part="runtime"/>

Binary file not shown.