diff --git a/Classes/ButtonControl.lua b/Classes/ButtonControl.lua index fa1584cf..e9621b99 100644 --- a/Classes/ButtonControl.lua +++ b/Classes/ButtonControl.lua @@ -50,8 +50,19 @@ function ButtonClass:Draw() else SetDrawColor(0.33, 0.33, 0.33) end - local overSize = self.overSizeText or 0 - DrawString(x + width / 2, y + 2 - overSize, "CENTER_X", height - 4 + overSize * 2, "VAR", self:GetProperty("label")) + local label = self:GetProperty("label") + if label == "+" then + DrawImage(nil, x + width * 0.2, y + height * 0.45, width * 0.6, height * 0.1) + DrawImage(nil, x + width * 0.45, y + height * 0.2, width * 0.1, height * 0.6) + elseif label == "-" then + DrawImage(nil, x + width * 0.2, y + height * 0.45, width * 0.6, height * 0.1) + elseif label == "x" then + DrawImageQuad(nil, x + width * 0.1, y + height * 0.2, x + width * 0.2, y + height * 0.1, x + width * 0.9, y + height * 0.8, x + width * 0.8, y + height * 0.9) + DrawImageQuad(nil, x + width * 0.8, y + height * 0.1, x + width * 0.9, y + height * 0.2, x + width * 0.2, y + height * 0.9, x + width * 0.1, y + height * 0.8) + else + local overSize = self.overSizeText or 0 + DrawString(x + width / 2, y + 2 - overSize, "CENTER_X", height - 4 + overSize * 2, "VAR",label ) + end end function ButtonClass:OnKeyDown(key) diff --git a/Classes/CalcBreakdownControl.lua b/Classes/CalcBreakdownControl.lua new file mode 100644 index 00000000..119649b1 --- /dev/null +++ b/Classes/CalcBreakdownControl.lua @@ -0,0 +1,503 @@ +-- Path of Building +-- +-- Class: Calc Breakdown Control +-- Calculation breakdown control used in the Calcs tab +-- +local launch, main = ... + +local t_insert = table.insert +local m_max = math.max +local m_min = math.min +local band = bit.band + +local CalcBreakdownClass = common.NewClass("CalcBreakdown", "Control", "ControlHost", function(self, calcsTab) + self.Control() + self.ControlHost() + self.calcsTab = calcsTab + self.shown = false + self.nodeViewer = common.New("PassiveTreeView") + self.controls.scrollBar = common.New("ScrollBarControl", {"RIGHT",self,"RIGHT"}, -2, 0, 18, 0, 80, "VERTICAL", true) +end) + +function CalcBreakdownClass:IsMouseOver() + if not self:IsShown() then + return + end + if self:GetMouseOverControl() then + return true + end + local x, y = self:GetPos() + local width, height = self:GetSize() + local cursorX, cursorY = GetCursorPos() + return cursorX >= x and cursorY >= y and cursorX < x + width and cursorY < y + height +end + +function CalcBreakdownClass:SetBreakdownData(displayData, pinned) + self.pinned = pinned + if displayData == self.sourceData then + return + end + self.sourceData = displayData + self.shown = false + if not displayData then + return + end + + self.sectionList = wipeTable(self.sectionList) + + for _, sectionData in ipairs(displayData) do + if sectionData.breakdown then + self:AddBreakdownSection(sectionData) + elseif sectionData.modName then + self:AddModSection(sectionData) + end + end + + if #self.sectionList == 0 then + self.calcsTab:ClearDisplayStat() + return + end + self.shown = true + + self.contentWidth = 0 + local offset = 2 + for i, section in ipairs(self.sectionList) do + if section.type == "TEXT" then + section.width = 0 + for _, line in ipairs(section.lines) do + section.width = m_max(section.width, DrawStringWidth(section.textSize, "VAR", line) + 8) + end + section.height = #section.lines * section.textSize + 4 + elseif section.type == "TABLE" then + section.width = 4 + for _, col in pairs(section.colList) do + for _, row in pairs(section.rowList) do + if row[col.key] then + col.width = m_max(col.width or 0, DrawStringWidth(16, "VAR", col.label) + 6, DrawStringWidth(12, "VAR", row[col.key]) + 6) + end + end + if col.width then + section.width = section.width + col.width + end + end + section.height = #section.rowList * 14 + 20 + if section.label then + section.height = section.height + 16 + end + end + self.contentWidth = m_max(self.contentWidth, section.width) + section.offset = offset + offset = offset + section.height + 8 + end + self.contentHeight = offset - 6 +end + +function CalcBreakdownClass:AddBreakdownSection(sectionData) + local breakdown = self.calcsTab.gridEnv.breakdown[sectionData.breakdown] + if not breakdown then + return + end + if #breakdown > 0 then + t_insert(self.sectionList, { + type = "TEXT", + lines = breakdown, + textSize = 16 + }) + end + if breakdown.damageComponents and #breakdown.damageComponents > 0 then + local section = { + type = "TABLE", + rowList = breakdown.damageComponents, + colList = { + { label = "From", key = "source", right = true }, + { label = "Base", key = "base" }, + { label = "Inc/red", key = "inc" }, + { label = "More/less", key = "more" }, + { label = "Converted Damage", key = "convSrc" }, + { label = "Total", key = "total" }, + { label = "Conversion", key = "convDst" }, + } + } + t_insert(self.sectionList, section) + end + if breakdown.reservations and #breakdown.reservations > 0 then + local section = { + type = "TABLE", + rowList = breakdown.reservations, + colList = { + { label = "Skill", key = "skillName" }, + { label = "Base", key = "base" }, + { label = "MCM", key = "mult" }, + { label = "More/less", key = "more" }, + { label = "Inc/red", key = "inc" }, + { label = "Reservation", key = "total" }, + } + } + t_insert(self.sectionList, section) + end + if breakdown.slots and #breakdown.slots > 0 then + local section = { + type = "TABLE", + rowList = breakdown.slots, + colList = { + { label = "Base", key = "base", right = true }, + { label = "Inc/red", key = "inc" }, + { label = "More/less", key = "more" }, + { label = "Total", key = "total", right = true }, + { label = "Source", key = "source" }, + { label = "Name", key = "sourceLabel" }, + }, + } + t_insert(self.sectionList, section) + for _, row in pairs(section.rowList) do + if row.item then + row.sourceLabel = data.colorCodes[row.item.rarity]..row.item.name + row.sourceLabelTooltip = function() + self.calcsTab.build.itemsTab:AddItemTooltip(row.item, row.source) + return data.colorCodes[row.item.rarity], true + end + else + row.sourceLabel = row.sourceName + end + end + end +end + +function CalcBreakdownClass:AddModSection(sectionData) + local env = self.calcsTab.gridEnv + local build = self.calcsTab.build + local cfg = (sectionData.cfg and copyTable(env.mainSkill[sectionData.cfg.."Cfg"])) or { } + cfg.source = sectionData.modSource + cfg.tabulate = true + local rowList + local modDB = sectionData.enemy and env.enemyDB or env.modDB + if type(sectionData.modName) == "table" then + rowList = modDB:Sum(sectionData.modType, cfg, unpack(sectionData.modName)) + else + rowList = modDB:Sum(sectionData.modType, cfg, sectionData.modName) + end + if #rowList == 0 then + return + end + local section = { + type = "TABLE", + label = sectionData.label, + rowList = rowList, + colList = { + { label = "Value", key = "value" }, + { label = "Stat", key = "name" }, + { label = "Skill types", key = "flags" }, + { label = "Tags", key = "tags" }, + { label = "Source", key = "source" }, + { label = "Name", key = "sourceName" }, + }, + } + t_insert(self.sectionList, section) + if not sectionData.modType then + for i, row in pairs(rowList) do + row.index = i + end + table.sort(rowList, function(a, b) + if a.mod.type == b.mod.type then + return a.index < b.index + else + return a.mod.type < b.mod.type + end + end) + end + local sourceTotals = { } + if not sectionData.modSource then + local types = { } + local typeList = { } + for i, row in pairs(rowList) do + if not types[row.mod.type] then + types[row.mod.type] = true + t_insert(typeList, row.mod.type) + end + local sourceType = row.mod.source:match("[^:]+") + if not sourceTotals[sourceType] then + sourceTotals[sourceType] = { } + end + end + cfg.tabulate = false + for sourceType, lines in pairs(sourceTotals) do + cfg.source = sourceType + for _, modType in ipairs(typeList) do + if type(sectionData.modName) == "table" then + for _, modName in ipairs(sectionData.modName) do + local total = modDB:Sum(modType, cfg, modName) + if modType == "MORE" then + total = round((total - 1) * 100) + end + if total ~= 0 then + t_insert(lines, self:FormatModValue(total, modType) .. " " .. modName:gsub("(%l)(%u)","%1 %2")) + end + end + else + local total = modDB:Sum(modType, cfg, sectionData.modName) + if modType == "MORE" then + total = round((total - 1) * 100) + end + if total ~= 0 then + t_insert(lines, self:FormatModValue(total, modType)) + end + end + end + end + end + for _, row in pairs(rowList) do + if not sectionData.modType then + row.value = self:FormatModValue(row.value, row.mod.type) + else + section.colList[1].right = true + row.value = formatRound(row.value, 2) + end + if type(sectionData.modName) == "table" then + row.name = self:FormatModName(row.mod.name) + end + local sourceType = row.mod.source:match("[^:]+") + if not sectionData.modSource then + row.source = sourceType + row.sourceTooltip = function() + main:AddTooltipLine(16, "Total from "..sourceType..":") + for _, line in ipairs(sourceTotals[sourceType]) do + main:AddTooltipLine(14, line) + end + return nil, false + end + end + if sourceType == "Item" then + local itemId = row.mod.source:match("Item:(%d+):.+") + local item = build.itemsTab.list[tonumber(itemId)] + row.sourceName = data.colorCodes[item.rarity]..item.name + row.sourceNameTooltip = function() + build.itemsTab:AddItemTooltip(item, row.mod.sourceSlot) + return data.colorCodes[item.rarity], true + end + elseif sourceType == "Node" then + local nodeId = row.mod.source:match("Node:(%d+)") + if nodeId then + local node = build.spec.nodes[tonumber(nodeId)] + row.sourceName = node.dn + row.sourceNameNode = node + elseif row.mod.source == "Node:Jewel" then + row.sourceName = "Jewel conversion" + end + elseif sourceType == "Gem" then + row.sourceName = row.mod.source:match("Gem:(.+)") + end + if row.mod.flags ~= 0 or row.mod.keywordFlags ~= 0 then + local flagNames = { } + for flags, src in pairs({[row.mod.flags] = ModFlag, [row.mod.keywordFlags] = KeywordFlag}) do + for name, val in pairs(src) do + if band(flags, val) == val then + t_insert(flagNames, name) + end + end + end + table.sort(flagNames) + for _, name in ipairs(flagNames) do + row.flags = (row.flags and row.flags .. ", " or "") .. name + end + end + if row.mod.tagList[1] then + local baseVal = (row.mod.type == "BASE" and string.format("%+g", math.abs(row.mod.value)) or math.abs(row.mod.value).."%") + for _, tag in ipairs(row.mod.tagList) do + local desc + if tag.type == "Condition" then + desc = "Condition: "..self:FormatModName(tag.var) + elseif tag.type == "Multiplier" then + desc = baseVal.." per "..self:FormatModName(tag.var) + elseif tag.type == "PerStat" then + desc = baseVal.." per "..tag.div.." "..self:FormatModName(tag.stat) + elseif tag.type == "SkillName" then + desc = "Skill: "..tag.skillName + elseif tag.type == "SlotNumber" then + desc = "When in slot #"..tag.num + elseif tag.type == "GlobalEffect" then + desc = tag.effectType + else + desc = self:FormatModName(tag.type) + end + if desc then + row.tags = (row.tags and row.tags .. ", " or "") .. desc + end + end + end + end +end + +function CalcBreakdownClass:FormatModName(modName) + return modName:gsub("([%l%d])(%u)","%1 %2"):gsub("(%l)(%d)","%1 %2") +end + +function CalcBreakdownClass:FormatModValue(value, modType) + if modType == "BASE" then + return string.format("%+g base", value) + elseif modType == "INC" then + if value >= 0 then + return value.."% increased" + else + return -value.."% decreased" + end + elseif modType == "MORE" then + if value >= 0 then + return value.."% more" + else + return -value.."% less" + end + else + return value + end +end + +function CalcBreakdownClass:DrawBreakdownTable(viewPort, x, y, section) + local cursorX, cursorY = GetCursorPos() + local colX = x + 4 + if section.label then + DrawString(x + 2, y, "LEFT", 16, "VAR", "^7"..section.label..":") + y = y + 16 + end + for index, col in ipairs(section.colList) do + if col.width then + col.x = colX + if index > 1 then + SetDrawColor(0.5, 0.5, 0.5) + DrawImage(nil, colX - 2, y, 1, section.label and section.height - 16 or section.height) + end + SetDrawColor(1, 1, 1) + DrawString(colX, y + 2, "LEFT", 16, "VAR", col.label) + colX = colX + col.width + end + end + local rowY = y + 20 + for _, row in ipairs(section.rowList) do + SetDrawColor(0.5, 0.5, 0.5) + DrawImage(nil, x + 2, rowY - 1, section.width - 4, 1) + for _, col in ipairs(section.colList) do + if col.x and row[col.key] then + if col.right then + DrawString(col.x + col.width - 4, rowY + 1, "RIGHT_X", 12, "VAR", "^7"..row[col.key]) + else + DrawString(col.x, rowY + 1, "LEFT", 12, "VAR", "^7"..row[col.key]) + end + local ttFunc = row[col.key.."Tooltip"] + local ttNode = row[col.key.."Node"] + if (ttFunc or ttNode) and cursorY >= viewPort.y + 2 and cursorY < viewPort.y + viewPort.height - 2 and cursorX >= col.x and cursorY >= rowY and cursorX < col.x + col.width and cursorY < rowY + 14 then + SetDrawLayer(nil, 15) + SetDrawColor(0, 1, 0) + DrawImage(nil, col.x - 2, rowY - 1, col.width, 1) + DrawImage(nil, col.x - 2, rowY + 13, col.width, 1) + if ttFunc then + local color, center = ttFunc() + main:DrawTooltip(col.x, rowY, col.width, 12, viewPort, color, center) + elseif ttNode then + local viewerX = col.x + col.width + 5 + if viewPort.x + viewPort.width < viewerX + 304 then + viewerX = col.x - 309 + end + local viewerY = m_min(rowY, viewPort.y + viewPort.height - 304) + SetDrawColor(1, 1, 1) + DrawImage(nil, viewerX, viewerY, 304, 304) + local viewer = self.nodeViewer + viewer.zoom = 5 + viewer.zoomX = -ttNode.x / 11.85 + viewer.zoomY = -ttNode.y / 11.85 + SetViewport(viewerX + 2, viewerY + 2, 300, 300) + viewer:Draw(self.calcsTab.build, { x = 0, y = 0, width = 300, height = 300 }, { }) + SetDrawColor(1, 0, 0) + DrawImage(viewer.highlightRing, 135, 135, 30, 30) + SetViewport() + end + SetDrawLayer(nil, 10) + end + end + end + rowY = rowY + 14 + end +end + +function CalcBreakdownClass:Draw(viewPort) + local sourceData = self.sourceData + local scrollBar = self.controls.scrollBar + local width = self.contentWidth + local height = self.contentHeight + if self.contentHeight > viewPort.height then + width = self.contentWidth + scrollBar.width + height = viewPort.height + scrollBar.height = height - 4 + scrollBar:SetContentDimension(self.contentHeight - 4, viewPort.height - 4) + else + scrollBar:SetContentDimension(0, 0) + end + self.width = width + self.height = height + local x = sourceData.x + sourceData.width + 5 + local y = m_min(sourceData.y, viewPort.y + viewPort.height - height) + if x + width > viewPort.x + viewPort.width then + x = m_max(viewPort.x, sourceData.x - 5 - width) + end + self.x = x + self.y = y + SetDrawLayer(nil, 10) + SetDrawColor(0, 0, 0, 0.9) + DrawImage(nil, x + 2, y + 2, width - 4, height - 4) + SetDrawLayer(nil, 11) + if self.pinned then + SetDrawColor(0.25, 1, 0.25) + else + SetDrawColor(0.33, 0.66, 0.33) + end + DrawImage(nil, x, y, width, 2) + DrawImage(nil, x, y + height - 2, width, 2) + DrawImage(nil, x, y, 2, height) + DrawImage(nil, x + width - 2, y, 2, height) + SetDrawLayer(nil, 10) + self:DrawControls(viewPort) + y = y - scrollBar.offset + for i, section in ipairs(self.sectionList) do + local sectionY = y + section.offset + if section.type == "TEXT" then + local lineY = sectionY + 2 + for i, line in ipairs(section.lines) do + SetDrawColor(1, 1, 1) + DrawString(x + 4, lineY, "LEFT", section.textSize, "VAR", line) + lineY = lineY + section.textSize + end + elseif section.type == "TABLE" then + self:DrawBreakdownTable(viewPort, x, sectionY, section) + end + end + SetDrawLayer(nil, 0) +end + +function CalcBreakdownClass:OnKeyDown(key, doubleClick) + if not self:IsShown() or not self:IsEnabled() then + return + end + local mOverControl = self:GetMouseOverControl() + if mOverControl and mOverControl.OnKeyDown then + return mOverControl:OnKeyDown(key) + end + local mOver = self:IsMouseOver() + if key:match("BUTTON") then + if not mOver then + self.calcsTab:ClearDisplayStat() + self.shown = false + return + end + end + return self +end + +function CalcBreakdownClass:OnKeyUp(key) + if not self:IsShown() or not self:IsEnabled() then + return + end + if key == "WHEELDOWN" then + self.controls.scrollBar:Scroll(1) + elseif key == "WHEELUP" then + self.controls.scrollBar:Scroll(-1) + end + return self +end \ No newline at end of file diff --git a/Classes/CalcSectionControl.lua b/Classes/CalcSectionControl.lua new file mode 100644 index 00000000..27ea22ca --- /dev/null +++ b/Classes/CalcSectionControl.lua @@ -0,0 +1,252 @@ +-- Path of Building +-- +-- Class: Calc Section Control +-- Section control used in the Calcs tab +-- +local launch, main = ... + +local t_insert = table.insert + +local CalcSectionClass = common.NewClass("CalcSection", "Control", "ControlHost", function(self, calcsTab, width, id, group, label, col, data, updateFunc) + self.Control(calcsTab, 0, 0, width, 0) + self.ControlHost() + self.calcsTab = calcsTab + self.id = id + self.group = group + self.label = label + self.col = col + self.data = data + self.extra = data.extra + self.flag = data.flag + self.updateFunc = updateFunc + for _, data in ipairs(self.data) do + for _, colData in ipairs(data) do + if colData.control then + self.controls[colData.controlName] = colData.control + colData.control.shown = function() + return self.enabled and not self.collapsed and data.enabled + end + end + end + end + self.controls.toggle = common.New("ButtonControl", {"TOPRIGHT",self,"TOPRIGHT"}, -3, 3, 16, 16, function() + return self.collapsed and "+" or "-" + end, function() + self.collapsed = not self.collapsed + self.calcsTab.modFlag = true + end) + self.controls.toggle.shown = function() + return self.enabled + end + self.shown = function() + return self.enabled + end +end) + +function CalcSectionClass:IsMouseOver() + if not self:IsShown() then + return + end + if self:GetMouseOverControl() then + return true + end + local x, y = self:GetPos() + local width, height = self:GetSize() + local cursorX, cursorY = GetCursorPos() + local mOver = cursorX >= x and cursorY >= y and cursorX < x + width and cursorY < y + height + if mOver and not self.collapsed and self.enabled then + for _, data in ipairs(self.data) do + if data.enabled then + for _, colData in ipairs(data) do + if colData.control then + if colData.control:IsMouseOver() then + return mOver, colData + end + elseif cursorX >= colData.x and cursorY >= colData.y and cursorX < colData.x + colData.width and cursorY < colData.y + colData.height then + return mOver, colData + end + end + end + end + end + return mOver +end + +function CalcSectionClass:UpdateSize() + local skillFlags = self.calcsTab.gridEnv.mainSkill.skillFlags + self.enabled = not self.flag or skillFlags[self.flag] + if self.collapsed or not self.enabled then + self.height = 22 + return + end + local x, y = self:GetPos() + local width = self:GetSize() + self.height = 0 + self.enabled = false + local yOffset = 22 + for _, rowData in ipairs(self.data) do + rowData.enabled = not rowData.flag or skillFlags[rowData.flag] + if rowData.enabled then + self.enabled = true + local xOffset = 134 + for col, colData in ipairs(rowData) do + colData.xOffset = xOffset + colData.yOffset = yOffset + colData.width = self.data.colWidth or width - 136 + colData.height = 18 + xOffset = xOffset + colData.width + end + yOffset = yOffset + 18 + self.height = self.height + 18 + end + end + if self.enabled then + self.height = self.height + 24 + if self.updateFunc then + self:updateFunc() + end + else + self.height = 22 + end +end + +function CalcSectionClass:UpdatePos() + if self.collapsed or not self.enabled then + return + end + local x, y = self:GetPos() + for _, rowData in ipairs(self.data) do + if rowData.enabled then + for col, colData in ipairs(rowData) do + colData.x = x + colData.xOffset + colData.y = y + colData.yOffset + if colData.control then + colData.control.x = colData.x + 4 + colData.control.y = colData.y + 9 - colData.control.height/2 + end + end + end + end +end + +function CalcSectionClass:FormatStr(str, output, colData) + str = str:gsub("{output:([%a:]+)}", function(c) + return output[c] or "" + end) + str = str:gsub("{(%d+):output:([%a:]+)}", function(p, c) + return formatRound(output[c] or 0, tonumber(p)) + end) + str = str:gsub("{(%d+):mod:(%d+)}", function(p, n) + local sectionData = colData[tonumber(n)] + local env = self.calcsTab.gridEnv + local modCfg = (sectionData.cfg and env.mainSkill[sectionData.cfg.."Cfg"]) or { } + if sectionData.modSource then + modCfg.source = sectionData.modSource + end + local modVal + if type(sectionData.modName) == "table" then + modVal = env.modDB:Sum(sectionData.modType, modCfg, unpack(sectionData.modName)) + else + modVal = env.modDB:Sum(sectionData.modType, modCfg, sectionData.modName) + end + if sectionData.modType == "MORE" then + modVal = (modVal - 1) * 100 + end + return formatRound(modVal, tonumber(p)) + end) + return str +end + +function CalcSectionClass:Draw(viewPort) + local x, y = self:GetPos() + local width, height = self:GetSize() + local cursorX, cursorY = GetCursorPos() + local env = self.calcsTab.gridEnv + local output = self.calcsTab.gridOutput + SetDrawLayer(nil, -10) + SetDrawColor(self.col) + DrawImage(nil, x, y, width, height) + SetDrawColor(0.10, 0.10, 0.10) + DrawImage(nil, x + 2, y + 2, width - 4, height - 4) + if not self.enabled then + DrawString(x + 3, y + 3, "LEFT", 16, "VAR BOLD", "^8"..self.label) + else + DrawString(x + 3, y + 3, "LEFT", 16, "VAR BOLD", "^7"..self.label..":") + if self.extra then + local x = x + 3 + DrawStringWidth(16, "VAR BOLD", self.label) + 10 + DrawString(x, y + 3, "LEFT", 16, "VAR", self:FormatStr(self.extra, output)) + end + end + SetDrawColor(self.col) + DrawImage(nil, x + 2, y + 20, width - 4, 2) + SetDrawLayer(nil, 0) + self:DrawControls(viewPort) + if self.collapsed or not self.enabled then + return + end + local lineY = y + 22 + for _, rowData in ipairs(self.data) do + if rowData.enabled then + if rowData.label then + SetDrawColor(0, 0, 0) + DrawImage(nil, x + 2, lineY, 130, 18) + DrawString(x + 132, lineY + 1, "RIGHT_X", 16, "VAR", "^7"..rowData.label..":") + end + for col, colData in ipairs(rowData) do + SetDrawColor(self.col) + DrawImage(nil, colData.x, lineY, 2, colData.height) + if colData.format then + if cursorY >= viewPort.y and cursorY < viewPort.y + viewPort.height and cursorX >= colData.x and cursorY >= colData.y and cursorX < colData.x + colData.width and cursorY < colData.y + colData.height then + self.calcsTab:SetDisplayStat(colData) + end + if self.calcsTab.displayData == colData then + SetDrawColor(0.25, 1, 0.25) + DrawImage(nil, colData.x + 2, colData.y, colData.width - 2, colData.height) + SetDrawColor(0, 0, 0) + DrawImage(nil, colData.x + 3, colData.y + 1, colData.width - 4, colData.height - 2) + else + SetDrawColor(0, 0, 0) + DrawImage(nil, colData.x + 2, colData.y, colData.width - 2, colData.height) + end + local textSize = rowData.textSize or 14 + SetViewport(colData.x + 3, colData.y, colData.width - 4, colData.height) + DrawString(1, 9 - textSize/2, "LEFT", textSize, "VAR", "^7"..self:FormatStr(colData.format, output, colData)) + SetViewport() + end + end + lineY = lineY + 18 + end + end +end + +function CalcSectionClass:OnKeyDown(key, doubleClick) + if not self:IsShown() or not self:IsEnabled() then + return + end + local mOverControl = self:GetMouseOverControl() + if mOverControl and mOverControl.OnKeyDown then + return mOverControl:OnKeyDown(key) + end + local mOver, mOverComp = self:IsMouseOver() + if key:match("BUTTON") then + if not mOver then + return + end + if mOverComp then + self.calcsTab:SetDisplayStat(mOverComp, true) + return self.calcsTab.controls.breakdown + end + end + return +end + +function CalcSectionClass:OnKeyUp(key) + if not self:IsShown() or not self:IsEnabled() then + return + end + local mOverControl = self:GetMouseOverControl() + if mOverControl and mOverControl.OnKeyUp then + return mOverControl:OnKeyUp(key) + end + return +end \ No newline at end of file diff --git a/Classes/CalcsTab.lua b/Classes/CalcsTab.lua index a89be8b3..8ec2932b 100644 --- a/Classes/CalcsTab.lua +++ b/Classes/CalcsTab.lua @@ -10,24 +10,112 @@ local ipairs = ipairs local t_insert = table.insert local t_remove = table.remove local m_max = math.max +local m_min = math.min local m_floor = math.floor +local band = bit.band -local CalcsTabClass = common.NewClass("CalcsTab", "UndoHandler", "ControlHost", function(self, build) +local sectionData = LoadModule("Modules/CalcSections") + +local CalcsTabClass = common.NewClass("CalcsTab", "UndoHandler", "ControlHost", "Control", function(self, build) self.UndoHandler() self.ControlHost() + self.Control() self.build = build + self.calcs = LoadModule("Modules/Calcs") + self.input = { } - self.gridOutput = { } - self.mainOutput = { } + self.input.skill_number = 1 + self.input.skill_activeNumber = 1 + self.input.skill_part = 1 + self.input.misc_buffMode = "EFFECTIVE" - self.grid = common.New("Grid", self.input, self.gridOutput) + self.colWidth = 230 + self.sectionList = { } - self.calcs = LoadModule("Modules/Calcs", self.grid) + self:NewSection(3, "SkillSelect", 1, "View Skill Details", data.colorCodes.NORMAL, { + { label = "Socket Group", { controlName = "mainSocketGroup", + control = common.New("DropDownControl", nil, 0, 0, 300, 16, nil, function(index) + self.input.skill_number = index + self:AddUndoState() + self.build.buildFlag = true + end) + }, }, + { label = "Active Skill", { controlName = "mainSkill", + control = common.New("DropDownControl", nil, 0, 0, 300, 16, nil, function(index) + self.input.skill_activeNumber = index + self:AddUndoState() + self.build.buildFlag = true + end) + }, }, + { label = "Skill Part", flag = "multiPart", { controlName = "mainSkillPart", + control = common.New("DropDownControl", nil, 0, 0, 100, 16, nil, function(index) + self.input.skill_part = index + self:AddUndoState() + self.build.buildFlag = true + end) + }, }, + { label = "Calculation Mode", { + controlName = "mode", + control = common.New("DropDownControl", nil, 0, 0, 100, 16, { + {label="Unbuffed",val="UNBUFFED"}, + {label="Buffed",val="BUFFED"}, + {label="In Combat",val="COMBAT"}, + {label="Effective DPS",val="EFFECTIVE"} + }, function(_, sel) + self.input.misc_buffMode = sel.val + self:AddUndoState() + self.build.buildFlag = true + end, [[ +This controls the calculation of the stats shown in this tab. +The stats in the sidebar are always shown in Effective DPS mode, regardless of this setting. - self.controls.scrollBarH = common.New("ScrollBarControl", nil, 0, 0, 0, 18, 80, "HORIZONTAL", true) - self.controls.scrollBarV = common.New("ScrollBarControl", nil, 0, 0, 18, 0, 80, "VERTICAL", true) +Unbuffed: No auras, buffs, or other support skills or effects will apply. This is equivelant to standing in town. +Buffed: Aura and buff skills apply. This is equivelant to standing in your hideout with auras and buffs turned on. +In Combat: Charges and combat buffs such as Onslaught will also apply. This will show your character sheet stats in combat. +Effective DPS: Curses and enemy properties (such as resistances and status conditions) will also apply. This estimates your true DPS.]]) + }, }, + { label = "Aura and Buff Skills", flag = "buffs", textSize = 12, { format = "{output:BuffList}" }, }, + { label = "Combat Buffs", flag = "combat", textSize = 12, { format = "{output:CombatList}" }, }, + { label = "Curse Skills", flag = "effective", textSize = 12, { format = "{output:CurseList}" }, }, + }, function(section) + wipeTable(section.controls.mainSocketGroup.list) + for i, socketGroup in pairs(self.build.skillsTab.socketGroupList) do + section.controls.mainSocketGroup.list[i] = { val = i, label = socketGroup.displayLabel } + end + if #section.controls.mainSocketGroup.list == 0 then + section.controls.mainSocketGroup.list[1] = { val = 1, label = "" } + else + local mainSocketGroup = self.build.skillsTab.socketGroupList[self.input.skill_number] + wipeTable(section.controls.mainSkill.list) + for i, activeSkill in ipairs(mainSocketGroup.displaySkillList) do + t_insert(section.controls.mainSkill.list, { val = i, label = activeSkill.activeGem.name }) + end + section.controls.mainSkill.enabled = #mainSocketGroup.displaySkillList > 1 + if mainSocketGroup.displaySkillList[1] then + local activeGem = mainSocketGroup.displaySkillList[mainSocketGroup.mainActiveSkill].activeGem + if activeGem and activeGem.data.parts and #activeGem.data.parts > 1 then + section.controls.mainSkillPart.shown = true + wipeTable(section.controls.mainSkillPart.list) + for i, part in ipairs(activeGem.data.parts) do + t_insert(section.controls.mainSkillPart.list, { val = i, label = part.name }) + end + section.controls.mainSkillPart.sel = self.input.skill_part + end + end + end + section.controls.mainSocketGroup.sel = self.input.skill_number + section.controls.mode:SelByValue(self.input.misc_buffMode) + end) + + for _, section in ipairs(sectionData) do + self:NewSection(unpack(section)) + end + + self.controls.breakdown = common.New("CalcBreakdown", self) + + self.controls.scrollBar = common.New("ScrollBarControl", {"TOPRIGHT",self,"TOPRIGHT"}, 0, 0, 18, 0, 50, "VERTICAL", true) end) function CalcsTabClass:Load(xml, dbFileName) @@ -48,6 +136,17 @@ function CalcsTabClass:Load(xml, dbFileName) launch:ShowErrMsg("^1Error parsing '%s': 'Input' element missing number, string or boolean attribute", fileName) return true end + elseif node.elem == "Section" then + if not node.attrib.id then + launch:ShowErrMsg("^1Error parsing '%s': 'Section' element missing id attribute", fileName) + return true + end + for _, section in ipairs(self.sectionList) do + if section.id == node.attrib.id then + section.collapsed = (node.attrib.collapsed == "true") + break + end + end end end end @@ -66,32 +165,20 @@ function CalcsTabClass:Save(xml) end t_insert(xml, child) end + for _, section in ipairs(self.sectionList) do + t_insert(xml, { elem = "Section", attrib = { + id = section.id, + collapsed = tostring(section.collapsed), + } }) + end self.modFlag = false end function CalcsTabClass:Draw(viewPort, inputEvents) - local gridViewPort = { x = viewPort.x, y = viewPort.y } - if self.grid.realWidth > viewPort.width then - gridViewPort.height = viewPort.height - 18 - else - gridViewPort.height = viewPort.height - end - if self.grid.realHeight > viewPort.height then - gridViewPort.width = viewPort.width - 18 - else - gridViewPort.width = viewPort.width - end - self.controls.scrollBarH.x = gridViewPort.x - self.controls.scrollBarH.y = gridViewPort.y + gridViewPort.height - self.controls.scrollBarH.width = gridViewPort.width - self.controls.scrollBarH:SetContentDimension(self.grid.realWidth, viewPort.width) - self.controls.scrollBarV.x = gridViewPort.x + gridViewPort.width - self.controls.scrollBarV.y = gridViewPort.y - self.controls.scrollBarV.height = gridViewPort.height - self.controls.scrollBarV:SetContentDimension(self.grid.realHeight, viewPort.height) - - self.grid.offX = viewPort.x - self.controls.scrollBarH.offset - self.grid.offY = viewPort.y - self.controls.scrollBarV.offset + self.x = viewPort.x + self.y = viewPort.y + self.width = viewPort.width + self.height = viewPort.height for id, event in ipairs(inputEvents) do if event.type == "KeyDown" then @@ -104,37 +191,153 @@ function CalcsTabClass:Draw(viewPort, inputEvents) end end end - self.grid:ProcessInput(inputEvents, gridViewPort) self:ProcessControlsInput(inputEvents, viewPort) - - if self.grid.changeFlag then - self.grid.changeFlag = false - self:AddUndoState() - self.build.buildFlag = true + for id, event in ipairs(inputEvents) do + if event.type == "KeyUp" then + if event.key == "WHEELDOWN" then + self.controls.scrollBar:Scroll(1) + elseif event.key == "WHEELUP" then + self.controls.scrollBar:Scroll(-1) + end + end end main:DrawBackground(viewPort) - self.grid:Draw() + local baseX = viewPort.x + 4 + local baseY = viewPort.y + 4 + local maxCol = m_floor(viewPort.width / (self.colWidth + 8)) + local colY = { } + local maxY = 0 + for _, section in ipairs(self.sectionList) do + section:UpdateSize() + if section.enabled then + local col + if section.group == 1 then + col = 1 + local minY = colY[col] or baseY + for c = 2, 3 do + if (colY[c] or baseY) < minY then + col = c + minY = colY[c] or baseY + end + end + elseif section.group == 2 then + col = 4 + elseif section.group == 3 then + if maxCol >= 5 then + col = 5 + end + end + if col then + section.x = baseX + (self.colWidth + 8) * (col - 1) + section.y = colY[col] or baseY + for c = col, col + section.widthCols - 1 do + colY[c] = section.y + section.height + 8 + end + maxY = m_max(maxY, colY[col]) + end + end + end + if maxCol < 5 then + for c = 1, 3 do + colY[c] = m_max(colY[1], colY[2], colY[3])--maxY + end + for _, section in ipairs(self.sectionList) do + if section.enabled and section.group == 3 then + local col = 4 + if colY[col] + section.height + 4 >= m_max(viewPort.y + viewPort.height, maxY) then + local minY = colY[col] + for c = 3, 1, -1 do + if colY[c] < minY then + col = c + minY = colY[c] + end + end + end + section.x = baseX + (self.colWidth + 8) * (col - 1) + section.y = colY[col] + colY[col] = section.y + section.height + 8 + maxY = m_max(maxY, colY[col]) + end + end + end + self.controls.scrollBar.height = viewPort.height + self.controls.scrollBar:SetContentDimension(maxY - baseY, viewPort.height) + for _, section in ipairs(self.sectionList) do + section.y = section.y - self.controls.scrollBar.offset + section:UpdatePos() + end + + if not self.displayPinned then + self.displayData = nil + end self:DrawControls(viewPort) + + if self.displayData then + if self.displayPinned and not self.selControl then + self:SelectControl(self.controls.breakdown) + end + else + self.controls.breakdown:SetBreakdownData() + end +end + +function CalcsTabClass:NewSection(width, ...) + local section = common.New("CalcSection", self, width * self.colWidth + 8 * (width - 1), ...) + section.widthCols = width + t_insert(self.controls, section) + t_insert(self.sectionList, section) +end + +function CalcsTabClass:ClearDisplayStat() + self.displayData = nil + self.displayPinned = nil + self.controls.breakdown:SetBreakdownData() +end + +function CalcsTabClass:SetDisplayStat(displayData, pin) + if not displayData or (not pin and self.displayPinned) then + return + end + self.displayData = displayData + self.displayPinned = pin + self.controls.breakdown:SetBreakdownData(displayData, pin) end -- Build the calculation output tables function CalcsTabClass:BuildOutput() self.powerBuildFlag = true - wipeTable(self.mainOutput) - self.calcs.buildOutput(self.build, self.input, self.mainOutput, "MAIN") - wipeTable(self.gridOutput) - self.calcs.buildOutput(self.build, self.input, self.gridOutput, "GRID") + --[[ + local start = GetTime() + SetProfiling(true) + for i = 1, 1000 do + wipeTable(self.mainOutput) + self.calcs.buildOutput(self.build, self.mainOutput, "MAIN") + end + SetProfiling(false) + ConPrintf("Calc time: %d msec", GetTime() - start) + --]] + self.mainEnv = self.calcs.buildOutput(self.build, "MAIN") + self.mainOutput = self.mainEnv.output + self.gridEnv = self.calcs.buildOutput(self.build, "GRID") + self.gridOutput = self.gridEnv.output + self.gridBreakdown = self.gridEnv.breakdown + + if self.displayData then + self.controls.breakdown:SetBreakdownData() + self.controls.breakdown:SetBreakdownData(self.displayData, self.displayPinned) + end + -- Retrieve calculator functions - self.nodeCalculator = { self.calcs.getNodeCalculator(self.build, self.input) } - self.itemCalculator = { self.calcs.getItemCalculator(self.build, self.input) } + self.nodeCalculator = { self.calcs.getNodeCalculator(self.build) } + self.itemCalculator = { self.calcs.getItemCalculator(self.build) } end --- Estimate the offensive and defensive of all unallocated nodes +-- Estimate the offensive and defensive power of all unallocated nodes function CalcsTabClass:BuildPower() local calcFunc, calcBase = self:GetNodeCalculator() local cache = { } @@ -142,17 +345,17 @@ function CalcsTabClass:BuildPower() for _, node in pairs(self.build.spec.nodes) do node.power = wipeTable(node.power) if not node.alloc and node.modKey ~= "" then - --if not cache[node.modKey] then + if not cache[node.modKey] then cache[node.modKey] = calcFunc({node}) - --end + end local output = cache[node.modKey] - node.power.dps = (output.total_combinedDPS - calcBase.total_combinedDPS) / calcBase.total_combinedDPS - node.power.def = (output.total_life - calcBase.total_life) / m_max(2000, calcBase.total_life) * 0.5 + - (output.total_armour - calcBase.total_armour) / m_max(10000, calcBase.total_armour) + - (output.total_energyShield - calcBase.total_energyShield) / m_max(2000, calcBase.total_energyShield) + - (output.total_evasion - calcBase.total_evasion) / m_max(10000, calcBase.total_evasion) + - (output.total_lifeRegen - calcBase.total_lifeRegen) / 500 + - (output.total_energyShieldRegen - calcBase.total_energyShieldRegen) / 1000 + node.power.dps = (output.CombinedDPS - calcBase.CombinedDPS) / calcBase.CombinedDPS + node.power.def = (output.LifeUnreserved - calcBase.LifeUnreserved) / m_max(3000, calcBase.Life) * 0.5 + + (output.Armour - calcBase.Armour) / m_max(10000, calcBase.Armour) + + (output.EnergyShield - calcBase.EnergyShield) / m_max(3000, calcBase.EnergyShield) + + (output.Evasion - calcBase.Evasion) / m_max(10000, calcBase.Evasion) + + (output.LifeRegen - calcBase.LifeRegen) / 500 + + (output.EnergyShieldRegen - calcBase.EnergyShieldRegen) / 1000 if node.path then self.powerMax.dps = m_max(self.powerMax.dps or 0, node.power.dps) self.powerMax.def = m_max(self.powerMax.def or 0, node.power.def) diff --git a/Classes/ConfigTab.lua b/Classes/ConfigTab.lua new file mode 100644 index 00000000..45c6b152 --- /dev/null +++ b/Classes/ConfigTab.lua @@ -0,0 +1,302 @@ +-- Path of Building +-- +-- Module: Config Tab +-- Configuration tab for the current build. +-- +local launch, main = ... + +local t_insert = table.insert +local m_max = math.max + +local varList = { + { section = "General" }, + { var = "enemyLevel", type = "number", label = "Enemy Level:", tooltip = "This overrides the default enemy level used to estimate your hit and evade chances.\nThe default level is your character level, capped at 84, which is the same value\nused in-game to calculate the stats on the character sheet." }, + { var = "conditionLowLife", type = "check", label = "Are you always on Low Life?", tooltip = "You will automatically be considered to be on Low Life if you have at least 65% life reserved,\nbut you can use this option to force it if necessary.", apply = function(val, modList, enemyModList) + modList:NewMod("Misc", "LIST", { type = "Condition", var = "LowLife" }, "Config") + end }, + { var = "conditionFullLife", type = "check", label = "Are you always on Full Life?", tooltip = "You will automatically be considered to be on Full Life if you have Chaos Innoculation,\nbut you can use this option to force it if necessary.", apply = function(val, modList, enemyModList) + modList:NewMod("Misc", "LIST", { type = "Condition", var = "FullLife" }, "Config") + end }, + { section = "When In Combat" }, + { var = "usePowerCharges", type = "check", label = "Do you use Power Charges?" }, + { var = "useFrenzyCharges", type = "check", label = "Do you use Frenzy Charges?" }, + { var = "useEnduranceCharges", type = "check", label = "Do you use Endurance Charges?" }, + { var = "buffOnslaught", type = "check", label = "Do you have Onslaught?", tooltip = "In addition to allowing any 'while you have Onslaught' modifiers to apply,\nthis will enable the Onslaught buff itself.", apply = function(val, modList, enemyModList) + modList:NewMod("Misc", "LIST", { type = "Condition", var = "Onslaught" }, "Config", { type = "Condition", var = "Combat" }) + end }, + { var = "buffPhasing", type = "check", label = "Do you have Phasing?", apply = function(val, modList, enemyModList) + modList:NewMod("Misc", "LIST", { type = "Condition", var = "Phasing" }, "Config", { type = "Condition", var = "Combat" }) + end }, + { var = "buffFortify", type = "check", label = "Do you have Fortify?", apply = function(val, modList, enemyModList) + modList:NewMod("Misc", "LIST", { type = "Condition", var = "Fortify" }, "Config", { type = "Condition", var = "Combat" }) + end }, + { var = "conditionUsingFlask", type = "check", label = "Do you have a Flask active?", apply = function(val, modList, enemyModList) + modList:NewMod("Misc", "LIST", { type = "Condition", var = "UsingFlask" }, "Config", { type = "Condition", var = "Combat" }) + end }, + { var = "buffPendulum", type = "check", label = "Is Pendulum of Destruction active?", ifNode = 57197, apply = function(val, modList, enemyModList) + modList:NewMod("Misc", "LIST", { type = "Condition", var = "PendulumOfDestruction" }, "Config", { type = "Condition", var = "Combat" }) + end }, + { section = "For Effective DPS" }, + { var = "conditionEnemyCursed", type = "check", label = "Is the enemy Cursed?", tooltip = "Your enemy will automatically be considered to be Cursed if you have at least one curse enabled,\nbut you can use this option to force it if necessary.", apply = function(val, modList, enemyModList) + modList:NewMod("Misc", "LIST", { type = "Condition", var = "EnemyCursed" }, "Config", { type = "Condition", var = "Effective" }) + end }, + { var = "conditionEnemyBleeding", type = "check", label = "Is the enemy Bleeding?", apply = function(val, modList, enemyModList) + modList:NewMod("Misc", "LIST", { type = "Condition", var = "EnemyBleeding" }, "Config", { type = "Condition", var = "Effective" }) + end }, + { var = "conditionEnemyPoisoned", type = "check", label = "Is the enemy Poisoned?", apply = function(val, modList, enemyModList) + modList:NewMod("Misc", "LIST", { type = "Condition", var = "EnemyPoisoned" }, "Config", { type = "Condition", var = "Effective" }) + end }, + { var = "conditionEnemyBurning", type = "check", label = "Is the enemy Burning?", apply = function(val, modList, enemyModList) + modList:NewMod("Misc", "LIST", { type = "Condition", var = "EnemyBurning" }, "Config", { type = "Condition", var = "Effective" }) + end }, + { var = "conditionEnemyIgnited", type = "check", label = "Is the enemy Ignited?", tooltip = "This also implies that the enemy is Burning.", apply = function(val, modList, enemyModList) + modList:NewMod("Misc", "LIST", { type = "Condition", var = "EnemyIgnited" }, "Config", { type = "Condition", var = "Effective" }) + end }, + { var = "conditionEnemyChilled", type = "check", label = "Is the enemy Chilled?", apply = function(val, modList, enemyModList) + modList:NewMod("Misc", "LIST", { type = "Condition", var = "EnemyChilled" }, "Config", { type = "Condition", var = "Effective" }) + end }, + { var = "conditionEnemyFrozen", type = "check", label = "Is the enemy Frozen?", apply = function(val, modList, enemyModList) + modList:NewMod("Misc", "LIST", { type = "Condition", var = "EnemyFrozen" }, "Config", { type = "Condition", var = "Effective" }) + end }, + { var = "conditionEnemyShocked", type = "check", label = "Is the enemy Shocked?", tooltip = "In addition to allowing any 'against Shocked Enemies' modifiers to apply,\nthis will apply Shock's Damage Taken modifier to the enemy.", apply = function(val, modList, enemyModList) + modList:NewMod("Misc", "LIST", { type = "Condition", var = "EnemyShocked" }, "Config", { type = "Condition", var = "Effective" }) + end }, + { var = "enemyIsBoss", type = "check", label = "Is the enemy a Boss?", tooltip = "This adds the following modifiers:\n60% less Effect of your Curses\n+30% to enemy Elemental Resistances\n+15% to enemy Chaos Resistance", apply = function(val, modList, enemyModList) + enemyModList:NewMod("CurseEffect", "MORE", -60, "Boss") + enemyModList:NewMod("ElementalResist", "BASE", 30, "Boss") + enemyModList:NewMod("ChaosResist", "BASE", 15, "Boss") + end }, + { var = "enemyPhysicalReduction", type = "number", label = "Enemy Phys. Damage Reduction:", apply = function(val, modList, enemyModList) + enemyModList:NewMod("PhysicalDamageReduction", "INC", val, "Config") + end }, + { var = "enemyFireResist", type = "number", label = "Enemy Fire Resistance:", apply = function(val, modList, enemyModList) + enemyModList:NewMod("FireResist", "BASE", val, "Config") + end }, + { var = "enemyColdResist", type = "number", label = "Enemy Cold Resistance:", apply = function(val, modList, enemyModList) + enemyModList:NewMod("ColdResist", "BASE", val, "Config") + end }, + { var = "enemyLightningResist", type = "number", label = "Enemy Lightning Resistance:", apply = function(val, modList, enemyModList) + enemyModList:NewMod("LightningResist", "BASE", val, "Config") + end }, + { var = "enemyChaosResist", type = "number", label = "Enemy Chaos Resistance:", apply = function(val, modList, enemyModList) + enemyModList:NewMod("ChaosResist", "BASE", val, "Config") + end }, +} + +local ConfigTabClass = common.NewClass("ConfigTab", "UndoHandler", "ControlHost", "Control", function(self, build) + self.UndoHandler() + self.ControlHost() + self.Control() + + self.build = build + + self.input = { } + + self.sectionList = { } + self.varControls = { } + + self:BuildModList() + + local lastSection + for _, varData in ipairs(varList) do + if varData.section then + if lastSection then + lastSection = common.New("SectionControl", {"TOPLEFT",lastSection,"BOTTOMLEFT"}, 0, 18, 300, 0, varData.section) + else + lastSection = common.New("SectionControl", {"TOPLEFT",self,"TOPLEFT"}, 10, 18, 300, 0, varData.section) + end + lastSection.varControlList = { } + lastSection.height = function(self) + local height = 20 + for _, varControl in pairs(self.varControlList) do + if varControl:IsShown() then + height = height + 20 + end + end + return m_max(height, 32) + end + t_insert(self.sectionList, lastSection) + t_insert(self.controls, lastSection) + else + local control + if varData.type == "check" then + control = common.New("CheckBoxControl", {"TOPLEFT",lastSection,"TOPLEFT"}, 216, 0, 18, nil, function(state) + self.input[varData.var] = state + self:AddUndoState() + self:BuildModList() + self.build.buildFlag = true + end) + elseif varData.type == "number" then + control = common.New("EditControl", {"TOPLEFT",lastSection,"TOPLEFT"}, 216, 0, 50, 18, "", nil, "[%-%d]", 4, function(buf) + self.input[varData.var] = tonumber(buf) + self:AddUndoState() + self:BuildModList() + self.build.buildFlag = true + end) + end + control.tooltip = varData.tooltip + if varData.ifNode then + control.shown = function() + return self.build.spec.allocNodes[varData.ifNode] + end + end + t_insert(self.controls, common.New("LabelControl", {"RIGHT",control,"LEFT"}, -4, 2, 0, 14, "^7"..varData.label)) + self.varControls[varData.var] = control + t_insert(self.controls, control) + t_insert(lastSection.varControlList, control) + end + end +end) + +function ConfigTabClass:Load(xml, fileName) + for _, node in ipairs(xml) do + if node.elem == "Input" then + if not node.attrib.name then + launch:ShowErrMsg("^1Error parsing '%s': 'Input' element missing name attribute", fileName) + return true + end + if node.attrib.number then + self.input[node.attrib.name] = tonumber(node.attrib.number) + elseif node.attrib.string then + self.input[node.attrib.name] = node.attrib.string + elseif node.attrib.boolean then + self.input[node.attrib.name] = node.attrib.boolean == "true" + else + launch:ShowErrMsg("^1Error parsing '%s': 'Input' element missing number, string or boolean attribute", fileName) + return true + end + end + end + self:BuildModList() + self:UpdateControls() + self:ResetUndo() +end + +function ConfigTabClass:Save(xml) + for k, v in pairs(self.input) do + local child = { elem = "Input", attrib = {name = k} } + if type(v) == "number" then + child.attrib.number = tostring(v) + elseif type(v) == "boolean" then + child.attrib.boolean = tostring(v) + else + child.attrib.string = tostring(v) + end + t_insert(xml, child) + end + self.modFlag = false +end + +function ConfigTabClass:UpdateControls() + for var, control in pairs(self.varControls) do + if control._className == "EditControl" then + control:SetText(tostring(self.input[var] or "")) + elseif control._className == "CheckBoxControl" then + control.state = self.input[var] + end + end +end + +function ConfigTabClass:Draw(viewPort, inputEvents) + self.x = viewPort.x + self.y = viewPort.y + self.width = viewPort.width + self.height = viewPort.height + + for id, event in ipairs(inputEvents) do + if event.type == "KeyDown" then + if event.key == "z" and IsKeyDown("CTRL") then + self:Undo() + self.build.buildFlag = true + elseif event.key == "y" and IsKeyDown("CTRL") then + self:Redo() + self.build.buildFlag = true + end + end + end + + self:ProcessControlsInput(inputEvents, viewPort) + + for _, section in ipairs(self.sectionList) do + local y = 14 + for _, varControl in ipairs(section.varControlList) do + if varControl:IsEnabled() then + varControl.y = y + y = y + 20 + end + end + end + + main:DrawBackground(viewPort) + + self:DrawControls(viewPort) +end + +function ConfigTabClass:BuildModList() + local modList = common.New("ModList") + self.modList = modList + local enemyModList = common.New("ModList") + self.enemyModList = enemyModList + local input = self.input + for _, varData in ipairs(varList) do + ConPrintf("%s", varData.var) + if varData.apply then + if varData.type == "check" then + if input[varData.var] then + varData.apply(true, modList, enemyModList) + end + elseif varData.type == "number" then + if input[varData.var] and input[varData.var] ~= 0 then + varData.apply(input[varData.var], modList, enemyModList) + end + end + end + end +end + +function ConfigTabClass:ImportCalcSettings() + local input = self.input + local gridInput = self.build.calcsTab.input + local function import(old, new) + input[new] = gridInput[old] + gridInput[old] = nil + end + import("Cond_LowLife", "conditionLowLife") + import("Cond_FullLife", "conditionFullLife") + import("buff_power", "usePowerCharges") + import("buff_frenzy", "useFrenzyCharges") + import("buff_endurance", "useEnduranceCharges") + import("CondBuff_Onslaught", "buffOnslaught") + import("CondBuff_Phasing", "buffPhasing") + import("CondBuff_Fortify", "buffFortify") + import("CondBuff_UsingFlask", "conditionUsingFlask") + import("buff_pendulum", "usePendulum") + import("CondEff_EnemyCursed", "conditionEnemyCursed") + import("CondEff_EnemyBleeding", "conditionEnemyBleeding") + import("CondEff_EnemyPoisoned", "conditionEnemyPoisoned") + import("CondEff_EnemyBurning", "conditionEnemyBurning") + import("CondEff_EnemyIgnited", "conditionEnemyIgnited") + import("CondEff_EnemyChilled", "conditionEnemyChilled") + import("CondEff_EnemyFrozen", "conditionEnemyFrozen") + import("CondEff_EnemyShocked", "conditionEnemyShocked") + import("effective_physicalRed", "enemyPhysicalReduction") + import("effective_fireResist", "enemyFireResist") + import("effective_coldResist", "enemyColdResist") + import("effective_lightningResist", "enemyLightningResist") + import("effective_chaosResist", "enemyChaosResist") + import("effective_enemyIsBoss", "enemyIsBoss") + self:BuildModList() + self:UpdateControls() +end + +function ConfigTabClass:CreateUndoState() + return copyTable(self.input) +end + +function ConfigTabClass:RestoreUndoState(state) + wipeTable(self.input) + for k, v in pairs(state) do + self.input[k] = v + end + self:UpdateControls() +end diff --git a/Classes/ControlHost.lua b/Classes/ControlHost.lua index 0e3f0be3..73fd74da 100644 --- a/Classes/ControlHost.lua +++ b/Classes/ControlHost.lua @@ -55,8 +55,9 @@ function ControlHostClass:ProcessControlsInput(inputEvents, viewPort) elseif isMouseInRegion(viewPort) then local mOverControl = self:GetMouseOverControl(viewPort) if mOverControl and mOverControl.OnKeyUp then - mOverControl:OnKeyUp(event.key) - inputEvents[id] = nil + if mOverControl:OnKeyUp(event.key) then + inputEvents[id] = nil + end end end elseif event.type == "Char" then diff --git a/Classes/DropDownControl.lua b/Classes/DropDownControl.lua index 44f9e3c6..0eb33f54 100644 --- a/Classes/DropDownControl.lua +++ b/Classes/DropDownControl.lua @@ -9,11 +9,12 @@ local ipairs = ipairs local m_min = math.min local m_max = math.max -local DropDownClass = common.NewClass("DropDownControl", "Control", function(self, anchor, x, y, width, height, list, selFunc) +local DropDownClass = common.NewClass("DropDownControl", "Control", function(self, anchor, x, y, width, height, list, selFunc, tooltip) self.Control(anchor, x, y, width, height) self.list = list or { } self.sel = 1 self.selFunc = selFunc + self.tooltip = tooltip end) function DropDownClass:SelByValue(val) @@ -62,7 +63,7 @@ function DropDownClass:IsMouseOver() return mOver, mOverComp end -function DropDownClass:Draw() +function DropDownClass:Draw(viewPort) local x, y = self:GetPos() local width, height = self:GetSize() local enabled = self:IsEnabled() @@ -107,6 +108,12 @@ function DropDownClass:Draw() end if enabled then SetDrawColor(1, 1, 1) + if (mOver or self.dropped) and self.tooltip then + SetDrawLayer(nil, 10) + main:AddTooltipLine(14, self.tooltip) + main:DrawTooltip(x, y, width, height + (self.dropped and dropExtra or 0), viewPort) + SetDrawLayer(nil, 0) + end else SetDrawColor(0.66, 0.66, 0.66) end @@ -176,10 +183,12 @@ function DropDownClass:OnKeyUp(key) self:SetSel(math.floor((cursorY - y - height) / (height - 4)) + 1) self.dropped = false end - elseif key == "WHEELDOWN" then + elseif key == "WHEELDOWN" or key == "DOWN" then self:SetSel(self.sel + 1) - elseif key == "WHEELUP" then + return self + elseif key == "WHEELUP" or key == "UP" then self:SetSel(self.sel - 1) + return self end return self.dropped and self end diff --git a/Classes/EditControl.lua b/Classes/EditControl.lua index be505b79..ba9bc68f 100644 --- a/Classes/EditControl.lua +++ b/Classes/EditControl.lua @@ -30,11 +30,9 @@ local EditClass = common.NewClass("EditControl", "ControlHost", "Control", funct self.controls.buttonDown = common.New("ButtonControl", {"RIGHT",self,"RIGHT"}, -2, 0, buttonSize, buttonSize, "-", function() self:OnKeyUp("DOWN") end) - self.controls.buttonDown.overSizeText = 6 self.controls.buttonUp = common.New("ButtonControl", {"RIGHT",self.controls.buttonDown,"LEFT"}, 0, 0, buttonSize, buttonSize, "+", function() self:OnKeyUp("UP") end) - self.controls.buttonUp.overSizeText = 6 end end) @@ -140,6 +138,12 @@ function EditClass:Draw(viewPort) if not enabled then return end + if mOver and self.tooltip then + main:AddTooltipLine(16, self:GetProperty("tooltip")) + SetDrawLayer(nil, 100) + main:DrawTooltip(x, y, width, height, viewPort) + SetDrawLayer(nil, 0) + end SetViewport(textX, textY, width - 2 - (textX - x), textHeight) if not self.hasFocus then DrawString(0, 0, "LEFT", textHeight, "VAR", self.inactiveCol..self.buf) diff --git a/Classes/GemSelectControl.lua b/Classes/GemSelectControl.lua index 4dff5e69..5a488e33 100644 --- a/Classes/GemSelectControl.lua +++ b/Classes/GemSelectControl.lua @@ -53,8 +53,8 @@ function GemSelectClass:BuildList(buf) local added = { } for i, pattern in ipairs(patternList) do local matchList = { } - for name in pairs(data.gems) do - if name ~= "_default" and not added[name] and (" "..name:lower()):match(pattern) then + for name, data in pairs(data.gems) do + if not data.hidden and not added[name] and (" "..name:lower()):match(pattern) then t_insert(matchList, name) added[name] = true end @@ -65,8 +65,8 @@ function GemSelectClass:BuildList(buf) end end else - for name in pairs(data.gems) do - if name ~= "_default" then + for name, data in pairs(data.gems) do + if not data.hidden then t_insert(self.list, name) end t_sort(self.list) diff --git a/Classes/Grid.lua b/Classes/Grid.lua deleted file mode 100644 index 4f3afdc4..00000000 --- a/Classes/Grid.lua +++ /dev/null @@ -1,518 +0,0 @@ --- Path of Building --- --- Class: Grid --- Display grid for the calculations breakdown view --- -local launch = ... - -local pairs = pairs -local m_max = math.max -local m_floor = math.floor -local t_insert = table.insert - -local cfg = { } -cfg.gridHeight = 18 -cfg.defGridWidth = 50 -cfg.defBorderCol = { 0.1, 0.1, 0.1 } -cfg.defCellCol = { 0, 0, 0 } - -local function alignCellText(elem) - if elem.align == "RIGHT" then - return elem.grid.offX + elem.x + elem.grid[elem.gx].width - 2, "RIGHT_X" - elseif elem.align == "CENTER" then - return elem.grid.offX + elem.x + elem.grid[elem.gx].width / 2, "CENTER_X" - else - return elem.grid.offX + elem.x + 2, "LEFT" - end -end - -local function formatCellText(fn, val) - if fn then - local errMsg, text = PCall(fn, val) - if errMsg then - launch:ShowErrMsg("Error formatting cell: %s", errMsg) - return "" - else - return text - end - else - return tostring(val) - end -end - -local elemTypes = {} - -elemTypes.input = {} -elemTypes.input.__index = elemTypes.input -elemTypes.input.borderCol = { 0.9, 0.9, 0.9 } -elemTypes.input.cellCol = { 0.1, 0.1, 0.4 } -function elemTypes.input:Init() - local grid = self.grid - if self.format == "choice" then - self.dropDown = common.New("DropDownControl", nil, 0, 0, 0, 0, self.list, function(index, val) - if type(val) == "table" then - val = val.val - end - if val ~= grid.input[self.name] then - grid.input[self.name] = val - grid.changeFlag = true - end - end) - self.dropDown.sel = 1 - if not grid.input[self.name] then - self.dropDown.selFunc(1, self.list[1]) - end - end -end -function elemTypes.input:Draw() - local grid = self.grid - if self.format == "check" then - local x, align = alignCellText(self) - DrawString(x, grid.offY + self.y + 2, align, cfg.gridHeight - 4, "VAR", grid.input[self.name] and "^x33FF33Yes" or "^xFF3333No") - elseif grid.focus == self then - if self.edit then - self.edit:Draw() - else - self.dropDown:Draw() - end - elseif grid.input[self.name] then - local x, align = alignCellText(self) - local val = grid.input[self.name] - if self.format == "choice" and type(self.dropDown.list[self.dropDown.sel]) == "table" then - self.dropDown:SelByValue(val) - val = self.dropDown.list[self.dropDown.sel].label - end - DrawString(x, grid.offY + self.y + 2, align, cfg.gridHeight - 4, "VAR", "^7"..formatCellText(self.formatFunc, val)) - end -end -function elemTypes.input:OnKeyDown(key, doubleClick) - local grid = self.grid - if grid.focus == self then - if key == "RETURN" or key == "TAB" then - if self.edit then - local newVal = #self.edit.buf and self.edit.buf or nil - if self.format == "number" then - newVal = tonumber((newVal:gsub(",",""):gsub("%*","e"))) - end - if newVal ~= grid.input[self.name] then - grid.input[self.name] = newVal - grid.changeFlag = true - end - end - grid:SetFocus() - grid:MoveSel(key == "TAB" and "RIGHT" or "DOWN", true) - elseif self.edit then - if not self.edit:OnKeyDown(key) then - grid:SetFocus() - end - elseif self.dropDown then - if not self.dropDown:OnKeyDown(key) then - grid:SetFocus() - end - end - elseif key == "RIGHTBUTTON" or (key == "LEFTBUTTON" and doubleClick) then - if self.format == "check" then - grid.input[self.name] = not grid.input[self.name] - grid.changeFlag = true - elseif self.format == "choice" then - grid:SetFocus(self) - else - grid:SetFocus(self) - self.edit:SetText(grid.input[self.name] or "") - end - elseif key == "WHEELUP" then - if self.format == "number" then - grid.input[self.name] = (grid.input[self.name] or 0) + 1 - grid.changeFlag = true - end - elseif key == "WHEELDOWN" then - if self.format == "number" then - grid.input[self.name] = (grid.input[self.name] or 0) - 1 - grid.changeFlag = true - end - elseif self.edit then - if key == "c" and IsKeyDown("CTRL") then - if grid.input[self.name] then - Copy(tostring(grid.input[self.name])) - end - elseif key == "v" and IsKeyDown("CTRL") then - local newVal = Paste() - if newVal then - if self.format == "number" then - newVal = tonumber(newVal) - end - if newVal ~= grid.input[self.name] then - grid.input[self.name] = newVal - grid.changeFlag = true - end - end - end - end -end -function elemTypes.input:OnKeyUp(key) - local grid = self.grid - if grid.focus == self then - if self.dropDown then - if not self.dropDown:OnKeyUp(key) then - grid:SetFocus() - end - else - self.edit:OnKeyUp(key) - end - end -end -function elemTypes.input:OnChar(key) - local grid = self.grid - if self.format == "check" then - if key == " " then - grid.input[self.name] = not grid.input[self.name] - grid.changeFlag = true - end - return - elseif self.format == "choice" then - return - end - if key == "\r" then - return - elseif not grid.focus and key == "\b" then - grid.input[self.name] = nil - grid.changeFlag = true - return - elseif key:match("%c") then - return - end - if not grid.focus then - if self.format == "number" and key == "+" then - grid.input[self.name] = (grid.input[self.name] or 0) + 1 - grid.changeFlag = true - return - end - grid:SetFocus(self) - end - self.edit:OnChar(key) -end -function elemTypes.input:OnFocusGained() - local grid = self.grid - if self.format == "choice" then - self.dropDown.x = grid.offX + self.x - self.dropDown.y = grid.offY + self.y - self.dropDown.width = grid:GetElemWidth(self) - self.dropDown.height = cfg.gridHeight - self.dropDown:SelByValue(grid.input[self.name]) - self.dropDown:OnKeyDown("LEFTBUTTON") - else - local fmtFilter = { number = "[-%d%.e,*]", string = "." } - self.edit = common.New("EditControl", nil, 0, 0, 0, 0, "", nil, fmtFilter[self.format]) - self.edit.x = grid.offX + self.x - self.edit.y = grid.offY + self.y - self.edit.width = grid:GetElemWidth(self) - self.edit.height = cfg.gridHeight - self.edit.hasFocus = true - end -end -function elemTypes.input:OnFocusLost() - self.edit = nil - if self.dropDown then - self.dropDown.dropped = false - end -end - -elemTypes.output = {} -elemTypes.output.__index = elemTypes.output -elemTypes.output.borderCol = { 0.7, 0.7, 0.7 } -function elemTypes.output:Draw() - local grid = self.grid - if grid.output[self.name] then - local x, align = alignCellText(self) - DrawString(x, grid.offY + self.y + 2, align, cfg.gridHeight - 4, self.font or "VAR", "^7"..formatCellText(self.formatFunc, grid.output[self.name])) - end -end -function elemTypes.output:OnKeyDown(key) - local grid = self.grid - if key == "c" and IsKeyDown("CTRL") and grid.output[self.name] then - Copy(tostring(grid.output[self.name])) - end -end - -elemTypes.label = {} -elemTypes.label.__index = elemTypes.label -function elemTypes.label:Draw() - local grid = self.grid - local x, align = alignCellText(self) - DrawString(x, grid.offY + self.y + 2, align, cfg.gridHeight - 4, "VAR BOLD", "^xD0D5D0"..self.text) -end - -local GridClass = common.NewClass("Grid", function(self, input, output) - self.input = input - self.output = output - self:Clear() -end) - -function GridClass:Draw() - local x = self.offX - local h = cfg.gridHeight - for gx = 1, self.width do - local y = self.offY - local w = self[gx].width - for gy = 1, self.height do - local elem = self[gx][gy] - if not elem or elem.gx == gx then - local ew = w - if elem and elem.width and elem.width > 1 then - for i = 1, elem.width - 1 do - ew = ew + self[gx + i].width - end - end - SetDrawColor(unpack(elem and elem.borderCol or cfg.defBorderCol)) - DrawImage(nil, x, y, ew, h) - SetDrawColor(unpack(elem and elem.cellCol or cfg.defCellCol)) - DrawImage(nil, x + 1, y + 1, ew - 2, h - 2) - end - y = y + cfg.gridHeight - end - x = x + self[gx].width - end - for gx = 1, self.width do - for gy = 1, self.height do - local elem = self[gx][gy] - if elem and elem.gx == gx and elem.Draw and elem ~= self.focus then - elem:Draw() - end - end - end - if self.focus then - self.focus:Draw() - end - if self.sel and self.sel.gx then - local selX, selY = self.sel.gx, self.sel.gy - SetDrawColor(1, 1, 1) - local x, y = self.sel.x + self.offX, self.sel.y + self.offY - local w, h = self:GetElemWidth(self.sel), cfg.gridHeight - DrawImage(nil, x - 2, y - 2, w + 4, 4) - DrawImage(nil, x - 2, y + h - 2, w + 4, 4) - DrawImage(nil, x - 2, y - 2, 4, h + 4) - DrawImage(nil, x + w - 2, y - 2, 4, h + 4) - end -end - -function GridClass:ProcessInput(inputEvents, viewPort) - for id, event in pairs(inputEvents) do - if event.type == "KeyDown" then - self:OnKeyDown(event.key, event.doubleClick, viewPort) - elseif event.type == "KeyUp" then - self:OnKeyUp(event.key) - elseif event.type == "Char" then - self:OnChar(event.key) - end - end -end - -function GridClass:OnKeyDown(key, doubleClick, viewPort) - if self.focus then - if self.focus.OnKeyDown then - self.focus:OnKeyDown(key, doubleClick) - end - elseif key == "LEFTBUTTON" or key == "RIGHTBUTTON" then - self.sel = nil - local cursorX, cursorY = GetCursorPos() - local relX = cursorX - self.offX - local relY = cursorY - self.offY - if cursorX >= viewPort.x and cursorY >= viewPort.y and cursorX < viewPort.x + viewPort.width and cursorY < viewPort.y + viewPort.height and relX < self.realWidth and relY < self.realHeight then - local gy = math.floor(relY / cfg.gridHeight) + 1 - local x = 0 - for gx = 1, self.width do - if relX >= x and relX < x + self[gx].width then - if self[gx][gy] then - local elem = self[gx][gy] - self.sel = elem - if elem.OnKeyDown then - elem:OnKeyDown(key, doubleClick) - end - end - return - end - x = x + self[gx].width - end - end - elseif key == "LEFT" or key == "RIGHT" or key == "UP" or key == "DOWN" then - self:MoveSel(key) - elseif self.sel then - if self.sel.OnKeyDown then - self.sel:OnKeyDown(key) - end - end -end - -function GridClass:OnKeyUp(key) - if self.focus then - if key == "ESCAPE" then - self:SetFocus() - elseif self.focus.OnKeyUp then - self.focus:OnKeyUp(key) - end - elseif key == "ESCAPE" then - self.sel = nil - elseif self.sel then - if self.sel.OnKeyUp then - self.sel:OnKeyUp(key) - end - end -end - -function GridClass:OnChar(key) - if self.focus then - if self.focus.OnChar then - self.focus:OnChar(key) - end - elseif self.sel then - if self.sel.OnChar then - self.sel:OnChar(key) - end - end -end - -function GridClass:Clear() - for gx in ipairs(self) do - self[gx] = nil - end - self.width = 1 - self.height = 1 - self[1] = { width = cfg.defGridWidth, x = 0 } - self:CalcCoords() -end - -function GridClass:SetSize(w, h) - if w < self.width then - for gx = w + 1, self.width do - self[gx] = nil - end - end - self.width = w - self.height = h - for gx = 1, w do - self[gx] = self[gx] or { width = cfg.defGridWidth } - end - self:CalcCoords() -end - -function GridClass:CheckSize() - local mx, my = 1, 1 - for gx = 1, self.width do - for gy = 1, self.height do - if self[gx][gy] then - mx = math.max(mx, gx + self[gx][gy].width - 1) - my = math.max(my, gy) - end - end - end - self:SetSize(mx, my) -end - -function GridClass:CalcCoords() - local x = 0 - for gx = 1, self.width do - self[gx].x = x - for gy = 1, self.height do - if self[gx][gy] and self[gx][gy].gx == gx then - self[gx][gy].x = x - end - end - x = x + self[gx].width - end - self.realWidth = x - self.realHeight = self.height * cfg.gridHeight -end - -function GridClass:SetColWidth(gx, sz) - if self[gx] then - self[gx].width = sz - end - self:CalcCoords() -end - -function GridClass:GetElem(gx, gy) - return self[gx] and self[gx][gy] -end - -function GridClass:SetElem(gx, gy, elem) - if elem then - elem.grid = self - elem.gx = gx - elem.gy = gy - elem.width = elem.width or 1 - if gx + elem.width - 1 > self.width then - self:SetSize(gx + elem.width - 1, self.height) - end - if gy > self.height then - self:SetSize(self.width, gy) - end - for i = 1, elem.width do - self[gx + i - 1][gy] = elem - end - elem.x = self[gx].x - elem.y = (gy - 1) * cfg.gridHeight - if elemTypes[elem.type] then - setmetatable(elem, elemTypes[elem.type]) - end - if elem.Init then - elem:Init() - end - elseif self:GetElem(gx, gy) then - self[gx][gy] = nil - self:CheckSize() - end -end - -function GridClass:GetElemWidth(elem) - local width = 0 - for gx = elem.gx, elem.gx + elem.width - 1 do - width = width + self[gx].width - end - return width -end - -function GridClass:SetFocus(elem) - if self.focus and self.focus.OnFocusLost then - self.focus:OnFocusLost() - end - self.focus = elem - if self.focus and self.focus.OnFocusGained then - self.focus:OnFocusGained() - end -end - -function GridClass:MoveSel(dir, force) - if not self.sel or not self.sel.gx then - return - end - local selX, selY = self.sel.gx, self.sel.gy - local s, elem, i - if dir == "LEFT" or dir == "RIGHT" then - if dir == "LEFT" then - s, elem, i = selX - 1, 1, -1 - else - s, elem, i = selX + 1, self.width, 1 - end - for gx = s, elem, i do - if self[gx][selY] then - self.sel = self[gx][selY] - return - end - end - else - if dir == "UP" then - s, elem, i = selY - 1, 1, -1 - else - s, elem, i = selY + 1, self.height, 1 - end - for gy = s, elem, i do - if self[selX][gy] then - self.sel = self[selX][gy] - return - end - end - end - if force then - self.sel = nil - end -end \ No newline at end of file diff --git a/Classes/ImportTab.lua b/Classes/ImportTab.lua index 8f81f876..a9fa9d36 100644 --- a/Classes/ImportTab.lua +++ b/Classes/ImportTab.lua @@ -95,7 +95,8 @@ You can get this from your web browser's cookies while logged into the Path of E self.controls.charImportItems.enabled = function() return self.charImportMode == "SELECTCHAR" end - self.controls.charDone = common.New("ButtonControl", {"TOPLEFT",self.controls.charImportHeader,"BOTTOMLEFT"}, 0, 30, 60, 20, "Done", function() + self.controls.charBanditNote = common.New("LabelControl", {"TOPLEFT",self.controls.charImportHeader,"BOTTOMLEFT"}, 0, 14, 200, 14, "^7Tip: After you finish importing a character, make sure you update the bandit choices,\nas these cannot be imported.") + self.controls.charDone = common.New("ButtonControl", {"TOPLEFT",self.controls.charImportHeader,"BOTTOMLEFT"}, 0, 60, 60, 20, "Done", function() self.charImportMode = "GETACCOUNTNAME" self.charImportStatus = "Idle" end) diff --git a/Classes/ItemDBControl.lua b/Classes/ItemDBControl.lua index 663f1b1b..2aa30c63 100644 --- a/Classes/ItemDBControl.lua +++ b/Classes/ItemDBControl.lua @@ -105,8 +105,8 @@ function ItemDBClass:DoesItemMatchFilters(item) end if not found then searchStr = searchStr:gsub(" ","") - for modName in pairs(item.baseModList) do - if modName:lower():gsub("_",""):match(searchStr) then + for i, mod in pairs(item.baseModList) do + if mod.name:lower():gsub("_",""):match(searchStr) then found = true break end @@ -262,6 +262,7 @@ function ItemDBClass:OnKeyDown(key, doubleClick) self.itemsTab:CreateDisplayItemFromRaw(selItem.raw) local newItem = self.itemsTab.displayItem self.itemsTab:AddDisplayItem(true) + itemLib.buildItemModList(newItem) local slotName = itemLib.getPrimarySlotForItem(newItem) if slotName and self.itemsTab.slots[slotName] then if IsKeyDown("SHIFT") then @@ -313,6 +314,7 @@ function ItemDBClass:OnKeyUp(key) self.itemsTab:CreateDisplayItemFromRaw(self.selItem.raw) local newItem = self.itemsTab.displayItem self.itemsTab:AddDisplayItem() + itemLib.buildItemModList(newItem) t_remove(self.itemsTab.orderList, #self.itemsTab.orderList) t_insert(self.itemsTab.orderList, self.itemsTab.controls.itemList.selDragIndex, newItem.id) else @@ -322,6 +324,7 @@ function ItemDBClass:OnKeyUp(key) self.itemsTab:CreateDisplayItemFromRaw(self.selItem.raw) local newItem = self.itemsTab.displayItem self.itemsTab:AddDisplayItem(true) + itemLib.buildItemModList(newItem) slot.selItemId = newItem.id self.itemsTab:PopulateSlots() self.itemsTab:AddUndoState() diff --git a/Classes/ItemSlotControl.lua b/Classes/ItemSlotControl.lua index 95ca87fe..ca33f3f2 100644 --- a/Classes/ItemSlotControl.lua +++ b/Classes/ItemSlotControl.lua @@ -17,7 +17,10 @@ local ItemSlotClass = common.NewClass("ItemSlot", "DropDownControl", function(se itemsTab:AddUndoState() itemsTab.build.buildFlag = true end - end, function() return #self.items > 1 end) + end) + self.enabled = function() + return #self.items > 1 + end self.shown = function() return not self.inactive end @@ -77,7 +80,7 @@ function ItemSlotClass:Draw(viewPort) viewer.zoomY = -node.y / 11.85 SetViewport(viewerX + 2, viewerY + 2, 300, 300) viewer:Draw(self.itemsTab.build, { x = 0, y = 0, width = 300, height = 300 }, { }) - SetDrawColor(1, 1, 1, 0.1) + SetDrawColor(1, 1, 1, 0.2) DrawImage(nil, 149, 0, 2, 300) DrawImage(nil, 0, 149, 300, 2) SetViewport() diff --git a/Classes/ItemsTab.lua b/Classes/ItemsTab.lua index 3e9bcc23..3a4839ac 100644 --- a/Classes/ItemsTab.lua +++ b/Classes/ItemsTab.lua @@ -291,8 +291,9 @@ function ItemsTabClass:AddItem(item, noAutoEquip) end end - -- Add it to the list and clear the current display item + -- Add it to the list self.list[item.id] = item + itemLib.buildItemModList(item) end -- Adds the current display item to the build's item list @@ -388,47 +389,48 @@ function ItemsTabClass:AddItemTooltip(item, slot, dbMode) local modList = item.modList or item.slotModList[slotNum] if base.weapon then -- Weapon-specific info - local weaponPrefix = "weapon"..slotNum.."_" + local weaponData = item.weaponData[slotNum] main:AddTooltipLine(16, s_format("^x7F7F7F%s", base.type)) if item.quality > 0 then main:AddTooltipLine(16, s_format("^x7F7F7FQuality: "..data.colorCodes.MAGIC.."+%d%%", item.quality)) end local totalDamageTypes = 0 - if modList[weaponPrefix.."physicalDPS"] then - main:AddTooltipLine(16, s_format("^x7F7F7FPhysical Damage: "..data.colorCodes.MAGIC.."%d-%d (%.1f DPS)", modList[weaponPrefix.."physicalMin"], modList[weaponPrefix.."physicalMax"], modList[weaponPrefix.."physicalDPS"])) + if weaponData.PhysicalDPS then + main:AddTooltipLine(16, s_format("^x7F7F7FPhysical Damage: "..data.colorCodes.MAGIC.."%d-%d (%.1f DPS)", weaponData.PhysicalMin, weaponData.PhysicalMax, weaponData.PhysicalDPS)) totalDamageTypes = totalDamageTypes + 1 end - if modList[weaponPrefix.."elementalDPS"] then + if weaponData.ElementalDPS then local elemLine - for _, var in ipairs({"fire","cold","lightning"}) do - if modList[weaponPrefix..var.."DPS"] then + for _, var in ipairs({"Fire","Cold","Lightning"}) do + if weaponData[var.."DPS"] then elemLine = elemLine and elemLine.."^x7F7F7F, " or "^x7F7F7FElemental Damage: " - elemLine = elemLine..s_format("%s%d-%d", data.colorCodes[var:upper()], modList[weaponPrefix..var.."Min"], modList[weaponPrefix..var.."Max"]) + elemLine = elemLine..s_format("%s%d-%d", data.colorCodes[var:upper()], weaponData[var.."Min"], weaponData[var.."Max"]) end end main:AddTooltipLine(16, elemLine) - main:AddTooltipLine(16, s_format("^x7F7F7FElemental DPS: "..data.colorCodes.MAGIC.."%.1f", modList[weaponPrefix.."elementalDPS"])) + main:AddTooltipLine(16, s_format("^x7F7F7FElemental DPS: "..data.colorCodes.MAGIC.."%.1f", weaponData.ElementalDPS)) totalDamageTypes = totalDamageTypes + 1 end - if modList[weaponPrefix.."chaosDPS"] then - main:AddTooltipLine(16, s_format("^x7F7F7FChaos Damage: "..data.colorCodes.CHAOS.."%d-%d "..data.colorCodes.MAGIC.."(%.1f DPS)", modList[weaponPrefix.."chaosMin"], modList[weaponPrefix.."chaosMax"], modList[weaponPrefix.."chaosDPS"])) + if weaponData.ChaosDPS then + main:AddTooltipLine(16, s_format("^x7F7F7FChaos Damage: "..data.colorCodes.CHAOS.."%d-%d "..data.colorCodes.MAGIC.."(%.1f DPS)", weaponData.ChaosMin, weaponData.ChaosMax, weaponData.ChaosDPS)) totalDamageTypes = totalDamageTypes + 1 end if totalDamageTypes > 1 then - main:AddTooltipLine(16, s_format("^x7F7F7FTotal DPS: "..data.colorCodes.MAGIC.."%.1f", modList[weaponPrefix.."damageDPS"])) + main:AddTooltipLine(16, s_format("^x7F7F7FTotal DPS: "..data.colorCodes.MAGIC.."%.1f", weaponData.TotalDPS)) end - main:AddTooltipLine(16, s_format("^x7F7F7FCritical Strike Chance: %s%.2f%%", modList[weaponPrefix.."critChanceBase"] ~= base.weapon.critChanceBase and data.colorCodes.MAGIC or "^7", modList[weaponPrefix.."critChanceBase"])) - main:AddTooltipLine(16, s_format("^x7F7F7FAttacks per Second: %s%.2f", modList[weaponPrefix.."ttackRate"] ~= base.weapon.attackRateBase and data.colorCodes.MAGIC or "^7", modList[weaponPrefix.."attackRate"])) + main:AddTooltipLine(16, s_format("^x7F7F7FCritical Strike Chance: %s%.2f%%", weaponData.critChance ~= base.weapon.critChanceBase and data.colorCodes.MAGIC or "^7", weaponData.critChance)) + main:AddTooltipLine(16, s_format("^x7F7F7FAttacks per Second: %s%.2f", weaponData.attackRate ~= base.weapon.attackRateBase and data.colorCodes.MAGIC or "^7", weaponData.attackRate)) elseif base.armour then -- Armour-specific info + local armourData = item.armourData if item.quality > 0 then main:AddTooltipLine(16, s_format("^x7F7F7FQuality: "..data.colorCodes.MAGIC.."+%d%%", item.quality)) end - if base.armour.blockChance and modList.blockChance > 0 then - main:AddTooltipLine(16, s_format("^x7F7F7FChance to Block: %s%d%%", modList.blockChance ~= base.armour.blockChance and data.colorCodes.MAGIC or "^7", modList.blockChance)) + if base.armour.blockChance and armourData.BlockChance > 0 then + main:AddTooltipLine(16, s_format("^x7F7F7FChance to Block: %s%d%%", armourData.BlockChance ~= base.armour.blockChance and data.colorCodes.MAGIC or "^7", armourData.BlockChance)) end - for _, def in ipairs({{var="armour",label="Armour"},{var="evasion",label="Evasion Rating"},{var="energyShield",label="Energy Shield"}}) do - local itemVal = modList["slot:"..base.type.."_"..def.var.."Base"] + for _, def in ipairs({{var="Armour",label="Armour"},{var="Evasion",label="Evasion Rating"},{var="EnergyShield",label="Energy Shield"}}) do + local itemVal = armourData[def.var] if itemVal and itemVal > 0 then main:AddTooltipLine(16, s_format("^x7F7F7F%s: %s%d", def.label, itemVal ~= base.armour[def.var.."Base"] and data.colorCodes.MAGIC or "^7", itemVal)) end @@ -441,11 +443,10 @@ function ItemsTabClass:AddItemTooltip(item, slot, dbMode) if item.jewelRadiusData and slot and item.jewelRadiusData[slot.nodeId] then local radiusData = item.jewelRadiusData[slot.nodeId] local line - local labels = { "Str", "Dex", "Int" } local codes = { data.colorCodes.MARAUDER, data.colorCodes.RANGER, data.colorCodes.WITCH } - for i, stat in ipairs({"strBase","dexBase","intBase"}) do + for i, stat in ipairs({"Str","Dex","Int"}) do if radiusData[stat] and radiusData[stat] ~= 0 then - line = (line and line .. ", " or "") .. s_format("%s%d %s^7", codes[i], radiusData[stat], labels[i]) + line = (line and line .. ", " or "") .. s_format("%s%d %s^7", codes[i], radiusData[stat], stat) end end if line then @@ -466,7 +467,7 @@ function ItemsTabClass:AddItemTooltip(item, slot, dbMode) if not line:match("^%+?0[^%.]") and not line:match(" 0%-0 ") and not line:match(" 0 to 0 ") then -- Hack to hide 0-value modifiers local colorCode if modLine.extra then - colorCode = data.colorCodes.NORMAL + colorCode = data.colorCodes.UNSUPPORTED else colorCode = modLine.crafted and data.colorCodes.CRAFTED or data.colorCodes.MAGIC end @@ -535,13 +536,8 @@ function ItemsTabClass:AddItemTooltip(item, slot, dbMode) if launch.devMode and IsKeyDown("ALT") then -- Modifier debugging info main:AddTooltipSeperator(10) - local nameList = { } - for k in pairs(modList) do - t_insert(nameList, k) - end - table.sort(nameList) - for _, name in ipairs(nameList) do - main:AddTooltipLine(16, "^7"..name.." = "..tostring(modList[name])) + for _, mod in ipairs(modList) do + main:AddTooltipLine(14, "^7"..modLib.formatMod(mod)) end end end diff --git a/Classes/PassiveTree.lua b/Classes/PassiveTree.lua index a1f149d9..8c5a32a7 100644 --- a/Classes/PassiveTree.lua +++ b/Classes/PassiveTree.lua @@ -222,24 +222,25 @@ local PassiveTreeClass = common.NewClass("PassiveTree", function(self) local i = 1 while node.sd[i] do local line = node.sd[i] - local list, extra - if line:match("\n") then - -- There's a newline somewhere, so first try and parse it as a single line - list, extra = modLib.parseMod(line:gsub("\n", " ")) - if list and not extra then - node.sd[i] = line:gsub("\n", " ") - else - -- That failed, so break it into separate lines and try to parse them - table.remove(node.sd, i) - local si = i - for subLine in line:gmatch("[^\n]+") do - table.insert(node.sd, si, subLine) - si = si + 1 + local list, extra = modLib.parseMod(line) + if not list or extra then + -- Try to combine it with one or more of the lines that follow this one + local endI = i + 1 + while node.sd[endI] do + local comb = line + for ci = i + 1, endI do + comb = comb .. " " .. node.sd[ci] end - list, extra = modLib.parseMod(node.sd[i]) + list, extra = modLib.parseMod(comb) + if list and not extra then + -- Success, add dummy mod lists to the other lines that were combined with this one + for ci = i + 1, endI do + node.mods[ci] = { list = { } } + end + break + end + endI = endI + 1 end - else - list, extra = modLib.parseMod(line) end if not list then -- Parser had no idea how to read this modifier @@ -248,28 +249,36 @@ local PassiveTreeClass = common.NewClass("PassiveTree", function(self) -- Parser recognised this as a modifier but couldn't understand all of it node.extra = true else - for k, v in pairs(list) do - node.modKey = node.modKey..k.."="..tostring(v).."," + for _, mod in ipairs(list) do + node.modKey = node.modKey.."["..modLib.formatMod(mod).."]" end end node.mods[i] = { list = list, extra = extra } i = i + 1 + while node.mods[i] do + -- Skip any lines with dummy lists added by the line combining code + i = i + 1 + end end -- Build unified list of modifiers from all recognised modifier lines - node.modList = { } + node.modList = common.New("ModList") for _, mod in pairs(node.mods) do if mod.list and not mod.extra then - for k, v in pairs(mod.list) do - modLib.listMerge(node.modList, k, v) + for i, mod in ipairs(mod.list) do + mod.source = "Node:"..node.id + if type(mod.value) == "table" and mod.value.mod then + mod.value.mod.source = mod.source + end + node.modList:AddMod(mod) end end end - if node.type == "keystone" then - modLib.listMerge(node.modList, "keystone:"..node.dn, true) - end if node.passivePointsGranted > 0 then - modLib.listMerge(node.modList, "extraPoints", node.passivePointsGranted) + node.modList:NewMod("ExtraPoints", "BASE", node.passivePointsGranted, "Node"..node.id) + end + if node.type == "keystone" then + node.keystoneMod = modLib.createMod("Keystone", "LIST", node.dn, "Node"..node.id) end end diff --git a/Classes/PassiveTreeView.lua b/Classes/PassiveTreeView.lua index 45804c61..08e556fd 100644 --- a/Classes/PassiveTreeView.lua +++ b/Classes/PassiveTreeView.lua @@ -332,7 +332,7 @@ function PassiveTreeViewClass:Draw(build, viewPort, inputEvents) local def = m_max(node.power.def or 0, 0) local dpsCol = (dps / build.calcsTab.powerMax.dps * 1.5) ^ 0.5 local defCol = (def / build.calcsTab.powerMax.def * 1.5) ^ 0.5 - SetDrawColor(dpsCol, (dpsCol + defCol) / 4, defCol) + SetDrawColor(dpsCol, (m_max(dpsCol - 0.5, 0) + m_max(defCol - 0.5, 0)) / 2, defCol) else SetDrawColor(1, 1, 1) end @@ -509,8 +509,8 @@ function PassiveTreeViewClass:AddNodeTooltip(node, build) if launch.devMode and IsKeyDown("ALT") then -- Modifier debugging info local modStr - for k, v in pairs(node.mods[i].list) do - modStr = (modStr and modStr..", " or "^2") .. string.format("%s = %s", k, tostring(v)) + for _, mod in pairs(node.mods[i].list) do + modStr = (modStr and modStr..", " or "^2") .. modLib.formatMod(mod) end if node.mods[i].extra then modStr = (modStr and modStr.." " or "") .. "^1" .. node.mods[i].extra @@ -520,7 +520,7 @@ function PassiveTreeViewClass:AddNodeTooltip(node, build) end end end - main:AddTooltipLine(16, ((node.mods[i].extra or not node.mods[i].list) and data.colorCodes.NORMAL or data.colorCodes.MAGIC)..line) + main:AddTooltipLine(16, ((node.mods[i].extra or not node.mods[i].list) and data.colorCodes.UNSUPPORTED or data.colorCodes.MAGIC)..line) end end diff --git a/Classes/SkillListControl.lua b/Classes/SkillListControl.lua index 3dd82946..3758c7ce 100644 --- a/Classes/SkillListControl.lua +++ b/Classes/SkillListControl.lua @@ -24,7 +24,7 @@ local SkillListClass = common.NewClass("SkillList", "Control", "ControlHost", fu self:OnKeyUp("DELETE") end) self.controls.delete.enabled = function() - return self.selGroup ~= nil + return self.selGroup ~= nil and self.selGroup.source == nil end self.controls.paste = common.New("ButtonControl", {"RIGHT",self.controls.delete,"LEFT"}, -4, 0, 60, 18, "Paste", function() self.skillsTab:PasteSocketGroup() @@ -33,7 +33,7 @@ local SkillListClass = common.NewClass("SkillList", "Control", "ControlHost", fu self.skillsTab:CopySocketGroup(self.selGroup) end) self.controls.copy.enabled = function() - return self.selGroup ~= nil + return self.selGroup ~= nil and self.selGroup.source == nil end self.controls.new = common.New("ButtonControl", {"RIGHT",self.controls.copy,"LEFT"}, -4, 0, 60, 18, "New", function() local newGroup = { label = "", enabled = true, gemList = { } } @@ -141,15 +141,18 @@ function SkillListClass:Draw(viewPort) if ttGroup and ttGroup.displaySkillList then local count = 0 local gemShown = { } + if ttGroup.sourceItem then + main:AddTooltipLine(18, "^7Source: "..data.colorCodes[ttGroup.sourceItem.rarity]..ttGroup.sourceItem.name) + main:AddTooltipSeperator(10) + end for index, activeSkill in ipairs(ttGroup.displaySkillList) do if index > 1 then main:AddTooltipSeperator(10) end main:AddTooltipLine(16, "^7Active Skill #"..index..":") for _, gem in ipairs(activeSkill.gemList) do - local color = (gem.data.strength and "STRENGTH") or (gem.data.dexterity and "DEXTERITY") or (gem.data.intelligence and "INTELLIGENCE") or "NORMAL" main:AddTooltipLine(20, string.format("%s%s ^7%d%s/%d%s", - data.colorCodes[color], + gem.srcGem.color, gem.name, gem.level, (gem.srcGem and gem.level > gem.srcGem.level) and data.colorCodes.MAGIC.."+"..(gem.level - gem.srcGem.level).."^7" or "", @@ -176,9 +179,8 @@ function SkillListClass:Draw(viewPort) elseif gem.data.support and gem.isSupporting and not next(gem.isSupporting) then reason = "(Cannot apply to any of the active skills)" end - local color = gem.data and ((gem.data.strength and "STRENGTH") or (gem.data.dexterity and "DEXTERITY") or (gem.data.intelligence and "INTELLIGENCE")) or "NORMAL" main:AddTooltipLine(20, string.format("%s%s ^7%d/%d %s", - data.colorCodes[color], + gem.color, gem.name or gem.nameSpec, gem.level, gem.quality, @@ -228,7 +230,7 @@ function SkillListClass:OnKeyDown(key, doubleClick) self.selDragActive = false end elseif key == "c" and IsKeyDown("CTRL") then - if self.selGroup then + if self.selGroup and not self.selGroup.source then self.skillsTab:CopySocketGroup(self.selGroup) end elseif #self.skillsTab.socketGroupList > 0 then @@ -255,7 +257,9 @@ function SkillListClass:OnKeyUp(key) self.controls.scrollBar:Scroll(-1) elseif self.selGroup then if key == "BACK" or key == "DELETE" then - if not self.selGroup.gemList[1] then + if self.selGroup.source then + main:OpenMessagePopup("Delete Socket Group", "This socket group cannot be deleted as it is created by an equipped item.") + elseif not self.selGroup.gemList[1] then t_remove(self.skillsTab.socketGroupList, self.selIndex) if self.skillsTab.displayGroup == self.selGroup then self.skillsTab.displayGroup = nil diff --git a/Classes/SkillsTab.lua b/Classes/SkillsTab.lua index 5a9009ee..b73a3942 100644 --- a/Classes/SkillsTab.lua +++ b/Classes/SkillsTab.lua @@ -44,12 +44,32 @@ local SkillsTabClass = common.NewClass("SkillsTab", "UndoHandler", "ControlHost" self:AddUndoState() self.build.buildFlag = true end) + self.controls.groupSlot.enabled = function() + return self.displayGroup.source == nil + end self.controls.groupEnabled = common.New("CheckBoxControl", {"LEFT",self.controls.groupSlot,"RIGHT"}, 70, 0, 20, "Enabled:", function(state) self.displayGroup.enabled = state self:AddUndoState() self.build.buildFlag = true end) - --self.controls.groupEnabled.tooltip = "If a skill is enabled, any buff, aura or curse modifiers it\nprovides will affect your other skills and your defensive stats.\nAny life or mana reservations will also be applied." + self.controls.sourceNote = common.New("LabelControl", {"TOPLEFT",self.controls.groupSlotLabel,"TOPLEFT"}, 0, 30, 0, 16) + self.controls.sourceNote.shown = function() + return self.displayGroup.source ~= nil + end + self.controls.sourceNote.label = function() + local item = self.displayGroup.sourceItem or { rarity = "NORMAL", name = "?" } + local itemName = data.colorCodes[item.rarity]..item.name.."^7" + local activeGem = self.displayGroup.gemList[1] + local label = [[^7This is a special group created for the ']]..activeGem.color..activeGem.nameSpec..[[^7' skill, +which is being provided by ']]..itemName..[['. +You cannot delete this group, but it will disappear if you un-equip the item.]] + if not self.displayGroup.noSupports then + label = label .. "\n\n" .. [[You cannot add support gems to this group, but support gems in +any other group socketed into ']]..itemName..[[' +will automatically apply to the skill.]] + end + return label + end -- Skill gem slots self.gemSlots = { } @@ -67,6 +87,7 @@ function SkillsTabClass:Load(xml, fileName) socketGroup.enabled = node.attrib.active == "true" or node.attrib.enabled == "true" socketGroup.label = node.attrib.label socketGroup.slot = node.attrib.slot + socketGroup.source = node.attrib.source socketGroup.mainActiveSkill = tonumber(node.attrib.mainActiveSkill) or 1 socketGroup.gemList = { } for _, child in ipairs(node) do @@ -95,6 +116,7 @@ function SkillsTabClass:Save(xml) enabled = tostring(socketGroup.enabled), label = socketGroup.label, slot = socketGroup.slot, + source = socketGroup.source, mainActiveSkill = tostring(socketGroup.mainActiveSkill), } } for _, gem in ipairs(socketGroup.gemList) do @@ -206,7 +228,7 @@ function SkillsTabClass:CreateGemSlot(index) end slot.nameSpec:AddToTabGroup(self.controls.groupLabel) slot.nameSpec.shown = function() - return index <= #self.displayGroup.gemList + 1 + return index <= #self.displayGroup.gemList + 1 and self.displayGroup.source == nil end self.controls["gemSlotName"..index] = slot.nameSpec @@ -271,23 +293,13 @@ function SkillsTabClass:UpdateGemSlots() self:CreateGemSlot(slotIndex) end local slot = self.gemSlots[slotIndex] - slot.nameSpec.inactiveCol = "^8" if slotIndex == #self.displayGroup.gemList + 1 then slot.nameSpec:SetText("") slot.level:SetText("") slot.quality:SetText("") slot.enabled.state = false else - local gemData = self.displayGroup.gemList[slotIndex].data - if gemData then - if gemData.strength then - slot.nameSpec.inactiveCol = data.colorCodes.STRENGTH - elseif gemData.dexterity then - slot.nameSpec.inactiveCol = data.colorCodes.DEXTERITY - elseif gemData.intelligence then - slot.nameSpec.inactiveCol = data.colorCodes.INTELLIGENCE - end - end + slot.nameSpec.inactiveCol = self.displayGroup.gemList[slotIndex].color end end end @@ -333,11 +345,27 @@ function SkillsTabClass:ProcessSocketGroup(socketGroup) if not gem then break end + gem.color = "^8" if gem.nameSpec:match("%S") then -- Gem name has been specified, try to find the matching skill gem - gem.errMsg, gem.name, gem.data = self:FindSkillGem(gem.nameSpec) + if data.gems[gem.nameSpec] then + gem.errMsg = nil + gem.name = gem.nameSpec + gem.data = data.gems[gem.nameSpec] + else + gem.errMsg, gem.name, gem.data = self:FindSkillGem(gem.nameSpec) + end if gem.name then gem.nameSpec = gem.name + if gem.data.strength then + gem.color = data.colorCodes.STRENGTH + elseif gem.data.dexterity then + gem.color = data.colorCodes.DEXTERITY + elseif gem.data.intelligence then + gem.color = data.colorCodes.INTELLIGENCE + else + gem.color = data.colorCodes.NORMAL + end end else gem.errMsg, gem.name, gem.data = nil @@ -387,7 +415,30 @@ end function SkillsTabClass:CreateUndoState() local state = { } - state.socketGroupList = copyTable(self.socketGroupList) + state.socketGroupList = { } + for _, socketGroup in ipairs(self.socketGroupList) do + local newGroup = { + label = socketGroup.label, + slot = socketGroup.slot, + enabled = socketGroup.enabled, + source = socketGroup.source, + mainActiveSkill = socketGroup.mainActiveSkill, + gemList = { } + } + for index, gem in pairs(socketGroup.gemList) do + newGroup.gemList[index] = { + nameSpec = gem.name, + level = gem.level, + quality = gem.quality, + enabled = gem.enabled, + skillPart = gem.skillPart, + name = gem.name, + data = gem.data, + errMsg = gem.errMsg, + } + end + t_insert(state.socketGroupList, newGroup) + end return state end diff --git a/Classes/TreeTab.lua b/Classes/TreeTab.lua index 3ee441b5..3cb1e773 100644 --- a/Classes/TreeTab.lua +++ b/Classes/TreeTab.lua @@ -78,7 +78,7 @@ local TreeTabClass = common.NewClass("TreeTab", "ControlHost", function(self, bu launch:DownloadPage("http://poeurl.com/shrink.php?url="..treeLink, function(page, errMsg) popup.controls.shrink.label = "Done" if errMsg or not page:match("%S") then - main:OpenConfirmPopup("PoEURL Shortener", "Failed to get PoEURL link. Try again later.") + main:OpenMessagePopup("PoEURL Shortener", "Failed to get PoEURL link. Try again later.") else treeLink = "http://poeurl.com/"..page popup.controls.edit:SetText(treeLink) diff --git a/Data/Bases/axe.lua b/Data/Bases/axe.lua index 6e7a8dc8..33df5a3d 100644 --- a/Data/Bases/axe.lua +++ b/Data/Bases/axe.lua @@ -3,244 +3,244 @@ local itemBases = ... itemBases["Rusted Hatchet"] = { type = "One Handed Axe", - weapon = { physicalMin = 5, physicalMax = 9, critChanceBase = 5, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 5, PhysicalMax = 9, critChanceBase = 5, attackRateBase = 1.5, }, req = { }, } itemBases["Jade Hatchet"] = { type = "One Handed Axe", - weapon = { physicalMin = 8, physicalMax = 13, critChanceBase = 5, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 8, PhysicalMax = 13, critChanceBase = 5, attackRateBase = 1.4, }, req = { level = 6, str = 21, }, } itemBases["Boarding Axe"] = { type = "One Handed Axe", - weapon = { physicalMin = 9, physicalMax = 17, critChanceBase = 5, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 9, PhysicalMax = 17, critChanceBase = 5, attackRateBase = 1.5, }, req = { level = 11, str = 28, dex = 19, }, } itemBases["Cleaver"] = { type = "One Handed Axe", - weapon = { physicalMin = 11, physicalMax = 33, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 11, PhysicalMax = 33, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 16, str = 48, }, } itemBases["Broad Axe"] = { type = "One Handed Axe", - weapon = { physicalMin = 17, physicalMax = 31, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 17, PhysicalMax = 31, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 21, str = 54, dex = 25, }, } itemBases["Arming Axe"] = { type = "One Handed Axe", - weapon = { physicalMin = 12, physicalMax = 36, critChanceBase = 5, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 12, PhysicalMax = 36, critChanceBase = 5, attackRateBase = 1.4, }, req = { level = 25, str = 58, dex = 33, }, } itemBases["Decorative Axe"] = { type = "One Handed Axe", - weapon = { physicalMin = 23, physicalMax = 43, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 23, PhysicalMax = 43, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 29, str = 80, dex = 23, }, } itemBases["Spectral Axe"] = { type = "One Handed Axe", - weapon = { physicalMin = 26, physicalMax = 43, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 26, PhysicalMax = 43, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 33, str = 85, dex = 37, }, } itemBases["Etched Hatchet"] = { type = "One Handed Axe", implicit = "8% increased Physical Damage", - weapon = { physicalMin = 24, physicalMax = 42, critChanceBase = 5, attackRateBase = 1.35, }, + weapon = { PhysicalMin = 24, PhysicalMax = 42, critChanceBase = 5, attackRateBase = 1.35, }, req = { level = 35, str = 93, dex = 43, }, } itemBases["Jasper Axe"] = { type = "One Handed Axe", - weapon = { physicalMin = 31, physicalMax = 47, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 31, PhysicalMax = 47, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 36, str = 86, dex = 40, }, } itemBases["Tomahawk"] = { type = "One Handed Axe", - weapon = { physicalMin = 25, physicalMax = 47, critChanceBase = 5, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 25, PhysicalMax = 47, critChanceBase = 5, attackRateBase = 1.5, }, req = { level = 39, str = 66, dex = 45, }, } itemBases["Wrist Chopper"] = { type = "One Handed Axe", - weapon = { physicalMin = 23, physicalMax = 68, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 23, PhysicalMax = 68, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 42, str = 112, dex = 32, }, } itemBases["War Axe"] = { type = "One Handed Axe", - weapon = { physicalMin = 30, physicalMax = 55, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 30, PhysicalMax = 55, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 45, str = 106, dex = 49, }, } itemBases["Chest Splitter"] = { type = "One Handed Axe", - weapon = { physicalMin = 20, physicalMax = 61, critChanceBase = 5, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 20, PhysicalMax = 61, critChanceBase = 5, attackRateBase = 1.4, }, req = { level = 48, str = 105, dex = 60, }, } itemBases["Ceremonial Axe"] = { type = "One Handed Axe", - weapon = { physicalMin = 37, physicalMax = 69, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 37, PhysicalMax = 69, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 51, str = 134, dex = 39, }, } itemBases["Wraith Axe"] = { type = "One Handed Axe", - weapon = { physicalMin = 39, physicalMax = 65, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 39, PhysicalMax = 65, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 54, str = 134, dex = 59, }, } itemBases["Engraved Hatchet"] = { type = "One Handed Axe", implicit = "8% increased Physical Damage", - weapon = { physicalMin = 35, physicalMax = 63, critChanceBase = 5, attackRateBase = 1.35, }, + weapon = { PhysicalMin = 35, PhysicalMax = 63, critChanceBase = 5, attackRateBase = 1.35, }, req = { level = 56, str = 143, dex = 66, }, } itemBases["Karui Axe"] = { type = "One Handed Axe", - weapon = { physicalMin = 41, physicalMax = 64, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 41, PhysicalMax = 64, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 57, str = 132, dex = 62, }, } itemBases["Siege Axe"] = { type = "One Handed Axe", - weapon = { physicalMin = 32, physicalMax = 59, critChanceBase = 5, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 32, PhysicalMax = 59, critChanceBase = 5, attackRateBase = 1.5, }, req = { level = 59, str = 119, dex = 82, }, } itemBases["Reaver Axe"] = { type = "One Handed Axe", - weapon = { physicalMin = 31, physicalMax = 92, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 31, PhysicalMax = 92, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 61, str = 167, dex = 57, }, } itemBases["Butcher Axe"] = { type = "One Handed Axe", - weapon = { physicalMin = 38, physicalMax = 71, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 38, PhysicalMax = 71, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 63, str = 149, dex = 76, }, } itemBases["Vaal Hatchet"] = { type = "One Handed Axe", - weapon = { physicalMin = 25, physicalMax = 74, critChanceBase = 5, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 25, PhysicalMax = 74, critChanceBase = 5, attackRateBase = 1.4, }, req = { level = 65, str = 140, dex = 86, }, } itemBases["Royal Axe"] = { type = "One Handed Axe", - weapon = { physicalMin = 43, physicalMax = 80, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 43, PhysicalMax = 80, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 67, str = 167, dex = 57, }, } itemBases["Infernal Axe"] = { type = "One Handed Axe", - weapon = { physicalMin = 43, physicalMax = 72, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 43, PhysicalMax = 72, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 69, str = 158, dex = 76, }, } itemBases["Runic Hatchet"] = { type = "One Handed Axe", implicit = "12% increased Physical Damage", - weapon = { physicalMin = 38, physicalMax = 68, critChanceBase = 5, attackRateBase = 1.35, }, + weapon = { PhysicalMin = 38, PhysicalMax = 68, critChanceBase = 5, attackRateBase = 1.35, }, req = { level = 71, str = 163, dex = 82, }, } itemBases["Stone Axe"] = { type = "Two Handed Axe", - weapon = { physicalMin = 10, physicalMax = 17, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 10, PhysicalMax = 17, critChanceBase = 5, attackRateBase = 1.3, }, req = { str = 17, }, } itemBases["Jade Chopper"] = { type = "Two Handed Axe", - weapon = { physicalMin = 17, physicalMax = 27, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 17, PhysicalMax = 27, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 9, str = 31, }, } itemBases["Woodsplitter"] = { type = "Two Handed Axe", - weapon = { physicalMin = 17, physicalMax = 35, critChanceBase = 5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 17, PhysicalMax = 35, critChanceBase = 5, attackRateBase = 1.25, }, req = { level = 13, str = 36, dex = 17, }, } itemBases["Poleaxe"] = { type = "Two Handed Axe", - weapon = { physicalMin = 29, physicalMax = 44, critChanceBase = 5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 29, PhysicalMax = 44, critChanceBase = 5, attackRateBase = 1.25, }, req = { level = 18, str = 44, dex = 25, }, } itemBases["Double Axe"] = { type = "Two Handed Axe", - weapon = { physicalMin = 32, physicalMax = 54, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 32, PhysicalMax = 54, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 23, str = 62, dex = 27, }, } itemBases["Gilded Axe"] = { type = "Two Handed Axe", - weapon = { physicalMin = 43, physicalMax = 58, critChanceBase = 5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 43, PhysicalMax = 58, critChanceBase = 5, attackRateBase = 1.25, }, req = { level = 28, str = 64, dex = 37, }, } itemBases["Shadow Axe"] = { type = "Two Handed Axe", - weapon = { physicalMin = 42, physicalMax = 62, critChanceBase = 5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 42, PhysicalMax = 62, critChanceBase = 5, attackRateBase = 1.25, }, req = { level = 33, str = 80, dex = 37, }, } itemBases["Jasper Chopper"] = { type = "Two Handed Axe", - weapon = { physicalMin = 50, physicalMax = 78, critChanceBase = 5, attackRateBase = 1.15, }, + weapon = { PhysicalMin = 50, PhysicalMax = 78, critChanceBase = 5, attackRateBase = 1.15, }, req = { level = 37, str = 100, dex = 29, }, } itemBases["Dagger Axe"] = { type = "Two Handed Axe", implicit = "25% increased Critical Strike Chance", - weapon = { physicalMin = 45, physicalMax = 71, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 45, PhysicalMax = 71, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 36, str = 89, dex = 43, }, } itemBases["Timber Axe"] = { type = "Two Handed Axe", - weapon = { physicalMin = 41, physicalMax = 85, critChanceBase = 5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 41, PhysicalMax = 85, critChanceBase = 5, attackRateBase = 1.25, }, req = { level = 41, str = 97, dex = 45, }, } itemBases["Headsman Axe"] = { type = "Two Handed Axe", - weapon = { physicalMin = 53, physicalMax = 79, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 53, PhysicalMax = 79, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 45, str = 99, dex = 57, }, } itemBases["Labrys"] = { type = "Two Handed Axe", - weapon = { physicalMin = 71, physicalMax = 118, critChanceBase = 5, attackRateBase = 1.15, }, + weapon = { PhysicalMin = 71, PhysicalMax = 118, critChanceBase = 5, attackRateBase = 1.15, }, req = { level = 49, str = 122, dex = 53, }, } itemBases["Noble Axe"] = { type = "Two Handed Axe", - weapon = { physicalMin = 73, physicalMax = 98, critChanceBase = 5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 73, PhysicalMax = 98, critChanceBase = 5, attackRateBase = 1.25, }, req = { level = 52, str = 113, dex = 65, }, } itemBases["Abyssal Axe"] = { type = "Two Handed Axe", - weapon = { physicalMin = 69, physicalMax = 104, critChanceBase = 5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 69, PhysicalMax = 104, critChanceBase = 5, attackRateBase = 1.25, }, req = { level = 55, str = 128, dex = 60, }, } itemBases["Talon Axe"] = { type = "Two Handed Axe", implicit = "25% increased Critical Strike Chance", - weapon = { physicalMin = 75, physicalMax = 118, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 75, PhysicalMax = 118, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 59, str = 140, dex = 67, }, } itemBases["Karui Chopper"] = { type = "Two Handed Axe", - weapon = { physicalMin = 80, physicalMax = 125, critChanceBase = 5, attackRateBase = 1.15, }, + weapon = { PhysicalMin = 80, PhysicalMax = 125, critChanceBase = 5, attackRateBase = 1.15, }, req = { level = 58, str = 151, dex = 43, }, } itemBases["Sundering Axe"] = { type = "Two Handed Axe", - weapon = { physicalMin = 62, physicalMax = 128, critChanceBase = 5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 62, PhysicalMax = 128, critChanceBase = 5, attackRateBase = 1.25, }, req = { level = 60, str = 149, dex = 76, }, } itemBases["Ezomyte Axe"] = { type = "Two Handed Axe", - weapon = { physicalMin = 72, physicalMax = 108, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 72, PhysicalMax = 108, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 62, str = 140, dex = 86, }, } itemBases["Vaal Axe"] = { type = "Two Handed Axe", - weapon = { physicalMin = 79, physicalMax = 131, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 79, PhysicalMax = 131, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 64, str = 158, dex = 76, }, } itemBases["Despot Axe"] = { type = "Two Handed Axe", - weapon = { physicalMin = 76, physicalMax = 103, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 76, PhysicalMax = 103, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 66, str = 140, dex = 86, }, } itemBases["Void Axe"] = { type = "Two Handed Axe", - weapon = { physicalMin = 76, physicalMax = 114, critChanceBase = 5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 76, PhysicalMax = 114, critChanceBase = 5, attackRateBase = 1.25, }, req = { level = 68, str = 149, dex = 76, }, } itemBases["Fleshripper"] = { type = "Two Handed Axe", implicit = "40% increased Critical Strike Chance", - weapon = { physicalMin = 80, physicalMax = 125, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 80, PhysicalMax = 125, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 70, str = 156, dex = 84, }, } diff --git a/Data/Bases/bow.lua b/Data/Bases/bow.lua index c97fd668..813ad5d0 100644 --- a/Data/Bases/bow.lua +++ b/Data/Bases/bow.lua @@ -3,135 +3,135 @@ local itemBases = ... itemBases["Crude Bow"] = { type = "Bow", - weapon = { physicalMin = 5, physicalMax = 13, critChanceBase = 5, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 5, PhysicalMax = 13, critChanceBase = 5, attackRateBase = 1.4, }, req = { level = 1, dex = 14, }, } itemBases["Short Bow"] = { type = "Bow", - weapon = { physicalMin = 6, physicalMax = 16, critChanceBase = 5, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 6, PhysicalMax = 16, critChanceBase = 5, attackRateBase = 1.5, }, req = { level = 5, dex = 26, }, } itemBases["Long Bow"] = { type = "Bow", - weapon = { physicalMin = 6, physicalMax = 25, critChanceBase = 6, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 6, PhysicalMax = 25, critChanceBase = 6, attackRateBase = 1.3, }, req = { level = 9, dex = 38, }, } itemBases["Composite Bow"] = { type = "Bow", - weapon = { physicalMin = 12, physicalMax = 26, critChanceBase = 6, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 12, PhysicalMax = 26, critChanceBase = 6, attackRateBase = 1.3, }, req = { level = 14, dex = 53, }, } itemBases["Recurve Bow"] = { type = "Bow", - weapon = { physicalMin = 11, physicalMax = 34, critChanceBase = 6.5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 11, PhysicalMax = 34, critChanceBase = 6.5, attackRateBase = 1.25, }, req = { level = 18, dex = 65, }, } itemBases["Bone Bow"] = { type = "Bow", - weapon = { physicalMin = 12, physicalMax = 36, critChanceBase = 6, attackRateBase = 1.35, }, + weapon = { PhysicalMin = 12, PhysicalMax = 36, critChanceBase = 6, attackRateBase = 1.35, }, req = { level = 23, dex = 80, }, } itemBases["Royal Bow"] = { type = "Bow", implicit = "(6 to 12)% increased Elemental Damage with Weapons", - weapon = { physicalMin = 10, physicalMax = 41, critChanceBase = 5, attackRateBase = 1.45, }, + weapon = { PhysicalMin = 10, PhysicalMax = 41, critChanceBase = 5, attackRateBase = 1.45, }, req = { level = 28, dex = 95, }, } itemBases["Death Bow"] = { type = "Bow", implicit = "(30 to 50)% increased Critical Strike Chance", - weapon = { physicalMin = 20, physicalMax = 53, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 20, PhysicalMax = 53, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 32, dex = 107, }, } itemBases["Grove Bow"] = { type = "Bow", - weapon = { physicalMin = 15, physicalMax = 44, critChanceBase = 5, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 15, PhysicalMax = 44, critChanceBase = 5, attackRateBase = 1.5, }, req = { level = 35, dex = 116, }, } itemBases["Reflex Bow"] = { type = "Bow", implicit = "4% increased Movement Speed", - weapon = { physicalMin = 27, physicalMax = 40, critChanceBase = 5.5, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 27, PhysicalMax = 40, critChanceBase = 5.5, attackRateBase = 1.4, }, req = { level = 36, dex = 124, }, } itemBases["Decurve Bow"] = { type = "Bow", - weapon = { physicalMin = 17, physicalMax = 70, critChanceBase = 6, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 17, PhysicalMax = 70, critChanceBase = 6, attackRateBase = 1.25, }, req = { level = 38, dex = 125, }, } itemBases["Compound Bow"] = { type = "Bow", - weapon = { physicalMin = 24, physicalMax = 56, critChanceBase = 6, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 24, PhysicalMax = 56, critChanceBase = 6, attackRateBase = 1.3, }, req = { level = 41, dex = 134, }, } itemBases["Sniper Bow"] = { type = "Bow", - weapon = { physicalMin = 23, physicalMax = 68, critChanceBase = 6.5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 23, PhysicalMax = 68, critChanceBase = 6.5, attackRateBase = 1.25, }, req = { level = 44, dex = 143, }, } itemBases["Ivory Bow"] = { type = "Bow", - weapon = { physicalMin = 21, physicalMax = 64, critChanceBase = 6, attackRateBase = 1.35, }, + weapon = { PhysicalMin = 21, PhysicalMax = 64, critChanceBase = 6, attackRateBase = 1.35, }, req = { level = 47, dex = 152, }, } itemBases["Highborn Bow"] = { type = "Bow", implicit = "(6 to 12)% increased Elemental Damage with Weapons", - weapon = { physicalMin = 17, physicalMax = 66, critChanceBase = 5, attackRateBase = 1.45, }, + weapon = { PhysicalMin = 17, PhysicalMax = 66, critChanceBase = 5, attackRateBase = 1.45, }, req = { level = 50, dex = 161, }, } itemBases["Decimation Bow"] = { type = "Bow", implicit = "(30 to 50)% increased Critical Strike Chance", - weapon = { physicalMin = 31, physicalMax = 81, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 31, PhysicalMax = 81, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 53, dex = 170, }, } itemBases["Thicket Bow"] = { type = "Bow", - weapon = { physicalMin = 22, physicalMax = 66, critChanceBase = 5, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 22, PhysicalMax = 66, critChanceBase = 5, attackRateBase = 1.5, }, req = { level = 56, dex = 179, }, } itemBases["Steelwood Bow"] = { type = "Bow", implicit = "4% increased Movement Speed", - weapon = { physicalMin = 40, physicalMax = 60, critChanceBase = 5.5, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 40, PhysicalMax = 60, critChanceBase = 5.5, attackRateBase = 1.4, }, req = { level = 57, dex = 190, }, } itemBases["Citadel Bow"] = { type = "Bow", - weapon = { physicalMin = 25, physicalMax = 101, critChanceBase = 6, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 25, PhysicalMax = 101, critChanceBase = 6, attackRateBase = 1.25, }, req = { level = 58, dex = 185, }, } itemBases["Ranger Bow"] = { type = "Bow", - weapon = { physicalMin = 34, physicalMax = 79, critChanceBase = 6, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 34, PhysicalMax = 79, critChanceBase = 6, attackRateBase = 1.3, }, req = { level = 60, dex = 212, }, } itemBases["Assassin Bow"] = { type = "Bow", - weapon = { physicalMin = 30, physicalMax = 89, critChanceBase = 6.5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 30, PhysicalMax = 89, critChanceBase = 6.5, attackRateBase = 1.25, }, req = { level = 62, dex = 212, }, } itemBases["Spine Bow"] = { type = "Bow", - weapon = { physicalMin = 27, physicalMax = 80, critChanceBase = 6, attackRateBase = 1.35, }, + weapon = { PhysicalMin = 27, PhysicalMax = 80, critChanceBase = 6, attackRateBase = 1.35, }, req = { level = 64, dex = 212, }, } itemBases["Imperial Bow"] = { type = "Bow", implicit = "(6 to 12)% increased Elemental Damage with Weapons", - weapon = { physicalMin = 19, physicalMax = 78, critChanceBase = 5, attackRateBase = 1.45, }, + weapon = { PhysicalMin = 19, PhysicalMax = 78, critChanceBase = 5, attackRateBase = 1.45, }, req = { level = 66, dex = 212, }, } itemBases["Harbinger Bow"] = { type = "Bow", implicit = "(30 to 50)% increased Critical Strike Chance", - weapon = { physicalMin = 35, physicalMax = 91, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 35, PhysicalMax = 91, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 68, dex = 212, }, } itemBases["Maraketh Bow"] = { type = "Bow", implicit = "6% increased Movement Speed", - weapon = { physicalMin = 44, physicalMax = 65, critChanceBase = 5.5, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 44, PhysicalMax = 65, critChanceBase = 5.5, attackRateBase = 1.4, }, req = { level = 71, dex = 222, }, } diff --git a/Data/Bases/claw.lua b/Data/Bases/claw.lua index d7794b6b..b867056c 100644 --- a/Data/Bases/claw.lua +++ b/Data/Bases/claw.lua @@ -4,151 +4,151 @@ local itemBases = ... itemBases["Nailed Fist"] = { type = "Claw", implicit = "+3 Life gained for each enemy hit by your Attacks", - weapon = { physicalMin = 4, physicalMax = 9, critChanceBase = 6.2, attackRateBase = 1.6, }, + weapon = { PhysicalMin = 4, PhysicalMax = 9, critChanceBase = 6.2, attackRateBase = 1.6, }, req = { level = 3, dex = 11, int = 11, }, } itemBases["Sharktooth Claw"] = { type = "Claw", implicit = "+6 Life gained for each enemy hit by your Attacks", - weapon = { physicalMin = 6, physicalMax = 15, critChanceBase = 6.5, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 6, PhysicalMax = 15, critChanceBase = 6.5, attackRateBase = 1.4, }, req = { level = 7, dex = 14, int = 20, }, } itemBases["Awl"] = { type = "Claw", implicit = "+5 Life gained for each enemy hit by your Attacks", - weapon = { physicalMin = 6, physicalMax = 20, critChanceBase = 6.3, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 6, PhysicalMax = 20, critChanceBase = 6.3, attackRateBase = 1.5, }, req = { level = 12, dex = 25, int = 25, }, } itemBases["Cat's Paw"] = { type = "Claw", implicit = "1.6% of Physical Attack Damage Leeched as Life", - weapon = { physicalMin = 10, physicalMax = 19, critChanceBase = 6, attackRateBase = 1.6, }, + weapon = { PhysicalMin = 10, PhysicalMax = 19, critChanceBase = 6, attackRateBase = 1.6, }, req = { level = 17, dex = 39, int = 27, }, } itemBases["Blinder"] = { type = "Claw", implicit = "+10 Life gained for each enemy hit by your Attacks", - weapon = { physicalMin = 10, physicalMax = 27, critChanceBase = 6.3, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 10, PhysicalMax = 27, critChanceBase = 6.3, attackRateBase = 1.5, }, req = { level = 22, dex = 41, int = 41, }, } itemBases["Timeworn Claw"] = { type = "Claw", implicit = "2% of Physical Attack Damage Leeched as Life", - weapon = { physicalMin = 14, physicalMax = 36, critChanceBase = 6.5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 14, PhysicalMax = 36, critChanceBase = 6.5, attackRateBase = 1.3, }, req = { level = 26, dex = 39, int = 56, }, } itemBases["Sparkling Claw"] = { type = "Claw", implicit = "+10 Life gained for each enemy hit by your Attacks", - weapon = { physicalMin = 12, physicalMax = 32, critChanceBase = 6, attackRateBase = 1.6, }, + weapon = { PhysicalMin = 12, PhysicalMax = 32, critChanceBase = 6, attackRateBase = 1.6, }, req = { level = 30, dex = 64, int = 44, }, } itemBases["Fright Claw"] = { type = "Claw", implicit = "2% of Physical Attack Damage Leeched as Life", - weapon = { physicalMin = 9, physicalMax = 37, critChanceBase = 6.3, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 9, PhysicalMax = 37, critChanceBase = 6.3, attackRateBase = 1.5, }, req = { level = 34, dex = 61, int = 61, }, } itemBases["Double Claw"] = { type = "Claw", implicit = "+6 Life and Mana gained for each Enemy hit", - weapon = { physicalMin = 13, physicalMax = 40, critChanceBase = 6.3, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 13, PhysicalMax = 40, critChanceBase = 6.3, attackRateBase = 1.5, }, req = { level = 36, dex = 67, int = 67, }, } itemBases["Thresher Claw"] = { type = "Claw", implicit = "+21 Life gained for each Enemy hit by Attacks", - weapon = { physicalMin = 18, physicalMax = 48, critChanceBase = 6.5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 18, PhysicalMax = 48, critChanceBase = 6.5, attackRateBase = 1.3, }, req = { level = 37, dex = 53, int = 77, }, } itemBases["Gouger"] = { type = "Claw", implicit = "+13 Life gained for each enemy hit by your Attacks", - weapon = { physicalMin = 13, physicalMax = 46, critChanceBase = 6.3, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 13, PhysicalMax = 46, critChanceBase = 6.3, attackRateBase = 1.5, }, req = { level = 40, dex = 70, int = 70, }, } itemBases["Tiger's Paw"] = { type = "Claw", implicit = "1.6% of Physical Attack Damage Leeched as Life", - weapon = { physicalMin = 21, physicalMax = 38, critChanceBase = 6, attackRateBase = 1.6, }, + weapon = { PhysicalMin = 21, PhysicalMax = 38, critChanceBase = 6, attackRateBase = 1.6, }, req = { level = 43, dex = 88, int = 61, }, } itemBases["Gut Ripper"] = { type = "Claw", implicit = "+21 Life gained for each enemy hit by your Attacks", - weapon = { physicalMin = 18, physicalMax = 48, critChanceBase = 6.3, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 18, PhysicalMax = 48, critChanceBase = 6.3, attackRateBase = 1.5, }, req = { level = 46, dex = 80, int = 80, }, } itemBases["Prehistoric Claw"] = { type = "Claw", implicit = "2% of Physical Attack Damage Leeched as Life", - weapon = { physicalMin = 23, physicalMax = 61, critChanceBase = 6.5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 23, PhysicalMax = 61, critChanceBase = 6.5, attackRateBase = 1.3, }, req = { level = 49, dex = 69, int = 100, }, } itemBases["Noble Claw"] = { type = "Claw", implicit = "+18 Life gained for each Enemy hit by Attacks", - weapon = { physicalMin = 19, physicalMax = 50, critChanceBase = 6, attackRateBase = 1.6, }, + weapon = { PhysicalMin = 19, PhysicalMax = 50, critChanceBase = 6, attackRateBase = 1.6, }, req = { level = 52, dex = 105, int = 73, }, } itemBases["Eagle Claw"] = { type = "Claw", implicit = "2% of Physical Attack Damage Leeched as Life", - weapon = { physicalMin = 14, physicalMax = 56, critChanceBase = 6.3, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 14, PhysicalMax = 56, critChanceBase = 6.3, attackRateBase = 1.5, }, req = { level = 55, dex = 94, int = 94, }, } itemBases["Twin Claw"] = { type = "Claw", implicit = "+10 Life and Mana gained for each Enemy hit", - weapon = { physicalMin = 20, physicalMax = 60, critChanceBase = 6.3, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 20, PhysicalMax = 60, critChanceBase = 6.3, attackRateBase = 1.5, }, req = { level = 57, dex = 103, int = 103, }, } itemBases["Great White Claw"] = { type = "Claw", implicit = "+34 Life gained for each Enemy hit by Attacks", - weapon = { physicalMin = 27, physicalMax = 70, critChanceBase = 6.5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 27, PhysicalMax = 70, critChanceBase = 6.5, attackRateBase = 1.3, }, req = { level = 58, dex = 81, int = 117, }, } itemBases["Throat Stabber"] = { type = "Claw", implicit = "+21 Life gained for each Enemy hit by Attacks", - weapon = { physicalMin = 19, physicalMax = 65, critChanceBase = 6.3, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 19, PhysicalMax = 65, critChanceBase = 6.3, attackRateBase = 1.5, }, req = { level = 60, dex = 113, int = 113, }, } itemBases["Hellion's Paw"] = { type = "Claw", implicit = "1.6% of Physical Attack Damage Leeched as Life", - weapon = { physicalMin = 27, physicalMax = 51, critChanceBase = 6, attackRateBase = 1.6, }, + weapon = { PhysicalMin = 27, PhysicalMax = 51, critChanceBase = 6, attackRateBase = 1.6, }, req = { level = 62, dex = 131, int = 95, }, } itemBases["Eye Gouger"] = { type = "Claw", implicit = "+31 Life gained for each enemy hit by Attacks", - weapon = { physicalMin = 23, physicalMax = 61, critChanceBase = 6.3, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 23, PhysicalMax = 61, critChanceBase = 6.3, attackRateBase = 1.5, }, req = { level = 64, dex = 113, int = 113, }, } itemBases["Vaal Claw"] = { type = "Claw", implicit = "2% of Physical Attack Damage Leeched as Life", - weapon = { physicalMin = 27, physicalMax = 72, critChanceBase = 6.5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 27, PhysicalMax = 72, critChanceBase = 6.5, attackRateBase = 1.3, }, req = { level = 66, dex = 95, int = 131, }, } itemBases["Imperial Claw"] = { type = "Claw", implicit = "+25 Life gained for each Enemy hit by Attacks", - weapon = { physicalMin = 22, physicalMax = 57, critChanceBase = 6, attackRateBase = 1.6, }, + weapon = { PhysicalMin = 22, PhysicalMax = 57, critChanceBase = 6, attackRateBase = 1.6, }, req = { level = 68, dex = 131, int = 95, }, } itemBases["Terror Claw"] = { type = "Claw", implicit = "2% of Physical Attack Damage Leeched as Life", - weapon = { physicalMin = 15, physicalMax = 60, critChanceBase = 6.3, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 15, PhysicalMax = 60, critChanceBase = 6.3, attackRateBase = 1.5, }, req = { level = 70, dex = 113, int = 113, }, } itemBases["Gemini Claw"] = { type = "Claw", implicit = "+14 Life and Mana gained for each Enemy hit", - weapon = { physicalMin = 21, physicalMax = 63, critChanceBase = 6.3, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 21, PhysicalMax = 63, critChanceBase = 6.3, attackRateBase = 1.5, }, req = { level = 72, dex = 121, int = 121, }, } diff --git a/Data/Bases/dagger.lua b/Data/Bases/dagger.lua index e0a85502..fc9b23ab 100644 --- a/Data/Bases/dagger.lua +++ b/Data/Bases/dagger.lua @@ -4,150 +4,150 @@ local itemBases = ... itemBases["Glass Shank"] = { type = "Dagger", implicit = "40% increased Global Critical Strike Chance", - weapon = { physicalMin = 3, physicalMax = 10, critChanceBase = 6, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 3, PhysicalMax = 10, critChanceBase = 6, attackRateBase = 1.5, }, req = { level = 1, dex = 9, int = 6, }, } itemBases["Skinning Knife"] = { type = "Dagger", implicit = "40% increased Global Critical Strike Chance", - weapon = { physicalMin = 4, physicalMax = 16, critChanceBase = 6, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 4, PhysicalMax = 16, critChanceBase = 6, attackRateBase = 1.3, }, req = { level = 5, dex = 16, int = 11, }, } itemBases["Carving Knife"] = { type = "Dagger", implicit = "40% increased Global Critical Strike Chance", - weapon = { physicalMin = 2, physicalMax = 22, critChanceBase = 6.6, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 2, PhysicalMax = 22, critChanceBase = 6.6, attackRateBase = 1.4, }, req = { level = 10, dex = 18, int = 26, }, } itemBases["Stiletto"] = { type = "Dagger", implicit = "40% increased Global Critical Strike Chance", - weapon = { physicalMin = 6, physicalMax = 23, critChanceBase = 6.3, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 6, PhysicalMax = 23, critChanceBase = 6.3, attackRateBase = 1.5, }, req = { level = 15, dex = 30, int = 30, }, } itemBases["Boot Knife"] = { type = "Dagger", implicit = "40% increased Global Critical Strike Chance", - weapon = { physicalMin = 8, physicalMax = 30, critChanceBase = 6.6, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 8, PhysicalMax = 30, critChanceBase = 6.6, attackRateBase = 1.4, }, req = { level = 20, dex = 31, int = 45, }, } itemBases["Copper Kris"] = { type = "Dagger", implicit = "80% increased Global Critical Strike Chance", - weapon = { physicalMin = 10, physicalMax = 39, critChanceBase = 7, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 10, PhysicalMax = 39, critChanceBase = 7, attackRateBase = 1.2, }, req = { level = 24, dex = 28, int = 60, }, } itemBases["Skean"] = { type = "Dagger", implicit = "40% increased Global Critical Strike Chance", - weapon = { physicalMin = 9, physicalMax = 37, critChanceBase = 6.6, attackRateBase = 1.45, }, + weapon = { PhysicalMin = 9, PhysicalMax = 37, critChanceBase = 6.6, attackRateBase = 1.45, }, req = { level = 28, dex = 42, int = 60, }, } itemBases["Imp Dagger"] = { type = "Dagger", implicit = "60% increased Global Critical Strike Chance", - weapon = { physicalMin = 12, physicalMax = 49, critChanceBase = 7, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 12, PhysicalMax = 49, critChanceBase = 7, attackRateBase = 1.2, }, req = { level = 32, dex = 36, int = 78, }, } itemBases["Prong Dagger"] = { type = "Dagger", implicit = "4% Chance to Block", - weapon = { physicalMin = 13, physicalMax = 51, critChanceBase = 6.5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 13, PhysicalMax = 51, critChanceBase = 6.5, attackRateBase = 1.3, }, req = { level = 36, dex = 55, int = 77, }, } itemBases["Flaying Knife"] = { type = "Dagger", implicit = "40% increased Global Critical Strike Chance", - weapon = { physicalMin = 14, physicalMax = 56, critChanceBase = 6, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 14, PhysicalMax = 56, critChanceBase = 6, attackRateBase = 1.2, }, req = { level = 35, dex = 73, int = 51, }, } itemBases["Butcher Knife"] = { type = "Dagger", implicit = "40% increased Global Critical Strike Chance", - weapon = { physicalMin = 6, physicalMax = 54, critChanceBase = 6.6, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 6, PhysicalMax = 54, critChanceBase = 6.6, attackRateBase = 1.4, }, req = { level = 38, dex = 55, int = 79, }, } itemBases["Poignard"] = { type = "Dagger", implicit = "40% increased Global Critical Strike Chance", - weapon = { physicalMin = 12, physicalMax = 48, critChanceBase = 6.3, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 12, PhysicalMax = 48, critChanceBase = 6.3, attackRateBase = 1.5, }, req = { level = 41, dex = 72, int = 72, }, } itemBases["Boot Blade"] = { type = "Dagger", implicit = "40% increased Global Critical Strike Chance", - weapon = { physicalMin = 14, physicalMax = 55, critChanceBase = 6.6, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 14, PhysicalMax = 55, critChanceBase = 6.6, attackRateBase = 1.4, }, req = { level = 44, dex = 63, int = 90, }, } itemBases["Golden Kris"] = { type = "Dagger", implicit = "80% increased Global Critical Strike Chance", - weapon = { physicalMin = 16, physicalMax = 65, critChanceBase = 7, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 16, PhysicalMax = 65, critChanceBase = 7, attackRateBase = 1.2, }, req = { level = 47, dex = 51, int = 110, }, } itemBases["Royal Skean"] = { type = "Dagger", implicit = "40% increased Global Critical Strike Chance", - weapon = { physicalMin = 15, physicalMax = 59, critChanceBase = 6.6, attackRateBase = 1.45, }, + weapon = { PhysicalMin = 15, PhysicalMax = 59, critChanceBase = 6.6, attackRateBase = 1.45, }, req = { level = 50, dex = 71, int = 102, }, } itemBases["Fiend Dagger"] = { type = "Dagger", implicit = "60% increased Global Critical Strike Chance", - weapon = { physicalMin = 19, physicalMax = 76, critChanceBase = 7, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 19, PhysicalMax = 76, critChanceBase = 7, attackRateBase = 1.2, }, req = { level = 53, dex = 58, int = 123, }, } itemBases["Trisula"] = { type = "Dagger", implicit = "4% Chance to Block", - weapon = { physicalMin = 19, physicalMax = 74, critChanceBase = 6.5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 19, PhysicalMax = 74, critChanceBase = 6.5, attackRateBase = 1.3, }, req = { level = 55, dex = 89, int = 106, }, } itemBases["Gutting Knife"] = { type = "Dagger", implicit = "40% increased Global Critical Strike Chance", - weapon = { physicalMin = 21, physicalMax = 84, critChanceBase = 6, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 21, PhysicalMax = 84, critChanceBase = 6, attackRateBase = 1.2, }, req = { level = 56, dex = 113, int = 78, }, } itemBases["Slaughter Knife"] = { type = "Dagger", implicit = "40% increased Global Critical Strike Chance", - weapon = { physicalMin = 9, physicalMax = 78, critChanceBase = 6.6, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 9, PhysicalMax = 78, critChanceBase = 6.6, attackRateBase = 1.4, }, req = { level = 58, dex = 81, int = 117, }, } itemBases["Ambusher"] = { type = "Dagger", implicit = "40% increased Global Critical Strike Chance", - weapon = { physicalMin = 17, physicalMax = 67, critChanceBase = 6.3, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 17, PhysicalMax = 67, critChanceBase = 6.3, attackRateBase = 1.5, }, req = { level = 60, dex = 113, int = 113, }, } itemBases["Ezomyte Dagger"] = { type = "Dagger", implicit = "40% increased Global Critical Strike Chance", - weapon = { physicalMin = 18, physicalMax = 72, critChanceBase = 6.6, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 18, PhysicalMax = 72, critChanceBase = 6.6, attackRateBase = 1.4, }, req = { level = 62, dex = 95, int = 131, }, } itemBases["Platinum Kris"] = { type = "Dagger", implicit = "80% increased Global Critical Strike Chance", - weapon = { physicalMin = 20, physicalMax = 81, critChanceBase = 7, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 20, PhysicalMax = 81, critChanceBase = 7, attackRateBase = 1.2, }, req = { level = 64, dex = 76, int = 149, }, } itemBases["Imperial Skean"] = { type = "Dagger", implicit = "40% increased Global Critical Strike Chance", - weapon = { physicalMin = 17, physicalMax = 69, critChanceBase = 6.6, attackRateBase = 1.45, }, + weapon = { PhysicalMin = 17, PhysicalMax = 69, critChanceBase = 6.6, attackRateBase = 1.45, }, req = { level = 66, dex = 95, int = 131, }, } itemBases["Demon Dagger"] = { type = "Dagger", implicit = "60% increased Global Critical Strike Chance", - weapon = { physicalMin = 21, physicalMax = 85, critChanceBase = 7, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 21, PhysicalMax = 85, critChanceBase = 7, attackRateBase = 1.2, }, req = { level = 68, dex = 76, int = 149, }, } itemBases["Sai"] = { type = "Dagger", implicit = "6% Chance to Block", - weapon = { physicalMin = 20, physicalMax = 80, critChanceBase = 6.5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 20, PhysicalMax = 80, critChanceBase = 6.5, attackRateBase = 1.3, }, req = { level = 70, dex = 121, int = 121, }, } diff --git a/Data/Bases/mace.lua b/Data/Bases/mace.lua index ddf68cdf..4c5372c5 100644 --- a/Data/Bases/mace.lua +++ b/Data/Bases/mace.lua @@ -4,151 +4,151 @@ local itemBases = ... itemBases["Driftwood Club"] = { type = "One Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 5, physicalMax = 7, critChanceBase = 5, attackRateBase = 1.45, }, + weapon = { PhysicalMin = 5, PhysicalMax = 7, critChanceBase = 5, attackRateBase = 1.45, }, req = { str = 14, }, } itemBases["Tribal Club"] = { type = "One Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 7, physicalMax = 12, critChanceBase = 5, attackRateBase = 1.35, }, + weapon = { PhysicalMin = 7, PhysicalMax = 12, critChanceBase = 5, attackRateBase = 1.35, }, req = { level = 5, str = 26, }, } itemBases["Spiked Club"] = { type = "One Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 11, physicalMax = 14, critChanceBase = 5, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 11, PhysicalMax = 14, critChanceBase = 5, attackRateBase = 1.4, }, req = { level = 10, str = 41, }, } itemBases["Stone Hammer"] = { type = "One Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 14, physicalMax = 27, critChanceBase = 5, attackRateBase = 1.15, }, + weapon = { PhysicalMin = 14, PhysicalMax = 27, critChanceBase = 5, attackRateBase = 1.15, }, req = { level = 15, str = 56, }, } itemBases["War Hammer"] = { type = "One Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 11, physicalMax = 26, critChanceBase = 5, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 11, PhysicalMax = 26, critChanceBase = 5, attackRateBase = 1.4, }, req = { level = 20, str = 71, }, } itemBases["Bladed Mace"] = { type = "One Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 18, physicalMax = 30, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 18, PhysicalMax = 30, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 24, str = 83, }, } itemBases["Ceremonial Mace"] = { type = "One Handed Mace", implicit = "40% increased Stun Duration on enemies", - weapon = { physicalMin = 26, physicalMax = 33, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 26, PhysicalMax = 33, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 28, str = 95, }, } itemBases["Dream Mace"] = { type = "One Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 17, physicalMax = 35, critChanceBase = 5, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 17, PhysicalMax = 35, critChanceBase = 5, attackRateBase = 1.4, }, req = { level = 32, str = 107, }, } itemBases["Wyrm Mace"] = { type = "One Handed Mace", implicit = "4% increased Attack Speed", - weapon = { physicalMin = 23, physicalMax = 35, critChanceBase = 5, attackRateBase = 1.35, }, + weapon = { PhysicalMin = 23, PhysicalMax = 35, critChanceBase = 5, attackRateBase = 1.35, }, req = { level = 34, str = 118, }, } itemBases["Petrified Club"] = { type = "One Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 25, physicalMax = 41, critChanceBase = 5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 25, PhysicalMax = 41, critChanceBase = 5, attackRateBase = 1.25, }, req = { level = 35, str = 116, }, } itemBases["Barbed Club"] = { type = "One Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 27, physicalMax = 34, critChanceBase = 5, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 27, PhysicalMax = 34, critChanceBase = 5, attackRateBase = 1.4, }, req = { level = 38, str = 125, }, } itemBases["Rock Breaker"] = { type = "One Handed Mace", implicit = "40% increased Stun Duration on enemies", - weapon = { physicalMin = 30, physicalMax = 55, critChanceBase = 5, attackRateBase = 1.15, }, + weapon = { PhysicalMin = 30, PhysicalMax = 55, critChanceBase = 5, attackRateBase = 1.15, }, req = { level = 41, str = 134, }, } itemBases["Battle Hammer"] = { type = "One Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 20, physicalMax = 48, critChanceBase = 5, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 20, PhysicalMax = 48, critChanceBase = 5, attackRateBase = 1.4, }, req = { level = 44, str = 143, }, } itemBases["Flanged Mace"] = { type = "One Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 30, physicalMax = 50, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 30, PhysicalMax = 50, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 47, str = 152, }, } itemBases["Ornate Mace"] = { type = "One Handed Mace", implicit = "40% increased Stun Duration on enemies", - weapon = { physicalMin = 42, physicalMax = 53, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 42, PhysicalMax = 53, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 50, str = 161, }, } itemBases["Phantom Mace"] = { type = "One Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 26, physicalMax = 54, critChanceBase = 5, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 26, PhysicalMax = 54, critChanceBase = 5, attackRateBase = 1.4, }, req = { level = 53, str = 170, }, } itemBases["Dragon Mace"] = { type = "One Handed Mace", implicit = "4% increased Attack Speed", - weapon = { physicalMin = 35, physicalMax = 53, critChanceBase = 5, attackRateBase = 1.35, }, + weapon = { PhysicalMin = 35, PhysicalMax = 53, critChanceBase = 5, attackRateBase = 1.35, }, req = { level = 55, str = 184, }, } itemBases["Ancestral Club"] = { type = "One Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 37, physicalMax = 62, critChanceBase = 5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 37, PhysicalMax = 62, critChanceBase = 5, attackRateBase = 1.25, }, req = { level = 56, str = 179, }, } itemBases["Tenderizer"] = { type = "One Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 38, physicalMax = 49, critChanceBase = 5, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 38, PhysicalMax = 49, critChanceBase = 5, attackRateBase = 1.4, }, req = { level = 58, str = 185, }, } itemBases["Gavel"] = { type = "One Handed Mace", implicit = "40% increased Stun Duration on enemies", - weapon = { physicalMin = 42, physicalMax = 77, critChanceBase = 5, attackRateBase = 1.15, }, + weapon = { PhysicalMin = 42, PhysicalMax = 77, critChanceBase = 5, attackRateBase = 1.15, }, req = { level = 60, str = 212, }, } itemBases["Legion Hammer"] = { type = "One Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 27, physicalMax = 63, critChanceBase = 5, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 27, PhysicalMax = 63, critChanceBase = 5, attackRateBase = 1.4, }, req = { level = 62, str = 212, }, } itemBases["Pernarch"] = { type = "One Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 37, physicalMax = 62, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 37, PhysicalMax = 62, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 64, str = 212, }, } itemBases["Auric Mace"] = { type = "One Handed Mace", implicit = "40% increased Stun Duration on enemies", - weapon = { physicalMin = 49, physicalMax = 63, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 49, PhysicalMax = 63, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 66, str = 212, }, } itemBases["Nightmare Mace"] = { type = "One Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 29, physicalMax = 61, critChanceBase = 5, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 29, PhysicalMax = 61, critChanceBase = 5, attackRateBase = 1.4, }, req = { level = 68, str = 212, }, } itemBases["Behemoth Mace"] = { type = "One Handed Mace", implicit = "6% increased Attack Speed", - weapon = { physicalMin = 38, physicalMax = 57, critChanceBase = 5, attackRateBase = 1.35, }, + weapon = { PhysicalMin = 38, PhysicalMax = 57, critChanceBase = 5, attackRateBase = 1.35, }, req = { level = 70, str = 220, }, } @@ -156,151 +156,151 @@ itemBases["Behemoth Mace"] = { itemBases["Driftwood Sceptre"] = { type = "One Handed Mace", implicit = "10% increased Elemental Damage", - weapon = { physicalMin = 5, physicalMax = 7, critChanceBase = 6, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 5, PhysicalMax = 7, critChanceBase = 6, attackRateBase = 1.4, }, req = { level = 1, str = 8, int = 8, }, } itemBases["Darkwood Sceptre"] = { type = "One Handed Mace", implicit = "10% increased Elemental Damage", - weapon = { physicalMin = 7, physicalMax = 10, critChanceBase = 6, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 7, PhysicalMax = 10, critChanceBase = 6, attackRateBase = 1.5, }, req = { level = 5, str = 14, int = 14, }, } itemBases["Bronze Sceptre"] = { type = "One Handed Mace", implicit = "10% increased Elemental Damage", - weapon = { physicalMin = 10, physicalMax = 19, critChanceBase = 6, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 10, PhysicalMax = 19, critChanceBase = 6, attackRateBase = 1.25, }, req = { level = 10, str = 22, int = 22, }, } itemBases["Quartz Sceptre"] = { type = "One Handed Mace", implicit = "20% increased Elemental Damage", - weapon = { physicalMin = 14, physicalMax = 21, critChanceBase = 7, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 14, PhysicalMax = 21, critChanceBase = 7, attackRateBase = 1.25, }, req = { level = 15, str = 25, int = 35, }, } itemBases["Iron Sceptre"] = { type = "One Handed Mace", implicit = "10% increased Elemental Damage", - weapon = { physicalMin = 18, physicalMax = 27, critChanceBase = 6, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 18, PhysicalMax = 27, critChanceBase = 6, attackRateBase = 1.25, }, req = { level = 20, str = 38, int = 38, }, } itemBases["Ochre Sceptre"] = { type = "One Handed Mace", implicit = "10% increased Elemental Damage", - weapon = { physicalMin = 15, physicalMax = 28, critChanceBase = 6, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 15, PhysicalMax = 28, critChanceBase = 6, attackRateBase = 1.4, }, req = { level = 24, str = 44, int = 44, }, } itemBases["Ritual Sceptre"] = { type = "One Handed Mace", implicit = "10% increased Elemental Damage", - weapon = { physicalMin = 18, physicalMax = 41, critChanceBase = 6, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 18, PhysicalMax = 41, critChanceBase = 6, attackRateBase = 1.2, }, req = { level = 28, str = 51, int = 51, }, } itemBases["Shadow Sceptre"] = { type = "One Handed Mace", implicit = "15% increased Elemental Damage", - weapon = { physicalMin = 25, physicalMax = 37, critChanceBase = 6.5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 25, PhysicalMax = 37, critChanceBase = 6.5, attackRateBase = 1.25, }, req = { level = 32, str = 52, int = 62, }, } itemBases["Grinning Fetish"] = { type = "One Handed Mace", implicit = "10% increased Elemental Damage", - weapon = { physicalMin = 21, physicalMax = 32, critChanceBase = 6, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 21, PhysicalMax = 32, critChanceBase = 6, attackRateBase = 1.5, }, req = { level = 35, str = 62, int = 62, }, } itemBases["Horned Sceptre"] = { type = "One Handed Mace", implicit = "Damage Penetrates 1% Elemental Resistances", - weapon = { physicalMin = 22, physicalMax = 42, critChanceBase = 6, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 22, PhysicalMax = 42, critChanceBase = 6, attackRateBase = 1.3, }, req = { level = 36, str = 66, int = 66, }, } itemBases["Sekhem"] = { type = "One Handed Mace", implicit = "10% increased Elemental Damage", - weapon = { physicalMin = 25, physicalMax = 46, critChanceBase = 6, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 25, PhysicalMax = 46, critChanceBase = 6, attackRateBase = 1.25, }, req = { level = 38, str = 67, int = 67, }, } itemBases["Crystal Sceptre"] = { type = "One Handed Mace", implicit = "20% increased Elemental Damage", - weapon = { physicalMin = 29, physicalMax = 43, critChanceBase = 7, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 29, PhysicalMax = 43, critChanceBase = 7, attackRateBase = 1.25, }, req = { level = 41, str = 59, int = 85, }, } itemBases["Lead Sceptre"] = { type = "One Handed Mace", implicit = "10% increased Elemental Damage", - weapon = { physicalMin = 32, physicalMax = 48, critChanceBase = 6, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 32, PhysicalMax = 48, critChanceBase = 6, attackRateBase = 1.25, }, req = { level = 44, str = 77, int = 77, }, } itemBases["Blood Sceptre"] = { type = "One Handed Mace", implicit = "10% increased Elemental Damage", - weapon = { physicalMin = 25, physicalMax = 47, critChanceBase = 6, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 25, PhysicalMax = 47, critChanceBase = 6, attackRateBase = 1.4, }, req = { level = 47, str = 81, int = 81, }, } itemBases["Royal Sceptre"] = { type = "One Handed Mace", implicit = "10% increased Elemental Damage", - weapon = { physicalMin = 29, physicalMax = 67, critChanceBase = 6, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 29, PhysicalMax = 67, critChanceBase = 6, attackRateBase = 1.2, }, req = { level = 50, str = 86, int = 86, }, } itemBases["Abyssal Sceptre"] = { type = "One Handed Mace", implicit = "15% increased Elemental Damage", - weapon = { physicalMin = 38, physicalMax = 57, critChanceBase = 6.5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 38, PhysicalMax = 57, critChanceBase = 6.5, attackRateBase = 1.25, }, req = { level = 53, str = 83, int = 99, }, } itemBases["Stag Sceptre"] = { type = "One Handed Mace", implicit = "Damage Penetrates 1% Elemental Resistances", - weapon = { physicalMin = 32, physicalMax = 60, critChanceBase = 6, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 32, PhysicalMax = 60, critChanceBase = 6, attackRateBase = 1.3, }, req = { level = 55, str = 98, int = 98, }, } itemBases["Karui Sceptre"] = { type = "One Handed Mace", implicit = "10% increased Elemental Damage", - weapon = { physicalMin = 32, physicalMax = 47, critChanceBase = 6, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 32, PhysicalMax = 47, critChanceBase = 6, attackRateBase = 1.5, }, req = { level = 56, str = 96, int = 96, }, } itemBases["Tyrant's Sekhem"] = { type = "One Handed Mace", implicit = "10% increased Elemental Damage", - weapon = { physicalMin = 36, physicalMax = 67, critChanceBase = 6, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 36, PhysicalMax = 67, critChanceBase = 6, attackRateBase = 1.25, }, req = { level = 58, str = 99, int = 99, }, } itemBases["Opal Sceptre"] = { type = "One Handed Mace", implicit = "20% increased Elemental Damage", - weapon = { physicalMin = 40, physicalMax = 60, critChanceBase = 7, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 40, PhysicalMax = 60, critChanceBase = 7, attackRateBase = 1.25, }, req = { level = 60, str = 95, int = 131, }, } itemBases["Platinum Sceptre"] = { type = "One Handed Mace", implicit = "10% increased Elemental Damage", - weapon = { physicalMin = 42, physicalMax = 63, critChanceBase = 6, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 42, PhysicalMax = 63, critChanceBase = 6, attackRateBase = 1.25, }, req = { level = 62, str = 113, int = 113, }, } itemBases["Vaal Sceptre"] = { type = "One Handed Mace", implicit = "10% increased Elemental Damage", - weapon = { physicalMin = 31, physicalMax = 58, critChanceBase = 6, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 31, PhysicalMax = 58, critChanceBase = 6, attackRateBase = 1.4, }, req = { level = 64, str = 113, int = 113, }, } itemBases["Carnal Sceptre"] = { type = "One Handed Mace", implicit = "10% increased Elemental Damage", - weapon = { physicalMin = 34, physicalMax = 78, critChanceBase = 6, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 34, PhysicalMax = 78, critChanceBase = 6, attackRateBase = 1.2, }, req = { level = 66, str = 113, int = 113, }, } itemBases["Void Sceptre"] = { type = "One Handed Mace", implicit = "15% increased Elemental Damage", - weapon = { physicalMin = 42, physicalMax = 63, critChanceBase = 6.5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 42, PhysicalMax = 63, critChanceBase = 6.5, attackRateBase = 1.25, }, req = { level = 68, str = 104, int = 122, }, } itemBases["Sambar Sceptre"] = { type = "One Handed Mace", implicit = "Damage Penetrates 2% Elemental Resistances", - weapon = { physicalMin = 35, physicalMax = 65, critChanceBase = 6, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 35, PhysicalMax = 65, critChanceBase = 6, attackRateBase = 1.3, }, req = { level = 70, str = 121, int = 112, }, } @@ -308,132 +308,132 @@ itemBases["Sambar Sceptre"] = { itemBases["Driftwood Maul"] = { type = "Two Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 9, physicalMax = 13, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 9, PhysicalMax = 13, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 3, str = 20, }, } itemBases["Tribal Maul"] = { type = "Two Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 15, physicalMax = 23, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 15, PhysicalMax = 23, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 8, str = 35, }, } itemBases["Mallet"] = { type = "Two Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 15, physicalMax = 30, critChanceBase = 5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 15, PhysicalMax = 30, critChanceBase = 5, attackRateBase = 1.25, }, req = { level = 12, str = 47, }, } itemBases["Sledgehammer"] = { type = "Two Handed Mace", implicit = "40% increased Stun Duration on enemies", - weapon = { physicalMin = 21, physicalMax = 32, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 21, PhysicalMax = 32, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 17, str = 62, }, } itemBases["Jagged Maul"] = { type = "Two Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 24, physicalMax = 45, critChanceBase = 5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 24, PhysicalMax = 45, critChanceBase = 5, attackRateBase = 1.25, }, req = { level = 22, str = 77, }, } itemBases["Brass Maul"] = { type = "Two Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 34, physicalMax = 51, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 34, PhysicalMax = 51, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 27, str = 92, }, } itemBases["Fright Maul"] = { type = "Two Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 39, physicalMax = 53, critChanceBase = 5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 39, PhysicalMax = 53, critChanceBase = 5, attackRateBase = 1.25, }, req = { level = 32, str = 107, }, } itemBases["Morning Star"] = { type = "Two Handed Mace", implicit = "4% increased Radius of Area Skills", - weapon = { physicalMin = 39, physicalMax = 58, critChanceBase = 5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 39, PhysicalMax = 58, critChanceBase = 5, attackRateBase = 1.25, }, req = { level = 34, str = 118, }, } itemBases["Totemic Maul"] = { type = "Two Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 49, physicalMax = 73, critChanceBase = 5, attackRateBase = 1.1, }, + weapon = { PhysicalMin = 49, PhysicalMax = 73, critChanceBase = 5, attackRateBase = 1.1, }, req = { level = 36, str = 119, }, } itemBases["Great Mallet"] = { type = "Two Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 37, physicalMax = 76, critChanceBase = 5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 37, PhysicalMax = 76, critChanceBase = 5, attackRateBase = 1.25, }, req = { level = 40, str = 131, }, } itemBases["Steelhead"] = { type = "Two Handed Mace", implicit = "40% increased Stun Duration on enemies", - weapon = { physicalMin = 47, physicalMax = 70, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 47, PhysicalMax = 70, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 44, str = 143, }, } itemBases["Spiny Maul"] = { type = "Two Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 47, physicalMax = 88, critChanceBase = 5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 47, PhysicalMax = 88, critChanceBase = 5, attackRateBase = 1.25, }, req = { level = 48, str = 155, }, } itemBases["Plated Maul"] = { type = "Two Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 62, physicalMax = 92, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 62, PhysicalMax = 92, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 51, str = 164, }, } itemBases["Dread Maul"] = { type = "Two Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 66, physicalMax = 89, critChanceBase = 5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 66, PhysicalMax = 89, critChanceBase = 5, attackRateBase = 1.25, }, req = { level = 54, str = 173, }, } itemBases["Solar Maul"] = { type = "Two Handed Mace", implicit = "4% increased Radius of Area Skills", - weapon = { physicalMin = 64, physicalMax = 97, critChanceBase = 5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 64, PhysicalMax = 97, critChanceBase = 5, attackRateBase = 1.25, }, req = { level = 56, str = 187, }, } itemBases["Karui Maul"] = { type = "Two Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 79, physicalMax = 118, critChanceBase = 5, attackRateBase = 1.1, }, + weapon = { PhysicalMin = 79, PhysicalMax = 118, critChanceBase = 5, attackRateBase = 1.1, }, req = { level = 57, str = 182, }, } itemBases["Colossus Mallet"] = { type = "Two Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 57, physicalMax = 118, critChanceBase = 5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 57, PhysicalMax = 118, critChanceBase = 5, attackRateBase = 1.25, }, req = { level = 59, str = 188, }, } itemBases["Piledriver"] = { type = "Two Handed Mace", implicit = "40% increased Stun Duration on enemies", - weapon = { physicalMin = 67, physicalMax = 100, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 67, PhysicalMax = 100, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 61, str = 212, }, } itemBases["Meatgrinder"] = { type = "Two Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 63, physicalMax = 117, critChanceBase = 5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 63, PhysicalMax = 117, critChanceBase = 5, attackRateBase = 1.25, }, req = { level = 63, str = 212, }, } itemBases["Imperial Maul"] = { type = "Two Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 74, physicalMax = 111, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 74, PhysicalMax = 111, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 65, str = 212, }, } itemBases["Terror Maul"] = { type = "Two Handed Mace", implicit = "20% increased Stun Duration on enemies", - weapon = { physicalMin = 75, physicalMax = 102, critChanceBase = 5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 75, PhysicalMax = 102, critChanceBase = 5, attackRateBase = 1.25, }, req = { level = 67, str = 212, }, } itemBases["Coronal Maul"] = { type = "Two Handed Mace", implicit = "6% increased Radius of Area Skills", - weapon = { physicalMin = 74, physicalMax = 110, critChanceBase = 5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 74, PhysicalMax = 110, critChanceBase = 5, attackRateBase = 1.25, }, req = { level = 69, str = 220, }, } diff --git a/Data/Bases/staff.lua b/Data/Bases/staff.lua index 4813e226..016c137a 100644 --- a/Data/Bases/staff.lua +++ b/Data/Bases/staff.lua @@ -4,132 +4,132 @@ local itemBases = ... itemBases["Gnarled Branch"] = { type = "Staff", implicit = "12% Chance to Block", - weapon = { physicalMin = 8, physicalMax = 17, critChanceBase = 6.4, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 8, PhysicalMax = 17, critChanceBase = 6.4, attackRateBase = 1.3, }, req = { }, } itemBases["Primitive Staff"] = { type = "Staff", implicit = "12% Chance to Block", - weapon = { physicalMin = 9, physicalMax = 28, critChanceBase = 6.8, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 9, PhysicalMax = 28, critChanceBase = 6.8, attackRateBase = 1.25, }, req = { level = 9, str = 20, int = 20, }, } itemBases["Long Staff"] = { type = "Staff", implicit = "12% Chance to Block", - weapon = { physicalMin = 17, physicalMax = 28, critChanceBase = 6.4, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 17, PhysicalMax = 28, critChanceBase = 6.4, attackRateBase = 1.3, }, req = { level = 13, str = 27, int = 27, }, } itemBases["Iron Staff"] = { type = "Staff", implicit = "12% Chance to Block", - weapon = { physicalMin = 16, physicalMax = 47, critChanceBase = 7, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 16, PhysicalMax = 47, critChanceBase = 7, attackRateBase = 1.2, }, req = { level = 18, str = 35, int = 35, }, } itemBases["Coiled Staff"] = { type = "Staff", implicit = "18% Chance to Block", - weapon = { physicalMin = 23, physicalMax = 48, critChanceBase = 6.4, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 23, PhysicalMax = 48, critChanceBase = 6.4, attackRateBase = 1.2, }, req = { level = 23, str = 43, int = 43, }, } itemBases["Royal Staff"] = { type = "Staff", implicit = "12% Chance to Block", - weapon = { physicalMin = 23, physicalMax = 70, critChanceBase = 7.2, attackRateBase = 1.15, }, + weapon = { PhysicalMin = 23, PhysicalMax = 70, critChanceBase = 7.2, attackRateBase = 1.15, }, req = { level = 28, str = 51, int = 51, }, } itemBases["Vile Staff"] = { type = "Staff", implicit = "12% Chance to Block", - weapon = { physicalMin = 33, physicalMax = 62, critChanceBase = 6.6, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 33, PhysicalMax = 62, critChanceBase = 6.6, attackRateBase = 1.25, }, req = { level = 33, str = 59, int = 59, }, } itemBases["Crescent Staff"] = { type = "Staff", implicit = "60% increased Global Critical Strike Chance", - weapon = { physicalMin = 35, physicalMax = 73, critChanceBase = 6.4, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 35, PhysicalMax = 73, critChanceBase = 6.4, attackRateBase = 1.2, }, req = { level = 36, str = 66, int = 66, }, } itemBases["Woodful Staff"] = { type = "Staff", implicit = "12% Chance to Block", - weapon = { physicalMin = 29, physicalMax = 88, critChanceBase = 6.8, attackRateBase = 1.15, }, + weapon = { PhysicalMin = 29, PhysicalMax = 88, critChanceBase = 6.8, attackRateBase = 1.15, }, req = { level = 37, str = 65, int = 65, }, } itemBases["Quarterstaff"] = { type = "Staff", implicit = "12% Chance to Block", - weapon = { physicalMin = 41, physicalMax = 68, critChanceBase = 6.4, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 41, PhysicalMax = 68, critChanceBase = 6.4, attackRateBase = 1.3, }, req = { level = 41, str = 72, int = 72, }, } itemBases["Military Staff"] = { type = "Staff", implicit = "12% Chance to Block", - weapon = { physicalMin = 34, physicalMax = 101, critChanceBase = 7, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 34, PhysicalMax = 101, critChanceBase = 7, attackRateBase = 1.2, }, req = { level = 45, str = 78, int = 78, }, } itemBases["Serpentine Staff"] = { type = "Staff", implicit = "18% Chance to Block", - weapon = { physicalMin = 46, physicalMax = 95, critChanceBase = 6.4, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 46, PhysicalMax = 95, critChanceBase = 6.4, attackRateBase = 1.2, }, req = { level = 49, str = 85, int = 85, }, } itemBases["Highborn Staff"] = { type = "Staff", implicit = "12% Chance to Block", - weapon = { physicalMin = 42, physicalMax = 125, critChanceBase = 7.2, attackRateBase = 1.15, }, + weapon = { PhysicalMin = 42, PhysicalMax = 125, critChanceBase = 7.2, attackRateBase = 1.15, }, req = { level = 52, str = 89, int = 89, }, } itemBases["Foul Staff"] = { type = "Staff", implicit = "12% Chance to Block", - weapon = { physicalMin = 55, physicalMax = 103, critChanceBase = 6.6, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 55, PhysicalMax = 103, critChanceBase = 6.6, attackRateBase = 1.25, }, req = { level = 55, str = 94, int = 94, }, } itemBases["Moon Staff"] = { type = "Staff", implicit = "60% increased Global Critical Strike Chance", - weapon = { physicalMin = 57, physicalMax = 118, critChanceBase = 6.4, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 57, PhysicalMax = 118, critChanceBase = 6.4, attackRateBase = 1.2, }, req = { level = 57, str = 101, int = 101, }, } itemBases["Primordial Staff"] = { type = "Staff", implicit = "12% Chance to Block", - weapon = { physicalMin = 47, physicalMax = 141, critChanceBase = 6.8, attackRateBase = 1.15, }, + weapon = { PhysicalMin = 47, PhysicalMax = 141, critChanceBase = 6.8, attackRateBase = 1.15, }, req = { level = 58, str = 99, int = 99, }, } itemBases["Lathi"] = { type = "Staff", implicit = "12% Chance to Block", - weapon = { physicalMin = 62, physicalMax = 103, critChanceBase = 6.4, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 62, PhysicalMax = 103, critChanceBase = 6.4, attackRateBase = 1.3, }, req = { level = 60, str = 113, int = 113, }, } itemBases["Ezomyte Staff"] = { type = "Staff", implicit = "12% Chance to Block", - weapon = { physicalMin = 46, physicalMax = 138, critChanceBase = 7, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 46, PhysicalMax = 138, critChanceBase = 7, attackRateBase = 1.2, }, req = { level = 62, str = 113, int = 113, }, } itemBases["Maelstrom Staff"] = { type = "Staff", implicit = "18% Chance to Block", - weapon = { physicalMin = 57, physicalMax = 119, critChanceBase = 6.4, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 57, PhysicalMax = 119, critChanceBase = 6.4, attackRateBase = 1.2, }, req = { level = 64, str = 113, int = 113, }, } itemBases["Imperial Staff"] = { type = "Staff", implicit = "12% Chance to Block", - weapon = { physicalMin = 49, physicalMax = 147, critChanceBase = 7.2, attackRateBase = 1.15, }, + weapon = { PhysicalMin = 49, PhysicalMax = 147, critChanceBase = 7.2, attackRateBase = 1.15, }, req = { level = 66, str = 113, int = 113, }, } itemBases["Judgement Staff"] = { type = "Staff", implicit = "12% Chance to Block", - weapon = { physicalMin = 61, physicalMax = 113, critChanceBase = 6.6, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 61, PhysicalMax = 113, critChanceBase = 6.6, attackRateBase = 1.25, }, req = { level = 68, str = 113, int = 113, }, } itemBases["Eclipse Staff"] = { type = "Staff", implicit = "80% increased Global Critical Strike Chance", - weapon = { physicalMin = 60, physicalMax = 125, critChanceBase = 6.4, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 60, PhysicalMax = 125, critChanceBase = 6.4, attackRateBase = 1.2, }, req = { level = 70, str = 117, int = 117, }, } diff --git a/Data/Bases/sword.lua b/Data/Bases/sword.lua index d959c60d..f06a1aac 100644 --- a/Data/Bases/sword.lua +++ b/Data/Bases/sword.lua @@ -4,151 +4,151 @@ local itemBases = ... itemBases["Rusted Sword"] = { type = "One Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 4, physicalMax = 8, critChanceBase = 5, attackRateBase = 1.45, }, + weapon = { PhysicalMin = 4, PhysicalMax = 8, critChanceBase = 5, attackRateBase = 1.45, }, req = { level = 1, str = 8, dex = 8, }, } itemBases["Copper Sword"] = { type = "One Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 6, physicalMax = 12, critChanceBase = 5, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 6, PhysicalMax = 12, critChanceBase = 5, attackRateBase = 1.4, }, req = { level = 5, str = 14, dex = 14, }, } itemBases["Sabre"] = { type = "One Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 4, physicalMax = 18, critChanceBase = 5, attackRateBase = 1.55, }, + weapon = { PhysicalMin = 4, PhysicalMax = 18, critChanceBase = 5, attackRateBase = 1.55, }, req = { level = 10, str = 18, dex = 26, }, } itemBases["Broad Sword"] = { type = "One Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 14, physicalMax = 21, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 14, PhysicalMax = 21, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 15, str = 30, dex = 30, }, } itemBases["War Sword"] = { type = "One Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 16, physicalMax = 30, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 16, PhysicalMax = 30, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 20, str = 41, dex = 35, }, } itemBases["Ancient Sword"] = { type = "One Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 17, physicalMax = 31, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 17, PhysicalMax = 31, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 24, str = 44, dex = 44, }, } itemBases["Elegant Sword"] = { type = "One Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 17, physicalMax = 27, critChanceBase = 5, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 17, PhysicalMax = 27, critChanceBase = 5, attackRateBase = 1.5, }, req = { level = 28, str = 46, dex = 55, }, } itemBases["Dusk Blade"] = { type = "One Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 15, physicalMax = 43, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 15, PhysicalMax = 43, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 32, str = 57, dex = 57, }, } itemBases["Hook Sword"] = { type = "One Handed Sword", implicit = "2% chance to Dodge Attacks", - weapon = { physicalMin = 23, physicalMax = 49, critChanceBase = 5, attackRateBase = 1.15, }, + weapon = { PhysicalMin = 23, PhysicalMax = 49, critChanceBase = 5, attackRateBase = 1.15, }, req = { level = 34, str = 64, dex = 64, }, } itemBases["Variscite Blade"] = { type = "One Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 20, physicalMax = 43, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 20, PhysicalMax = 43, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 35, str = 62, dex = 62, }, } itemBases["Cutlass"] = { type = "One Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 11, physicalMax = 44, critChanceBase = 5, attackRateBase = 1.55, }, + weapon = { PhysicalMin = 11, PhysicalMax = 44, critChanceBase = 5, attackRateBase = 1.55, }, req = { level = 38, str = 55, dex = 79, }, } itemBases["Baselard"] = { type = "One Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 29, physicalMax = 42, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 29, PhysicalMax = 42, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 41, str = 72, dex = 72, }, } itemBases["Battle Sword"] = { type = "One Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 30, physicalMax = 55, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 30, PhysicalMax = 55, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 44, str = 83, dex = 70, }, } itemBases["Elder Sword"] = { type = "One Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 28, physicalMax = 52, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 28, PhysicalMax = 52, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 47, str = 81, dex = 81, }, } itemBases["Graceful Sword"] = { type = "One Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 27, physicalMax = 44, critChanceBase = 5, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 27, PhysicalMax = 44, critChanceBase = 5, attackRateBase = 1.5, }, req = { level = 50, str = 78, dex = 94, }, } itemBases["Twilight Blade"] = { type = "One Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 23, physicalMax = 66, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 23, PhysicalMax = 66, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 53, str = 91, dex = 91, }, } itemBases["Grappler"] = { type = "One Handed Sword", implicit = "2% chance to Dodge Attacks", - weapon = { physicalMin = 35, physicalMax = 75, critChanceBase = 5, attackRateBase = 1.15, }, + weapon = { PhysicalMin = 35, PhysicalMax = 75, critChanceBase = 5, attackRateBase = 1.15, }, req = { level = 55, str = 99, dex = 99, }, } itemBases["Gemstone Sword"] = { type = "One Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 30, physicalMax = 64, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 30, PhysicalMax = 64, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 56, str = 96, dex = 96, }, } itemBases["Corsair Sword"] = { type = "One Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 16, physicalMax = 63, critChanceBase = 5, attackRateBase = 1.55, }, + weapon = { PhysicalMin = 16, PhysicalMax = 63, critChanceBase = 5, attackRateBase = 1.55, }, req = { level = 58, str = 81, dex = 117, }, } itemBases["Gladius"] = { type = "One Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 41, physicalMax = 59, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 41, PhysicalMax = 59, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 60, str = 113, dex = 113, }, } itemBases["Legion Sword"] = { type = "One Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 39, physicalMax = 73, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 39, PhysicalMax = 73, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 62, str = 122, dex = 104, }, } itemBases["Vaal Blade"] = { type = "One Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 35, physicalMax = 65, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 35, PhysicalMax = 65, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 64, str = 113, dex = 113, }, } itemBases["Eternal Sword"] = { type = "One Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 32, physicalMax = 52, critChanceBase = 5, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 32, PhysicalMax = 52, critChanceBase = 5, attackRateBase = 1.5, }, req = { level = 66, str = 104, dex = 122, }, } itemBases["Midnight Blade"] = { type = "One Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 26, physicalMax = 74, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 26, PhysicalMax = 74, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 68, str = 113, dex = 113, }, } itemBases["Tiger Hook"] = { type = "One Handed Sword", implicit = "3% chance to Dodge Attacks", - weapon = { physicalMin = 43, physicalMax = 92, critChanceBase = 5, attackRateBase = 1.15, }, + weapon = { PhysicalMin = 43, PhysicalMax = 92, critChanceBase = 5, attackRateBase = 1.15, }, req = { level = 70, str = 119, dex = 119, }, } @@ -156,151 +156,151 @@ itemBases["Tiger Hook"] = { itemBases["Rusted Spike"] = { type = "One Handed Sword", implicit = "+30% to Global Critical Strike Multiplier", - weapon = { physicalMin = 4, physicalMax = 10, critChanceBase = 5.5, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 4, PhysicalMax = 10, critChanceBase = 5.5, attackRateBase = 1.4, }, req = { dex = 20, }, } itemBases["Whalebone Rapier"] = { type = "One Handed Sword", implicit = "+30% to Global Critical Strike Multiplier", - weapon = { physicalMin = 4, physicalMax = 15, critChanceBase = 5.5, attackRateBase = 1.55, }, + weapon = { PhysicalMin = 4, PhysicalMax = 15, critChanceBase = 5.5, attackRateBase = 1.55, }, req = { level = 7, dex = 32, }, } itemBases["Battered Foil"] = { type = "One Handed Sword", implicit = "+30% to Global Critical Strike Multiplier", - weapon = { physicalMin = 10, physicalMax = 18, critChanceBase = 6, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 10, PhysicalMax = 18, critChanceBase = 6, attackRateBase = 1.4, }, req = { level = 12, dex = 47, }, } itemBases["Basket Rapier"] = { type = "One Handed Sword", implicit = "+30% to Global Critical Strike Multiplier", - weapon = { physicalMin = 9, physicalMax = 22, critChanceBase = 5.5, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 9, PhysicalMax = 22, critChanceBase = 5.5, attackRateBase = 1.5, }, req = { level = 17, dex = 62, }, } itemBases["Jagged Foil"] = { type = "One Handed Sword", implicit = "+30% to Global Critical Strike Multiplier", - weapon = { physicalMin = 11, physicalMax = 25, critChanceBase = 5.5, attackRateBase = 1.6, }, + weapon = { PhysicalMin = 11, PhysicalMax = 25, critChanceBase = 5.5, attackRateBase = 1.6, }, req = { level = 22, dex = 77, }, } itemBases["Antique Rapier"] = { type = "One Handed Sword", implicit = "+30% to Global Critical Strike Multiplier", - weapon = { physicalMin = 10, physicalMax = 40, critChanceBase = 6.5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 10, PhysicalMax = 40, critChanceBase = 6.5, attackRateBase = 1.3, }, req = { level = 26, dex = 89, }, } itemBases["Elegant Foil"] = { type = "One Handed Sword", implicit = "+30% to Global Critical Strike Multiplier", - weapon = { physicalMin = 15, physicalMax = 28, critChanceBase = 5.5, attackRateBase = 1.6, }, + weapon = { PhysicalMin = 15, PhysicalMax = 28, critChanceBase = 5.5, attackRateBase = 1.6, }, req = { level = 30, dex = 101, }, } itemBases["Thorn Rapier"] = { type = "One Handed Sword", implicit = "+50% to Global Critical Strike Multiplier", - weapon = { physicalMin = 16, physicalMax = 37, critChanceBase = 5.7, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 16, PhysicalMax = 37, critChanceBase = 5.7, attackRateBase = 1.4, }, req = { level = 34, dex = 113, }, } itemBases["Smallsword"] = { type = "One Handed Sword", implicit = "8% chance to cause Bleeding on Hit", - weapon = { physicalMin = 17, physicalMax = 36, critChanceBase = 6, attackRateBase = 1.55, }, + weapon = { PhysicalMin = 17, PhysicalMax = 36, critChanceBase = 6, attackRateBase = 1.55, }, req = { level = 36, dex = 124, }, } itemBases["Wyrmbone Rapier"] = { type = "One Handed Sword", implicit = "+30% to Global Critical Strike Multiplier", - weapon = { physicalMin = 11, physicalMax = 44, critChanceBase = 5.5, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 11, PhysicalMax = 44, critChanceBase = 5.5, attackRateBase = 1.5, }, req = { level = 37, dex = 122, }, } itemBases["Burnished Foil"] = { type = "One Handed Sword", implicit = "+30% to Global Critical Strike Multiplier", - weapon = { physicalMin = 22, physicalMax = 41, critChanceBase = 6, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 22, PhysicalMax = 41, critChanceBase = 6, attackRateBase = 1.4, }, req = { level = 40, dex = 131, }, } itemBases["Estoc"] = { type = "One Handed Sword", implicit = "+30% to Global Critical Strike Multiplier", - weapon = { physicalMin = 19, physicalMax = 44, critChanceBase = 5.5, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 19, PhysicalMax = 44, critChanceBase = 5.5, attackRateBase = 1.5, }, req = { level = 43, dex = 140, }, } itemBases["Serrated Foil"] = { type = "One Handed Sword", implicit = "+30% to Global Critical Strike Multiplier", - weapon = { physicalMin = 19, physicalMax = 43, critChanceBase = 5.5, attackRateBase = 1.6, }, + weapon = { PhysicalMin = 19, PhysicalMax = 43, critChanceBase = 5.5, attackRateBase = 1.6, }, req = { level = 46, dex = 149, }, } itemBases["Primeval Rapier"] = { type = "One Handed Sword", implicit = "+30% to Global Critical Strike Multiplier", - weapon = { physicalMin = 17, physicalMax = 67, critChanceBase = 6.5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 17, PhysicalMax = 67, critChanceBase = 6.5, attackRateBase = 1.3, }, req = { level = 49, dex = 158, }, } itemBases["Fancy Foil"] = { type = "One Handed Sword", implicit = "+30% to Global Critical Strike Multiplier", - weapon = { physicalMin = 24, physicalMax = 45, critChanceBase = 5.5, attackRateBase = 1.6, }, + weapon = { PhysicalMin = 24, PhysicalMax = 45, critChanceBase = 5.5, attackRateBase = 1.6, }, req = { level = 52, dex = 167, }, } itemBases["Apex Rapier"] = { type = "One Handed Sword", implicit = "+50% to Global Critical Strike Multiplier", - weapon = { physicalMin = 24, physicalMax = 55, critChanceBase = 5.7, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 24, PhysicalMax = 55, critChanceBase = 5.7, attackRateBase = 1.4, }, req = { level = 55, dex = 176, }, } itemBases["Courtesan Sword"] = { type = "One Handed Sword", implicit = "8% chance to cause Bleeding on Hit", - weapon = { physicalMin = 26, physicalMax = 53, critChanceBase = 6, attackRateBase = 1.55, }, + weapon = { PhysicalMin = 26, PhysicalMax = 53, critChanceBase = 6, attackRateBase = 1.55, }, req = { level = 57, dex = 190, }, } itemBases["Dragonbone Rapier"] = { type = "One Handed Sword", implicit = "+30% to Global Critical Strike Multiplier", - weapon = { physicalMin = 16, physicalMax = 65, critChanceBase = 5.5, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 16, PhysicalMax = 65, critChanceBase = 5.5, attackRateBase = 1.5, }, req = { level = 58, dex = 185, }, } itemBases["Tempered Foil"] = { type = "One Handed Sword", implicit = "+30% to Global Critical Strike Multiplier", - weapon = { physicalMin = 31, physicalMax = 58, critChanceBase = 6, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 31, PhysicalMax = 58, critChanceBase = 6, attackRateBase = 1.4, }, req = { level = 60, dex = 212, }, } itemBases["Pecoraro"] = { type = "One Handed Sword", implicit = "+30% to Global Critical Strike Multiplier", - weapon = { physicalMin = 25, physicalMax = 59, critChanceBase = 5.5, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 25, PhysicalMax = 59, critChanceBase = 5.5, attackRateBase = 1.5, }, req = { level = 62, dex = 212, }, } itemBases["Spiraled Foil"] = { type = "One Handed Sword", implicit = "+30% to Global Critical Strike Multiplier", - weapon = { physicalMin = 24, physicalMax = 55, critChanceBase = 5.5, attackRateBase = 1.6, }, + weapon = { PhysicalMin = 24, PhysicalMax = 55, critChanceBase = 5.5, attackRateBase = 1.6, }, req = { level = 64, dex = 212, }, } itemBases["Vaal Rapier"] = { type = "One Handed Sword", implicit = "+30% to Global Critical Strike Multiplier", - weapon = { physicalMin = 20, physicalMax = 80, critChanceBase = 6.5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 20, PhysicalMax = 80, critChanceBase = 6.5, attackRateBase = 1.3, }, req = { level = 66, dex = 212, }, } itemBases["Jewelled Foil"] = { type = "One Handed Sword", implicit = "+30% to Global Critical Strike Multiplier", - weapon = { physicalMin = 27, physicalMax = 51, critChanceBase = 5.5, attackRateBase = 1.6, }, + weapon = { PhysicalMin = 27, PhysicalMax = 51, critChanceBase = 5.5, attackRateBase = 1.6, }, req = { level = 68, dex = 212, }, } itemBases["Harpy Rapier"] = { type = "One Handed Sword", implicit = "+50% to Global Critical Strike Multiplier", - weapon = { physicalMin = 26, physicalMax = 60, critChanceBase = 5.7, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 26, PhysicalMax = 60, critChanceBase = 5.7, attackRateBase = 1.4, }, req = { level = 70, dex = 212, }, } itemBases["Dragoon Sword"] = { type = "One Handed Sword", implicit = "12% chance to cause Bleeding on Hit", - weapon = { physicalMin = 28, physicalMax = 58, critChanceBase = 6, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 28, PhysicalMax = 58, critChanceBase = 6, attackRateBase = 1.5, }, req = { level = 72, dex = 220, }, } @@ -308,133 +308,133 @@ itemBases["Dragoon Sword"] = { itemBases["Corroded Blade"] = { type = "Two Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 7, physicalMax = 14, critChanceBase = 5, attackRateBase = 1.35, }, + weapon = { PhysicalMin = 7, PhysicalMax = 14, critChanceBase = 5, attackRateBase = 1.35, }, req = { }, } itemBases["Longsword"] = { type = "Two Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 14, physicalMax = 33, critChanceBase = 5, attackRateBase = 1.1, }, + weapon = { PhysicalMin = 14, PhysicalMax = 33, critChanceBase = 5, attackRateBase = 1.1, }, req = { level = 8, str = 20, dex = 17, }, } itemBases["Bastard Sword"] = { type = "Two Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 15, physicalMax = 25, critChanceBase = 5, attackRateBase = 1.35, }, + weapon = { PhysicalMin = 15, PhysicalMax = 25, critChanceBase = 5, attackRateBase = 1.35, }, req = { level = 12, str = 21, dex = 30, }, } itemBases["Two-Handed Sword"] = { type = "Two Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 23, physicalMax = 43, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 23, PhysicalMax = 43, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 17, str = 33, dex = 33, }, } itemBases["Etched Greatsword"] = { type = "Two Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 29, physicalMax = 61, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 29, PhysicalMax = 61, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 22, str = 45, dex = 38, }, } itemBases["Ornate Sword"] = { type = "Two Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 32, physicalMax = 53, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 32, PhysicalMax = 53, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 27, str = 45, dex = 54, }, } itemBases["Spectral Sword"] = { type = "Two Handed Sword", implicit = "30% increased Accuracy Rating", - weapon = { physicalMin = 35, physicalMax = 73, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 35, PhysicalMax = 73, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 32, str = 57, dex = 57, }, } itemBases["Curved Blade"] = { type = "Two Handed Sword", implicit = "+40% to Global Critical Strike Multiplier", - weapon = { physicalMin = 39, physicalMax = 65, critChanceBase = 6, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 39, PhysicalMax = 65, critChanceBase = 6, attackRateBase = 1.25, }, req = { level = 35, str = 62, dex = 73, }, } itemBases["Butcher Sword"] = { type = "Two Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 40, physicalMax = 93, critChanceBase = 5, attackRateBase = 1.1, }, + weapon = { PhysicalMin = 40, PhysicalMax = 93, critChanceBase = 5, attackRateBase = 1.1, }, req = { level = 36, str = 69, dex = 58, }, } itemBases["Footman Sword"] = { type = "Two Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 42, physicalMax = 70, critChanceBase = 5, attackRateBase = 1.35, }, + weapon = { PhysicalMin = 42, PhysicalMax = 70, critChanceBase = 5, attackRateBase = 1.35, }, req = { level = 40, str = 57, dex = 83, }, } itemBases["Highland Blade"] = { type = "Two Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 50, physicalMax = 92, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 50, PhysicalMax = 92, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 44, str = 77, dex = 77, }, } itemBases["Engraved Greatsword"] = { type = "Two Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 55, physicalMax = 115, critChanceBase = 5, attackRateBase = 1.1, }, + weapon = { PhysicalMin = 55, PhysicalMax = 115, critChanceBase = 5, attackRateBase = 1.1, }, req = { level = 48, str = 91, dex = 76, }, } itemBases["Tiger Sword"] = { type = "Two Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 55, physicalMax = 91, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 55, PhysicalMax = 91, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 51, str = 80, dex = 96, }, } itemBases["Wraith Sword"] = { type = "Two Handed Sword", implicit = "30% increased Accuracy Rating", - weapon = { physicalMin = 55, physicalMax = 114, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 55, PhysicalMax = 114, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 54, str = 93, dex = 93, }, } itemBases["Lithe Blade"] = { type = "Two Handed Sword", implicit = "+40% to Global Critical Strike Multiplier", - weapon = { physicalMin = 63, physicalMax = 105, critChanceBase = 6, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 63, PhysicalMax = 105, critChanceBase = 6, attackRateBase = 1.25, }, req = { level = 56, str = 96, dex = 113, }, } itemBases["Headman's Sword"] = { type = "Two Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 59, physicalMax = 139, critChanceBase = 5, attackRateBase = 1.1, }, + weapon = { PhysicalMin = 59, PhysicalMax = 139, critChanceBase = 5, attackRateBase = 1.1, }, req = { level = 57, str = 106, dex = 89, }, } itemBases["Reaver Sword"] = { type = "Two Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 59, physicalMax = 99, critChanceBase = 5, attackRateBase = 1.35, }, + weapon = { PhysicalMin = 59, PhysicalMax = 99, critChanceBase = 5, attackRateBase = 1.35, }, req = { level = 59, str = 82, dex = 119, }, } itemBases["Ezomyte Blade"] = { type = "Two Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 65, physicalMax = 121, critChanceBase = 5, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 65, PhysicalMax = 121, critChanceBase = 5, attackRateBase = 1.2, }, req = { level = 61, str = 113, dex = 113, }, } itemBases["Vaal Greatsword"] = { type = "Two Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 67, physicalMax = 140, critChanceBase = 5, attackRateBase = 1.1, }, + weapon = { PhysicalMin = 67, PhysicalMax = 140, critChanceBase = 5, attackRateBase = 1.1, }, req = { level = 63, str = 122, dex = 104, }, } itemBases["Lion Sword"] = { type = "Two Handed Sword", implicit = "18% increased Accuracy Rating", - weapon = { physicalMin = 63, physicalMax = 105, critChanceBase = 5, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 63, PhysicalMax = 105, critChanceBase = 5, attackRateBase = 1.3, }, req = { level = 65, str = 104, dex = 122, }, } itemBases["Infernal Sword"] = { type = "Two Handed Sword", implicit = "30% increased Accuracy Rating", - weapon = { physicalMin = 57, physicalMax = 118, critChanceBase = 5, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 57, PhysicalMax = 118, critChanceBase = 5, attackRateBase = 1.25, }, req = { level = 67, str = 113, dex = 113, }, } itemBases["Exquisite Blade"] = { type = "Two Handed Sword", implicit = "+60% to Global Critical Strike Multiplier", - weapon = { physicalMin = 68, physicalMax = 114, critChanceBase = 6, attackRateBase = 1.25, }, + weapon = { PhysicalMin = 68, PhysicalMax = 114, critChanceBase = 6, attackRateBase = 1.25, }, req = { level = 70, str = 119, dex = 131, }, } diff --git a/Data/Bases/wand.lua b/Data/Bases/wand.lua index 78262101..7d584ee3 100644 --- a/Data/Bases/wand.lua +++ b/Data/Bases/wand.lua @@ -4,114 +4,114 @@ local itemBases = ... itemBases["Driftwood Wand"] = { type = "Wand", implicit = "(8 to 12)% increased Spell Damage", - weapon = { physicalMin = 3, physicalMax = 6, critChanceBase = 8, attackRateBase = 1.4, }, + weapon = { PhysicalMin = 3, PhysicalMax = 6, critChanceBase = 8, attackRateBase = 1.4, }, req = { level = 1, int = 14, }, } itemBases["Goat's Horn"] = { type = "Wand", implicit = "(9 to 12)% increased Spell Damage", - weapon = { physicalMin = 5, physicalMax = 10, critChanceBase = 8, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 5, PhysicalMax = 10, critChanceBase = 8, attackRateBase = 1.2, }, req = { level = 6, int = 29, }, } itemBases["Carved Wand"] = { type = "Wand", implicit = "(9 to 13)% increased Spell Damage", - weapon = { physicalMin = 6, physicalMax = 11, critChanceBase = 8, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 6, PhysicalMax = 11, critChanceBase = 8, attackRateBase = 1.5, }, req = { level = 12, int = 47, }, } itemBases["Quartz Wand"] = { type = "Wand", implicit = "(11 to 15)% increased Spell Damage", - weapon = { physicalMin = 9, physicalMax = 17, critChanceBase = 8, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 9, PhysicalMax = 17, critChanceBase = 8, attackRateBase = 1.3, }, req = { level = 18, int = 65, }, } itemBases["Spiraled Wand"] = { type = "Wand", implicit = "(10 to 14)% increased Spell Damage", - weapon = { physicalMin = 8, physicalMax = 24, critChanceBase = 8, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 8, PhysicalMax = 24, critChanceBase = 8, attackRateBase = 1.3, }, req = { level = 24, int = 83, }, } itemBases["Sage Wand"] = { type = "Wand", implicit = "(11 to 14)% increased Spell Damage", - weapon = { physicalMin = 15, physicalMax = 28, critChanceBase = 9, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 15, PhysicalMax = 28, critChanceBase = 9, attackRateBase = 1.2, }, req = { level = 30, int = 119, }, } itemBases["Pagan Wand"] = { type = "Wand", implicit = "4% increased Cast Speed", - weapon = { physicalMin = 14, physicalMax = 26, critChanceBase = 8, attackRateBase = 1.35, }, + weapon = { PhysicalMin = 14, PhysicalMax = 26, critChanceBase = 8, attackRateBase = 1.35, }, req = { level = 34, int = 118, }, } itemBases["Faun's Horn"] = { type = "Wand", implicit = "(12 to 15)% increased Spell Damage", - weapon = { physicalMin = 17, physicalMax = 32, critChanceBase = 8, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 17, PhysicalMax = 32, critChanceBase = 8, attackRateBase = 1.2, }, req = { level = 35, int = 116, }, } itemBases["Engraved Wand"] = { type = "Wand", implicit = "(12 to 16)% increased Spell Damage", - weapon = { physicalMin = 14, physicalMax = 27, critChanceBase = 8, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 14, PhysicalMax = 27, critChanceBase = 8, attackRateBase = 1.5, }, req = { level = 40, int = 131, }, } itemBases["Crystal Wand"] = { type = "Wand", implicit = "(14 to 18)% increased Spell Damage", - weapon = { physicalMin = 19, physicalMax = 35, critChanceBase = 8, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 19, PhysicalMax = 35, critChanceBase = 8, attackRateBase = 1.3, }, req = { level = 45, int = 146, }, } itemBases["Serpent Wand"] = { type = "Wand", implicit = "(13 to 17)% increased Spell Damage", - weapon = { physicalMin = 15, physicalMax = 44, critChanceBase = 8, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 15, PhysicalMax = 44, critChanceBase = 8, attackRateBase = 1.3, }, req = { level = 49, int = 158, }, } itemBases["Omen Wand"] = { type = "Wand", implicit = "(14 to 17)% increased Spell Damage", - weapon = { physicalMin = 25, physicalMax = 46, critChanceBase = 9, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 25, PhysicalMax = 46, critChanceBase = 9, attackRateBase = 1.2, }, req = { level = 53, int = 200, }, } itemBases["Heathen Wand"] = { type = "Wand", implicit = "4% increased Cast Speed", - weapon = { physicalMin = 21, physicalMax = 40, critChanceBase = 8, attackRateBase = 1.35, }, + weapon = { PhysicalMin = 21, PhysicalMax = 40, critChanceBase = 8, attackRateBase = 1.35, }, req = { level = 55, int = 184, }, } itemBases["Demon's Horn"] = { type = "Wand", implicit = "(15 to 18)% increased Spell Damage", - weapon = { physicalMin = 26, physicalMax = 48, critChanceBase = 8, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 26, PhysicalMax = 48, critChanceBase = 8, attackRateBase = 1.2, }, req = { level = 56, int = 179, }, } itemBases["Imbued Wand"] = { type = "Wand", implicit = "(15 to 19)% increased Spell Damage", - weapon = { physicalMin = 20, physicalMax = 38, critChanceBase = 8, attackRateBase = 1.5, }, + weapon = { PhysicalMin = 20, PhysicalMax = 38, critChanceBase = 8, attackRateBase = 1.5, }, req = { level = 59, int = 188, }, } itemBases["Opal Wand"] = { type = "Wand", implicit = "(17 to 20)% increased Spell Damage", - weapon = { physicalMin = 24, physicalMax = 45, critChanceBase = 8, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 24, PhysicalMax = 45, critChanceBase = 8, attackRateBase = 1.3, }, req = { level = 62, int = 212, }, } itemBases["Tornado Wand"] = { type = "Wand", implicit = "(16 to 19)% increased Spell Damage", - weapon = { physicalMin = 17, physicalMax = 52, critChanceBase = 8, attackRateBase = 1.3, }, + weapon = { PhysicalMin = 17, PhysicalMax = 52, critChanceBase = 8, attackRateBase = 1.3, }, req = { level = 65, int = 212, }, } itemBases["Prophecy Wand"] = { type = "Wand", implicit = "(16 to 20)% increased Spell Damage", - weapon = { physicalMin = 27, physicalMax = 51, critChanceBase = 9, attackRateBase = 1.2, }, + weapon = { PhysicalMin = 27, PhysicalMax = 51, critChanceBase = 9, attackRateBase = 1.2, }, req = { level = 68, int = 245, }, } itemBases["Profane Wand"] = { type = "Wand", implicit = "6% increased Cast Speed", - weapon = { physicalMin = 23, physicalMax = 43, critChanceBase = 8, attackRateBase = 1.35, }, + weapon = { PhysicalMin = 23, PhysicalMax = 43, critChanceBase = 8, attackRateBase = 1.35, }, req = { level = 70, int = 237, }, } diff --git a/Data/Gems/act_dex.lua b/Data/Gems/act_dex.lua index 3c75103e..afc49dad 100644 --- a/Data/Gems/act_dex.lua +++ b/Data/Gems/act_dex.lua @@ -1,585 +1,989 @@ -- Path of Building -- --- Active Dexterity skills +-- Active Strength skills -- Skill gem data (c) Grinding Gear Games -- -local gems = ... +local gems, mod, flag, skill = ... gems["Animate Weapon"] = { dexterity = true, + active_skill = true, + duration = true, + minion = true, + spell = true, unsupported = true, } gems["Arctic Armour"] = { dexterity = true, + active_skill = true, spell = true, duration = true, cold = true, - base = { - skill_castTime = 0.5, - skill_manaReservedPercent = 25, + color = 2, + baseFlags = { + spell = true, + duration = true, + cold = true, }, - quality = { - durationInc = 1, + skillTypes = { [2] = true, [5] = true, [18] = true, [12] = true, [15] = true, [27] = true, [34] = true, [16] = true, }, + baseMods = { + skill("castTime", 0.5), + skill("manaCost", 25), + --"chill_enemy_when_hit_duration_ms" = 500 + }, + qualityMods = { + mod("Duration", "INC", 1), --"skill_effect_duration_+%" = 1 + }, + levelMods = { + --[1] = "new_arctic_armour_physical_damage_taken_when_hit_+%_final" + --[2] = "new_arctic_armour_fire_damage_taken_when_hit_+%_final" + [3] = skill("duration", nil), --"base_skill_effect_duration" }, levels = { - [1] = { skill_durationBase = 2.5, }, - [2] = { skill_durationBase = 2.6, }, - [3] = { skill_durationBase = 2.7, }, - [4] = { skill_durationBase = 2.8, }, - [5] = { skill_durationBase = 2.9, }, - [6] = { skill_durationBase = 3, }, - [7] = { skill_durationBase = 3.1, }, - [8] = { skill_durationBase = 3.2, }, - [9] = { skill_durationBase = 3.3, }, - [10] = { skill_durationBase = 3.4, }, - [11] = { skill_durationBase = 3.5, }, - [12] = { skill_durationBase = 3.6, }, - [13] = { skill_durationBase = 3.7, }, - [14] = { skill_durationBase = 3.8, }, - [15] = { skill_durationBase = 3.9, }, - [16] = { skill_durationBase = 4, }, - [17] = { skill_durationBase = 4.1, }, - [18] = { skill_durationBase = 4.2, }, - [19] = { skill_durationBase = 4.3, }, - [20] = { skill_durationBase = 4.4, }, - [21] = { skill_durationBase = 4.5, }, - [22] = { skill_durationBase = 4.6, }, - [23] = { skill_durationBase = 4.7, }, - [24] = { skill_durationBase = 4.8, }, - [25] = { skill_durationBase = 4.9, }, - [26] = { skill_durationBase = 5, }, - [27] = { skill_durationBase = 5.1, }, - [28] = { skill_durationBase = 5.2, }, - [29] = { skill_durationBase = 5.3, }, - [30] = { skill_durationBase = 5.4, }, - } + [1] = { -8, -8, 2.5, }, + [2] = { -8, -8, 2.6, }, + [3] = { -9, -8, 2.7, }, + [4] = { -9, -8, 2.8, }, + [5] = { -9, -9, 2.9, }, + [6] = { -9, -9, 3, }, + [7] = { -10, -9, 3.1, }, + [8] = { -10, -9, 3.2, }, + [9] = { -10, -10, 3.3, }, + [10] = { -10, -10, 3.4, }, + [11] = { -11, -10, 3.5, }, + [12] = { -11, -10, 3.6, }, + [13] = { -11, -11, 3.7, }, + [14] = { -11, -11, 3.8, }, + [15] = { -12, -11, 3.9, }, + [16] = { -12, -11, 4, }, + [17] = { -12, -12, 4.1, }, + [18] = { -12, -12, 4.2, }, + [19] = { -13, -12, 4.3, }, + [20] = { -13, -12, 4.4, }, + [21] = { -13, -13, 4.5, }, + [22] = { -13, -13, 4.6, }, + [23] = { -14, -13, 4.7, }, + [24] = { -14, -13, 4.8, }, + [25] = { -14, -14, 4.9, }, + [26] = { -14, -14, 5, }, + [27] = { -15, -14, 5.1, }, + [28] = { -15, -14, 5.2, }, + [29] = { -15, -15, 5.3, }, + [30] = { -15, -15, 5.4, }, + }, } gems["Barrage"] = { dexterity = true, + active_skill = true, attack = true, bow = true, - hit = true, - base = { - projectileCount = 3, + color = 2, + baseFlags = { + attack = true, + projectile = true, }, - quality = { - projectile_damageInc = 0.5, + skillTypes = { [1] = true, [48] = true, [6] = true, [3] = true, [22] = true, [17] = true, [19] = true, }, + baseMods = { + skill("castTime", 1), + mod("ProjectileCount", "BASE", 3), --"number_of_additional_projectiles" = 3 + --"skill_can_fire_arrows" = ? + --"skill_can_fire_wand_projectiles" = ? + }, + qualityMods = { + mod("Damage", "INC", 0.5, ModFlag.Projectile), --"projectile_damage_+%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { skill_manaCostBase = 7, attack_damageMore = 0.5, }, - [2] = { skill_manaCostBase = 7, attack_damageMore = 0.506, }, - [3] = { skill_manaCostBase = 7, attack_damageMore = 0.512, }, - [4] = { skill_manaCostBase = 8, attack_damageMore = 0.518, }, - [5] = { skill_manaCostBase = 8, attack_damageMore = 0.524, }, - [6] = { skill_manaCostBase = 8, attack_damageMore = 0.53, }, - [7] = { skill_manaCostBase = 8, attack_damageMore = 0.536, }, - [8] = { skill_manaCostBase = 8, attack_damageMore = 0.542, }, - [9] = { skill_manaCostBase = 9, attack_damageMore = 0.548, }, - [10] = { skill_manaCostBase = 9, attack_damageMore = 0.554, }, - [11] = { skill_manaCostBase = 9, attack_damageMore = 0.56, }, - [12] = { skill_manaCostBase = 9, attack_damageMore = 0.566, }, - [13] = { skill_manaCostBase = 9, attack_damageMore = 0.572, }, - [14] = { skill_manaCostBase = 10, attack_damageMore = 0.578, }, - [15] = { skill_manaCostBase = 10, attack_damageMore = 0.584, }, - [16] = { skill_manaCostBase = 10, attack_damageMore = 0.59, }, - [17] = { skill_manaCostBase = 10, attack_damageMore = 0.596, }, - [18] = { skill_manaCostBase = 10, attack_damageMore = 0.602, }, - [19] = { skill_manaCostBase = 11, attack_damageMore = 0.608, }, - [20] = { skill_manaCostBase = 11, attack_damageMore = 0.614, }, - [21] = { skill_manaCostBase = 11, attack_damageMore = 0.62, }, - [22] = { skill_manaCostBase = 11, attack_damageMore = 0.626, }, - [23] = { skill_manaCostBase = 11, attack_damageMore = 0.632, }, - [24] = { skill_manaCostBase = 11, attack_damageMore = 0.638, }, - [25] = { skill_manaCostBase = 11, attack_damageMore = 0.644, }, - [26] = { skill_manaCostBase = 12, attack_damageMore = 0.65, }, - [27] = { skill_manaCostBase = 12, attack_damageMore = 0.656, }, - [28] = { skill_manaCostBase = 12, attack_damageMore = 0.662, }, - [29] = { skill_manaCostBase = 12, attack_damageMore = 0.668, }, - [30] = { skill_manaCostBase = 12, attack_damageMore = 0.674, }, - } + [1] = { 7, -50, }, + [2] = { 7, -49.4, }, + [3] = { 7, -48.8, }, + [4] = { 8, -48.2, }, + [5] = { 8, -47.6, }, + [6] = { 8, -47, }, + [7] = { 8, -46.4, }, + [8] = { 8, -45.8, }, + [9] = { 9, -45.2, }, + [10] = { 9, -44.6, }, + [11] = { 9, -44, }, + [12] = { 9, -43.4, }, + [13] = { 9, -42.8, }, + [14] = { 10, -42.2, }, + [15] = { 10, -41.6, }, + [16] = { 10, -41, }, + [17] = { 10, -40.4, }, + [18] = { 10, -39.8, }, + [19] = { 11, -39.2, }, + [20] = { 11, -38.6, }, + [21] = { 11, -38, }, + [22] = { 11, -37.4, }, + [23] = { 11, -36.8, }, + [24] = { 11, -36.2, }, + [25] = { 11, -35.6, }, + [26] = { 12, -35, }, + [27] = { 12, -34.4, }, + [28] = { 12, -33.8, }, + [29] = { 12, -33.2, }, + [30] = { 12, -32.6, }, + }, } gems["Bear Trap"] = { - dexterity = true, - cast = true, trap = true, - hit = true, - showAverage = true, - base = { - skill_castTime = 1, - skill_damageEffectiveness = 2, - skill_critChanceBase = 5, - skill_trapCooldown = 3, + dexterity = true, + active_skill = true, + duration = true, + cast = true, + color = 2, + baseFlags = { + cast = true, + trap = true, + duration = true, }, - quality = { - physicalInc = 1, + skillTypes = { [12] = true, [19] = true, [37] = true, [39] = true, [10] = true, }, + baseMods = { + skill("castTime", 1), + skill("damageEffectiveness", 2), + skill("critChance", 5), + --"is_trap" = 1 + --"base_trap_duration" = 16000 + mod("MovementSpeed", "INC", -300, 0, 0, nil), --"base_movement_velocity_+%" = -300 + --"trap_override_pvp_scaling_time_ms" = 750 + --"base_skill_is_trapped" = ? + --"display_skill_deals_secondary_damage" = ? + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + skill("trapCooldown", 3), + }, + qualityMods = { + mod("PhysicalDamage", "INC", 1), --"physical_damage_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("PhysicalMin", nil), --"secondary_minimum_base_physical_damage" + [3] = skill("PhysicalMax", nil), --"secondary_maximum_base_physical_damage" }, levels = { - [1] = { skill_manaCostBase = 11, skill_physicalMin = 16, skill_physicalMax = 22, }, - [2] = { skill_manaCostBase = 13, skill_physicalMin = 20, skill_physicalMax = 28, }, - [3] = { skill_manaCostBase = 15, skill_physicalMin = 27, skill_physicalMax = 38, }, - [4] = { skill_manaCostBase = 17, skill_physicalMin = 35, skill_physicalMax = 49, }, - [5] = { skill_manaCostBase = 20, skill_physicalMin = 49, skill_physicalMax = 69, }, - [6] = { skill_manaCostBase = 22, skill_physicalMin = 67, skill_physicalMax = 94, }, - [7] = { skill_manaCostBase = 24, skill_physicalMin = 90, skill_physicalMax = 126, }, - [8] = { skill_manaCostBase = 26, skill_physicalMin = 119, skill_physicalMax = 167, }, - [9] = { skill_manaCostBase = 28, skill_physicalMin = 156, skill_physicalMax = 218, }, - [10] = { skill_manaCostBase = 32, skill_physicalMin = 202, skill_physicalMax = 282, }, - [11] = { skill_manaCostBase = 35, skill_physicalMin = 259, skill_physicalMax = 363, }, - [12] = { skill_manaCostBase = 38, skill_physicalMin = 331, skill_physicalMax = 463, }, - [13] = { skill_manaCostBase = 39, skill_physicalMin = 420, skill_physicalMax = 587, }, - [14] = { skill_manaCostBase = 41, skill_physicalMin = 530, skill_physicalMax = 742, }, - [15] = { skill_manaCostBase = 42, skill_physicalMin = 630, skill_physicalMax = 881, }, - [16] = { skill_manaCostBase = 43, skill_physicalMin = 746, skill_physicalMax = 1045, }, - [17] = { skill_manaCostBase = 44, skill_physicalMin = 883, skill_physicalMax = 1236, }, - [18] = { skill_manaCostBase = 45, skill_physicalMin = 1043, skill_physicalMax = 1460, }, - [19] = { skill_manaCostBase = 46, skill_physicalMin = 1230, skill_physicalMax = 1721, }, - [20] = { skill_manaCostBase = 46, skill_physicalMin = 1447, skill_physicalMax = 2026, }, - [21] = { skill_manaCostBase = 47, skill_physicalMin = 1613, skill_physicalMax = 2258, }, - [22] = { skill_manaCostBase = 48, skill_physicalMin = 1795, skill_physicalMax = 2514, }, - [23] = { skill_manaCostBase = 49, skill_physicalMin = 1998, skill_physicalMax = 2797, }, - [24] = { skill_manaCostBase = 50, skill_physicalMin = 2222, skill_physicalMax = 3111, }, - [25] = { skill_manaCostBase = 50, skill_physicalMin = 2470, skill_physicalMax = 3458, }, - [26] = { skill_manaCostBase = 51, skill_physicalMin = 2744, skill_physicalMax = 3842, }, - [27] = { skill_manaCostBase = 52, skill_physicalMin = 3047, skill_physicalMax = 4266, }, - [28] = { skill_manaCostBase = 53, skill_physicalMin = 3382, skill_physicalMax = 4735, }, - [29] = { skill_manaCostBase = 54, skill_physicalMin = 3753, skill_physicalMax = 5254, }, - [30] = { skill_manaCostBase = 54, skill_physicalMin = 4162, skill_physicalMax = 5826, }, - } + [1] = { 11, 16, 22, }, + [2] = { 13, 20, 28, }, + [3] = { 15, 27, 38, }, + [4] = { 17, 35, 49, }, + [5] = { 20, 49, 69, }, + [6] = { 22, 67, 94, }, + [7] = { 24, 90, 126, }, + [8] = { 26, 119, 167, }, + [9] = { 28, 156, 218, }, + [10] = { 32, 202, 282, }, + [11] = { 35, 259, 363, }, + [12] = { 38, 331, 463, }, + [13] = { 39, 420, 587, }, + [14] = { 41, 530, 742, }, + [15] = { 42, 630, 881, }, + [16] = { 43, 746, 1045, }, + [17] = { 44, 883, 1236, }, + [18] = { 45, 1043, 1460, }, + [19] = { 46, 1230, 1721, }, + [20] = { 46, 1447, 2026, }, + [21] = { 47, 1613, 2258, }, + [22] = { 48, 1795, 2514, }, + [23] = { 49, 1998, 2797, }, + [24] = { 50, 2222, 3111, }, + [25] = { 50, 2470, 3458, }, + [26] = { 51, 2744, 3842, }, + [27] = { 52, 3047, 4266, }, + [28] = { 53, 3382, 4735, }, + [29] = { 54, 3753, 5254, }, + [30] = { 54, 4162, 5826, }, + }, } gems["Blade Vortex"] = { dexterity = true, + active_skill = true, spell = true, - aoe = true, + area = true, duration = true, - hit = true, - showAverage = true, - base = { - skill_castTime = 0.5, - skill_damageEffectiveness = 0.3, - skill_critChanceBase = 6, - skill_durationBase = 5, + color = 2, + baseFlags = { + spell = true, + area = true, + duration = true, }, - quality = { - aoeRadiusInc = 0.5, + skillTypes = { [2] = true, [10] = true, [11] = true, [12] = true, [18] = true, [26] = true, [36] = true, [27] = true, }, + baseMods = { + skill("castTime", 0.5), + skill("damageEffectiveness", 0.3), + skill("critChance", 6), + skill("duration", 5), --"base_skill_effect_duration" = 5000 + --"maximum_number_of_spinning_blades" = 20 + mod("AreaRadius", "INC", 0), --"base_skill_area_of_effect_+%" = 0 + --"extra_gore_chance_override_%" = 15 + --"is_area_damage" = ? + --"skill_can_add_multiple_charges_per_action" = ? + --"action_ignores_crit_tracking" = ? + skill("deliciouslyOverpowered", true), + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("PhysicalMin", nil), --"spell_minimum_base_physical_damage" + [3] = skill("PhysicalMax", nil), --"spell_maximum_base_physical_damage" }, levels = { - [1] = { skill_manaCostBase = 6, skill_physicalMin = 9, skill_physicalMax = 14, }, - [2] = { skill_manaCostBase = 7, skill_physicalMin = 12, skill_physicalMax = 17, }, - [3] = { skill_manaCostBase = 8, skill_physicalMin = 15, skill_physicalMax = 23, }, - [4] = { skill_manaCostBase = 9, skill_physicalMin = 19, skill_physicalMax = 29, }, - [5] = { skill_manaCostBase = 10, skill_physicalMin = 24, skill_physicalMax = 36, }, - [6] = { skill_manaCostBase = 11, skill_physicalMin = 30, skill_physicalMax = 45, }, - [7] = { skill_manaCostBase = 12, skill_physicalMin = 37, skill_physicalMax = 55, }, - [8] = { skill_manaCostBase = 13, skill_physicalMin = 43, skill_physicalMax = 64, }, - [9] = { skill_manaCostBase = 13, skill_physicalMin = 50, skill_physicalMax = 74, }, - [10] = { skill_manaCostBase = 14, skill_physicalMin = 57, skill_physicalMax = 86, }, - [11] = { skill_manaCostBase = 14, skill_physicalMin = 66, skill_physicalMax = 98, }, - [12] = { skill_manaCostBase = 15, skill_physicalMin = 75, skill_physicalMax = 113, }, - [13] = { skill_manaCostBase = 16, skill_physicalMin = 86, skill_physicalMax = 129, }, - [14] = { skill_manaCostBase = 16, skill_physicalMin = 98, skill_physicalMax = 147, }, - [15] = { skill_manaCostBase = 17, skill_physicalMin = 111, skill_physicalMax = 167, }, - [16] = { skill_manaCostBase = 18, skill_physicalMin = 126, skill_physicalMax = 190, }, - [17] = { skill_manaCostBase = 18, skill_physicalMin = 137, skill_physicalMax = 206, }, - [18] = { skill_manaCostBase = 19, skill_physicalMin = 149, skill_physicalMax = 224, }, - [19] = { skill_manaCostBase = 19, skill_physicalMin = 162, skill_physicalMax = 243, }, - [20] = { skill_manaCostBase = 19, skill_physicalMin = 176, skill_physicalMax = 264, }, - [21] = { skill_manaCostBase = 20, skill_physicalMin = 191, skill_physicalMax = 286, }, - [22] = { skill_manaCostBase = 21, skill_physicalMin = 207, skill_physicalMax = 310, }, - [23] = { skill_manaCostBase = 21, skill_physicalMin = 224, skill_physicalMax = 336, }, - [24] = { skill_manaCostBase = 21, skill_physicalMin = 242, skill_physicalMax = 363, }, - [25] = { skill_manaCostBase = 22, skill_physicalMin = 262, skill_physicalMax = 393, }, - [26] = { skill_manaCostBase = 23, skill_physicalMin = 283, skill_physicalMax = 425, }, - [27] = { skill_manaCostBase = 23, skill_physicalMin = 306, skill_physicalMax = 459, }, - [28] = { skill_manaCostBase = 23, skill_physicalMin = 331, skill_physicalMax = 496, }, - [29] = { skill_manaCostBase = 24, skill_physicalMin = 357, skill_physicalMax = 536, }, - [30] = { skill_manaCostBase = 24, skill_physicalMin = 386, skill_physicalMax = 579, }, - } + [1] = { 6, 9, 14, }, + [2] = { 7, 12, 17, }, + [3] = { 8, 15, 23, }, + [4] = { 9, 19, 29, }, + [5] = { 10, 24, 36, }, + [6] = { 11, 30, 45, }, + [7] = { 12, 37, 55, }, + [8] = { 13, 43, 64, }, + [9] = { 13, 50, 74, }, + [10] = { 14, 57, 86, }, + [11] = { 14, 66, 98, }, + [12] = { 15, 75, 113, }, + [13] = { 16, 86, 129, }, + [14] = { 16, 98, 147, }, + [15] = { 17, 111, 167, }, + [16] = { 18, 126, 190, }, + [17] = { 18, 137, 206, }, + [18] = { 19, 149, 224, }, + [19] = { 19, 162, 243, }, + [20] = { 19, 176, 264, }, + [21] = { 20, 191, 286, }, + [22] = { 21, 207, 310, }, + [23] = { 21, 224, 336, }, + [24] = { 21, 242, 363, }, + [25] = { 22, 262, 393, }, + [26] = { 23, 283, 425, }, + [27] = { 23, 306, 459, }, + [28] = { 23, 331, 496, }, + [29] = { 24, 357, 536, }, + [30] = { 24, 386, 579, }, + }, } gems["Bladefall"] = { dexterity = true, + active_skill = true, spell = true, - aoe = true, - hit = true, - base = { - skill_castTime = 0.8, - skill_damageEffectiveness = 0.9, - skill_critChanceBase = 5, + area = true, + color = 2, + baseFlags = { + spell = true, + area = true, }, - quality = { - aoeRadiusInc = 0.5, + skillTypes = { [2] = true, [11] = true, [17] = true, [19] = true, [18] = true, [10] = true, [36] = true, [26] = true, }, + baseMods = { + skill("castTime", 0.8), + skill("damageEffectiveness", 0.9), + skill("critChance", 5), + --"bladefall_damage_per_stage_+%_final" = -6 + mod("AreaRadius", "INC", 0), --"base_skill_area_of_effect_+%" = 0 + --"is_area_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("PhysicalMin", nil), --"spell_minimum_base_physical_damage" + [3] = skill("PhysicalMax", nil), --"spell_maximum_base_physical_damage" }, levels = { - [1] = { skill_manaCostBase = 13, skill_physicalMin = 44, skill_physicalMax = 65, }, - [2] = { skill_manaCostBase = 14, skill_physicalMin = 52, skill_physicalMax = 78, }, - [3] = { skill_manaCostBase = 15, skill_physicalMin = 62, skill_physicalMax = 93, }, - [4] = { skill_manaCostBase = 16, skill_physicalMin = 73, skill_physicalMax = 110, }, - [5] = { skill_manaCostBase = 17, skill_physicalMin = 86, skill_physicalMax = 129, }, - [6] = { skill_manaCostBase = 18, skill_physicalMin = 96, skill_physicalMax = 144, }, - [7] = { skill_manaCostBase = 18, skill_physicalMin = 107, skill_physicalMax = 160, }, - [8] = { skill_manaCostBase = 19, skill_physicalMin = 118, skill_physicalMax = 177, }, - [9] = { skill_manaCostBase = 19, skill_physicalMin = 131, skill_physicalMax = 197, }, - [10] = { skill_manaCostBase = 20, skill_physicalMin = 145, skill_physicalMax = 218, }, - [11] = { skill_manaCostBase = 21, skill_physicalMin = 160, skill_physicalMax = 241, }, - [12] = { skill_manaCostBase = 21, skill_physicalMin = 177, skill_physicalMax = 266, }, - [13] = { skill_manaCostBase = 22, skill_physicalMin = 195, skill_physicalMax = 293, }, - [14] = { skill_manaCostBase = 22, skill_physicalMin = 215, skill_physicalMax = 323, }, - [15] = { skill_manaCostBase = 23, skill_physicalMin = 237, skill_physicalMax = 356, }, - [16] = { skill_manaCostBase = 24, skill_physicalMin = 261, skill_physicalMax = 392, }, - [17] = { skill_manaCostBase = 24, skill_physicalMin = 287, skill_physicalMax = 431, }, - [18] = { skill_manaCostBase = 25, skill_physicalMin = 315, skill_physicalMax = 473, }, - [19] = { skill_manaCostBase = 25, skill_physicalMin = 346, skill_physicalMax = 519, }, - [20] = { skill_manaCostBase = 26, skill_physicalMin = 380, skill_physicalMax = 570, }, - [21] = { skill_manaCostBase = 27, skill_physicalMin = 417, skill_physicalMax = 625, }, - [22] = { skill_manaCostBase = 27, skill_physicalMin = 457, skill_physicalMax = 685, }, - [23] = { skill_manaCostBase = 28, skill_physicalMin = 500, skill_physicalMax = 750, }, - [24] = { skill_manaCostBase = 28, skill_physicalMin = 548, skill_physicalMax = 821, }, - [25] = { skill_manaCostBase = 29, skill_physicalMin = 599, skill_physicalMax = 899, }, - [26] = { skill_manaCostBase = 30, skill_physicalMin = 655, skill_physicalMax = 983, }, - [27] = { skill_manaCostBase = 30, skill_physicalMin = 716, skill_physicalMax = 1074, }, - [28] = { skill_manaCostBase = 31, skill_physicalMin = 782, skill_physicalMax = 1174, }, - [29] = { skill_manaCostBase = 31, skill_physicalMin = 854, skill_physicalMax = 1282, }, - [30] = { skill_manaCostBase = 32, skill_physicalMin = 933, skill_physicalMax = 1399, }, - } + [1] = { 13, 44, 65, }, + [2] = { 14, 52, 78, }, + [3] = { 15, 62, 93, }, + [4] = { 16, 73, 110, }, + [5] = { 17, 86, 129, }, + [6] = { 18, 96, 144, }, + [7] = { 18, 107, 160, }, + [8] = { 19, 118, 177, }, + [9] = { 19, 131, 197, }, + [10] = { 20, 145, 218, }, + [11] = { 21, 160, 241, }, + [12] = { 21, 177, 266, }, + [13] = { 22, 195, 293, }, + [14] = { 22, 215, 323, }, + [15] = { 23, 237, 356, }, + [16] = { 24, 261, 392, }, + [17] = { 24, 287, 431, }, + [18] = { 25, 315, 473, }, + [19] = { 25, 346, 519, }, + [20] = { 26, 380, 570, }, + [21] = { 27, 417, 625, }, + [22] = { 27, 457, 685, }, + [23] = { 28, 500, 750, }, + [24] = { 28, 548, 821, }, + [25] = { 29, 599, 899, }, + [26] = { 30, 655, 983, }, + [27] = { 30, 716, 1074, }, + [28] = { 31, 782, 1174, }, + [29] = { 31, 854, 1282, }, + [30] = { 32, 933, 1399, }, + }, } gems["Blast Rain"] = { - dexterity = true, - attack = true, - bow = true, - aoe = true, fire = true, - hit = true, - base = { - skill_physicalConvertTofire = 50, + dexterity = true, + active_skill = true, + attack = true, + area = true, + bow = true, + color = 2, + baseFlags = { + attack = true, + projectile = true, + area = true, + fire = true, }, - quality = { - aoeRadiusInc = 0.5, + skillTypes = { [1] = true, [11] = true, [14] = true, [22] = true, [17] = true, [19] = true, [33] = true, [48] = true, }, + baseMods = { + skill("castTime", 1), + mod("PhysicalDamageConvertToFire", "BASE", 50, 0, 0, nil), --"base_physical_damage_%_to_convert_to_fire" = 50 + --"blast_rain_number_of_blasts" = 4 + --"blast_rain_arrow_delay_ms" = 80 + --"base_is_projectile" = ? + --"is_area_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = mod("Damage", "MORE", nil, ModFlag.Attack), + [3] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" }, levels = { - [1] = { skill_manaCostBase = 8, attack_damageMore = 0.4, }, - [2] = { skill_manaCostBase = 8, attack_damageMore = 0.404, }, - [3] = { skill_manaCostBase = 8, attack_damageMore = 0.408, }, - [4] = { skill_manaCostBase = 8, attack_damageMore = 0.412, }, - [5] = { skill_manaCostBase = 9, attack_damageMore = 0.416, }, - [6] = { skill_manaCostBase = 9, attack_damageMore = 0.42, }, - [7] = { skill_manaCostBase = 9, attack_damageMore = 0.424, }, - [8] = { skill_manaCostBase = 9, attack_damageMore = 0.428, }, - [9] = { skill_manaCostBase = 9, attack_damageMore = 0.432, }, - [10] = { skill_manaCostBase = 9, attack_damageMore = 0.436, }, - [11] = { skill_manaCostBase = 9, attack_damageMore = 0.44, }, - [12] = { skill_manaCostBase = 10, attack_damageMore = 0.444, }, - [13] = { skill_manaCostBase = 10, attack_damageMore = 0.448, }, - [14] = { skill_manaCostBase = 10, attack_damageMore = 0.452, }, - [15] = { skill_manaCostBase = 10, attack_damageMore = 0.456, }, - [16] = { skill_manaCostBase = 10, attack_damageMore = 0.46, }, - [17] = { skill_manaCostBase = 10, attack_damageMore = 0.464, }, - [18] = { skill_manaCostBase = 10, attack_damageMore = 0.468, }, - [19] = { skill_manaCostBase = 10, attack_damageMore = 0.472, }, - [20] = { skill_manaCostBase = 10, attack_damageMore = 0.476, }, - [21] = { skill_manaCostBase = 10, attack_damageMore = 0.48, }, - [22] = { skill_manaCostBase = 10, attack_damageMore = 0.484, }, - [23] = { skill_manaCostBase = 11, attack_damageMore = 0.488, }, - [24] = { skill_manaCostBase = 11, attack_damageMore = 0.492, }, - [25] = { skill_manaCostBase = 11, attack_damageMore = 0.496, }, - [26] = { skill_manaCostBase = 11, attack_damageMore = 0.5, }, - [27] = { skill_manaCostBase = 11, attack_damageMore = 0.504, }, - [28] = { skill_manaCostBase = 12, attack_damageMore = 0.508, }, - [29] = { skill_manaCostBase = 12, attack_damageMore = 0.512, }, - [30] = { skill_manaCostBase = 12, attack_damageMore = 0.516, }, - } + [1] = { 8, -60, 0, }, + [2] = { 8, -59.6, 1, }, + [3] = { 8, -59.2, 2, }, + [4] = { 8, -58.8, 3, }, + [5] = { 9, -58.4, 4, }, + [6] = { 9, -58, 5, }, + [7] = { 9, -57.6, 6, }, + [8] = { 9, -57.2, 7, }, + [9] = { 9, -56.8, 8, }, + [10] = { 9, -56.4, 9, }, + [11] = { 9, -56, 10, }, + [12] = { 10, -55.6, 11, }, + [13] = { 10, -55.2, 12, }, + [14] = { 10, -54.8, 13, }, + [15] = { 10, -54.4, 14, }, + [16] = { 10, -54, 15, }, + [17] = { 10, -53.6, 16, }, + [18] = { 10, -53.2, 17, }, + [19] = { 10, -52.8, 18, }, + [20] = { 10, -52.4, 19, }, + [21] = { 10, -52, 20, }, + [22] = { 10, -51.6, 21, }, + [23] = { 11, -51.2, 22, }, + [24] = { 11, -50.8, 23, }, + [25] = { 11, -50.4, 24, }, + [26] = { 11, -50, 25, }, + [27] = { 11, -49.6, 26, }, + [28] = { 12, -49.2, 27, }, + [29] = { 12, -48.8, 28, }, + [30] = { 12, -48.4, 29, }, + }, } gems["Blink Arrow"] = { dexterity = true, + active_skill = true, + attack = true, + minion = true, + duration = true, + movement = true, + bow = true, unsupported = true, } gems["Blood Rage"] = { dexterity = true, + active_skill = true, spell = true, duration = true, - base = { + color = 2, + baseFlags = { + spell = true, + duration = true, }, - quality = { - BuffEffect_attackSpeedInc = 0.25, + skillTypes = { [2] = true, [5] = true, [12] = true, [18] = true, [36] = true, }, + baseMods = { + skill("castTime", 0.25), + --"life_leech_from_physical_attack_damage_permyriad" = 120 + --"base_physical_damage_%_of_maximum_life_to_deal_per_minute" = 240 + --"base_physical_damage_%_of_maximum_energy_shield_to_deal_per_minute" = 240 + --"add_frenzy_charge_on_kill_%_chance" = 25 + }, + qualityMods = { + mod("Speed", "INC", 0.25, ModFlag.Attack, 0, { type = "GlobalEffect", effectType = "Buff" }), --"attack_speed_+%" = 0.25 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = mod("Speed", "INC", nil, ModFlag.Attack, 0, { type = "GlobalEffect", effectType = "Buff" }), --"attack_speed_+%" + [3] = skill("duration", nil), --"base_skill_effect_duration" + --[4] = "skill_level" }, levels = { - [1] = { skill_manaCostBase = 17, skill_durationBase = 7, BuffEffect_attackSpeedInc = 5, }, - [2] = { skill_manaCostBase = 17, skill_durationBase = 7.2, BuffEffect_attackSpeedInc = 6, }, - [3] = { skill_manaCostBase = 17, skill_durationBase = 7.4, BuffEffect_attackSpeedInc = 6, }, - [4] = { skill_manaCostBase = 18, skill_durationBase = 7.6, BuffEffect_attackSpeedInc = 7, }, - [5] = { skill_manaCostBase = 18, skill_durationBase = 7.8, BuffEffect_attackSpeedInc = 7, }, - [6] = { skill_manaCostBase = 18, skill_durationBase = 8, BuffEffect_attackSpeedInc = 8, }, - [7] = { skill_manaCostBase = 18, skill_durationBase = 8.2, BuffEffect_attackSpeedInc = 8, }, - [8] = { skill_manaCostBase = 19, skill_durationBase = 8.4, BuffEffect_attackSpeedInc = 9, }, - [9] = { skill_manaCostBase = 19, skill_durationBase = 8.6, BuffEffect_attackSpeedInc = 9, }, - [10] = { skill_manaCostBase = 19, skill_durationBase = 8.8, BuffEffect_attackSpeedInc = 10, }, - [11] = { skill_manaCostBase = 20, skill_durationBase = 9, BuffEffect_attackSpeedInc = 10, }, - [12] = { skill_manaCostBase = 20, skill_durationBase = 9.2, BuffEffect_attackSpeedInc = 11, }, - [13] = { skill_manaCostBase = 20, skill_durationBase = 9.4, BuffEffect_attackSpeedInc = 11, }, - [14] = { skill_manaCostBase = 20, skill_durationBase = 9.6, BuffEffect_attackSpeedInc = 12, }, - [15] = { skill_manaCostBase = 20, skill_durationBase = 9.8, BuffEffect_attackSpeedInc = 12, }, - [16] = { skill_manaCostBase = 21, skill_durationBase = 10, BuffEffect_attackSpeedInc = 13, }, - [17] = { skill_manaCostBase = 21, skill_durationBase = 10.2, BuffEffect_attackSpeedInc = 13, }, - [18] = { skill_manaCostBase = 21, skill_durationBase = 10.4, BuffEffect_attackSpeedInc = 14, }, - [19] = { skill_manaCostBase = 21, skill_durationBase = 10.6, BuffEffect_attackSpeedInc = 14, }, - [20] = { skill_manaCostBase = 21, skill_durationBase = 10.8, BuffEffect_attackSpeedInc = 15, }, - [21] = { skill_manaCostBase = 22, skill_durationBase = 11, BuffEffect_attackSpeedInc = 15, }, - [22] = { skill_manaCostBase = 22, skill_durationBase = 11.2, BuffEffect_attackSpeedInc = 16, }, - [23] = { skill_manaCostBase = 22, skill_durationBase = 11.4, BuffEffect_attackSpeedInc = 16, }, - [24] = { skill_manaCostBase = 22, skill_durationBase = 11.6, BuffEffect_attackSpeedInc = 17, }, - [25] = { skill_manaCostBase = 22, skill_durationBase = 11.8, BuffEffect_attackSpeedInc = 17, }, - [26] = { skill_manaCostBase = 23, skill_durationBase = 12, BuffEffect_attackSpeedInc = 18, }, - [27] = { skill_manaCostBase = 23, skill_durationBase = 12.2, BuffEffect_attackSpeedInc = 18, }, - [28] = { skill_manaCostBase = 23, skill_durationBase = 12.4, BuffEffect_attackSpeedInc = 19, }, - [29] = { skill_manaCostBase = 23, skill_durationBase = 12.6, BuffEffect_attackSpeedInc = 19, }, - [30] = { skill_manaCostBase = 23, skill_durationBase = 12.8, BuffEffect_attackSpeedInc = 20, }, - } + [1] = { 17, 5, 7, 1, }, + [2] = { 17, 6, 7.2, 2, }, + [3] = { 17, 6, 7.4, 3, }, + [4] = { 18, 7, 7.6, 4, }, + [5] = { 18, 7, 7.8, 5, }, + [6] = { 18, 8, 8, 6, }, + [7] = { 18, 8, 8.2, 7, }, + [8] = { 19, 9, 8.4, 8, }, + [9] = { 19, 9, 8.6, 9, }, + [10] = { 19, 10, 8.8, 10, }, + [11] = { 20, 10, 9, 11, }, + [12] = { 20, 11, 9.2, 12, }, + [13] = { 20, 11, 9.4, 13, }, + [14] = { 20, 12, 9.6, 14, }, + [15] = { 20, 12, 9.8, 15, }, + [16] = { 21, 13, 10, 16, }, + [17] = { 21, 13, 10.2, 17, }, + [18] = { 21, 14, 10.4, 18, }, + [19] = { 21, 14, 10.6, 19, }, + [20] = { 21, 15, 10.8, 20, }, + [21] = { 22, 15, 11, 21, }, + [22] = { 22, 16, 11.2, 22, }, + [23] = { 22, 16, 11.4, 23, }, + [24] = { 22, 17, 11.6, 24, }, + [25] = { 22, 17, 11.8, 25, }, + [26] = { 23, 18, 12, 26, }, + [27] = { 23, 18, 12.2, 27, }, + [28] = { 23, 19, 12.4, 28, }, + [29] = { 23, 19, 12.6, 29, }, + [30] = { 23, 20, 12.8, 30, }, + }, } gems["Burning Arrow"] = { dexterity = true, + active_skill = true, attack = true, - bow = true, fire = true, - hit = true, - base = { - skill_physicalConvertTofire = 50, - igniteChance = 20, + bow = true, + color = 2, + baseFlags = { + attack = true, + projectile = true, + fire = true, }, - quality = { - ignite_durationInc = 3, + skillTypes = { [1] = true, [48] = true, [3] = true, [22] = true, [17] = true, [19] = true, [33] = true, [53] = true, [55] = true, }, + baseMods = { + skill("castTime", 1), + mod("EnemyIgniteChance", "BASE", 20), --"base_chance_to_ignite_%" = 20 + mod("PhysicalDamageConvertToFire", "BASE", 50, 0, 0, nil), --"base_physical_damage_%_to_convert_to_fire" = 50 + --"skill_can_fire_arrows" = ? + }, + qualityMods = { + mod("EnemyIgniteDuration", "INC", 3), --"ignite_duration_+%" = 3 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = mod("Damage", "MORE", nil, ModFlag.Attack), + [3] = mod("FireDamage", "INC", nil, ModFlag.Dot), --"burn_damage_+%" }, levels = { - [1] = { skill_manaCostBase = 5, attack_damageMore = 1.5, dot_fireInc = 10, }, - [2] = { skill_manaCostBase = 5, attack_damageMore = 1.518, dot_fireInc = 11, }, - [3] = { skill_manaCostBase = 5, attack_damageMore = 1.536, dot_fireInc = 12, }, - [4] = { skill_manaCostBase = 5, attack_damageMore = 1.554, dot_fireInc = 13, }, - [5] = { skill_manaCostBase = 5, attack_damageMore = 1.572, dot_fireInc = 14, }, - [6] = { skill_manaCostBase = 6, attack_damageMore = 1.59, dot_fireInc = 15, }, - [7] = { skill_manaCostBase = 6, attack_damageMore = 1.608, dot_fireInc = 16, }, - [8] = { skill_manaCostBase = 6, attack_damageMore = 1.626, dot_fireInc = 17, }, - [9] = { skill_manaCostBase = 6, attack_damageMore = 1.644, dot_fireInc = 18, }, - [10] = { skill_manaCostBase = 6, attack_damageMore = 1.662, dot_fireInc = 19, }, - [11] = { skill_manaCostBase = 7, attack_damageMore = 1.68, dot_fireInc = 20, }, - [12] = { skill_manaCostBase = 7, attack_damageMore = 1.698, dot_fireInc = 21, }, - [13] = { skill_manaCostBase = 7, attack_damageMore = 1.716, dot_fireInc = 22, }, - [14] = { skill_manaCostBase = 7, attack_damageMore = 1.734, dot_fireInc = 23, }, - [15] = { skill_manaCostBase = 7, attack_damageMore = 1.752, dot_fireInc = 24, }, - [16] = { skill_manaCostBase = 8, attack_damageMore = 1.77, dot_fireInc = 25, }, - [17] = { skill_manaCostBase = 8, attack_damageMore = 1.788, dot_fireInc = 26, }, - [18] = { skill_manaCostBase = 8, attack_damageMore = 1.806, dot_fireInc = 27, }, - [19] = { skill_manaCostBase = 8, attack_damageMore = 1.824, dot_fireInc = 28, }, - [20] = { skill_manaCostBase = 8, attack_damageMore = 1.842, dot_fireInc = 29, }, - [21] = { skill_manaCostBase = 9, attack_damageMore = 1.86, dot_fireInc = 30, }, - [22] = { skill_manaCostBase = 9, attack_damageMore = 1.878, dot_fireInc = 31, }, - [23] = { skill_manaCostBase = 9, attack_damageMore = 1.896, dot_fireInc = 32, }, - [24] = { skill_manaCostBase = 9, attack_damageMore = 1.914, dot_fireInc = 33, }, - [25] = { skill_manaCostBase = 9, attack_damageMore = 1.932, dot_fireInc = 34, }, - [26] = { skill_manaCostBase = 10, attack_damageMore = 1.95, dot_fireInc = 35, }, - [27] = { skill_manaCostBase = 10, attack_damageMore = 1.968, dot_fireInc = 36, }, - [28] = { skill_manaCostBase = 10, attack_damageMore = 1.986, dot_fireInc = 37, }, - [29] = { skill_manaCostBase = 10, attack_damageMore = 2.004, dot_fireInc = 38, }, - [30] = { skill_manaCostBase = 10, attack_damageMore = 2.022, dot_fireInc = 39, }, - } + [1] = { 5, 50, 10, }, + [2] = { 5, 51.8, 11, }, + [3] = { 5, 53.6, 12, }, + [4] = { 5, 55.4, 13, }, + [5] = { 5, 57.2, 14, }, + [6] = { 6, 59, 15, }, + [7] = { 6, 60.8, 16, }, + [8] = { 6, 62.6, 17, }, + [9] = { 6, 64.4, 18, }, + [10] = { 6, 66.2, 19, }, + [11] = { 7, 68, 20, }, + [12] = { 7, 69.8, 21, }, + [13] = { 7, 71.6, 22, }, + [14] = { 7, 73.4, 23, }, + [15] = { 7, 75.2, 24, }, + [16] = { 8, 77, 25, }, + [17] = { 8, 78.8, 26, }, + [18] = { 8, 80.6, 27, }, + [19] = { 8, 82.4, 28, }, + [20] = { 8, 84.2, 29, }, + [21] = { 9, 86, 30, }, + [22] = { 9, 87.8, 31, }, + [23] = { 9, 89.6, 32, }, + [24] = { 9, 91.4, 33, }, + [25] = { 9, 93.2, 34, }, + [26] = { 10, 95, 35, }, + [27] = { 10, 96.8, 36, }, + [28] = { 10, 98.6, 37, }, + [29] = { 10, 100.4, 38, }, + [30] = { 10, 102.2, 39, }, + }, +} +gems["Vaal Burning Arrow"] = { + dexterity = true, + active_skill = true, + vaal = true, + attack = true, + area = true, + fire = true, + bow = true, + color = 2, + baseFlags = { + attack = true, + projectile = true, + area = true, + fire = true, + vaal = true, + }, + skillTypes = { [1] = true, [48] = true, [3] = true, [22] = true, [17] = true, [19] = true, [11] = true, [43] = true, [33] = true, [55] = true, }, + baseMods = { + skill("castTime", 1), + mod("EnemyIgniteChance", "BASE", 20), --"base_chance_to_ignite_%" = 20 + mod("PhysicalDamageConvertToFire", "BASE", 50, 0, 0, nil), --"base_physical_damage_%_to_convert_to_fire" = 50 + --"vaal_burning_arrow_explode_on_hit" = ? + skill("cannotBeEvaded", true), --"global_always_hit" = ? + --"skill_can_fire_arrows" = ? + }, + qualityMods = { + mod("EnemyIgniteDuration", "INC", 3), --"ignite_duration_+%" = 3 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), + [2] = mod("FireDamage", "INC", nil, ModFlag.Dot), --"burn_damage_+%" + }, + levels = { + [1] = { 60, 10, }, + [2] = { 62, 11, }, + [3] = { 64, 12, }, + [4] = { 66, 13, }, + [5] = { 68, 14, }, + [6] = { 70, 15, }, + [7] = { 72, 16, }, + [8] = { 74, 17, }, + [9] = { 76, 18, }, + [10] = { 78, 19, }, + [11] = { 80, 20, }, + [12] = { 82, 21, }, + [13] = { 84, 22, }, + [14] = { 86, 23, }, + [15] = { 88, 24, }, + [16] = { 90, 25, }, + [17] = { 92, 26, }, + [18] = { 94, 27, }, + [19] = { 96, 28, }, + [20] = { 98, 29, }, + [21] = { 100, 30, }, + [22] = { 102, 31, }, + [23] = { 104, 32, }, + [24] = { 106, 33, }, + [25] = { 108, 34, }, + [26] = { 110, 35, }, + [27] = { 112, 36, }, + [28] = { 114, 37, }, + [29] = { 116, 38, }, + [30] = { 118, 39, }, + }, } gems["Caustic Arrow"] = { dexterity = true, + active_skill = true, attack = true, - bow = true, - aoe = true, + area = true, duration = true, chaos = true, - hit = true, - base = { + bow = true, + color = 2, + baseFlags = { + attack = true, + projectile = true, + area = true, + duration = true, + chaos = true, }, - quality = { - aoeRadiusInc = 0.5, + skillTypes = { [1] = true, [48] = true, [3] = true, [11] = true, [12] = true, [17] = true, [19] = true, [22] = true, [40] = true, [50] = true, }, + baseMods = { + skill("castTime", 1), + --"skill_can_fire_arrows" = 1 + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("duration", nil), --"base_skill_effect_duration" + [3] = skill("ChaosDot", nil), --"base_chaos_damage_to_deal_per_minute" + [4] = mod("PhysicalDamageGainAsChaos", "BASE", nil, 0, 0, nil), --"physical_damage_%_to_add_as_chaos" }, levels = { - [1] = { skill_manaCostBase = 8, skill_durationBase = 2.8, skill_chaosDotBase = 5.2, physicalGainAschaos = 30, }, - [2] = { skill_manaCostBase = 8, skill_durationBase = 2.9, skill_chaosDotBase = 6.5, physicalGainAschaos = 31, }, - [3] = { skill_manaCostBase = 8, skill_durationBase = 3, skill_chaosDotBase = 8.8, physicalGainAschaos = 32, }, - [4] = { skill_manaCostBase = 9, skill_durationBase = 3.1, skill_chaosDotBase = 11.7, physicalGainAschaos = 33, }, - [5] = { skill_manaCostBase = 9, skill_durationBase = 3.2, skill_chaosDotBase = 16.5, physicalGainAschaos = 34, }, - [6] = { skill_manaCostBase = 9, skill_durationBase = 3.3, skill_chaosDotBase = 22.8, physicalGainAschaos = 35, }, - [7] = { skill_manaCostBase = 10, skill_durationBase = 3.4, skill_chaosDotBase = 30.8, physicalGainAschaos = 36, }, - [8] = { skill_manaCostBase = 10, skill_durationBase = 3.5, skill_chaosDotBase = 41, physicalGainAschaos = 37, }, - [9] = { skill_manaCostBase = 10, skill_durationBase = 3.6, skill_chaosDotBase = 54.1, physicalGainAschaos = 38, }, - [10] = { skill_manaCostBase = 11, skill_durationBase = 3.7, skill_chaosDotBase = 70.7, physicalGainAschaos = 39, }, - [11] = { skill_manaCostBase = 11, skill_durationBase = 3.9, skill_chaosDotBase = 91.7, physicalGainAschaos = 40, }, - [12] = { skill_manaCostBase = 12, skill_durationBase = 4, skill_chaosDotBase = 118.1, physicalGainAschaos = 41, }, - [13] = { skill_manaCostBase = 12, skill_durationBase = 4.1, skill_chaosDotBase = 151.3, physicalGainAschaos = 42, }, - [14] = { skill_manaCostBase = 13, skill_durationBase = 4.2, skill_chaosDotBase = 193, physicalGainAschaos = 43, }, - [15] = { skill_manaCostBase = 13, skill_durationBase = 4.3, skill_chaosDotBase = 230.9, physicalGainAschaos = 44, }, - [16] = { skill_manaCostBase = 14, skill_durationBase = 4.4, skill_chaosDotBase = 275.7, physicalGainAschaos = 45, }, - [17] = { skill_manaCostBase = 14, skill_durationBase = 4.5, skill_chaosDotBase = 328.6, physicalGainAschaos = 46, }, - [18] = { skill_manaCostBase = 15, skill_durationBase = 4.6, skill_chaosDotBase = 390.8, physicalGainAschaos = 47, }, - [19] = { skill_manaCostBase = 15, skill_durationBase = 4.7, skill_chaosDotBase = 464.1, physicalGainAschaos = 48, }, - [20] = { skill_manaCostBase = 16, skill_durationBase = 4.8, skill_chaosDotBase = 550.3, physicalGainAschaos = 49, }, - [21] = { skill_manaCostBase = 16, skill_durationBase = 5, skill_chaosDotBase = 616, physicalGainAschaos = 50, }, - [22] = { skill_manaCostBase = 17, skill_durationBase = 5.1, skill_chaosDotBase = 689.2, physicalGainAschaos = 51, }, - [23] = { skill_manaCostBase = 17, skill_durationBase = 5.2, skill_chaosDotBase = 770.6, physicalGainAschaos = 52, }, - [24] = { skill_manaCostBase = 18, skill_durationBase = 5.3, skill_chaosDotBase = 861.1, physicalGainAschaos = 53, }, - [25] = { skill_manaCostBase = 18, skill_durationBase = 5.4, skill_chaosDotBase = 961.8, physicalGainAschaos = 54, }, - [26] = { skill_manaCostBase = 19, skill_durationBase = 5.5, skill_chaosDotBase = 1073.7, physicalGainAschaos = 55, }, - [27] = { skill_manaCostBase = 19, skill_durationBase = 5.6, skill_chaosDotBase = 1198, physicalGainAschaos = 56, }, - [28] = { skill_manaCostBase = 20, skill_durationBase = 5.7, skill_chaosDotBase = 1336.2, physicalGainAschaos = 57, }, - [29] = { skill_manaCostBase = 20, skill_durationBase = 5.8, skill_chaosDotBase = 1489.6, physicalGainAschaos = 58, }, - [30] = { skill_manaCostBase = 21, skill_durationBase = 5.9, skill_chaosDotBase = 1660, physicalGainAschaos = 59, }, - } + [1] = { 8, 2.8, 5.2, 30, }, + [2] = { 8, 2.9, 6.5166666666667, 31, }, + [3] = { 8, 3, 8.8333333333333, 32, }, + [4] = { 9, 3.1, 11.7, 33, }, + [5] = { 9, 3.2, 16.516666666667, 34, }, + [6] = { 9, 3.3, 22.75, 35, }, + [7] = { 10, 3.4, 30.766666666667, 36, }, + [8] = { 10, 3.5, 41.033333333333, 37, }, + [9] = { 10, 3.6, 54.116666666667, 38, }, + [10] = { 11, 3.7, 70.716666666667, 39, }, + [11] = { 11, 3.9, 91.683333333333, 40, }, + [12] = { 12, 4, 118.13333333333, 41, }, + [13] = { 12, 4.1, 151.35, 42, }, + [14] = { 13, 4.2, 192.96666666667, 43, }, + [15] = { 13, 4.3, 230.91666666667, 44, }, + [16] = { 14, 4.4, 275.7, 45, }, + [17] = { 14, 4.5, 328.55, 46, }, + [18] = { 15, 4.6, 390.81666666667, 47, }, + [19] = { 15, 4.7, 464.13333333333, 48, }, + [20] = { 16, 4.8, 550.33333333333, 49, }, + [21] = { 16, 5, 616.05, 50, }, + [22] = { 17, 5.1, 689.2, 51, }, + [23] = { 17, 5.2, 770.58333333333, 52, }, + [24] = { 18, 5.3, 861.11666666667, 53, }, + [25] = { 18, 5.4, 961.78333333333, 54, }, + [26] = { 19, 5.5, 1073.6833333333, 55, }, + [27] = { 19, 5.6, 1198.05, 56, }, + [28] = { 20, 5.7, 1336.2, 57, }, + [29] = { 20, 5.8, 1489.6166666667, 58, }, + [30] = { 21, 5.9, 1659.9833333333, 59, }, + }, } gems["Cyclone"] = { dexterity = true, + active_skill = true, attack = true, - melee = true, - aoe = true, + area = true, movement = true, - hit = true, - base = { - skill_manaCostBase = 12, - attackSpeedMore = 1.5, + melee = true, + color = 2, + baseFlags = { + attack = true, + melee = true, + area = true, + movement = true, }, - quality = { - aoeRadiusInc = 0.5, + skillTypes = { [1] = true, [6] = true, [11] = true, [24] = true, [38] = true, }, + baseMods = { + skill("castTime", 1), + skill("manaCost", 12), + mod("Speed", "MORE", 50, ModFlag.Attack), --"active_skill_attack_speed_+%_final" = 50 + mod("MovementSpeed", "MORE", -30), --"cyclone_movement_speed_+%_final" = -30 + --"base_skill_number_of_additional_hits" = 1 + --"cyclone_first_hit_damage_+%_final" = -50 + --"is_area_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { attack_damageMore = 0.45, }, - [2] = { attack_damageMore = 0.456, }, - [3] = { attack_damageMore = 0.462, }, - [4] = { attack_damageMore = 0.468, }, - [5] = { attack_damageMore = 0.474, }, - [6] = { attack_damageMore = 0.48, }, - [7] = { attack_damageMore = 0.486, }, - [8] = { attack_damageMore = 0.492, }, - [9] = { attack_damageMore = 0.498, }, - [10] = { attack_damageMore = 0.504, }, - [11] = { attack_damageMore = 0.51, }, - [12] = { attack_damageMore = 0.516, }, - [13] = { attack_damageMore = 0.522, }, - [14] = { attack_damageMore = 0.528, }, - [15] = { attack_damageMore = 0.534, }, - [16] = { attack_damageMore = 0.54, }, - [17] = { attack_damageMore = 0.546, }, - [18] = { attack_damageMore = 0.552, }, - [19] = { attack_damageMore = 0.558, }, - [20] = { attack_damageMore = 0.564, }, - [21] = { attack_damageMore = 0.57, }, - [22] = { attack_damageMore = 0.576, }, - [23] = { attack_damageMore = 0.582, }, - [24] = { attack_damageMore = 0.588, }, - [25] = { attack_damageMore = 0.594, }, - [26] = { attack_damageMore = 0.6, }, - [27] = { attack_damageMore = 0.606, }, - [28] = { attack_damageMore = 0.612, }, - [29] = { attack_damageMore = 0.618, }, - [30] = { attack_damageMore = 0.624, }, - } + [1] = { -55, }, + [2] = { -54.4, }, + [3] = { -53.8, }, + [4] = { -53.2, }, + [5] = { -52.6, }, + [6] = { -52, }, + [7] = { -51.4, }, + [8] = { -50.8, }, + [9] = { -50.2, }, + [10] = { -49.6, }, + [11] = { -49, }, + [12] = { -48.4, }, + [13] = { -47.8, }, + [14] = { -47.2, }, + [15] = { -46.6, }, + [16] = { -46, }, + [17] = { -45.4, }, + [18] = { -44.8, }, + [19] = { -44.2, }, + [20] = { -43.6, }, + [21] = { -43, }, + [22] = { -42.4, }, + [23] = { -41.8, }, + [24] = { -41.2, }, + [25] = { -40.6, }, + [26] = { -40, }, + [27] = { -39.4, }, + [28] = { -38.8, }, + [29] = { -38.2, }, + [30] = { -37.6, }, + }, +} +gems["Vaal Cyclone"] = { + dexterity = true, + active_skill = true, + vaal = true, + attack = true, + area = true, + duration = true, + melee = true, + color = 2, + baseFlags = { + attack = true, + melee = true, + area = true, + duration = true, + vaal = true, + }, + skillTypes = { [1] = true, [6] = true, [11] = true, [24] = true, [12] = true, [43] = true, }, + baseMods = { + skill("castTime", 1), + mod("Speed", "MORE", 100, ModFlag.Attack), --"active_skill_attack_speed_+%_final" = 100 + skill("duration", 5), --"base_skill_effect_duration" = 5000 + --"base_skill_number_of_additional_hits" = 1 + mod("AreaRadius", "INC", 50), --"base_skill_area_of_effect_+%" = 50 + --"is_area_damage" = ? + skill("cannotBeEvaded", true), --"global_always_hit" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), + }, + levels = { + [1] = { -50, }, + [2] = { -49.4, }, + [3] = { -48.8, }, + [4] = { -48.2, }, + [5] = { -47.6, }, + [6] = { -47, }, + [7] = { -46.4, }, + [8] = { -45.8, }, + [9] = { -45.2, }, + [10] = { -44.6, }, + [11] = { -44, }, + [12] = { -43.4, }, + [13] = { -42.8, }, + [14] = { -42.2, }, + [15] = { -41.6, }, + [16] = { -41, }, + [17] = { -40.4, }, + [18] = { -39.8, }, + [19] = { -39.2, }, + [20] = { -38.6, }, + [21] = { -38, }, + [22] = { -37.4, }, + [23] = { -36.8, }, + [24] = { -36.2, }, + [25] = { -35.6, }, + [26] = { -35, }, + [27] = { -34.4, }, + [28] = { -33.8, }, + [29] = { -33.2, }, + [30] = { -32.6, }, + }, } gems["Desecrate"] = { dexterity = true, + active_skill = true, spell = true, - aoe = true, + area = true, duration = true, chaos = true, - damage = true, - base = { - skill_castTime = 1, - skill_durationBase = 5, + color = 2, + baseFlags = { + spell = true, + area = true, + duration = true, + chaos = true, }, - quality = { - castSpeedInc = 1, + skillTypes = { [2] = true, [11] = true, [12] = true, [17] = true, [18] = true, [19] = true, [36] = true, [40] = true, [26] = true, [50] = true, }, + baseMods = { + skill("castTime", 1), + skill("duration", 5), --"base_skill_effect_duration" = 5000 + --"desecrate_number_of_corpses_to_create" = 3 + --"is_area_damage" = ? + }, + qualityMods = { + mod("Speed", "INC", 1, ModFlag.Spell), --"base_cast_speed_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("ChaosDot", nil), --"base_chaos_damage_to_deal_per_minute" + --[3] = "desecrate_corpse_level" }, levels = { - [1] = { skill_manaCostBase = 8, skill_chaosDotBase = 8.2, }, - [2] = { skill_manaCostBase = 8, skill_chaosDotBase = 11.3, }, - [3] = { skill_manaCostBase = 9, skill_chaosDotBase = 15.4, }, - [4] = { skill_manaCostBase = 9, skill_chaosDotBase = 20.6, }, - [5] = { skill_manaCostBase = 10, skill_chaosDotBase = 25.5, }, - [6] = { skill_manaCostBase = 11, skill_chaosDotBase = 31.4, }, - [7] = { skill_manaCostBase = 12, skill_chaosDotBase = 38.5, }, - [8] = { skill_manaCostBase = 12, skill_chaosDotBase = 46.9, }, - [9] = { skill_manaCostBase = 13, skill_chaosDotBase = 57, }, - [10] = { skill_manaCostBase = 14, skill_chaosDotBase = 69, }, - [11] = { skill_manaCostBase = 15, skill_chaosDotBase = 83.4, }, - [12] = { skill_manaCostBase = 16, skill_chaosDotBase = 100.5, }, - [13] = { skill_manaCostBase = 17, skill_chaosDotBase = 120.7, }, - [14] = { skill_manaCostBase = 18, skill_chaosDotBase = 144.8, }, - [15] = { skill_manaCostBase = 18, skill_chaosDotBase = 163.2, }, - [16] = { skill_manaCostBase = 18, skill_chaosDotBase = 183.9, }, - [17] = { skill_manaCostBase = 19, skill_chaosDotBase = 207, }, - [18] = { skill_manaCostBase = 19, skill_chaosDotBase = 232.8, }, - [19] = { skill_manaCostBase = 20, skill_chaosDotBase = 261.7, }, - [20] = { skill_manaCostBase = 20, skill_chaosDotBase = 294, }, - [21] = { skill_manaCostBase = 21, skill_chaosDotBase = 330.1, }, - [22] = { skill_manaCostBase = 22, skill_chaosDotBase = 370.3, }, - [23] = { skill_manaCostBase = 22, skill_chaosDotBase = 415.2, }, - [24] = { skill_manaCostBase = 22, skill_chaosDotBase = 465.3, }, - [25] = { skill_manaCostBase = 23, skill_chaosDotBase = 521.2, }, - [26] = { skill_manaCostBase = 23, skill_chaosDotBase = 583.5, }, - [27] = { skill_manaCostBase = 24, skill_chaosDotBase = 653, }, - [28] = { skill_manaCostBase = 25, skill_chaosDotBase = 730.4, }, - [29] = { skill_manaCostBase = 25, skill_chaosDotBase = 816.6, }, - [30] = { skill_manaCostBase = 26, skill_chaosDotBase = 912.6, }, - } + [1] = { 8, 8.1666666666667, 20, }, + [2] = { 8, 11.316666666667, 24, }, + [3] = { 9, 15.383333333333, 26, }, + [4] = { 9, 20.633333333333, 29, }, + [5] = { 10, 25.533333333333, 32, }, + [6] = { 11, 31.416666666667, 35, }, + [7] = { 12, 38.466666666667, 38, }, + [8] = { 12, 46.916666666667, 41, }, + [9] = { 13, 57.016666666667, 44, }, + [10] = { 14, 69.05, 47, }, + [11] = { 15, 83.4, 50, }, + [12] = { 16, 100.46666666667, 53, }, + [13] = { 17, 120.73333333333, 56, }, + [14] = { 18, 144.76666666667, 59, }, + [15] = { 18, 163.23333333333, 63, }, + [16] = { 18, 183.88333333333, 67, }, + [17] = { 19, 207, 71, }, + [18] = { 19, 232.83333333333, 75, }, + [19] = { 20, 261.71666666667, 100, }, + [20] = { 20, 294, 100, }, + [21] = { 21, 330.05, 100, }, + [22] = { 22, 370.3, 100, }, + [23] = { 22, 415.21666666667, 100, }, + [24] = { 22, 465.33333333333, 100, }, + [25] = { 23, 521.21666666667, 100, }, + [26] = { 23, 583.53333333333, 100, }, + [27] = { 24, 652.98333333333, 100, }, + [28] = { 25, 730.38333333333, 100, }, + [29] = { 25, 816.58333333333, 100, }, + [30] = { 26, 912.58333333333, 100, }, + }, } gems["Detonate Dead"] = { dexterity = true, + active_skill = true, + cast = true, + area = true, + fire = true, + unsupported = true, +} +gems["Vaal Detonate Dead"] = { + dexterity = true, + active_skill = true, + vaal = true, + cast = true, + area = true, + fire = true, unsupported = true, } gems["Double Strike"] = { dexterity = true, + active_skill = true, attack = true, melee = true, - hit = true, - base = { - skill_manaCostBase = 5, + color = 2, + baseFlags = { + attack = true, + melee = true, }, - quality = { - attackSpeedInc = 0.5, + skillTypes = { [1] = true, [6] = true, [7] = true, [25] = true, [28] = true, [24] = true, }, + baseMods = { + skill("castTime", 1), + skill("manaCost", 5), + --"base_skill_number_of_additional_hits" = 1 + skill("dpsMultiplier", 2), + }, + qualityMods = { + mod("Speed", "INC", 0.5, ModFlag.Attack, 0, nil), --"attack_speed_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { attack_damageMore = 0.7, }, - [2] = { attack_damageMore = 0.714, }, - [3] = { attack_damageMore = 0.728, }, - [4] = { attack_damageMore = 0.742, }, - [5] = { attack_damageMore = 0.756, }, - [6] = { attack_damageMore = 0.77, }, - [7] = { attack_damageMore = 0.784, }, - [8] = { attack_damageMore = 0.798, }, - [9] = { attack_damageMore = 0.812, }, - [10] = { attack_damageMore = 0.826, }, - [11] = { attack_damageMore = 0.84, }, - [12] = { attack_damageMore = 0.854, }, - [13] = { attack_damageMore = 0.868, }, - [14] = { attack_damageMore = 0.882, }, - [15] = { attack_damageMore = 0.896, }, - [16] = { attack_damageMore = 0.91, }, - [17] = { attack_damageMore = 0.924, }, - [18] = { attack_damageMore = 0.938, }, - [19] = { attack_damageMore = 0.952, }, - [20] = { attack_damageMore = 0.966, }, - [21] = { attack_damageMore = 0.98, }, - [22] = { attack_damageMore = 0.994, }, - [23] = { attack_damageMore = 1.008, }, - [24] = { attack_damageMore = 1.022, }, - [25] = { attack_damageMore = 1.036, }, - [26] = { attack_damageMore = 1.05, }, - [27] = { attack_damageMore = 1.064, }, - [28] = { attack_damageMore = 1.078, }, - [29] = { attack_damageMore = 1.092, }, - [30] = { attack_damageMore = 1.106, }, - } + [1] = { -30, }, + [2] = { -28.6, }, + [3] = { -27.2, }, + [4] = { -25.8, }, + [5] = { -24.4, }, + [6] = { -23, }, + [7] = { -21.6, }, + [8] = { -20.2, }, + [9] = { -18.8, }, + [10] = { -17.4, }, + [11] = { -16, }, + [12] = { -14.6, }, + [13] = { -13.2, }, + [14] = { -11.8, }, + [15] = { -10.4, }, + [16] = { -9, }, + [17] = { -7.6, }, + [18] = { -6.2, }, + [19] = { -4.8, }, + [20] = { -3.4, }, + [21] = { -2, }, + [22] = { -0.6, }, + [23] = { 0.8, }, + [24] = { 2.2, }, + [25] = { 3.6, }, + [26] = { 5, }, + [27] = { 6.4, }, + [28] = { 7.8, }, + [29] = { 9.2, }, + [30] = { 10.6, }, + }, +} +gems["Vaal Double Strike"] = { + dexterity = true, + active_skill = true, + vaal = true, + attack = true, + melee = true, + duration = true, + color = 2, + baseFlags = { + attack = true, + melee = true, + duration = true, + vaal = true, + }, + skillTypes = { [1] = true, [6] = true, [7] = true, [25] = true, [28] = true, [24] = true, [12] = true, [43] = true, }, + baseMods = { + skill("castTime", 1), + --"base_skill_number_of_additional_hits" = 1 + --"number_of_monsters_to_summon" = 1 + }, + qualityMods = { + mod("Speed", "INC", 0.5, ModFlag.Attack, 0, nil), --"attack_speed_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), + [2] = skill("duration", nil), --"base_skill_effect_duration" + }, + levels = { + [1] = { -30, 3.6, }, + [2] = { -29.2, 3.7, }, + [3] = { -28.4, 3.8, }, + [4] = { -27.6, 3.9, }, + [5] = { -26.8, 4, }, + [6] = { -26, 4.1, }, + [7] = { -25.2, 4.2, }, + [8] = { -24.4, 4.3, }, + [9] = { -23.6, 4.4, }, + [10] = { -22.8, 4.5, }, + [11] = { -22, 4.6, }, + [12] = { -21.2, 4.7, }, + [13] = { -20.4, 4.8, }, + [14] = { -19.6, 4.9, }, + [15] = { -18.8, 5, }, + [16] = { -18, 5.1, }, + [17] = { -17.2, 5.2, }, + [18] = { -16.4, 5.3, }, + [19] = { -15.6, 5.4, }, + [20] = { -14.8, 5.5, }, + [21] = { -14, 5.6, }, + [22] = { -13.2, 5.7, }, + [23] = { -12.4, 5.8, }, + [24] = { -11.6, 5.9, }, + [25] = { -10.8, 6, }, + [26] = { -10, 6.1, }, + [27] = { -9.2, 6.2, }, + [28] = { -8.4, 6.3, }, + [29] = { -7.6, 6.4, }, + [30] = { -6.8, 6.5, }, + }, } gems["Dual Strike"] = { dexterity = true, + active_skill = true, + attack = true, + melee = true, unsupported = true, } gems["Elemental Hit"] = { dexterity = true, + active_skill = true, attack = true, melee = true, - bow = true, - lightning = true, - cold = true, fire = true, - hit = true, + cold = true, + lightning = true, + bow = true, parts = { { name = "Added fire", @@ -591,102 +995,137 @@ gems["Elemental Hit"] = { name = "Added lightning", }, }, - base = { - freezeChance = 10, - shockChance = 10, - igniteChance = 10, + color = 2, + baseFlags = { + attack = true, + melee = true, + projectile = true, + cold = true, + fire = true, + lightning = true, }, - quality = { - elementalInc = 1, + skillTypes = { [1] = true, [6] = true, [3] = true, [22] = true, [17] = true, [19] = true, [25] = true, [28] = true, [24] = true, [33] = true, [34] = true, [35] = true, [48] = true, }, + baseMods = { + skill("castTime", 1), + --"chance_to_freeze_shock_ignite_%" = 10 + --"skill_can_fire_arrows" = ? + --"skill_can_fire_wand_projectiles" = ? + mod("EnemyFreezeChance", "BASE", 10), + mod("EnemyShockChance", "BASE", 10), + mod("EnemyIgniteChance", "BASE", 10), + }, + qualityMods = { + mod("ElementalDamage", "INC", 1), --"elemental_damage_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = mod("FireMin", "BASE", nil, ModFlag.Attack, 0, { type = "SkillPart", skillPart = 1 }), --"attack_minimum_base_fire_damage_for_elemental_hit" + [3] = mod("FireMax", "BASE", nil, ModFlag.Attack, 0, { type = "SkillPart", skillPart = 1 }), --"attack_maximum_base_fire_damage_for_elemental_hit" + [4] = mod("ColdMin", "BASE", nil, ModFlag.Attack, 0, { type = "SkillPart", skillPart = 2 }), --"attack_minimum_base_cold_damage_for_elemental_hit" + [5] = mod("ColdMax", "BASE", nil, ModFlag.Attack, 0, { type = "SkillPart", skillPart = 2 }), --"attack_maximum_base_cold_damage_for_elemental_hit" + [6] = mod("LightningMin", "BASE", nil, ModFlag.Attack, 0, { type = "SkillPart", skillPart = 3 }), --"attack_minimum_base_lightning_damage_for_elemental_hit" + [7] = mod("LightningMax", "BASE", nil, ModFlag.Attack, 0, { type = "SkillPart", skillPart = 3 }), --"attack_maximum_base_lightning_damage_for_elemental_hit" }, levels = { - [1] = { skill_manaCostBase = 6, SkillPart1_attack_fireMin = 4, SkillPart1_attack_fireMax = 8, SkillPart2_attack_coldMin = 3, SkillPart2_attack_coldMax = 6, SkillPart3_attack_lightningMin = 1, SkillPart3_attack_lightningMax = 13, }, - [2] = { skill_manaCostBase = 6, SkillPart1_attack_fireMin = 5, SkillPart1_attack_fireMax = 9, SkillPart2_attack_coldMin = 4, SkillPart2_attack_coldMax = 7, SkillPart3_attack_lightningMin = 1, SkillPart3_attack_lightningMax = 14, }, - [3] = { skill_manaCostBase = 6, SkillPart1_attack_fireMin = 6, SkillPart1_attack_fireMax = 11, SkillPart2_attack_coldMin = 5, SkillPart2_attack_coldMax = 9, SkillPart3_attack_lightningMin = 1, SkillPart3_attack_lightningMax = 17, }, - [4] = { skill_manaCostBase = 7, SkillPart1_attack_fireMin = 7, SkillPart1_attack_fireMax = 14, SkillPart2_attack_coldMin = 6, SkillPart2_attack_coldMax = 11, SkillPart3_attack_lightningMin = 1, SkillPart3_attack_lightningMax = 23, }, - [5] = { skill_manaCostBase = 7, SkillPart1_attack_fireMin = 10, SkillPart1_attack_fireMax = 19, SkillPart2_attack_coldMin = 8, SkillPart2_attack_coldMax = 16, SkillPart3_attack_lightningMin = 2, SkillPart3_attack_lightningMax = 31, }, - [6] = { skill_manaCostBase = 7, SkillPart1_attack_fireMin = 14, SkillPart1_attack_fireMax = 27, SkillPart2_attack_coldMin = 12, SkillPart2_attack_coldMax = 22, SkillPart3_attack_lightningMin = 2, SkillPart3_attack_lightningMax = 44, }, - [7] = { skill_manaCostBase = 8, SkillPart1_attack_fireMin = 18, SkillPart1_attack_fireMax = 34, SkillPart2_attack_coldMin = 15, SkillPart2_attack_coldMax = 28, SkillPart3_attack_lightningMin = 3, SkillPart3_attack_lightningMax = 56, }, - [8] = { skill_manaCostBase = 8, SkillPart1_attack_fireMin = 23, SkillPart1_attack_fireMax = 43, SkillPart2_attack_coldMin = 19, SkillPart2_attack_coldMax = 35, SkillPart3_attack_lightningMin = 4, SkillPart3_attack_lightningMax = 70, }, - [9] = { skill_manaCostBase = 8, SkillPart1_attack_fireMin = 28, SkillPart1_attack_fireMax = 53, SkillPart2_attack_coldMin = 23, SkillPart2_attack_coldMax = 43, SkillPart3_attack_lightningMin = 5, SkillPart3_attack_lightningMax = 87, }, - [10] = { skill_manaCostBase = 9, SkillPart1_attack_fireMin = 35, SkillPart1_attack_fireMax = 64, SkillPart2_attack_coldMin = 28, SkillPart2_attack_coldMax = 53, SkillPart3_attack_lightningMin = 6, SkillPart3_attack_lightningMax = 106, }, - [11] = { skill_manaCostBase = 9, SkillPart1_attack_fireMin = 42, SkillPart1_attack_fireMax = 78, SkillPart2_attack_coldMin = 34, SkillPart2_attack_coldMax = 64, SkillPart3_attack_lightningMin = 7, SkillPart3_attack_lightningMax = 128, }, - [12] = { skill_manaCostBase = 9, SkillPart1_attack_fireMin = 50, SkillPart1_attack_fireMax = 93, SkillPart2_attack_coldMin = 41, SkillPart2_attack_coldMax = 76, SkillPart3_attack_lightningMin = 8, SkillPart3_attack_lightningMax = 153, }, - [13] = { skill_manaCostBase = 10, SkillPart1_attack_fireMin = 60, SkillPart1_attack_fireMax = 111, SkillPart2_attack_coldMin = 49, SkillPart2_attack_coldMax = 91, SkillPart3_attack_lightningMin = 10, SkillPart3_attack_lightningMax = 183, }, - [14] = { skill_manaCostBase = 10, SkillPart1_attack_fireMin = 71, SkillPart1_attack_fireMax = 132, SkillPart2_attack_coldMin = 58, SkillPart2_attack_coldMax = 108, SkillPart3_attack_lightningMin = 11, SkillPart3_attack_lightningMax = 217, }, - [15] = { skill_manaCostBase = 10, SkillPart1_attack_fireMin = 84, SkillPart1_attack_fireMax = 156, SkillPart2_attack_coldMin = 69, SkillPart2_attack_coldMax = 127, SkillPart3_attack_lightningMin = 13, SkillPart3_attack_lightningMax = 256, }, - [16] = { skill_manaCostBase = 11, SkillPart1_attack_fireMin = 99, SkillPart1_attack_fireMax = 183, SkillPart2_attack_coldMin = 81, SkillPart2_attack_coldMax = 150, SkillPart3_attack_lightningMin = 16, SkillPart3_attack_lightningMax = 301, }, - [17] = { skill_manaCostBase = 11, SkillPart1_attack_fireMin = 115, SkillPart1_attack_fireMax = 214, SkillPart2_attack_coldMin = 94, SkillPart2_attack_coldMax = 175, SkillPart3_attack_lightningMin = 19, SkillPart3_attack_lightningMax = 352, }, - [18] = { skill_manaCostBase = 11, SkillPart1_attack_fireMin = 135, SkillPart1_attack_fireMax = 250, SkillPart2_attack_coldMin = 110, SkillPart2_attack_coldMax = 205, SkillPart3_attack_lightningMin = 22, SkillPart3_attack_lightningMax = 411, }, - [19] = { skill_manaCostBase = 11, SkillPart1_attack_fireMin = 151, SkillPart1_attack_fireMax = 280, SkillPart2_attack_coldMin = 123, SkillPart2_attack_coldMax = 229, SkillPart3_attack_lightningMin = 24, SkillPart3_attack_lightningMax = 461, }, - [20] = { skill_manaCostBase = 12, SkillPart1_attack_fireMin = 169, SkillPart1_attack_fireMax = 314, SkillPart2_attack_coldMin = 138, SkillPart2_attack_coldMax = 257, SkillPart3_attack_lightningMin = 27, SkillPart3_attack_lightningMax = 516, }, - [21] = { skill_manaCostBase = 12, SkillPart1_attack_fireMin = 182, SkillPart1_attack_fireMax = 338, SkillPart2_attack_coldMin = 149, SkillPart2_attack_coldMax = 276, SkillPart3_attack_lightningMin = 29, SkillPart3_attack_lightningMax = 555, }, - [22] = { skill_manaCostBase = 12, SkillPart1_attack_fireMin = 196, SkillPart1_attack_fireMax = 364, SkillPart2_attack_coldMin = 160, SkillPart2_attack_coldMax = 297, SkillPart3_attack_lightningMin = 31, SkillPart3_attack_lightningMax = 598, }, - [23] = { skill_manaCostBase = 12, SkillPart1_attack_fireMin = 211, SkillPart1_attack_fireMax = 391, SkillPart2_attack_coldMin = 172, SkillPart2_attack_coldMax = 320, SkillPart3_attack_lightningMin = 34, SkillPart3_attack_lightningMax = 643, }, - [24] = { skill_manaCostBase = 13, SkillPart1_attack_fireMin = 226, SkillPart1_attack_fireMax = 420, SkillPart2_attack_coldMin = 185, SkillPart2_attack_coldMax = 344, SkillPart3_attack_lightningMin = 36, SkillPart3_attack_lightningMax = 691, }, - [25] = { skill_manaCostBase = 13, SkillPart1_attack_fireMin = 243, SkillPart1_attack_fireMax = 452, SkillPart2_attack_coldMin = 199, SkillPart2_attack_coldMax = 370, SkillPart3_attack_lightningMin = 39, SkillPart3_attack_lightningMax = 743, }, - [26] = { skill_manaCostBase = 13, SkillPart1_attack_fireMin = 261, SkillPart1_attack_fireMax = 485, SkillPart2_attack_coldMin = 214, SkillPart2_attack_coldMax = 397, SkillPart3_attack_lightningMin = 42, SkillPart3_attack_lightningMax = 798, }, - [27] = { skill_manaCostBase = 13, SkillPart1_attack_fireMin = 281, SkillPart1_attack_fireMax = 521, SkillPart2_attack_coldMin = 230, SkillPart2_attack_coldMax = 426, SkillPart3_attack_lightningMin = 45, SkillPart3_attack_lightningMax = 857, }, - [28] = { skill_manaCostBase = 14, SkillPart1_attack_fireMin = 301, SkillPart1_attack_fireMax = 559, SkillPart2_attack_coldMin = 246, SkillPart2_attack_coldMax = 457, SkillPart3_attack_lightningMin = 48, SkillPart3_attack_lightningMax = 919, }, - [29] = { skill_manaCostBase = 14, SkillPart1_attack_fireMin = 323, SkillPart1_attack_fireMax = 600, SkillPart2_attack_coldMin = 264, SkillPart2_attack_coldMax = 491, SkillPart3_attack_lightningMin = 52, SkillPart3_attack_lightningMax = 986, }, - [30] = { skill_manaCostBase = 14, SkillPart1_attack_fireMin = 346, SkillPart1_attack_fireMax = 643, SkillPart2_attack_coldMin = 283, SkillPart2_attack_coldMax = 526, SkillPart3_attack_lightningMin = 56, SkillPart3_attack_lightningMax = 1057, }, - } + [1] = { 6, 4, 8, 3, 6, 1, 13, }, + [2] = { 6, 5, 9, 4, 7, 1, 14, }, + [3] = { 6, 6, 11, 5, 9, 1, 17, }, + [4] = { 7, 7, 14, 6, 11, 1, 23, }, + [5] = { 7, 10, 19, 8, 16, 2, 31, }, + [6] = { 7, 14, 27, 12, 22, 2, 44, }, + [7] = { 8, 18, 34, 15, 28, 3, 56, }, + [8] = { 8, 23, 43, 19, 35, 4, 70, }, + [9] = { 8, 28, 53, 23, 43, 5, 87, }, + [10] = { 9, 35, 64, 28, 53, 6, 106, }, + [11] = { 9, 42, 78, 34, 64, 7, 128, }, + [12] = { 9, 50, 93, 41, 76, 8, 153, }, + [13] = { 10, 60, 111, 49, 91, 10, 183, }, + [14] = { 10, 71, 132, 58, 108, 11, 217, }, + [15] = { 10, 84, 156, 69, 127, 13, 256, }, + [16] = { 11, 99, 183, 81, 150, 16, 301, }, + [17] = { 11, 115, 214, 94, 175, 19, 352, }, + [18] = { 11, 135, 250, 110, 205, 22, 411, }, + [19] = { 11, 151, 280, 123, 229, 24, 461, }, + [20] = { 12, 169, 314, 138, 257, 27, 516, }, + [21] = { 12, 182, 338, 149, 276, 29, 555, }, + [22] = { 12, 196, 364, 160, 297, 31, 598, }, + [23] = { 12, 211, 391, 172, 320, 34, 643, }, + [24] = { 13, 226, 420, 185, 344, 36, 691, }, + [25] = { 13, 243, 452, 199, 370, 39, 743, }, + [26] = { 13, 261, 485, 214, 397, 42, 798, }, + [27] = { 13, 281, 521, 230, 426, 45, 857, }, + [28] = { 14, 301, 559, 246, 457, 48, 919, }, + [29] = { 14, 323, 600, 264, 491, 52, 986, }, + [30] = { 14, 346, 643, 283, 526, 56, 1057, }, + }, } gems["Ethereal Knives"] = { - dexterity = true, - spell = true, projectile = true, - hit = true, - base = { - skill_castTime = 0.6, - skill_damageEffectiveness = 1, - skill_critChanceBase = 6, - projectileCount = 9, + dexterity = true, + active_skill = true, + spell = true, + color = 2, + baseFlags = { + spell = true, + projectile = true, }, - quality = { - projectileSpeedInc = 1, + skillTypes = { [2] = true, [10] = true, [3] = true, [18] = true, [17] = true, [19] = true, [26] = true, [36] = true, }, + baseMods = { + skill("castTime", 0.6), + skill("critChance", 6), + mod("ProjectileCount", "BASE", 9), --"number_of_additional_projectiles" = 9 + --"base_is_projectile" = ? + }, + qualityMods = { + mod("ProjectileSpeed", "INC", 1), --"base_projectile_speed_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("PhysicalMin", nil), --"spell_minimum_base_physical_damage" + [3] = skill("PhysicalMax", nil), --"spell_maximum_base_physical_damage" + [4] = mod("ProjectileSpeed", "INC", nil), --"base_projectile_speed_+%" }, levels = { - [1] = { skill_manaCostBase = 5, skill_physicalMin = 4, skill_physicalMax = 6, projectileSpeedInc = 0, }, - [2] = { skill_manaCostBase = 6, skill_physicalMin = 5, skill_physicalMax = 7, projectileSpeedInc = 1, }, - [3] = { skill_manaCostBase = 7, skill_physicalMin = 6, skill_physicalMax = 9, projectileSpeedInc = 2, }, - [4] = { skill_manaCostBase = 8, skill_physicalMin = 8, skill_physicalMax = 12, projectileSpeedInc = 3, }, - [5] = { skill_manaCostBase = 9, skill_physicalMin = 12, skill_physicalMax = 18, projectileSpeedInc = 4, }, - [6] = { skill_manaCostBase = 10, skill_physicalMin = 18, skill_physicalMax = 27, projectileSpeedInc = 5, }, - [7] = { skill_manaCostBase = 11, skill_physicalMin = 24, skill_physicalMax = 37, projectileSpeedInc = 6, }, - [8] = { skill_manaCostBase = 12, skill_physicalMin = 32, skill_physicalMax = 49, projectileSpeedInc = 7, }, - [9] = { skill_manaCostBase = 13, skill_physicalMin = 42, skill_physicalMax = 64, projectileSpeedInc = 8, }, - [10] = { skill_manaCostBase = 14, skill_physicalMin = 55, skill_physicalMax = 82, projectileSpeedInc = 9, }, - [11] = { skill_manaCostBase = 16, skill_physicalMin = 70, skill_physicalMax = 105, projectileSpeedInc = 10, }, - [12] = { skill_manaCostBase = 17, skill_physicalMin = 89, skill_physicalMax = 134, projectileSpeedInc = 11, }, - [13] = { skill_manaCostBase = 18, skill_physicalMin = 112, skill_physicalMax = 169, projectileSpeedInc = 12, }, - [14] = { skill_manaCostBase = 18, skill_physicalMin = 141, skill_physicalMax = 212, projectileSpeedInc = 13, }, - [15] = { skill_manaCostBase = 19, skill_physicalMin = 176, skill_physicalMax = 265, projectileSpeedInc = 14, }, - [16] = { skill_manaCostBase = 20, skill_physicalMin = 219, skill_physicalMax = 329, projectileSpeedInc = 15, }, - [17] = { skill_manaCostBase = 21, skill_physicalMin = 272, skill_physicalMax = 408, projectileSpeedInc = 16, }, - [18] = { skill_manaCostBase = 22, skill_physicalMin = 336, skill_physicalMax = 504, projectileSpeedInc = 17, }, - [19] = { skill_manaCostBase = 22, skill_physicalMin = 393, skill_physicalMax = 590, projectileSpeedInc = 18, }, - [20] = { skill_manaCostBase = 23, skill_physicalMin = 459, skill_physicalMax = 688, projectileSpeedInc = 19, }, - [21] = { skill_manaCostBase = 24, skill_physicalMin = 509, skill_physicalMax = 763, projectileSpeedInc = 20, }, - [22] = { skill_manaCostBase = 24, skill_physicalMin = 563, skill_physicalMax = 845, projectileSpeedInc = 21, }, - [23] = { skill_manaCostBase = 25, skill_physicalMin = 623, skill_physicalMax = 935, projectileSpeedInc = 22, }, - [24] = { skill_manaCostBase = 25, skill_physicalMin = 690, skill_physicalMax = 1034, projectileSpeedInc = 23, }, - [25] = { skill_manaCostBase = 26, skill_physicalMin = 762, skill_physicalMax = 1144, projectileSpeedInc = 24, }, - [26] = { skill_manaCostBase = 26, skill_physicalMin = 842, skill_physicalMax = 1264, projectileSpeedInc = 25, }, - [27] = { skill_manaCostBase = 27, skill_physicalMin = 931, skill_physicalMax = 1396, projectileSpeedInc = 26, }, - [28] = { skill_manaCostBase = 27, skill_physicalMin = 1027, skill_physicalMax = 1541, projectileSpeedInc = 27, }, - [29] = { skill_manaCostBase = 28, skill_physicalMin = 1134, skill_physicalMax = 1701, projectileSpeedInc = 28, }, - [30] = { skill_manaCostBase = 29, skill_physicalMin = 1251, skill_physicalMax = 1876, projectileSpeedInc = 29, }, - } + [1] = { 5, 4, 6, 0, }, + [2] = { 6, 5, 7, 1, }, + [3] = { 7, 6, 9, 2, }, + [4] = { 8, 8, 12, 3, }, + [5] = { 9, 12, 18, 4, }, + [6] = { 10, 18, 27, 5, }, + [7] = { 11, 24, 37, 6, }, + [8] = { 12, 32, 49, 7, }, + [9] = { 13, 42, 64, 8, }, + [10] = { 14, 55, 82, 9, }, + [11] = { 16, 70, 105, 10, }, + [12] = { 17, 89, 134, 11, }, + [13] = { 18, 112, 169, 12, }, + [14] = { 18, 141, 212, 13, }, + [15] = { 19, 176, 265, 14, }, + [16] = { 20, 219, 329, 15, }, + [17] = { 21, 272, 408, 16, }, + [18] = { 22, 336, 504, 17, }, + [19] = { 22, 393, 590, 18, }, + [20] = { 23, 459, 688, 19, }, + [21] = { 24, 509, 763, 20, }, + [22] = { 24, 563, 845, 21, }, + [23] = { 25, 623, 935, 22, }, + [24] = { 25, 690, 1034, 23, }, + [25] = { 26, 762, 1144, 24, }, + [26] = { 26, 842, 1264, 25, }, + [27] = { 27, 931, 1396, 26, }, + [28] = { 27, 1027, 1541, 27, }, + [29] = { 28, 1134, 1701, 28, }, + [30] = { 29, 1251, 1876, 29, }, + }, } gems["Explosive Arrow"] = { - dexterity = true, - attack = true, - bow = true, - aoe = true, - duration = true, fire = true, - hit = true, + dexterity = true, + active_skill = true, + attack = true, + area = true, + duration = true, + bow = true, parts = { { name = "Explosion", @@ -699,249 +1138,331 @@ gems["Explosive Arrow"] = { cast = false, }, }, - base = { - skill_critChanceBase = 6, - skill_durationBase = 1, - attack_damageMore = 0, + color = 2, + baseFlags = { + attack = true, + projectile = true, + area = true, + duration = true, + fire = true, }, - quality = { - igniteChance = 1, + skillTypes = { [1] = true, [48] = true, [3] = true, [10] = true, [11] = true, [12] = true, [22] = true, [17] = true, [19] = true, [33] = true, }, + baseMods = { + skill("castTime", 1), + skill("critChance", 6), + skill("duration", 1), --"base_skill_effect_duration" = 1000 + --"fuse_arrow_explosion_radius_+_per_fuse_arrow_orb" = 2 + --"active_skill_attack_damage_+%_final" = 0 + --"skill_can_fire_arrows" = 1 + --"base_is_projectile" = 1 + }, + qualityMods = { + mod("EnemyIgniteChance", "BASE", 1), --"base_chance_to_ignite_%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("FireMin", nil), --"minimum_fire_damage_per_fuse_arrow_orb" + [3] = skill("FireMax", nil), --"maximum_fire_damage_per_fuse_arrow_orb" }, levels = { - [1] = { skill_manaCostBase = 18, skill_fireMin = 44, skill_fireMax = 66, }, - [2] = { skill_manaCostBase = 19, skill_fireMin = 54, skill_fireMax = 81, }, - [3] = { skill_manaCostBase = 20, skill_fireMin = 66, skill_fireMax = 99, }, - [4] = { skill_manaCostBase = 21, skill_fireMin = 80, skill_fireMax = 121, }, - [5] = { skill_manaCostBase = 21, skill_fireMin = 98, skill_fireMax = 146, }, - [6] = { skill_manaCostBase = 22, skill_fireMin = 111, skill_fireMax = 166, }, - [7] = { skill_manaCostBase = 22, skill_fireMin = 126, skill_fireMax = 189, }, - [8] = { skill_manaCostBase = 23, skill_fireMin = 142, skill_fireMax = 214, }, - [9] = { skill_manaCostBase = 23, skill_fireMin = 161, skill_fireMax = 242, }, - [10] = { skill_manaCostBase = 24, skill_fireMin = 182, skill_fireMax = 273, }, - [11] = { skill_manaCostBase = 24, skill_fireMin = 205, skill_fireMax = 308, }, - [12] = { skill_manaCostBase = 24, skill_fireMin = 232, skill_fireMax = 347, }, - [13] = { skill_manaCostBase = 26, skill_fireMin = 261, skill_fireMax = 391, }, - [14] = { skill_manaCostBase = 26, skill_fireMin = 293, skill_fireMax = 440, }, - [15] = { skill_manaCostBase = 26, skill_fireMin = 330, skill_fireMax = 495, }, - [16] = { skill_manaCostBase = 26, skill_fireMin = 371, skill_fireMax = 556, }, - [17] = { skill_manaCostBase = 26, skill_fireMin = 416, skill_fireMax = 624, }, - [18] = { skill_manaCostBase = 27, skill_fireMin = 467, skill_fireMax = 700, }, - [19] = { skill_manaCostBase = 27, skill_fireMin = 523, skill_fireMax = 785, }, - [20] = { skill_manaCostBase = 27, skill_fireMin = 586, skill_fireMax = 879, }, - [21] = { skill_manaCostBase = 28, skill_fireMin = 656, skill_fireMax = 984, }, - [22] = { skill_manaCostBase = 28, skill_fireMin = 734, skill_fireMax = 1100, }, - [23] = { skill_manaCostBase = 29, skill_fireMin = 820, skill_fireMax = 1230, }, - [24] = { skill_manaCostBase = 29, skill_fireMin = 917, skill_fireMax = 1375, }, - [25] = { skill_manaCostBase = 30, skill_fireMin = 1024, skill_fireMax = 1536, }, - [26] = { skill_manaCostBase = 30, skill_fireMin = 1143, skill_fireMax = 1714, }, - [27] = { skill_manaCostBase = 30, skill_fireMin = 1275, skill_fireMax = 1913, }, - [28] = { skill_manaCostBase = 30, skill_fireMin = 1422, skill_fireMax = 2134, }, - [29] = { skill_manaCostBase = 31, skill_fireMin = 1586, skill_fireMax = 2379, }, - [30] = { skill_manaCostBase = 31, skill_fireMin = 1767, skill_fireMax = 2651, }, - } + [1] = { 18, 44, 66, }, + [2] = { 19, 54, 81, }, + [3] = { 20, 66, 99, }, + [4] = { 21, 80, 121, }, + [5] = { 21, 98, 146, }, + [6] = { 22, 111, 166, }, + [7] = { 22, 126, 189, }, + [8] = { 23, 142, 214, }, + [9] = { 23, 161, 242, }, + [10] = { 24, 182, 273, }, + [11] = { 24, 205, 308, }, + [12] = { 24, 232, 347, }, + [13] = { 26, 261, 391, }, + [14] = { 26, 293, 440, }, + [15] = { 26, 330, 495, }, + [16] = { 26, 371, 556, }, + [17] = { 26, 416, 624, }, + [18] = { 27, 467, 700, }, + [19] = { 27, 523, 785, }, + [20] = { 27, 586, 879, }, + [21] = { 28, 656, 984, }, + [22] = { 28, 734, 1100, }, + [23] = { 29, 820, 1230, }, + [24] = { 29, 917, 1375, }, + [25] = { 30, 1024, 1536, }, + [26] = { 30, 1143, 1714, }, + [27] = { 30, 1275, 1913, }, + [28] = { 30, 1422, 2134, }, + [29] = { 31, 1586, 2379, }, + [30] = { 31, 1767, 2651, }, + }, } gems["Fire Trap"] = { - dexterity = true, - spell = true, trap = true, - aoe = true, + dexterity = true, + active_skill = true, + spell = true, duration = true, + area = true, fire = true, - hit = true, - showAverage = true, - base = { - skill_castTime = 1, - skill_damageEffectiveness = 1, - skill_critChanceBase = 6, - skill_durationBase = 8, - skill_trapCooldown = 3, + color = 2, + baseFlags = { + spell = true, + trap = true, + area = true, + duration = true, + fire = true, }, - quality = { - dot_fireInc = 1.5, + skillTypes = { [2] = true, [12] = true, [10] = true, [19] = true, [11] = true, [29] = true, [37] = true, [40] = true, [33] = true, }, + baseMods = { + skill("castTime", 1), + skill("critChance", 6), + --"is_trap" = 1 + --"base_trap_duration" = 16000 + skill("duration", 8), --"base_skill_effect_duration" = 8000 + --"is_area_damage" = ? + --"base_skill_is_trapped" = ? + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + skill("trapCooldown", 3), + }, + qualityMods = { + mod("FireDamage", "INC", 1.5, ModFlag.Dot), --"burn_damage_+%" = 1.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("FireMin", nil), --"spell_minimum_base_fire_damage" + [3] = skill("FireMax", nil), --"spell_maximum_base_fire_damage" + [4] = skill("FireDot", nil), --"base_fire_damage_to_deal_per_minute" }, levels = { - [1] = { skill_manaCostBase = 7, skill_fireMin = 2, skill_fireMax = 4, skill_fireDotBase = 3.6, }, - [2] = { skill_manaCostBase = 8, skill_fireMin = 3, skill_fireMax = 5, skill_fireDotBase = 4.1, }, - [3] = { skill_manaCostBase = 9, skill_fireMin = 4, skill_fireMax = 6, skill_fireDotBase = 5.2, }, - [4] = { skill_manaCostBase = 10, skill_fireMin = 6, skill_fireMax = 8, skill_fireDotBase = 7.2, }, - [5] = { skill_manaCostBase = 11, skill_fireMin = 8, skill_fireMax = 12, skill_fireDotBase = 10.6, }, - [6] = { skill_manaCostBase = 12, skill_fireMin = 13, skill_fireMax = 19, skill_fireDotBase = 16.4, }, - [7] = { skill_manaCostBase = 13, skill_fireMin = 18, skill_fireMax = 27, skill_fireDotBase = 22.6, }, - [8] = { skill_manaCostBase = 14, skill_fireMin = 25, skill_fireMax = 37, skill_fireDotBase = 30.5, }, - [9] = { skill_manaCostBase = 14, skill_fireMin = 34, skill_fireMax = 50, skill_fireDotBase = 40.5, }, - [10] = { skill_manaCostBase = 16, skill_fireMin = 45, skill_fireMax = 67, skill_fireDotBase = 53.3, }, - [11] = { skill_manaCostBase = 17, skill_fireMin = 59, skill_fireMax = 89, skill_fireDotBase = 69.5, }, - [12] = { skill_manaCostBase = 18, skill_fireMin = 78, skill_fireMax = 117, skill_fireDotBase = 89.9, }, - [13] = { skill_manaCostBase = 19, skill_fireMin = 101, skill_fireMax = 152, skill_fireDotBase = 115.4, }, - [14] = { skill_manaCostBase = 20, skill_fireMin = 132, skill_fireMax = 197, skill_fireDotBase = 147.4, }, - [15] = { skill_manaCostBase = 21, skill_fireMin = 170, skill_fireMax = 255, skill_fireDotBase = 187.2, }, - [16] = { skill_manaCostBase = 22, skill_fireMin = 219, skill_fireMax = 328, skill_fireDotBase = 236.8, }, - [17] = { skill_manaCostBase = 22, skill_fireMin = 280, skill_fireMax = 420, skill_fireDotBase = 298.3, }, - [18] = { skill_manaCostBase = 23, skill_fireMin = 358, skill_fireMax = 536, skill_fireDotBase = 374.4, }, - [19] = { skill_manaCostBase = 24, skill_fireMin = 429, skill_fireMax = 643, skill_fireDotBase = 441.1, }, - [20] = { skill_manaCostBase = 24, skill_fireMin = 513, skill_fireMax = 770, skill_fireDotBase = 518.8, }, - [21] = { skill_manaCostBase = 25, skill_fireMin = 578, skill_fireMax = 867, skill_fireDotBase = 574, }, - [22] = { skill_manaCostBase = 26, skill_fireMin = 651, skill_fireMax = 976, skill_fireDotBase = 634.4, }, - [23] = { skill_manaCostBase = 26, skill_fireMin = 732, skill_fireMax = 1098, skill_fireDotBase = 700.6, }, - [24] = { skill_manaCostBase = 27, skill_fireMin = 823, skill_fireMax = 1235, skill_fireDotBase = 773, }, - [25] = { skill_manaCostBase = 27, skill_fireMin = 925, skill_fireMax = 1388, skill_fireDotBase = 852.1, }, - [26] = { skill_manaCostBase = 28, skill_fireMin = 1040, skill_fireMax = 1559, skill_fireDotBase = 938.5, }, - [27] = { skill_manaCostBase = 29, skill_fireMin = 1167, skill_fireMax = 1751, skill_fireDotBase = 1032.8, }, - [28] = { skill_manaCostBase = 30, skill_fireMin = 1310, skill_fireMax = 1965, skill_fireDotBase = 1135.5, }, - [29] = { skill_manaCostBase = 30, skill_fireMin = 1470, skill_fireMax = 2205, skill_fireDotBase = 1247.3, }, - [30] = { skill_manaCostBase = 30, skill_fireMin = 1648, skill_fireMax = 2472, skill_fireDotBase = 1369, }, - } + [1] = { 7, 2, 4, 3.6166666666667, }, + [2] = { 8, 3, 5, 4.1, }, + [3] = { 9, 4, 6, 5.2, }, + [4] = { 10, 6, 8, 7.1833333333333, }, + [5] = { 11, 8, 12, 10.6, }, + [6] = { 12, 13, 19, 16.416666666667, }, + [7] = { 13, 18, 27, 22.566666666667, }, + [8] = { 14, 25, 37, 30.466666666667, }, + [9] = { 14, 34, 50, 40.533333333333, }, + [10] = { 16, 45, 67, 53.333333333333, }, + [11] = { 17, 59, 89, 69.5, }, + [12] = { 18, 78, 117, 89.866666666667, }, + [13] = { 19, 101, 152, 115.41666666667, }, + [14] = { 20, 132, 197, 147.36666666667, }, + [15] = { 21, 170, 255, 187.21666666667, }, + [16] = { 22, 219, 328, 236.78333333333, }, + [17] = { 22, 280, 420, 298.28333333333, }, + [18] = { 23, 358, 536, 374.41666666667, }, + [19] = { 24, 429, 643, 441.11666666667, }, + [20] = { 24, 513, 770, 518.76666666667, }, + [21] = { 25, 578, 867, 573.95, }, + [22] = { 26, 651, 976, 634.4, }, + [23] = { 26, 732, 1098, 700.6, }, + [24] = { 27, 823, 1235, 772.98333333333, }, + [25] = { 27, 925, 1388, 852.1, }, + [26] = { 28, 1040, 1559, 938.5, }, + [27] = { 29, 1167, 1751, 1032.75, }, + [28] = { 30, 1310, 1965, 1135.4666666667, }, + [29] = { 30, 1470, 2205, 1247.3166666667, }, + [30] = { 30, 1648, 2472, 1368.9833333333, }, + }, } gems["Flicker Strike"] = { dexterity = true, + active_skill = true, attack = true, melee = true, movement = true, - hit = true, - showAverage = true, - base = { - skill_manaCostBase = 10, - attackSpeedMore = 1.2, - PerFrenzy_attackSpeedInc = 10, + color = 2, + baseFlags = { + attack = true, + melee = true, + movement = true, }, - quality = { - damageInc = 1, + skillTypes = { [1] = true, [6] = true, [24] = true, [25] = true, [28] = true, [38] = true, }, + baseMods = { + skill("castTime", 1), + skill("manaCost", 10), + mod("Speed", "MORE", 20, ModFlag.Attack), --"flicker_strike_more_attack_speed_+%_final" = 20 + mod("Speed", "INC", 10, ModFlag.Attack, 0, { type = "Multiplier", var = "FrenzyCharge" }), --"base_attack_speed_+%_per_frenzy_charge" = 10 + --"ignores_proximity_shield" = ? + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + }, + qualityMods = { + mod("Damage", "INC", 1, 0, 0, nil), --"damage_+%" = 1 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { attack_damageMore = 1.3, }, - [2] = { attack_damageMore = 1.316, }, - [3] = { attack_damageMore = 1.332, }, - [4] = { attack_damageMore = 1.348, }, - [5] = { attack_damageMore = 1.364, }, - [6] = { attack_damageMore = 1.38, }, - [7] = { attack_damageMore = 1.396, }, - [8] = { attack_damageMore = 1.412, }, - [9] = { attack_damageMore = 1.428, }, - [10] = { attack_damageMore = 1.444, }, - [11] = { attack_damageMore = 1.46, }, - [12] = { attack_damageMore = 1.476, }, - [13] = { attack_damageMore = 1.492, }, - [14] = { attack_damageMore = 1.508, }, - [15] = { attack_damageMore = 1.524, }, - [16] = { attack_damageMore = 1.54, }, - [17] = { attack_damageMore = 1.556, }, - [18] = { attack_damageMore = 1.572, }, - [19] = { attack_damageMore = 1.588, }, - [20] = { attack_damageMore = 1.604, }, - [21] = { attack_damageMore = 1.62, }, - [22] = { attack_damageMore = 1.636, }, - [23] = { attack_damageMore = 1.652, }, - [24] = { attack_damageMore = 1.668, }, - [25] = { attack_damageMore = 1.684, }, - [26] = { attack_damageMore = 1.7, }, - [27] = { attack_damageMore = 1.716, }, - [28] = { attack_damageMore = 1.732, }, - [29] = { attack_damageMore = 1.748, }, - [30] = { attack_damageMore = 1.764, }, - } + [1] = { 30, }, + [2] = { 31.6, }, + [3] = { 33.2, }, + [4] = { 34.8, }, + [5] = { 36.4, }, + [6] = { 38, }, + [7] = { 39.6, }, + [8] = { 41.2, }, + [9] = { 42.8, }, + [10] = { 44.4, }, + [11] = { 46, }, + [12] = { 47.6, }, + [13] = { 49.2, }, + [14] = { 50.8, }, + [15] = { 52.4, }, + [16] = { 54, }, + [17] = { 55.6, }, + [18] = { 57.2, }, + [19] = { 58.8, }, + [20] = { 60.4, }, + [21] = { 62, }, + [22] = { 63.6, }, + [23] = { 65.2, }, + [24] = { 66.8, }, + [25] = { 68.4, }, + [26] = { 70, }, + [27] = { 71.6, }, + [28] = { 73.2, }, + [29] = { 74.8, }, + [30] = { 76.4, }, + }, } gems["Freeze Mine"] = { - dexterity = true, - spell = true, mine = true, - aoe = true, + dexterity = true, + active_skill = true, + spell = true, + area = true, + duration = true, cold = true, - hit = true, - showAverage = true, - base = { - skill_castTime = 0.5, - skill_damageEffectiveness = 0.5, + color = 2, + baseFlags = { + spell = true, + mine = true, + area = true, + cold = true, }, - quality = { - aoeRadiusInc = 0.5, + skillTypes = { [2] = true, [10] = true, [11] = true, [12] = true, [41] = true, [34] = true, }, + baseMods = { + skill("castTime", 0.5), + skill("damageEffectiveness", 0.5), + --"freeze_mine_cold_resistance_+_while_frozen" = -15 + --"base_mine_duration" = 16000 + --"base_skill_is_mined" = ? + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + --"is_remote_mine" = ? + --"always_freeze" = ? + --"is_area_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("ColdMin", nil), --"spell_minimum_base_cold_damage" + [3] = skill("ColdMax", nil), --"spell_maximum_base_cold_damage" + --[4] = "freeze_as_though_dealt_damage_+%" }, levels = { - [1] = { skill_manaCostBase = 6, skill_coldMin = 7, skill_coldMax = 10, }, - [2] = { skill_manaCostBase = 8, skill_coldMin = 9, skill_coldMax = 13, }, - [3] = { skill_manaCostBase = 10, skill_coldMin = 12, skill_coldMax = 17, }, - [4] = { skill_manaCostBase = 10, skill_coldMin = 15, skill_coldMax = 23, }, - [5] = { skill_manaCostBase = 11, skill_coldMin = 19, skill_coldMax = 29, }, - [6] = { skill_manaCostBase = 12, skill_coldMin = 24, skill_coldMax = 37, }, - [7] = { skill_manaCostBase = 13, skill_coldMin = 30, skill_coldMax = 46, }, - [8] = { skill_manaCostBase = 14, skill_coldMin = 36, skill_coldMax = 54, }, - [9] = { skill_manaCostBase = 14, skill_coldMin = 42, skill_coldMax = 63, }, - [10] = { skill_manaCostBase = 16, skill_coldMin = 49, skill_coldMax = 73, }, - [11] = { skill_manaCostBase = 18, skill_coldMin = 57, skill_coldMax = 85, }, - [12] = { skill_manaCostBase = 18, skill_coldMin = 66, skill_coldMax = 99, }, - [13] = { skill_manaCostBase = 19, skill_coldMin = 76, skill_coldMax = 114, }, - [14] = { skill_manaCostBase = 20, skill_coldMin = 88, skill_coldMax = 131, }, - [15] = { skill_manaCostBase = 21, skill_coldMin = 101, skill_coldMax = 151, }, - [16] = { skill_manaCostBase = 21, skill_coldMin = 116, skill_coldMax = 173, }, - [17] = { skill_manaCostBase = 21, skill_coldMin = 132, skill_coldMax = 199, }, - [18] = { skill_manaCostBase = 21, skill_coldMin = 151, skill_coldMax = 227, }, - [19] = { skill_manaCostBase = 22, skill_coldMin = 165, skill_coldMax = 248, }, - [20] = { skill_manaCostBase = 22, skill_coldMin = 181, skill_coldMax = 271, }, - [21] = { skill_manaCostBase = 22, skill_coldMin = 197, skill_coldMax = 296, }, - [22] = { skill_manaCostBase = 22, skill_coldMin = 215, skill_coldMax = 322, }, - [23] = { skill_manaCostBase = 23, skill_coldMin = 234, skill_coldMax = 351, }, - [24] = { skill_manaCostBase = 23, skill_coldMin = 255, skill_coldMax = 383, }, - [25] = { skill_manaCostBase = 24, skill_coldMin = 278, skill_coldMax = 417, }, - [26] = { skill_manaCostBase = 24, skill_coldMin = 302, skill_coldMax = 454, }, - [27] = { skill_manaCostBase = 24, skill_coldMin = 329, skill_coldMax = 493, }, - [28] = { skill_manaCostBase = 24, skill_coldMin = 358, skill_coldMax = 536, }, - [29] = { skill_manaCostBase = 25, skill_coldMin = 389, skill_coldMax = 583, }, - [30] = { skill_manaCostBase = 25, skill_coldMin = 422, skill_coldMax = 633, }, - } + [1] = { 6, 7, 10, 200, }, + [2] = { 8, 9, 13, 210, }, + [3] = { 10, 12, 17, 220, }, + [4] = { 10, 15, 23, 230, }, + [5] = { 11, 19, 29, 240, }, + [6] = { 12, 24, 37, 250, }, + [7] = { 13, 30, 46, 260, }, + [8] = { 14, 36, 54, 270, }, + [9] = { 14, 42, 63, 280, }, + [10] = { 16, 49, 73, 290, }, + [11] = { 18, 57, 85, 300, }, + [12] = { 18, 66, 99, 310, }, + [13] = { 19, 76, 114, 320, }, + [14] = { 20, 88, 131, 330, }, + [15] = { 21, 101, 151, 340, }, + [16] = { 21, 116, 173, 350, }, + [17] = { 21, 132, 199, 360, }, + [18] = { 21, 151, 227, 370, }, + [19] = { 22, 165, 248, 380, }, + [20] = { 22, 181, 271, 390, }, + [21] = { 22, 197, 296, 400, }, + [22] = { 22, 215, 322, 410, }, + [23] = { 23, 234, 351, 420, }, + [24] = { 23, 255, 383, 430, }, + [25] = { 24, 278, 417, 440, }, + [26] = { 24, 302, 454, 450, }, + [27] = { 24, 329, 493, 460, }, + [28] = { 24, 358, 536, 470, }, + [29] = { 25, 389, 583, 480, }, + [30] = { 25, 422, 633, 490, }, + }, } gems["Frenzy"] = { dexterity = true, + active_skill = true, attack = true, melee = true, bow = true, - hit = true, - base = { - skill_manaCostBase = 10, - PerFrenzy_attack_physicalInc = 5, - PerFrenzy_attackSpeedInc = 5, + color = 2, + baseFlags = { + attack = true, + melee = true, + projectile = true, }, - quality = { - attackSpeedInc = 0.5, + skillTypes = { [1] = true, [48] = true, [3] = true, [6] = true, [22] = true, [17] = true, [19] = true, [25] = true, [28] = true, [24] = true, }, + baseMods = { + skill("castTime", 1), + skill("manaCost", 10), + mod("PhysicalDamage", "INC", 5, 0, 0, { type = "Multiplier", var = "FrenzyCharge" }), --"physical_damage_+%_per_frenzy_charge" = 5 + mod("Speed", "INC", 5, ModFlag.Attack, 0, { type = "Multiplier", var = "FrenzyCharge" }), --"base_attack_speed_+%_per_frenzy_charge" = 5 + --"skill_can_fire_arrows" = ? + --"skill_can_fire_wand_projectiles" = ? + }, + qualityMods = { + mod("Speed", "INC", 0.5, ModFlag.Attack, 0, nil), --"attack_speed_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { attack_damageMore = 1.1, }, - [2] = { attack_damageMore = 1.114, }, - [3] = { attack_damageMore = 1.128, }, - [4] = { attack_damageMore = 1.142, }, - [5] = { attack_damageMore = 1.156, }, - [6] = { attack_damageMore = 1.17, }, - [7] = { attack_damageMore = 1.184, }, - [8] = { attack_damageMore = 1.198, }, - [9] = { attack_damageMore = 1.212, }, - [10] = { attack_damageMore = 1.226, }, - [11] = { attack_damageMore = 1.24, }, - [12] = { attack_damageMore = 1.254, }, - [13] = { attack_damageMore = 1.268, }, - [14] = { attack_damageMore = 1.282, }, - [15] = { attack_damageMore = 1.296, }, - [16] = { attack_damageMore = 1.31, }, - [17] = { attack_damageMore = 1.324, }, - [18] = { attack_damageMore = 1.338, }, - [19] = { attack_damageMore = 1.352, }, - [20] = { attack_damageMore = 1.366, }, - [21] = { attack_damageMore = 1.38, }, - [22] = { attack_damageMore = 1.394, }, - [23] = { attack_damageMore = 1.408, }, - [24] = { attack_damageMore = 1.422, }, - [25] = { attack_damageMore = 1.436, }, - [26] = { attack_damageMore = 1.45, }, - [27] = { attack_damageMore = 1.464, }, - [28] = { attack_damageMore = 1.478, }, - [29] = { attack_damageMore = 1.492, }, - [30] = { attack_damageMore = 1.506, }, - } + [1] = { 10, }, + [2] = { 11.4, }, + [3] = { 12.8, }, + [4] = { 14.2, }, + [5] = { 15.6, }, + [6] = { 17, }, + [7] = { 18.4, }, + [8] = { 19.8, }, + [9] = { 21.2, }, + [10] = { 22.6, }, + [11] = { 24, }, + [12] = { 25.4, }, + [13] = { 26.8, }, + [14] = { 28.2, }, + [15] = { 29.6, }, + [16] = { 31, }, + [17] = { 32.4, }, + [18] = { 33.8, }, + [19] = { 35.2, }, + [20] = { 36.6, }, + [21] = { 38, }, + [22] = { 39.4, }, + [23] = { 40.8, }, + [24] = { 42.2, }, + [25] = { 43.6, }, + [26] = { 45, }, + [27] = { 46.4, }, + [28] = { 47.8, }, + [29] = { 49.2, }, + [30] = { 50.6, }, + }, } gems["Frost Blades"] = { + projectile = true, dexterity = true, + active_skill = true, attack = true, melee = true, - projectile = true, cold = true, - hit = true, parts = { { name = "Melee hit", @@ -954,442 +1475,703 @@ gems["Frost Blades"] = { projectile = true, }, }, - base = { - skill_manaCostBase = 6, - physicalGainAscold = 40, + color = 2, + baseFlags = { + attack = true, + melee = true, + projectile = true, + cold = true, }, - quality = { - projectile_damageInc = 1, + skillTypes = { [1] = true, [3] = true, [6] = true, [25] = true, [28] = true, [24] = true, [34] = true, [48] = true, }, + baseMods = { + skill("castTime", 1), + skill("manaCost", 6), + mod("PhysicalDamageConvertToCold", "BASE", 40, 0, 0, nil), --"base_physical_damage_%_to_convert_to_cold" = 40 + --"total_projectile_spread_angle_override" = 110 + --"show_number_of_projectiles" = ? + }, + qualityMods = { + mod("Damage", "INC", 1, ModFlag.Projectile), --"projectile_damage_+%" = 1 + }, + levelMods = { + [1] = mod("ProjectileCount", "BASE", nil), --"number_of_additional_projectiles" + --[2] = "melee_weapon_range_+" + [3] = mod("ProjectileSpeed", "INC", nil), --"base_projectile_speed_+%" + [4] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { attack_damageMore = 1, projectileCount = 4, projectileSpeedInc = 0, }, - [2] = { attack_damageMore = 1.022, projectileCount = 4, projectileSpeedInc = 1, }, - [3] = { attack_damageMore = 1.044, projectileCount = 4, projectileSpeedInc = 2, }, - [4] = { attack_damageMore = 1.066, projectileCount = 4, projectileSpeedInc = 3, }, - [5] = { attack_damageMore = 1.088, projectileCount = 4, projectileSpeedInc = 4, }, - [6] = { attack_damageMore = 1.11, projectileCount = 5, projectileSpeedInc = 5, }, - [7] = { attack_damageMore = 1.132, projectileCount = 5, projectileSpeedInc = 6, }, - [8] = { attack_damageMore = 1.154, projectileCount = 5, projectileSpeedInc = 7, }, - [9] = { attack_damageMore = 1.176, projectileCount = 5, projectileSpeedInc = 8, }, - [10] = { attack_damageMore = 1.198, projectileCount = 5, projectileSpeedInc = 9, }, - [11] = { attack_damageMore = 1.22, projectileCount = 6, projectileSpeedInc = 10, }, - [12] = { attack_damageMore = 1.242, projectileCount = 6, projectileSpeedInc = 11, }, - [13] = { attack_damageMore = 1.264, projectileCount = 6, projectileSpeedInc = 12, }, - [14] = { attack_damageMore = 1.286, projectileCount = 6, projectileSpeedInc = 13, }, - [15] = { attack_damageMore = 1.308, projectileCount = 6, projectileSpeedInc = 14, }, - [16] = { attack_damageMore = 1.33, projectileCount = 7, projectileSpeedInc = 15, }, - [17] = { attack_damageMore = 1.352, projectileCount = 7, projectileSpeedInc = 16, }, - [18] = { attack_damageMore = 1.374, projectileCount = 7, projectileSpeedInc = 17, }, - [19] = { attack_damageMore = 1.396, projectileCount = 7, projectileSpeedInc = 18, }, - [20] = { attack_damageMore = 1.418, projectileCount = 7, projectileSpeedInc = 19, }, - [21] = { attack_damageMore = 1.44, projectileCount = 8, projectileSpeedInc = 20, }, - [22] = { attack_damageMore = 1.462, projectileCount = 8, projectileSpeedInc = 21, }, - [23] = { attack_damageMore = 1.484, projectileCount = 8, projectileSpeedInc = 22, }, - [24] = { attack_damageMore = 1.506, projectileCount = 8, projectileSpeedInc = 23, }, - [25] = { attack_damageMore = 1.528, projectileCount = 8, projectileSpeedInc = 24, }, - [26] = { attack_damageMore = 1.55, projectileCount = 9, projectileSpeedInc = 25, }, - [27] = { attack_damageMore = 1.572, projectileCount = 9, projectileSpeedInc = 26, }, - [28] = { attack_damageMore = 1.594, projectileCount = 9, projectileSpeedInc = 27, }, - [29] = { attack_damageMore = 1.616, projectileCount = 9, projectileSpeedInc = 28, }, - [30] = { attack_damageMore = 1.638, projectileCount = 9, projectileSpeedInc = 29, }, - } + [1] = { 4, 18, 0, nil, }, + [2] = { 4, 18, 1, 2.2, }, + [3] = { 4, 18, 2, 4.4, }, + [4] = { 4, 18, 3, 6.6, }, + [5] = { 4, 18, 4, 8.8, }, + [6] = { 5, 19, 5, 11, }, + [7] = { 5, 19, 6, 13.2, }, + [8] = { 5, 19, 7, 15.4, }, + [9] = { 5, 19, 8, 17.6, }, + [10] = { 5, 19, 9, 19.8, }, + [11] = { 6, 20, 10, 22, }, + [12] = { 6, 20, 11, 24.2, }, + [13] = { 6, 20, 12, 26.4, }, + [14] = { 6, 20, 13, 28.6, }, + [15] = { 6, 20, 14, 30.8, }, + [16] = { 7, 21, 15, 33, }, + [17] = { 7, 21, 16, 35.2, }, + [18] = { 7, 21, 17, 37.4, }, + [19] = { 7, 21, 18, 39.6, }, + [20] = { 7, 21, 19, 41.8, }, + [21] = { 8, 22, 20, 44, }, + [22] = { 8, 22, 21, 46.2, }, + [23] = { 8, 22, 22, 48.4, }, + [24] = { 8, 22, 23, 50.6, }, + [25] = { 8, 22, 24, 52.8, }, + [26] = { 9, 23, 25, 55, }, + [27] = { 9, 23, 26, 57.2, }, + [28] = { 9, 23, 27, 59.4, }, + [29] = { 9, 23, 28, 61.6, }, + [30] = { 9, 23, 29, 63.8, }, + }, } gems["Grace"] = { - dexterity = true, aura = true, + dexterity = true, + active_skill = true, spell = true, - aoe = true, - base = { - skill_castTime = 1.2, - skill_manaReservedPercent = 50, + area = true, + color = 2, + baseFlags = { + spell = true, + aura = true, + area = true, }, - quality = { - aura_aoeRadiusInc = 1, + skillTypes = { [2] = true, [11] = true, [5] = true, [15] = true, [27] = true, [16] = true, [18] = true, [44] = true, }, + baseMods = { + skill("castTime", 1.2), + skill("manaCost", 50), + --"base_deal_no_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 1), --"base_skill_area_of_effect_+%" = 1 + }, + levelMods = { + [1] = mod("Evasion", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Aura" }), --"base_evasion_rating" + [2] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" }, levels = { - [1] = { aura_aoeRadiusInc = 0, AuraEffect_evasionBase = 227, }, - [2] = { aura_aoeRadiusInc = 3, AuraEffect_evasionBase = 271, }, - [3] = { aura_aoeRadiusInc = 6, AuraEffect_evasionBase = 322, }, - [4] = { aura_aoeRadiusInc = 9, AuraEffect_evasionBase = 379, }, - [5] = { aura_aoeRadiusInc = 12, AuraEffect_evasionBase = 444, }, - [6] = { aura_aoeRadiusInc = 15, AuraEffect_evasionBase = 528, }, - [7] = { aura_aoeRadiusInc = 18, AuraEffect_evasionBase = 621, }, - [8] = { aura_aoeRadiusInc = 21, AuraEffect_evasionBase = 722, }, - [9] = { aura_aoeRadiusInc = 23, AuraEffect_evasionBase = 845, }, - [10] = { aura_aoeRadiusInc = 25, AuraEffect_evasionBase = 940, }, - [11] = { aura_aoeRadiusInc = 27, AuraEffect_evasionBase = 1043, }, - [12] = { aura_aoeRadiusInc = 29, AuraEffect_evasionBase = 1155, }, - [13] = { aura_aoeRadiusInc = 31, AuraEffect_evasionBase = 1283, }, - [14] = { aura_aoeRadiusInc = 33, AuraEffect_evasionBase = 1413, }, - [15] = { aura_aoeRadiusInc = 35, AuraEffect_evasionBase = 1567, }, - [16] = { aura_aoeRadiusInc = 36, AuraEffect_evasionBase = 1732, }, - [17] = { aura_aoeRadiusInc = 37, AuraEffect_evasionBase = 1914, }, - [18] = { aura_aoeRadiusInc = 38, AuraEffect_evasionBase = 2115, }, - [19] = { aura_aoeRadiusInc = 39, AuraEffect_evasionBase = 2335, }, - [20] = { aura_aoeRadiusInc = 40, AuraEffect_evasionBase = 2575, }, - [21] = { aura_aoeRadiusInc = 41, AuraEffect_evasionBase = 2700, }, - [22] = { aura_aoeRadiusInc = 42, AuraEffect_evasionBase = 2835, }, - [23] = { aura_aoeRadiusInc = 43, AuraEffect_evasionBase = 2979, }, - [24] = { aura_aoeRadiusInc = 44, AuraEffect_evasionBase = 3124, }, - [25] = { aura_aoeRadiusInc = 45, AuraEffect_evasionBase = 3279, }, - [26] = { aura_aoeRadiusInc = 46, AuraEffect_evasionBase = 3444, }, - [27] = { aura_aoeRadiusInc = 47, AuraEffect_evasionBase = 3611, }, - [28] = { aura_aoeRadiusInc = 48, AuraEffect_evasionBase = 3795, }, - [29] = { aura_aoeRadiusInc = 49, AuraEffect_evasionBase = 3982, }, - [30] = { aura_aoeRadiusInc = 50, AuraEffect_evasionBase = 4179, }, - } + [1] = { 227, 0, }, + [2] = { 271, 3, }, + [3] = { 322, 6, }, + [4] = { 379, 9, }, + [5] = { 444, 12, }, + [6] = { 528, 15, }, + [7] = { 621, 18, }, + [8] = { 722, 21, }, + [9] = { 845, 23, }, + [10] = { 940, 25, }, + [11] = { 1043, 27, }, + [12] = { 1155, 29, }, + [13] = { 1283, 31, }, + [14] = { 1413, 33, }, + [15] = { 1567, 35, }, + [16] = { 1732, 36, }, + [17] = { 1914, 37, }, + [18] = { 2115, 38, }, + [19] = { 2335, 39, }, + [20] = { 2575, 40, }, + [21] = { 2700, 41, }, + [22] = { 2835, 42, }, + [23] = { 2979, 43, }, + [24] = { 3124, 44, }, + [25] = { 3279, 45, }, + [26] = { 3444, 46, }, + [27] = { 3611, 47, }, + [28] = { 3795, 48, }, + [29] = { 3982, 49, }, + [30] = { 4179, 50, }, + }, +} +gems["Vaal Grace"] = { + aura = true, + dexterity = true, + active_skill = true, + vaal = true, + spell = true, + area = true, + duration = true, + color = 2, + baseFlags = { + spell = true, + aura = true, + area = true, + duration = true, + vaal = true, + }, + skillTypes = { [2] = true, [5] = true, [11] = true, [18] = true, [27] = true, [12] = true, [43] = true, [44] = true, }, + baseMods = { + skill("castTime", 0.6), + skill("duration", 6), --"base_skill_effect_duration" = 6000 + --"base_deal_no_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 1), --"base_skill_area_of_effect_+%" = 1 + }, + levelMods = { + [1] = mod("AttackDodgeChance", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Aura" }), --"base_chance_to_dodge_%" + [2] = mod("SpellDodgeChance", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Aura" }), --"base_chance_to_dodge_spells_%" + [3] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" + }, + levels = { + [1] = { 24, 24, 0, }, + [2] = { 25, 25, 3, }, + [3] = { 25, 25, 6, }, + [4] = { 26, 26, 9, }, + [5] = { 26, 26, 12, }, + [6] = { 27, 27, 15, }, + [7] = { 27, 27, 18, }, + [8] = { 28, 28, 21, }, + [9] = { 28, 28, 23, }, + [10] = { 29, 29, 25, }, + [11] = { 29, 29, 27, }, + [12] = { 30, 30, 29, }, + [13] = { 30, 30, 31, }, + [14] = { 31, 31, 33, }, + [15] = { 31, 31, 35, }, + [16] = { 32, 32, 36, }, + [17] = { 32, 32, 37, }, + [18] = { 33, 33, 38, }, + [19] = { 33, 33, 39, }, + [20] = { 34, 34, 40, }, + [21] = { 34, 34, 41, }, + [22] = { 35, 35, 42, }, + [23] = { 35, 35, 43, }, + [24] = { 36, 36, 44, }, + [25] = { 36, 36, 45, }, + [26] = { 37, 37, 46, }, + [27] = { 37, 37, 47, }, + [28] = { 38, 38, 48, }, + [29] = { 38, 38, 49, }, + [30] = { 39, 39, 50, }, + }, } gems["Haste"] = { - dexterity = true, aura = true, + dexterity = true, + active_skill = true, spell = true, - aoe = true, - base = { - skill_castTime = 1.2, - skill_manaReservedPercent = 50, + area = true, + color = 2, + baseFlags = { + spell = true, + aura = true, + area = true, }, - quality = { - aura_aoeRadiusInc = 1, + skillTypes = { [2] = true, [11] = true, [5] = true, [15] = true, [27] = true, [16] = true, [18] = true, [44] = true, }, + baseMods = { + skill("castTime", 1.2), + skill("manaCost", 50), + --"base_deal_no_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 1), --"base_skill_area_of_effect_+%" = 1 + }, + levelMods = { + [1] = mod("Speed", "INC", nil, ModFlag.Attack, 0, { type = "GlobalEffect", effectType = "Aura" }), --"attack_speed_+%" + [2] = mod("Speed", "INC", nil, ModFlag.Spell, 0, { type = "GlobalEffect", effectType = "Aura" }), --"cast_speed_+%_from_haste_aura" + [3] = mod("MovementSpeed", "INC", nil, 0, 0, { type = "GlobalEffect", effectType = "Aura" }), --"base_movement_velocity_+%" + [4] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" }, levels = { - [1] = { aura_aoeRadiusInc = 0, AuraEffect_attackSpeedInc = 9, AuraEffect_castSpeedInc = 9, AuraEffect_movementSpeedInc = 4, }, - [2] = { aura_aoeRadiusInc = 3, AuraEffect_attackSpeedInc = 10, AuraEffect_castSpeedInc = 9, AuraEffect_movementSpeedInc = 4, }, - [3] = { aura_aoeRadiusInc = 6, AuraEffect_attackSpeedInc = 10, AuraEffect_castSpeedInc = 10, AuraEffect_movementSpeedInc = 4, }, - [4] = { aura_aoeRadiusInc = 9, AuraEffect_attackSpeedInc = 10, AuraEffect_castSpeedInc = 10, AuraEffect_movementSpeedInc = 5, }, - [5] = { aura_aoeRadiusInc = 12, AuraEffect_attackSpeedInc = 11, AuraEffect_castSpeedInc = 10, AuraEffect_movementSpeedInc = 5, }, - [6] = { aura_aoeRadiusInc = 15, AuraEffect_attackSpeedInc = 11, AuraEffect_castSpeedInc = 11, AuraEffect_movementSpeedInc = 5, }, - [7] = { aura_aoeRadiusInc = 18, AuraEffect_attackSpeedInc = 11, AuraEffect_castSpeedInc = 11, AuraEffect_movementSpeedInc = 6, }, - [8] = { aura_aoeRadiusInc = 21, AuraEffect_attackSpeedInc = 12, AuraEffect_castSpeedInc = 11, AuraEffect_movementSpeedInc = 6, }, - [9] = { aura_aoeRadiusInc = 23, AuraEffect_attackSpeedInc = 12, AuraEffect_castSpeedInc = 12, AuraEffect_movementSpeedInc = 6, }, - [10] = { aura_aoeRadiusInc = 25, AuraEffect_attackSpeedInc = 12, AuraEffect_castSpeedInc = 12, AuraEffect_movementSpeedInc = 7, }, - [11] = { aura_aoeRadiusInc = 27, AuraEffect_attackSpeedInc = 13, AuraEffect_castSpeedInc = 12, AuraEffect_movementSpeedInc = 7, }, - [12] = { aura_aoeRadiusInc = 29, AuraEffect_attackSpeedInc = 13, AuraEffect_castSpeedInc = 13, AuraEffect_movementSpeedInc = 7, }, - [13] = { aura_aoeRadiusInc = 31, AuraEffect_attackSpeedInc = 13, AuraEffect_castSpeedInc = 13, AuraEffect_movementSpeedInc = 8, }, - [14] = { aura_aoeRadiusInc = 33, AuraEffect_attackSpeedInc = 14, AuraEffect_castSpeedInc = 13, AuraEffect_movementSpeedInc = 8, }, - [15] = { aura_aoeRadiusInc = 35, AuraEffect_attackSpeedInc = 14, AuraEffect_castSpeedInc = 14, AuraEffect_movementSpeedInc = 8, }, - [16] = { aura_aoeRadiusInc = 36, AuraEffect_attackSpeedInc = 15, AuraEffect_castSpeedInc = 14, AuraEffect_movementSpeedInc = 8, }, - [17] = { aura_aoeRadiusInc = 37, AuraEffect_attackSpeedInc = 15, AuraEffect_castSpeedInc = 15, AuraEffect_movementSpeedInc = 8, }, - [18] = { aura_aoeRadiusInc = 38, AuraEffect_attackSpeedInc = 16, AuraEffect_castSpeedInc = 15, AuraEffect_movementSpeedInc = 8, }, - [19] = { aura_aoeRadiusInc = 39, AuraEffect_attackSpeedInc = 16, AuraEffect_castSpeedInc = 16, AuraEffect_movementSpeedInc = 8, }, - [20] = { aura_aoeRadiusInc = 40, AuraEffect_attackSpeedInc = 16, AuraEffect_castSpeedInc = 16, AuraEffect_movementSpeedInc = 9, }, - [21] = { aura_aoeRadiusInc = 41, AuraEffect_attackSpeedInc = 17, AuraEffect_castSpeedInc = 16, AuraEffect_movementSpeedInc = 9, }, - [22] = { aura_aoeRadiusInc = 42, AuraEffect_attackSpeedInc = 17, AuraEffect_castSpeedInc = 17, AuraEffect_movementSpeedInc = 9, }, - [23] = { aura_aoeRadiusInc = 43, AuraEffect_attackSpeedInc = 17, AuraEffect_castSpeedInc = 17, AuraEffect_movementSpeedInc = 10, }, - [24] = { aura_aoeRadiusInc = 44, AuraEffect_attackSpeedInc = 18, AuraEffect_castSpeedInc = 17, AuraEffect_movementSpeedInc = 10, }, - [25] = { aura_aoeRadiusInc = 45, AuraEffect_attackSpeedInc = 18, AuraEffect_castSpeedInc = 18, AuraEffect_movementSpeedInc = 10, }, - [26] = { aura_aoeRadiusInc = 46, AuraEffect_attackSpeedInc = 18, AuraEffect_castSpeedInc = 18, AuraEffect_movementSpeedInc = 11, }, - [27] = { aura_aoeRadiusInc = 47, AuraEffect_attackSpeedInc = 19, AuraEffect_castSpeedInc = 18, AuraEffect_movementSpeedInc = 11, }, - [28] = { aura_aoeRadiusInc = 48, AuraEffect_attackSpeedInc = 19, AuraEffect_castSpeedInc = 19, AuraEffect_movementSpeedInc = 11, }, - [29] = { aura_aoeRadiusInc = 49, AuraEffect_attackSpeedInc = 19, AuraEffect_castSpeedInc = 19, AuraEffect_movementSpeedInc = 12, }, - [30] = { aura_aoeRadiusInc = 50, AuraEffect_attackSpeedInc = 20, AuraEffect_castSpeedInc = 19, AuraEffect_movementSpeedInc = 12, }, - } + [1] = { 9, 9, 4, 0, }, + [2] = { 10, 9, 4, 3, }, + [3] = { 10, 10, 4, 6, }, + [4] = { 10, 10, 5, 9, }, + [5] = { 11, 10, 5, 12, }, + [6] = { 11, 11, 5, 15, }, + [7] = { 11, 11, 6, 18, }, + [8] = { 12, 11, 6, 21, }, + [9] = { 12, 12, 6, 23, }, + [10] = { 12, 12, 7, 25, }, + [11] = { 13, 12, 7, 27, }, + [12] = { 13, 13, 7, 29, }, + [13] = { 13, 13, 8, 31, }, + [14] = { 14, 13, 8, 33, }, + [15] = { 14, 14, 8, 35, }, + [16] = { 15, 14, 8, 36, }, + [17] = { 15, 15, 8, 37, }, + [18] = { 16, 15, 8, 38, }, + [19] = { 16, 16, 8, 39, }, + [20] = { 16, 16, 9, 40, }, + [21] = { 17, 16, 9, 41, }, + [22] = { 17, 17, 9, 42, }, + [23] = { 17, 17, 10, 43, }, + [24] = { 18, 17, 10, 44, }, + [25] = { 18, 18, 10, 45, }, + [26] = { 18, 18, 11, 46, }, + [27] = { 19, 18, 11, 47, }, + [28] = { 19, 19, 11, 48, }, + [29] = { 19, 19, 12, 49, }, + [30] = { 20, 19, 12, 50, }, + }, +} +gems["Vaal Haste"] = { + aura = true, + dexterity = true, + active_skill = true, + vaal = true, + spell = true, + area = true, + duration = true, + color = 2, + baseFlags = { + spell = true, + aura = true, + area = true, + duration = true, + vaal = true, + }, + skillTypes = { [2] = true, [5] = true, [11] = true, [18] = true, [27] = true, [12] = true, [43] = true, [44] = true, }, + baseMods = { + skill("castTime", 0.6), + skill("duration", 6), --"base_skill_effect_duration" = 6000 + --"base_deal_no_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 1), --"base_skill_area_of_effect_+%" = 1 + }, + levelMods = { + [1] = mod("Speed", "INC", nil, ModFlag.Attack, 0, { type = "GlobalEffect", effectType = "Aura" }), --"attack_speed_+%" + [2] = mod("Speed", "INC", nil, ModFlag.Spell, 0, { type = "GlobalEffect", effectType = "Aura" }), --"cast_speed_+%_from_haste_aura" + [3] = mod("MovementSpeed", "INC", nil, 0, 0, { type = "GlobalEffect", effectType = "Aura" }), --"base_movement_velocity_+%" + [4] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" + }, + levels = { + [1] = { 30, 29, 14, 0, }, + [2] = { 30, 30, 14, 3, }, + [3] = { 30, 30, 15, 6, }, + [4] = { 31, 30, 15, 9, }, + [5] = { 31, 31, 15, 12, }, + [6] = { 31, 31, 16, 15, }, + [7] = { 32, 31, 16, 18, }, + [8] = { 32, 32, 16, 21, }, + [9] = { 32, 32, 17, 23, }, + [10] = { 33, 32, 17, 25, }, + [11] = { 33, 33, 17, 27, }, + [12] = { 33, 33, 18, 29, }, + [13] = { 34, 33, 18, 31, }, + [14] = { 34, 34, 18, 33, }, + [15] = { 34, 34, 19, 35, }, + [16] = { 35, 34, 19, 36, }, + [17] = { 35, 35, 19, 37, }, + [18] = { 35, 35, 20, 38, }, + [19] = { 36, 35, 20, 39, }, + [20] = { 36, 36, 20, 40, }, + [21] = { 36, 36, 21, 41, }, + [22] = { 37, 36, 21, 42, }, + [23] = { 37, 37, 21, 43, }, + [24] = { 37, 37, 22, 44, }, + [25] = { 38, 37, 22, 45, }, + [26] = { 38, 38, 22, 46, }, + [27] = { 38, 38, 23, 47, }, + [28] = { 39, 38, 23, 48, }, + [29] = { 39, 39, 23, 49, }, + [30] = { 39, 39, 24, 50, }, + }, } gems["Hatred"] = { - dexterity = true, aura = true, + dexterity = true, + active_skill = true, spell = true, - aoe = true, + area = true, cold = true, - base = { - skill_castTime = 1.2, - skill_manaReservedPercent = 50, + color = 2, + baseFlags = { + spell = true, + aura = true, + area = true, + cold = true, }, - quality = { - aura_aoeRadiusInc = 1, + skillTypes = { [2] = true, [11] = true, [5] = true, [15] = true, [27] = true, [16] = true, [18] = true, [44] = true, [34] = true, }, + baseMods = { + skill("castTime", 1.2), + skill("manaCost", 50), + --"base_deal_no_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 1), --"base_skill_area_of_effect_+%" = 1 + }, + levelMods = { + [1] = mod("PhysicalDamageGainAsCold", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Aura" }), --"physical_damage_%_to_add_as_cold" + [2] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" }, levels = { - [1] = { aura_aoeRadiusInc = 0, AuraEffect_physicalGainAscold = 26, }, - [2] = { aura_aoeRadiusInc = 3, AuraEffect_physicalGainAscold = 26, }, - [3] = { aura_aoeRadiusInc = 6, AuraEffect_physicalGainAscold = 27, }, - [4] = { aura_aoeRadiusInc = 9, AuraEffect_physicalGainAscold = 27, }, - [5] = { aura_aoeRadiusInc = 12, AuraEffect_physicalGainAscold = 28, }, - [6] = { aura_aoeRadiusInc = 15, AuraEffect_physicalGainAscold = 28, }, - [7] = { aura_aoeRadiusInc = 18, AuraEffect_physicalGainAscold = 29, }, - [8] = { aura_aoeRadiusInc = 21, AuraEffect_physicalGainAscold = 29, }, - [9] = { aura_aoeRadiusInc = 23, AuraEffect_physicalGainAscold = 30, }, - [10] = { aura_aoeRadiusInc = 25, AuraEffect_physicalGainAscold = 30, }, - [11] = { aura_aoeRadiusInc = 27, AuraEffect_physicalGainAscold = 31, }, - [12] = { aura_aoeRadiusInc = 29, AuraEffect_physicalGainAscold = 31, }, - [13] = { aura_aoeRadiusInc = 31, AuraEffect_physicalGainAscold = 32, }, - [14] = { aura_aoeRadiusInc = 33, AuraEffect_physicalGainAscold = 32, }, - [15] = { aura_aoeRadiusInc = 35, AuraEffect_physicalGainAscold = 33, }, - [16] = { aura_aoeRadiusInc = 36, AuraEffect_physicalGainAscold = 34, }, - [17] = { aura_aoeRadiusInc = 37, AuraEffect_physicalGainAscold = 34, }, - [18] = { aura_aoeRadiusInc = 38, AuraEffect_physicalGainAscold = 35, }, - [19] = { aura_aoeRadiusInc = 39, AuraEffect_physicalGainAscold = 35, }, - [20] = { aura_aoeRadiusInc = 40, AuraEffect_physicalGainAscold = 36, }, - [21] = { aura_aoeRadiusInc = 41, AuraEffect_physicalGainAscold = 36, }, - [22] = { aura_aoeRadiusInc = 42, AuraEffect_physicalGainAscold = 37, }, - [23] = { aura_aoeRadiusInc = 43, AuraEffect_physicalGainAscold = 37, }, - [24] = { aura_aoeRadiusInc = 44, AuraEffect_physicalGainAscold = 38, }, - [25] = { aura_aoeRadiusInc = 45, AuraEffect_physicalGainAscold = 38, }, - [26] = { aura_aoeRadiusInc = 46, AuraEffect_physicalGainAscold = 39, }, - [27] = { aura_aoeRadiusInc = 47, AuraEffect_physicalGainAscold = 39, }, - [28] = { aura_aoeRadiusInc = 48, AuraEffect_physicalGainAscold = 40, }, - [29] = { aura_aoeRadiusInc = 49, AuraEffect_physicalGainAscold = 40, }, - [30] = { aura_aoeRadiusInc = 50, AuraEffect_physicalGainAscold = 41, }, - } + [1] = { 26, 0, }, + [2] = { 26, 3, }, + [3] = { 27, 6, }, + [4] = { 27, 9, }, + [5] = { 28, 12, }, + [6] = { 28, 15, }, + [7] = { 29, 18, }, + [8] = { 29, 21, }, + [9] = { 30, 23, }, + [10] = { 30, 25, }, + [11] = { 31, 27, }, + [12] = { 31, 29, }, + [13] = { 32, 31, }, + [14] = { 32, 33, }, + [15] = { 33, 35, }, + [16] = { 34, 36, }, + [17] = { 34, 37, }, + [18] = { 35, 38, }, + [19] = { 35, 39, }, + [20] = { 36, 40, }, + [21] = { 36, 41, }, + [22] = { 37, 42, }, + [23] = { 37, 43, }, + [24] = { 38, 44, }, + [25] = { 38, 45, }, + [26] = { 39, 46, }, + [27] = { 39, 47, }, + [28] = { 40, 48, }, + [29] = { 40, 49, }, + [30] = { 41, 50, }, + }, } gems["Herald of Ice"] = { dexterity = true, + active_skill = true, cast = true, - aoe = true, + area = true, cold = true, - hit = true, - base = { - skill_castTime = 1, - skill_damageEffectiveness = 0.8, - skill_manaReservedPercent = 25, + color = 2, + baseFlags = { + cast = true, + area = true, + cold = true, }, - quality = { - BuffEffect_coldInc = 0.75, + skillTypes = { [39] = true, [5] = true, [15] = true, [16] = true, [10] = true, [11] = true, [34] = true, }, + baseMods = { + skill("castTime", 1), + skill("manaCost", 25), + skill("damageEffectiveness", 0.8), + --"is_area_damage" = ? + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + --"display_skill_deals_secondary_damage" = ? + --"damage_cannot_be_reflected" = ? + --"skill_can_add_multiple_charges_per_action" = ? + }, + qualityMods = { + mod("ColdDamage", "INC", 0.75, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"herald_of_ice_cold_damage_+%" = 0.75 + }, + levelMods = { + [1] = mod("ColdMin", "BASE", nil, ModFlag.Spell, 0, { type = "GlobalEffect", effectType = "Buff" }), --"spell_minimum_added_cold_damage" + [2] = mod("ColdMax", "BASE", nil, ModFlag.Spell, 0, { type = "GlobalEffect", effectType = "Buff" }), --"spell_maximum_added_cold_damage" + [3] = mod("ColdMin", "BASE", nil, ModFlag.Attack, 0, { type = "GlobalEffect", effectType = "Buff" }), --"attack_minimum_added_cold_damage" + [4] = mod("ColdMax", "BASE", nil, ModFlag.Attack, 0, { type = "GlobalEffect", effectType = "Buff" }), --"attack_maximum_added_cold_damage" + [5] = skill("ColdMin", nil), --"secondary_minimum_base_cold_damage" + [6] = skill("ColdMax", nil), --"secondary_maximum_base_cold_damage" }, levels = { - [1] = { BuffEffect_spell_coldMin = 4, BuffEffect_spell_coldMax = 5, BuffEffect_attack_coldMin = 4, BuffEffect_attack_coldMax = 5, skill_coldMin = 18, skill_coldMax = 26, }, - [2] = { BuffEffect_spell_coldMin = 5, BuffEffect_spell_coldMax = 7, BuffEffect_attack_coldMin = 5, BuffEffect_attack_coldMax = 7, skill_coldMin = 23, skill_coldMax = 35, }, - [3] = { BuffEffect_spell_coldMin = 6, BuffEffect_spell_coldMax = 8, BuffEffect_attack_coldMin = 6, BuffEffect_attack_coldMax = 8, skill_coldMin = 30, skill_coldMax = 45, }, - [4] = { BuffEffect_spell_coldMin = 7, BuffEffect_spell_coldMax = 10, BuffEffect_attack_coldMin = 7, BuffEffect_attack_coldMax = 10, skill_coldMin = 38, skill_coldMax = 57, }, - [5] = { BuffEffect_spell_coldMin = 8, BuffEffect_spell_coldMax = 12, BuffEffect_attack_coldMin = 8, BuffEffect_attack_coldMax = 12, skill_coldMin = 45, skill_coldMax = 67, }, - [6] = { BuffEffect_spell_coldMin = 9, BuffEffect_spell_coldMax = 14, BuffEffect_attack_coldMin = 9, BuffEffect_attack_coldMax = 14, skill_coldMin = 53, skill_coldMax = 80, }, - [7] = { BuffEffect_spell_coldMin = 10, BuffEffect_spell_coldMax = 16, BuffEffect_attack_coldMin = 10, BuffEffect_attack_coldMax = 16, skill_coldMin = 62, skill_coldMax = 94, }, - [8] = { BuffEffect_spell_coldMin = 12, BuffEffect_spell_coldMax = 18, BuffEffect_attack_coldMin = 12, BuffEffect_attack_coldMax = 18, skill_coldMin = 73, skill_coldMax = 110, }, - [9] = { BuffEffect_spell_coldMin = 13, BuffEffect_spell_coldMax = 20, BuffEffect_attack_coldMin = 13, BuffEffect_attack_coldMax = 20, skill_coldMin = 85, skill_coldMax = 128, }, - [10] = { BuffEffect_spell_coldMin = 15, BuffEffect_spell_coldMax = 23, BuffEffect_attack_coldMin = 15, BuffEffect_attack_coldMax = 23, skill_coldMin = 99, skill_coldMax = 149, }, - [11] = { BuffEffect_spell_coldMin = 17, BuffEffect_spell_coldMax = 26, BuffEffect_attack_coldMin = 17, BuffEffect_attack_coldMax = 26, skill_coldMin = 115, skill_coldMax = 173, }, - [12] = { BuffEffect_spell_coldMin = 19, BuffEffect_spell_coldMax = 29, BuffEffect_attack_coldMin = 19, BuffEffect_attack_coldMax = 29, skill_coldMin = 134, skill_coldMax = 200, }, - [13] = { BuffEffect_spell_coldMin = 22, BuffEffect_spell_coldMax = 33, BuffEffect_attack_coldMin = 22, BuffEffect_attack_coldMax = 33, skill_coldMin = 154, skill_coldMax = 232, }, - [14] = { BuffEffect_spell_coldMin = 24, BuffEffect_spell_coldMax = 37, BuffEffect_attack_coldMin = 24, BuffEffect_attack_coldMax = 37, skill_coldMin = 178, skill_coldMax = 267, }, - [15] = { BuffEffect_spell_coldMin = 26, BuffEffect_spell_coldMax = 39, BuffEffect_attack_coldMin = 26, BuffEffect_attack_coldMax = 39, skill_coldMin = 195, skill_coldMax = 293, }, - [16] = { BuffEffect_spell_coldMin = 28, BuffEffect_spell_coldMax = 42, BuffEffect_attack_coldMin = 28, BuffEffect_attack_coldMax = 42, skill_coldMin = 214, skill_coldMax = 321, }, - [17] = { BuffEffect_spell_coldMin = 30, BuffEffect_spell_coldMax = 46, BuffEffect_attack_coldMin = 30, BuffEffect_attack_coldMax = 46, skill_coldMin = 235, skill_coldMax = 352, }, - [18] = { BuffEffect_spell_coldMin = 33, BuffEffect_spell_coldMax = 49, BuffEffect_attack_coldMin = 33, BuffEffect_attack_coldMax = 49, skill_coldMin = 257, skill_coldMax = 386, }, - [19] = { BuffEffect_spell_coldMin = 35, BuffEffect_spell_coldMax = 53, BuffEffect_attack_coldMin = 35, BuffEffect_attack_coldMax = 53, skill_coldMin = 282, skill_coldMax = 422, }, - [20] = { BuffEffect_spell_coldMin = 38, BuffEffect_spell_coldMax = 56, BuffEffect_attack_coldMin = 38, BuffEffect_attack_coldMax = 56, skill_coldMin = 308, skill_coldMax = 462, }, - [21] = { BuffEffect_spell_coldMin = 40, BuffEffect_spell_coldMax = 61, BuffEffect_attack_coldMin = 40, BuffEffect_attack_coldMax = 61, skill_coldMin = 337, skill_coldMax = 505, }, - [22] = { BuffEffect_spell_coldMin = 43, BuffEffect_spell_coldMax = 65, BuffEffect_attack_coldMin = 43, BuffEffect_attack_coldMax = 65, skill_coldMin = 368, skill_coldMax = 552, }, - [23] = { BuffEffect_spell_coldMin = 46, BuffEffect_spell_coldMax = 70, BuffEffect_attack_coldMin = 46, BuffEffect_attack_coldMax = 70, skill_coldMin = 402, skill_coldMax = 603, }, - [24] = { BuffEffect_spell_coldMin = 50, BuffEffect_spell_coldMax = 75, BuffEffect_attack_coldMin = 50, BuffEffect_attack_coldMax = 75, skill_coldMin = 438, skill_coldMax = 658, }, - [25] = { BuffEffect_spell_coldMin = 53, BuffEffect_spell_coldMax = 80, BuffEffect_attack_coldMin = 53, BuffEffect_attack_coldMax = 80, skill_coldMin = 478, skill_coldMax = 717, }, - [26] = { BuffEffect_spell_coldMin = 57, BuffEffect_spell_coldMax = 85, BuffEffect_attack_coldMin = 57, BuffEffect_attack_coldMax = 85, skill_coldMin = 521, skill_coldMax = 782, }, - [27] = { BuffEffect_spell_coldMin = 61, BuffEffect_spell_coldMax = 91, BuffEffect_attack_coldMin = 61, BuffEffect_attack_coldMax = 91, skill_coldMin = 568, skill_coldMax = 852, }, - [28] = { BuffEffect_spell_coldMin = 65, BuffEffect_spell_coldMax = 98, BuffEffect_attack_coldMin = 65, BuffEffect_attack_coldMax = 98, skill_coldMin = 619, skill_coldMax = 928, }, - [29] = { BuffEffect_spell_coldMin = 69, BuffEffect_spell_coldMax = 104, BuffEffect_attack_coldMin = 69, BuffEffect_attack_coldMax = 104, skill_coldMin = 674, skill_coldMax = 1010, }, - [30] = { BuffEffect_spell_coldMin = 74, BuffEffect_spell_coldMax = 111, BuffEffect_attack_coldMin = 74, BuffEffect_attack_coldMax = 111, skill_coldMin = 733, skill_coldMax = 1100, }, - } + [1] = { 4, 5, 4, 5, 18, 26, }, + [2] = { 5, 7, 5, 7, 23, 35, }, + [3] = { 6, 8, 6, 8, 30, 45, }, + [4] = { 7, 10, 7, 10, 38, 57, }, + [5] = { 8, 12, 8, 12, 45, 67, }, + [6] = { 9, 14, 9, 14, 53, 80, }, + [7] = { 10, 16, 10, 16, 62, 94, }, + [8] = { 12, 18, 12, 18, 73, 110, }, + [9] = { 13, 20, 13, 20, 85, 128, }, + [10] = { 15, 23, 15, 23, 99, 149, }, + [11] = { 17, 26, 17, 26, 115, 173, }, + [12] = { 19, 29, 19, 29, 134, 200, }, + [13] = { 22, 33, 22, 33, 154, 232, }, + [14] = { 24, 37, 24, 37, 178, 267, }, + [15] = { 26, 39, 26, 39, 195, 293, }, + [16] = { 28, 42, 28, 42, 214, 321, }, + [17] = { 30, 46, 30, 46, 235, 352, }, + [18] = { 33, 49, 33, 49, 257, 386, }, + [19] = { 35, 53, 35, 53, 282, 422, }, + [20] = { 38, 56, 38, 56, 308, 462, }, + [21] = { 40, 61, 40, 61, 337, 505, }, + [22] = { 43, 65, 43, 65, 368, 552, }, + [23] = { 46, 70, 46, 70, 402, 603, }, + [24] = { 50, 75, 50, 75, 438, 658, }, + [25] = { 53, 80, 53, 80, 478, 717, }, + [26] = { 57, 85, 57, 85, 521, 782, }, + [27] = { 61, 91, 61, 91, 568, 852, }, + [28] = { 65, 98, 65, 98, 619, 928, }, + [29] = { 69, 104, 69, 104, 674, 1010, }, + [30] = { 74, 111, 74, 111, 733, 1100, }, + }, } gems["Ice Shot"] = { dexterity = true, + active_skill = true, attack = true, - bow = true, - aoe = true, + area = true, duration = true, cold = true, - hit = true, + bow = true, parts = { { name = "Arrow", - aoe = false, + area = false, }, { name = "Cone", - aoe = true, + area = true, }, }, - base = { - skill_durationBase = 1.5, - SkillPart1_physicalGainAscold = 40, - SkillPart2_physicalGainAscold = 100, + color = 2, + baseFlags = { + attack = true, + projectile = true, + area = true, + duration = true, + cold = true, }, - quality = { - coldInc = 1, + skillTypes = { [1] = true, [48] = true, [3] = true, [11] = true, [12] = true, [22] = true, [17] = true, [19] = true, [34] = true, }, + baseMods = { + skill("castTime", 1), + skill("PhysicalDamageConvertToCold", 40), --"skill_physical_damage_%_to_convert_to_cold" = 40 + skill("duration", 1.5), --"base_skill_effect_duration" = 1500 + --"skill_can_fire_arrows" = ? + skill("PhysicalDamageConvertToCold", 100, { type = "SkillPart", skillPart = 2 }), + }, + qualityMods = { + mod("ColdDamage", "INC", 1), --"cold_damage_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { skill_manaCostBase = 6, attack_damageMore = 1.2, }, - [2] = { skill_manaCostBase = 6, attack_damageMore = 1.214, }, - [3] = { skill_manaCostBase = 6, attack_damageMore = 1.228, }, - [4] = { skill_manaCostBase = 7, attack_damageMore = 1.242, }, - [5] = { skill_manaCostBase = 7, attack_damageMore = 1.256, }, - [6] = { skill_manaCostBase = 7, attack_damageMore = 1.27, }, - [7] = { skill_manaCostBase = 7, attack_damageMore = 1.284, }, - [8] = { skill_manaCostBase = 8, attack_damageMore = 1.298, }, - [9] = { skill_manaCostBase = 8, attack_damageMore = 1.312, }, - [10] = { skill_manaCostBase = 8, attack_damageMore = 1.326, }, - [11] = { skill_manaCostBase = 8, attack_damageMore = 1.34, }, - [12] = { skill_manaCostBase = 8, attack_damageMore = 1.354, }, - [13] = { skill_manaCostBase = 9, attack_damageMore = 1.368, }, - [14] = { skill_manaCostBase = 9, attack_damageMore = 1.382, }, - [15] = { skill_manaCostBase = 9, attack_damageMore = 1.396, }, - [16] = { skill_manaCostBase = 9, attack_damageMore = 1.41, }, - [17] = { skill_manaCostBase = 9, attack_damageMore = 1.424, }, - [18] = { skill_manaCostBase = 10, attack_damageMore = 1.438, }, - [19] = { skill_manaCostBase = 10, attack_damageMore = 1.452, }, - [20] = { skill_manaCostBase = 10, attack_damageMore = 1.466, }, - [21] = { skill_manaCostBase = 10, attack_damageMore = 1.48, }, - [22] = { skill_manaCostBase = 10, attack_damageMore = 1.494, }, - [23] = { skill_manaCostBase = 11, attack_damageMore = 1.508, }, - [24] = { skill_manaCostBase = 11, attack_damageMore = 1.522, }, - [25] = { skill_manaCostBase = 11, attack_damageMore = 1.536, }, - [26] = { skill_manaCostBase = 11, attack_damageMore = 1.55, }, - [27] = { skill_manaCostBase = 11, attack_damageMore = 1.564, }, - [28] = { skill_manaCostBase = 12, attack_damageMore = 1.578, }, - [29] = { skill_manaCostBase = 12, attack_damageMore = 1.592, }, - [30] = { skill_manaCostBase = 12, attack_damageMore = 1.606, }, - } + [1] = { 6, 20, }, + [2] = { 6, 21.4, }, + [3] = { 6, 22.8, }, + [4] = { 7, 24.2, }, + [5] = { 7, 25.6, }, + [6] = { 7, 27, }, + [7] = { 7, 28.4, }, + [8] = { 8, 29.8, }, + [9] = { 8, 31.2, }, + [10] = { 8, 32.6, }, + [11] = { 8, 34, }, + [12] = { 8, 35.4, }, + [13] = { 9, 36.8, }, + [14] = { 9, 38.2, }, + [15] = { 9, 39.6, }, + [16] = { 9, 41, }, + [17] = { 9, 42.4, }, + [18] = { 10, 43.8, }, + [19] = { 10, 45.2, }, + [20] = { 10, 46.6, }, + [21] = { 10, 48, }, + [22] = { 10, 49.4, }, + [23] = { 11, 50.8, }, + [24] = { 11, 52.2, }, + [25] = { 11, 53.6, }, + [26] = { 11, 55, }, + [27] = { 11, 56.4, }, + [28] = { 12, 57.8, }, + [29] = { 12, 59.2, }, + [30] = { 12, 60.6, }, + }, } gems["Ice Trap"] = { - dexterity = true, - spell = true, trap = true, - aoe = true, + dexterity = true, + active_skill = true, + spell = true, + area = true, cold = true, - hit = true, - showAverage = true, - base = { - skill_castTime = 1, - skill_damageEffectiveness = 1.1, - skill_critChanceBase = 5, - skill_trapCooldown = 2, + duration = true, + color = 2, + baseFlags = { + spell = true, + trap = true, + area = true, + cold = true, }, - quality = { - aoeRadiusInc = 0.5, + skillTypes = { [2] = true, [10] = true, [19] = true, [11] = true, [37] = true, [34] = true, [12] = true, }, + baseMods = { + skill("castTime", 1), + skill("damageEffectiveness", 1.1), + skill("critChance", 5), + --"base_trap_duration" = 16000 + --"is_area_damage" = ? + --"base_skill_is_trapped" = ? + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + --"is_trap" = ? + skill("trapCooldown", 2), + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("ColdMin", nil), --"spell_minimum_base_cold_damage" + [3] = skill("ColdMax", nil), --"spell_maximum_base_cold_damage" }, levels = { - [1] = { skill_manaCostBase = 13, skill_coldMin = 60, skill_coldMax = 90, }, - [2] = { skill_manaCostBase = 14, skill_coldMin = 72, skill_coldMax = 108, }, - [3] = { skill_manaCostBase = 15, skill_coldMin = 85, skill_coldMax = 128, }, - [4] = { skill_manaCostBase = 15, skill_coldMin = 101, skill_coldMax = 151, }, - [5] = { skill_manaCostBase = 16, skill_coldMin = 119, skill_coldMax = 178, }, - [6] = { skill_manaCostBase = 17, skill_coldMin = 132, skill_coldMax = 198, }, - [7] = { skill_manaCostBase = 17, skill_coldMin = 147, skill_coldMax = 220, }, - [8] = { skill_manaCostBase = 18, skill_coldMin = 163, skill_coldMax = 244, }, - [9] = { skill_manaCostBase = 19, skill_coldMin = 180, skill_coldMax = 270, }, - [10] = { skill_manaCostBase = 19, skill_coldMin = 199, skill_coldMax = 299, }, - [11] = { skill_manaCostBase = 20, skill_coldMin = 220, skill_coldMax = 330, }, - [12] = { skill_manaCostBase = 20, skill_coldMin = 243, skill_coldMax = 364, }, - [13] = { skill_manaCostBase = 21, skill_coldMin = 268, skill_coldMax = 402, }, - [14] = { skill_manaCostBase = 21, skill_coldMin = 295, skill_coldMax = 442, }, - [15] = { skill_manaCostBase = 22, skill_coldMin = 325, skill_coldMax = 487, }, - [16] = { skill_manaCostBase = 23, skill_coldMin = 357, skill_coldMax = 536, }, - [17] = { skill_manaCostBase = 23, skill_coldMin = 392, skill_coldMax = 589, }, - [18] = { skill_manaCostBase = 24, skill_coldMin = 431, skill_coldMax = 646, }, - [19] = { skill_manaCostBase = 24, skill_coldMin = 473, skill_coldMax = 709, }, - [20] = { skill_manaCostBase = 25, skill_coldMin = 519, skill_coldMax = 778, }, - [21] = { skill_manaCostBase = 26, skill_coldMin = 568, skill_coldMax = 853, }, - [22] = { skill_manaCostBase = 26, skill_coldMin = 623, skill_coldMax = 934, }, - [23] = { skill_manaCostBase = 27, skill_coldMin = 681, skill_coldMax = 1022, }, - [24] = { skill_manaCostBase = 27, skill_coldMin = 746, skill_coldMax = 1118, }, - [25] = { skill_manaCostBase = 28, skill_coldMin = 815, skill_coldMax = 1223, }, - [26] = { skill_manaCostBase = 28, skill_coldMin = 891, skill_coldMax = 1337, }, - [27] = { skill_manaCostBase = 29, skill_coldMin = 973, skill_coldMax = 1460, }, - [28] = { skill_manaCostBase = 30, skill_coldMin = 1063, skill_coldMax = 1595, }, - [29] = { skill_manaCostBase = 30, skill_coldMin = 1160, skill_coldMax = 1740, }, - [30] = { skill_manaCostBase = 31, skill_coldMin = 1266, skill_coldMax = 1899, }, - } + [1] = { 13, 60, 90, }, + [2] = { 14, 72, 108, }, + [3] = { 15, 85, 128, }, + [4] = { 15, 101, 151, }, + [5] = { 16, 119, 178, }, + [6] = { 17, 132, 198, }, + [7] = { 17, 147, 220, }, + [8] = { 18, 163, 244, }, + [9] = { 19, 180, 270, }, + [10] = { 19, 199, 299, }, + [11] = { 20, 220, 330, }, + [12] = { 20, 243, 364, }, + [13] = { 21, 268, 402, }, + [14] = { 21, 295, 442, }, + [15] = { 22, 325, 487, }, + [16] = { 23, 357, 536, }, + [17] = { 23, 392, 589, }, + [18] = { 24, 431, 646, }, + [19] = { 24, 473, 709, }, + [20] = { 25, 519, 778, }, + [21] = { 26, 568, 853, }, + [22] = { 26, 623, 934, }, + [23] = { 27, 681, 1022, }, + [24] = { 27, 746, 1118, }, + [25] = { 28, 815, 1223, }, + [26] = { 28, 891, 1337, }, + [27] = { 29, 973, 1460, }, + [28] = { 30, 1063, 1595, }, + [29] = { 30, 1160, 1740, }, + [30] = { 31, 1266, 1899, }, + }, } gems["Lacerate"] = { dexterity = true, + active_skill = true, attack = true, + area = true, melee = true, - aoe = true, - hit = true, - base = { - skill_manaCostBase = 8, - attackSpeedMore = 0.75, + color = 2, + baseFlags = { + attack = true, + melee = true, + area = true, }, - quality = { - aoeRadiusInc = 0.5, + skillTypes = { [1] = true, [6] = true, [11] = true, [28] = true, [24] = true, }, + baseMods = { + skill("castTime", 1), + skill("manaCost", 8), + mod("Speed", "MORE", -25, ModFlag.Attack), --"active_skill_attack_speed_+%_final" = -25 + --"is_area_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), + [2] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" }, levels = { - [1] = { attack_damageMore = 0.95, aoeRadiusInc = 0, }, - [2] = { attack_damageMore = 0.962, aoeRadiusInc = 1, }, - [3] = { attack_damageMore = 0.974, aoeRadiusInc = 2, }, - [4] = { attack_damageMore = 0.986, aoeRadiusInc = 3, }, - [5] = { attack_damageMore = 0.998, aoeRadiusInc = 4, }, - [6] = { attack_damageMore = 1.01, aoeRadiusInc = 5, }, - [7] = { attack_damageMore = 1.022, aoeRadiusInc = 6, }, - [8] = { attack_damageMore = 1.034, aoeRadiusInc = 7, }, - [9] = { attack_damageMore = 1.046, aoeRadiusInc = 8, }, - [10] = { attack_damageMore = 1.058, aoeRadiusInc = 9, }, - [11] = { attack_damageMore = 1.07, aoeRadiusInc = 10, }, - [12] = { attack_damageMore = 1.082, aoeRadiusInc = 11, }, - [13] = { attack_damageMore = 1.094, aoeRadiusInc = 12, }, - [14] = { attack_damageMore = 1.106, aoeRadiusInc = 13, }, - [15] = { attack_damageMore = 1.118, aoeRadiusInc = 14, }, - [16] = { attack_damageMore = 1.13, aoeRadiusInc = 15, }, - [17] = { attack_damageMore = 1.142, aoeRadiusInc = 16, }, - [18] = { attack_damageMore = 1.154, aoeRadiusInc = 17, }, - [19] = { attack_damageMore = 1.166, aoeRadiusInc = 18, }, - [20] = { attack_damageMore = 1.178, aoeRadiusInc = 19, }, - [21] = { attack_damageMore = 1.19, aoeRadiusInc = 20, }, - [22] = { attack_damageMore = 1.202, aoeRadiusInc = 21, }, - [23] = { attack_damageMore = 1.214, aoeRadiusInc = 22, }, - [24] = { attack_damageMore = 1.226, aoeRadiusInc = 23, }, - [25] = { attack_damageMore = 1.238, aoeRadiusInc = 24, }, - [26] = { attack_damageMore = 1.25, aoeRadiusInc = 25, }, - [27] = { attack_damageMore = 1.262, aoeRadiusInc = 26, }, - [28] = { attack_damageMore = 1.274, aoeRadiusInc = 27, }, - [29] = { attack_damageMore = 1.286, aoeRadiusInc = 28, }, - [30] = { attack_damageMore = 1.298, aoeRadiusInc = 29, }, - } + [1] = { -5, 0, }, + [2] = { -3.8, 1, }, + [3] = { -2.6, 2, }, + [4] = { -1.4, 3, }, + [5] = { -0.2, 4, }, + [6] = { 1, 5, }, + [7] = { 2.2, 6, }, + [8] = { 3.4, 7, }, + [9] = { 4.6, 8, }, + [10] = { 5.8, 9, }, + [11] = { 7, 10, }, + [12] = { 8.2, 11, }, + [13] = { 9.4, 12, }, + [14] = { 10.6, 13, }, + [15] = { 11.8, 14, }, + [16] = { 13, 15, }, + [17] = { 14.2, 16, }, + [18] = { 15.4, 17, }, + [19] = { 16.6, 18, }, + [20] = { 17.8, 19, }, + [21] = { 19, 20, }, + [22] = { 20.2, 21, }, + [23] = { 21.4, 22, }, + [24] = { 22.6, 23, }, + [25] = { 23.8, 24, }, + [26] = { 25, 25, }, + [27] = { 26.2, 26, }, + [28] = { 27.4, 27, }, + [29] = { 28.6, 28, }, + [30] = { 29.8, 29, }, + }, } gems["Lightning Arrow"] = { dexterity = true, + active_skill = true, attack = true, - bow = true, - aoe = true, + area = true, lightning = true, - hit = true, - parts = { - { - aoe = false, - }, + bow = true, + color = 2, + baseFlags = { + attack = true, + projectile = true, + lightning = true, }, - base = { - skill_physicalConvertTolightning = 50, + skillTypes = { [1] = true, [48] = true, [11] = true, [3] = true, [22] = true, [17] = true, [19] = true, [35] = true, }, + baseMods = { + skill("castTime", 1), + skill("PhysicalDamageConvertToLightning", 50), --"skill_physical_damage_%_to_convert_to_lightning" = 50 + --"lightning_arrow_maximum_number_of_extra_targets" = 3 + --"skill_can_fire_arrows" = ? }, - quality = { - shockChance = 0.5, + qualityMods = { + mod("EnemyShockChance", "BASE", 0.5), --"base_chance_to_shock_%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { skill_manaCostBase = 7, attack_damageMore = 1, }, - [2] = { skill_manaCostBase = 7, attack_damageMore = 1.01, }, - [3] = { skill_manaCostBase = 7, attack_damageMore = 1.02, }, - [4] = { skill_manaCostBase = 8, attack_damageMore = 1.03, }, - [5] = { skill_manaCostBase = 8, attack_damageMore = 1.04, }, - [6] = { skill_manaCostBase = 8, attack_damageMore = 1.05, }, - [7] = { skill_manaCostBase = 8, attack_damageMore = 1.06, }, - [8] = { skill_manaCostBase = 8, attack_damageMore = 1.07, }, - [9] = { skill_manaCostBase = 9, attack_damageMore = 1.08, }, - [10] = { skill_manaCostBase = 9, attack_damageMore = 1.09, }, - [11] = { skill_manaCostBase = 9, attack_damageMore = 1.1, }, - [12] = { skill_manaCostBase = 9, attack_damageMore = 1.11, }, - [13] = { skill_manaCostBase = 9, attack_damageMore = 1.12, }, - [14] = { skill_manaCostBase = 10, attack_damageMore = 1.13, }, - [15] = { skill_manaCostBase = 10, attack_damageMore = 1.14, }, - [16] = { skill_manaCostBase = 10, attack_damageMore = 1.15, }, - [17] = { skill_manaCostBase = 10, attack_damageMore = 1.16, }, - [18] = { skill_manaCostBase = 10, attack_damageMore = 1.17, }, - [19] = { skill_manaCostBase = 11, attack_damageMore = 1.18, }, - [20] = { skill_manaCostBase = 11, attack_damageMore = 1.19, }, - [21] = { skill_manaCostBase = 11, attack_damageMore = 1.2, }, - [22] = { skill_manaCostBase = 11, attack_damageMore = 1.21, }, - [23] = { skill_manaCostBase = 11, attack_damageMore = 1.22, }, - [24] = { skill_manaCostBase = 11, attack_damageMore = 1.23, }, - [25] = { skill_manaCostBase = 11, attack_damageMore = 1.24, }, - [26] = { skill_manaCostBase = 12, attack_damageMore = 1.25, }, - [27] = { skill_manaCostBase = 12, attack_damageMore = 1.26, }, - [28] = { skill_manaCostBase = 12, attack_damageMore = 1.27, }, - [29] = { skill_manaCostBase = 12, attack_damageMore = 1.28, }, - [30] = { skill_manaCostBase = 12, attack_damageMore = 1.29, }, - } + [1] = { 7, nil, }, + [2] = { 7, 1, }, + [3] = { 7, 2, }, + [4] = { 8, 3, }, + [5] = { 8, 4, }, + [6] = { 8, 5, }, + [7] = { 8, 6, }, + [8] = { 8, 7, }, + [9] = { 9, 8, }, + [10] = { 9, 9, }, + [11] = { 9, 10, }, + [12] = { 9, 11, }, + [13] = { 9, 12, }, + [14] = { 10, 13, }, + [15] = { 10, 14, }, + [16] = { 10, 15, }, + [17] = { 10, 16, }, + [18] = { 10, 17, }, + [19] = { 11, 18, }, + [20] = { 11, 19, }, + [21] = { 11, 20, }, + [22] = { 11, 21, }, + [23] = { 11, 22, }, + [24] = { 11, 23, }, + [25] = { 11, 24, }, + [26] = { 12, 25, }, + [27] = { 12, 26, }, + [28] = { 12, 27, }, + [29] = { 12, 28, }, + [30] = { 12, 29, }, + }, } gems["Lightning Strike"] = { + projectile = true, dexterity = true, + active_skill = true, attack = true, melee = true, - projectile = true, lightning = true, - hit = true, parts = { { name = "Melee hit", @@ -1402,988 +2184,1568 @@ gems["Lightning Strike"] = { projectile = true, }, }, - base = { - skill_manaCostBase = 6, - skill_physicalConvertTolightning = 50, - projectile_damageMore = 0.75, + color = 2, + baseFlags = { + attack = true, + melee = true, + projectile = true, + lightning = true, }, - quality = { - pierceChance = 2, + skillTypes = { [1] = true, [48] = true, [3] = true, [6] = true, [25] = true, [28] = true, [24] = true, [35] = true, }, + baseMods = { + skill("castTime", 1), + skill("manaCost", 6), + skill("PhysicalDamageConvertToLightning", 50), --"skill_physical_damage_%_to_convert_to_lightning" = 50 + mod("Damage", "MORE", -25, ModFlag.Projectile), --"active_skill_projectile_damage_+%_final" = -25 + --"total_projectile_spread_angle_override" = 70 + --"show_number_of_projectiles" = ? + }, + qualityMods = { + mod("PierceChance", "BASE", 2), --"pierce_%" = 2 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), + [2] = mod("ProjectileCount", "BASE", nil), --"number_of_additional_projectiles" }, levels = { - [1] = { attack_damageMore = 1.3, projectileCoumt = 4, }, - [2] = { attack_damageMore = 1.324, projectileCoumt = 4, }, - [3] = { attack_damageMore = 1.348, projectileCoumt = 4, }, - [4] = { attack_damageMore = 1.372, projectileCoumt = 4, }, - [5] = { attack_damageMore = 1.396, projectileCoumt = 4, }, - [6] = { attack_damageMore = 1.42, projectileCoumt = 5, }, - [7] = { attack_damageMore = 1.444, projectileCoumt = 5, }, - [8] = { attack_damageMore = 1.468, projectileCoumt = 5, }, - [9] = { attack_damageMore = 1.492, projectileCoumt = 5, }, - [10] = { attack_damageMore = 1.516, projectileCoumt = 5, }, - [11] = { attack_damageMore = 1.54, projectileCoumt = 6, }, - [12] = { attack_damageMore = 1.564, projectileCoumt = 6, }, - [13] = { attack_damageMore = 1.588, projectileCoumt = 6, }, - [14] = { attack_damageMore = 1.612, projectileCoumt = 6, }, - [15] = { attack_damageMore = 1.636, projectileCoumt = 6, }, - [16] = { attack_damageMore = 1.66, projectileCoumt = 7, }, - [17] = { attack_damageMore = 1.684, projectileCoumt = 7, }, - [18] = { attack_damageMore = 1.708, projectileCoumt = 7, }, - [19] = { attack_damageMore = 1.732, projectileCoumt = 7, }, - [20] = { attack_damageMore = 1.756, projectileCoumt = 7, }, - [21] = { attack_damageMore = 1.78, projectileCoumt = 8, }, - [22] = { attack_damageMore = 1.804, projectileCoumt = 8, }, - [23] = { attack_damageMore = 1.828, projectileCoumt = 8, }, - [24] = { attack_damageMore = 1.852, projectileCoumt = 8, }, - [25] = { attack_damageMore = 1.876, projectileCoumt = 8, }, - [26] = { attack_damageMore = 1.9, projectileCoumt = 9, }, - [27] = { attack_damageMore = 1.924, projectileCoumt = 9, }, - [28] = { attack_damageMore = 1.948, projectileCoumt = 9, }, - [29] = { attack_damageMore = 1.972, projectileCoumt = 9, }, - [30] = { attack_damageMore = 1.996, projectileCoumt = 9, }, - } + [1] = { 30, 4, }, + [2] = { 32.4, 4, }, + [3] = { 34.8, 4, }, + [4] = { 37.2, 4, }, + [5] = { 39.6, 4, }, + [6] = { 42, 5, }, + [7] = { 44.4, 5, }, + [8] = { 46.8, 5, }, + [9] = { 49.2, 5, }, + [10] = { 51.6, 5, }, + [11] = { 54, 6, }, + [12] = { 56.4, 6, }, + [13] = { 58.8, 6, }, + [14] = { 61.2, 6, }, + [15] = { 63.6, 6, }, + [16] = { 66, 7, }, + [17] = { 68.4, 7, }, + [18] = { 70.8, 7, }, + [19] = { 73.2, 7, }, + [20] = { 75.6, 7, }, + [21] = { 78, 8, }, + [22] = { 80.4, 8, }, + [23] = { 82.8, 8, }, + [24] = { 85.2, 8, }, + [25] = { 87.6, 8, }, + [26] = { 90, 9, }, + [27] = { 92.4, 9, }, + [28] = { 94.8, 9, }, + [29] = { 97.2, 9, }, + [30] = { 99.6, 9, }, + }, +} +gems["Vaal Lightning Strike"] = { + dexterity = true, + active_skill = true, + vaal = true, + attack = true, + melee = true, + duration = true, + lightning = true, + parts = { + { + name = "Strike", + }, + { + name = "Beams", + }, + }, + color = 2, + baseFlags = { + attack = true, + melee = true, + duration = true, + lightning = true, + vaal = true, + }, + skillTypes = { [1] = true, [6] = true, [25] = true, [28] = true, [24] = true, [12] = true, [43] = true, [35] = true, }, + baseMods = { + skill("castTime", 1), + skill("PhysicalDamageConvertToLightning", 50), --"skill_physical_damage_%_to_convert_to_lightning" = 50 + mod("Damage", "MORE", -50, 0, 0, { type = "SkillPart", skillPart = 2 }), --"vaal_lightning_strike_beam_damage_+%_final" = -50 + skill("cannotBeEvaded", true), --"global_always_hit" = ? + }, + qualityMods = { + mod("Duration", "INC", 1), --"skill_effect_duration_+%" = 1 + }, + levelMods = { + [1] = skill("duration", nil), --"base_skill_effect_duration" + [2] = mod("Damage", "MORE", nil, ModFlag.Attack), + }, + levels = { + [1] = { 5, nil, }, + [2] = { 5.2, 1.2, }, + [3] = { 5.4, 2.4, }, + [4] = { 5.6, 3.6, }, + [5] = { 5.8, 4.8, }, + [6] = { 6, 6, }, + [7] = { 6.2, 7.2, }, + [8] = { 6.4, 8.4, }, + [9] = { 6.6, 9.6, }, + [10] = { 6.8, 10.8, }, + [11] = { 7, 12, }, + [12] = { 7.2, 13.2, }, + [13] = { 7.4, 14.4, }, + [14] = { 7.6, 15.6, }, + [15] = { 7.8, 16.8, }, + [16] = { 8, 18, }, + [17] = { 8.2, 19.2, }, + [18] = { 8.4, 20.4, }, + [19] = { 8.6, 21.6, }, + [20] = { 8.8, 22.8, }, + [21] = { 9, 24, }, + [22] = { 9.2, 25.2, }, + [23] = { 9.4, 26.4, }, + [24] = { 9.6, 27.6, }, + [25] = { 9.8, 28.8, }, + [26] = { 10, 30, }, + [27] = { 10.2, 31.2, }, + [28] = { 10.4, 32.4, }, + [29] = { 10.6, 33.6, }, + [30] = { 10.8, 34.8, }, + }, } gems["Mirror Arrow"] = { dexterity = true, + active_skill = true, + attack = true, + minion = true, + duration = true, + bow = true, unsupported = true, } gems["Phase Run"] = { dexterity = true, + active_skill = true, spell = true, duration = true, movement = true, - hit = true, - base = { - skill_castTime = 0.5, - skill_durationBase = 1.8, - PerFrenzy_durationInc = 100, + color = 2, + baseFlags = { + spell = true, + duration = true, + movement = true, }, - quality = { - BuffEffect_movementSpeedInc = 0.5, + skillTypes = { [2] = true, [5] = true, [12] = true, [36] = true, [38] = true, }, + baseMods = { + skill("castTime", 0.5), + --"enemy_aggro_radius_+%" = -80 + skill("duration", 1.8), --"base_skill_effect_duration" = 1800 + --"base_secondary_skill_effect_duration" = 200 + mod("Duration", "INC", 100, 0, 0, { type = "Multiplier", var = "FrenzyCharge" }), --"skill_effect_duration_+%_per_frenzy_charge" = 100 + --"phase_through_objects" = ? + }, + qualityMods = { + mod("MovementSpeed", "INC", 0.5, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"base_movement_velocity_+%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = mod("MovementSpeed", "INC", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"base_movement_velocity_+%" + [3] = mod("PhysicalDamage", "MORE", nil, ModFlag.Melee, 0, { type = "GlobalEffect", effectType = "Buff" }), --"phase_run_melee_physical_damage_+%_final" }, levels = { - [1] = { skill_manaCostBase = 11, BuffEffect_movementSpeedInc = 30, }, - [2] = { skill_manaCostBase = 11, BuffEffect_movementSpeedInc = 30, }, - [3] = { skill_manaCostBase = 11, BuffEffect_movementSpeedInc = 31, }, - [4] = { skill_manaCostBase = 11, BuffEffect_movementSpeedInc = 31, }, - [5] = { skill_manaCostBase = 11, BuffEffect_movementSpeedInc = 32, }, - [6] = { skill_manaCostBase = 12, BuffEffect_movementSpeedInc = 32, }, - [7] = { skill_manaCostBase = 12, BuffEffect_movementSpeedInc = 33, }, - [8] = { skill_manaCostBase = 12, BuffEffect_movementSpeedInc = 33, }, - [9] = { skill_manaCostBase = 12, BuffEffect_movementSpeedInc = 34, }, - [10] = { skill_manaCostBase = 12, BuffEffect_movementSpeedInc = 34, }, - [11] = { skill_manaCostBase = 12, BuffEffect_movementSpeedInc = 35, }, - [12] = { skill_manaCostBase = 12, BuffEffect_movementSpeedInc = 35, }, - [13] = { skill_manaCostBase = 13, BuffEffect_movementSpeedInc = 36, }, - [14] = { skill_manaCostBase = 13, BuffEffect_movementSpeedInc = 36, }, - [15] = { skill_manaCostBase = 13, BuffEffect_movementSpeedInc = 37, }, - [16] = { skill_manaCostBase = 13, BuffEffect_movementSpeedInc = 37, }, - [17] = { skill_manaCostBase = 13, BuffEffect_movementSpeedInc = 38, }, - [18] = { skill_manaCostBase = 13, BuffEffect_movementSpeedInc = 38, }, - [19] = { skill_manaCostBase = 14, BuffEffect_movementSpeedInc = 39, }, - [20] = { skill_manaCostBase = 14, BuffEffect_movementSpeedInc = 39, }, - [21] = { skill_manaCostBase = 14, BuffEffect_movementSpeedInc = 40, }, - [22] = { skill_manaCostBase = 14, BuffEffect_movementSpeedInc = 40, }, - [23] = { skill_manaCostBase = 14, BuffEffect_movementSpeedInc = 41, }, - [24] = { skill_manaCostBase = 14, BuffEffect_movementSpeedInc = 41, }, - [25] = { skill_manaCostBase = 14, BuffEffect_movementSpeedInc = 42, }, - [26] = { skill_manaCostBase = 14, BuffEffect_movementSpeedInc = 42, }, - [27] = { skill_manaCostBase = 14, BuffEffect_movementSpeedInc = 43, }, - [28] = { skill_manaCostBase = 14, BuffEffect_movementSpeedInc = 43, }, - [29] = { skill_manaCostBase = 14, BuffEffect_movementSpeedInc = 44, }, - [30] = { skill_manaCostBase = 14, BuffEffect_movementSpeedInc = 44, }, - } + [1] = { 11, 30, 20, }, + [2] = { 11, 30, 21, }, + [3] = { 11, 31, 21, }, + [4] = { 11, 31, 22, }, + [5] = { 11, 32, 22, }, + [6] = { 12, 32, 23, }, + [7] = { 12, 33, 23, }, + [8] = { 12, 33, 24, }, + [9] = { 12, 34, 24, }, + [10] = { 12, 34, 25, }, + [11] = { 12, 35, 25, }, + [12] = { 12, 35, 26, }, + [13] = { 13, 36, 26, }, + [14] = { 13, 36, 27, }, + [15] = { 13, 37, 27, }, + [16] = { 13, 37, 28, }, + [17] = { 13, 38, 28, }, + [18] = { 13, 38, 29, }, + [19] = { 14, 39, 29, }, + [20] = { 14, 39, 30, }, + [21] = { 14, 40, 30, }, + [22] = { 14, 40, 31, }, + [23] = { 14, 41, 31, }, + [24] = { 14, 41, 32, }, + [25] = { 14, 42, 32, }, + [26] = { 14, 42, 33, }, + [27] = { 14, 43, 33, }, + [28] = { 14, 43, 34, }, + [29] = { 14, 44, 34, }, + [30] = { 14, 44, 35, }, + }, } gems["Poacher's Mark"] = { - dexterity = true, curse = true, + dexterity = true, + active_skill = true, spell = true, - aoe = true, + area = true, duration = true, - debuff = true, - base = { - skill_castTime = 0.5, + color = 2, + baseFlags = { + spell = true, + curse = true, + area = true, + duration = true, }, - quality = { + skillTypes = { [2] = true, [11] = true, [12] = true, [17] = true, [18] = true, [19] = true, [26] = true, [32] = true, [36] = true, }, + baseMods = { + skill("castTime", 0.5), + --"monster_slain_flask_charges_granted_+%" = 100 + --"base_deal_no_damage" = ? + skill("debuff", true), + }, + qualityMods = { + --"chance_to_grant_frenzy_charge_on_death_%" = 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("Evasion", "MORE", nil, 0, 0, { type = "GlobalEffect", effectType = "Curse"}), --"evasion_rating_+%_final_from_poachers_mark" + [5] = mod("LifeOnHit", "BASE", nil, ModFlag.Attack, 0, { type = "GlobalEffect", effectType = "Curse" }), --"life_granted_when_hit_by_attacks" + [6] = mod("ManaOnHit", "BASE", nil, ModFlag.Attack, 0, { type = "GlobalEffect", effectType = "Curse" }), --"mana_granted_when_hit_by_attacks" + --[7] = "chance_to_grant_frenzy_charge_on_death_%" }, levels = { - [1] = { skill_manaCostBase = 24, skill_durationBase = 6, curse_aoeRadiusInc = 0, CurseEffect_effective_evasionMore = 0.7, CurseEffect_attack_lifeOnHit = 5, CurseEffect_attack_manaOnHit = 5, }, - [2] = { skill_manaCostBase = 26, skill_durationBase = 6.2, curse_aoeRadiusInc = 2, CurseEffect_effective_evasionMore = 0.69, CurseEffect_attack_lifeOnHit = 6, CurseEffect_attack_manaOnHit = 6, }, - [3] = { skill_manaCostBase = 27, skill_durationBase = 6.4, curse_aoeRadiusInc = 4, CurseEffect_effective_evasionMore = 0.68, CurseEffect_attack_lifeOnHit = 7, CurseEffect_attack_manaOnHit = 6, }, - [4] = { skill_manaCostBase = 29, skill_durationBase = 6.6, curse_aoeRadiusInc = 6, CurseEffect_effective_evasionMore = 0.67, CurseEffect_attack_lifeOnHit = 8, CurseEffect_attack_manaOnHit = 6, }, - [5] = { skill_manaCostBase = 30, skill_durationBase = 6.8, curse_aoeRadiusInc = 8, CurseEffect_effective_evasionMore = 0.66, CurseEffect_attack_lifeOnHit = 9, CurseEffect_attack_manaOnHit = 7, }, - [6] = { skill_manaCostBase = 32, skill_durationBase = 7, curse_aoeRadiusInc = 10, CurseEffect_effective_evasionMore = 0.65, CurseEffect_attack_lifeOnHit = 10, CurseEffect_attack_manaOnHit = 7, }, - [7] = { skill_manaCostBase = 34, skill_durationBase = 7.2, curse_aoeRadiusInc = 12, CurseEffect_effective_evasionMore = 0.64, CurseEffect_attack_lifeOnHit = 11, CurseEffect_attack_manaOnHit = 7, }, - [8] = { skill_manaCostBase = 35, skill_durationBase = 7.4, curse_aoeRadiusInc = 14, CurseEffect_effective_evasionMore = 0.63, CurseEffect_attack_lifeOnHit = 12, CurseEffect_attack_manaOnHit = 8, }, - [9] = { skill_manaCostBase = 37, skill_durationBase = 7.6, curse_aoeRadiusInc = 16, CurseEffect_effective_evasionMore = 0.62, CurseEffect_attack_lifeOnHit = 13, CurseEffect_attack_manaOnHit = 8, }, - [10] = { skill_manaCostBase = 38, skill_durationBase = 7.8, curse_aoeRadiusInc = 18, CurseEffect_effective_evasionMore = 0.61, CurseEffect_attack_lifeOnHit = 14, CurseEffect_attack_manaOnHit = 8, }, - [11] = { skill_manaCostBase = 39, skill_durationBase = 8, curse_aoeRadiusInc = 20, CurseEffect_effective_evasionMore = 0.6, CurseEffect_attack_lifeOnHit = 15, CurseEffect_attack_manaOnHit = 9, }, - [12] = { skill_manaCostBase = 40, skill_durationBase = 8.2, curse_aoeRadiusInc = 22, CurseEffect_effective_evasionMore = 0.59, CurseEffect_attack_lifeOnHit = 16, CurseEffect_attack_manaOnHit = 9, }, - [13] = { skill_manaCostBase = 42, skill_durationBase = 8.4, curse_aoeRadiusInc = 24, CurseEffect_effective_evasionMore = 0.58, CurseEffect_attack_lifeOnHit = 17, CurseEffect_attack_manaOnHit = 9, }, - [14] = { skill_manaCostBase = 43, skill_durationBase = 8.6, curse_aoeRadiusInc = 26, CurseEffect_effective_evasionMore = 0.57, CurseEffect_attack_lifeOnHit = 18, CurseEffect_attack_manaOnHit = 10, }, - [15] = { skill_manaCostBase = 44, skill_durationBase = 8.8, curse_aoeRadiusInc = 28, CurseEffect_effective_evasionMore = 0.56, CurseEffect_attack_lifeOnHit = 19, CurseEffect_attack_manaOnHit = 10, }, - [16] = { skill_manaCostBase = 45, skill_durationBase = 9, curse_aoeRadiusInc = 30, CurseEffect_effective_evasionMore = 0.55, CurseEffect_attack_lifeOnHit = 20, CurseEffect_attack_manaOnHit = 10, }, - [17] = { skill_manaCostBase = 46, skill_durationBase = 9.2, curse_aoeRadiusInc = 32, CurseEffect_effective_evasionMore = 0.54, CurseEffect_attack_lifeOnHit = 21, CurseEffect_attack_manaOnHit = 11, }, - [18] = { skill_manaCostBase = 47, skill_durationBase = 9.4, curse_aoeRadiusInc = 34, CurseEffect_effective_evasionMore = 0.53, CurseEffect_attack_lifeOnHit = 22, CurseEffect_attack_manaOnHit = 11, }, - [19] = { skill_manaCostBase = 48, skill_durationBase = 9.6, curse_aoeRadiusInc = 36, CurseEffect_effective_evasionMore = 0.52, CurseEffect_attack_lifeOnHit = 23, CurseEffect_attack_manaOnHit = 11, }, - [20] = { skill_manaCostBase = 50, skill_durationBase = 9.8, curse_aoeRadiusInc = 38, CurseEffect_effective_evasionMore = 0.51, CurseEffect_attack_lifeOnHit = 24, CurseEffect_attack_manaOnHit = 12, }, - [21] = { skill_manaCostBase = 51, skill_durationBase = 10, curse_aoeRadiusInc = 40, CurseEffect_effective_evasionMore = 0.5, CurseEffect_attack_lifeOnHit = 25, CurseEffect_attack_manaOnHit = 12, }, - [22] = { skill_manaCostBase = 52, skill_durationBase = 10.2, curse_aoeRadiusInc = 42, CurseEffect_effective_evasionMore = 0.49, CurseEffect_attack_lifeOnHit = 26, CurseEffect_attack_manaOnHit = 12, }, - [23] = { skill_manaCostBase = 53, skill_durationBase = 10.4, curse_aoeRadiusInc = 44, CurseEffect_effective_evasionMore = 0.48, CurseEffect_attack_lifeOnHit = 27, CurseEffect_attack_manaOnHit = 13, }, - [24] = { skill_manaCostBase = 54, skill_durationBase = 10.6, curse_aoeRadiusInc = 46, CurseEffect_effective_evasionMore = 0.47, CurseEffect_attack_lifeOnHit = 28, CurseEffect_attack_manaOnHit = 13, }, - [25] = { skill_manaCostBase = 56, skill_durationBase = 10.8, curse_aoeRadiusInc = 48, CurseEffect_effective_evasionMore = 0.46, CurseEffect_attack_lifeOnHit = 29, CurseEffect_attack_manaOnHit = 13, }, - [26] = { skill_manaCostBase = 57, skill_durationBase = 11, curse_aoeRadiusInc = 50, CurseEffect_effective_evasionMore = 0.45, CurseEffect_attack_lifeOnHit = 30, CurseEffect_attack_manaOnHit = 14, }, - [27] = { skill_manaCostBase = 58, skill_durationBase = 11.2, curse_aoeRadiusInc = 52, CurseEffect_effective_evasionMore = 0.44, CurseEffect_attack_lifeOnHit = 31, CurseEffect_attack_manaOnHit = 14, }, - [28] = { skill_manaCostBase = 59, skill_durationBase = 11.4, curse_aoeRadiusInc = 54, CurseEffect_effective_evasionMore = 0.43, CurseEffect_attack_lifeOnHit = 32, CurseEffect_attack_manaOnHit = 14, }, - [29] = { skill_manaCostBase = 60, skill_durationBase = 11.6, curse_aoeRadiusInc = 56, CurseEffect_effective_evasionMore = 0.42, CurseEffect_attack_lifeOnHit = 33, CurseEffect_attack_manaOnHit = 15, }, - [30] = { skill_manaCostBase = 61, skill_durationBase = 11.8, curse_aoeRadiusInc = 58, CurseEffect_effective_evasionMore = 0.41, CurseEffect_attack_lifeOnHit = 34, CurseEffect_attack_manaOnHit = 15, }, - } + [1] = { 24, 6, 0, -30, 5, 5, 21, }, + [2] = { 26, 6.2, 2, -31, 6, 6, 21, }, + [3] = { 27, 6.4, 4, -32, 7, 6, 22, }, + [4] = { 29, 6.6, 6, -33, 8, 6, 22, }, + [5] = { 30, 6.8, 8, -34, 9, 7, 23, }, + [6] = { 32, 7, 10, -35, 10, 7, 23, }, + [7] = { 34, 7.2, 12, -36, 11, 7, 24, }, + [8] = { 35, 7.4, 14, -37, 12, 8, 24, }, + [9] = { 37, 7.6, 16, -38, 13, 8, 25, }, + [10] = { 38, 7.8, 18, -39, 14, 8, 25, }, + [11] = { 39, 8, 20, -40, 15, 9, 26, }, + [12] = { 40, 8.2, 22, -41, 16, 9, 26, }, + [13] = { 42, 8.4, 24, -42, 17, 9, 27, }, + [14] = { 43, 8.6, 26, -43, 18, 10, 27, }, + [15] = { 44, 8.8, 28, -44, 19, 10, 28, }, + [16] = { 45, 9, 30, -45, 20, 10, 28, }, + [17] = { 46, 9.2, 32, -46, 21, 11, 29, }, + [18] = { 47, 9.4, 34, -47, 22, 11, 29, }, + [19] = { 48, 9.6, 36, -48, 23, 11, 30, }, + [20] = { 50, 9.8, 38, -49, 24, 12, 30, }, + [21] = { 51, 10, 40, -50, 25, 12, 31, }, + [22] = { 52, 10.2, 42, -51, 26, 12, 31, }, + [23] = { 53, 10.4, 44, -52, 27, 13, 32, }, + [24] = { 54, 10.6, 46, -53, 28, 13, 32, }, + [25] = { 56, 10.8, 48, -54, 29, 13, 33, }, + [26] = { 57, 11, 50, -55, 30, 14, 33, }, + [27] = { 58, 11.2, 52, -56, 31, 14, 34, }, + [28] = { 59, 11.4, 54, -57, 32, 14, 34, }, + [29] = { 60, 11.6, 56, -58, 33, 15, 35, }, + [30] = { 61, 11.8, 58, -59, 34, 15, 35, }, + }, } gems["Projectile Weakness"] = { - dexterity = true, curse = true, + dexterity = true, + active_skill = true, spell = true, - aoe = true, + area = true, duration = true, - debuff = true, - base = { - skill_castTime = 0.5, - CurseEffect_pierceChance = 50, + color = 2, + baseFlags = { + spell = true, + curse = true, + area = true, + duration = true, }, - quality = { - CurseEffect_effective_projectileTakenInc = 0.5, + 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("SelfPierceChance", "BASE", 50, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"chance_to_be_pierced_%" = 50 + --"chance_to_be_knocked_back_%" = 25 + --"base_deal_no_damage" = ? + skill("debuff", true), + }, + qualityMods = { + mod("ProjectileDamageTaken", "BASE", 0.5, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"projectile_damage_taken_+%" = 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("ProjectileDamageTaken", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"projectile_damage_taken_+%" }, levels = { - [1] = { skill_manaCostBase = 24, skill_durationBase = 9, curse_aoeRadiusInc = 0, CurseEffect_effective_projectileTakenInc = 25, }, - [2] = { skill_manaCostBase = 26, skill_durationBase = 9.1, curse_aoeRadiusInc = 2, CurseEffect_effective_projectileTakenInc = 26, }, - [3] = { skill_manaCostBase = 27, skill_durationBase = 9.2, curse_aoeRadiusInc = 4, CurseEffect_effective_projectileTakenInc = 27, }, - [4] = { skill_manaCostBase = 29, skill_durationBase = 9.3, curse_aoeRadiusInc = 6, CurseEffect_effective_projectileTakenInc = 28, }, - [5] = { skill_manaCostBase = 30, skill_durationBase = 9.4, curse_aoeRadiusInc = 8, CurseEffect_effective_projectileTakenInc = 29, }, - [6] = { skill_manaCostBase = 32, skill_durationBase = 9.5, curse_aoeRadiusInc = 10, CurseEffect_effective_projectileTakenInc = 30, }, - [7] = { skill_manaCostBase = 34, skill_durationBase = 9.6, curse_aoeRadiusInc = 12, CurseEffect_effective_projectileTakenInc = 31, }, - [8] = { skill_manaCostBase = 35, skill_durationBase = 9.7, curse_aoeRadiusInc = 14, CurseEffect_effective_projectileTakenInc = 32, }, - [9] = { skill_manaCostBase = 37, skill_durationBase = 9.8, curse_aoeRadiusInc = 16, CurseEffect_effective_projectileTakenInc = 33, }, - [10] = { skill_manaCostBase = 38, skill_durationBase = 9.9, curse_aoeRadiusInc = 18, CurseEffect_effective_projectileTakenInc = 34, }, - [11] = { skill_manaCostBase = 39, skill_durationBase = 10, curse_aoeRadiusInc = 20, CurseEffect_effective_projectileTakenInc = 35, }, - [12] = { skill_manaCostBase = 40, skill_durationBase = 10.1, curse_aoeRadiusInc = 22, CurseEffect_effective_projectileTakenInc = 36, }, - [13] = { skill_manaCostBase = 42, skill_durationBase = 10.2, curse_aoeRadiusInc = 24, CurseEffect_effective_projectileTakenInc = 37, }, - [14] = { skill_manaCostBase = 43, skill_durationBase = 10.3, curse_aoeRadiusInc = 26, CurseEffect_effective_projectileTakenInc = 38, }, - [15] = { skill_manaCostBase = 44, skill_durationBase = 10.4, curse_aoeRadiusInc = 28, CurseEffect_effective_projectileTakenInc = 39, }, - [16] = { skill_manaCostBase = 45, skill_durationBase = 10.5, curse_aoeRadiusInc = 30, CurseEffect_effective_projectileTakenInc = 40, }, - [17] = { skill_manaCostBase = 46, skill_durationBase = 10.6, curse_aoeRadiusInc = 32, CurseEffect_effective_projectileTakenInc = 41, }, - [18] = { skill_manaCostBase = 47, skill_durationBase = 10.7, curse_aoeRadiusInc = 34, CurseEffect_effective_projectileTakenInc = 42, }, - [19] = { skill_manaCostBase = 48, skill_durationBase = 10.8, curse_aoeRadiusInc = 36, CurseEffect_effective_projectileTakenInc = 43, }, - [20] = { skill_manaCostBase = 50, skill_durationBase = 10.9, curse_aoeRadiusInc = 38, CurseEffect_effective_projectileTakenInc = 44, }, - [21] = { skill_manaCostBase = 51, skill_durationBase = 11, curse_aoeRadiusInc = 40, CurseEffect_effective_projectileTakenInc = 45, }, - [22] = { skill_manaCostBase = 52, skill_durationBase = 11.1, curse_aoeRadiusInc = 42, CurseEffect_effective_projectileTakenInc = 46, }, - [23] = { skill_manaCostBase = 53, skill_durationBase = 11.2, curse_aoeRadiusInc = 44, CurseEffect_effective_projectileTakenInc = 47, }, - [24] = { skill_manaCostBase = 54, skill_durationBase = 11.3, curse_aoeRadiusInc = 46, CurseEffect_effective_projectileTakenInc = 48, }, - [25] = { skill_manaCostBase = 56, skill_durationBase = 11.4, curse_aoeRadiusInc = 48, CurseEffect_effective_projectileTakenInc = 49, }, - [26] = { skill_manaCostBase = 57, skill_durationBase = 11.5, curse_aoeRadiusInc = 50, CurseEffect_effective_projectileTakenInc = 50, }, - [27] = { skill_manaCostBase = 58, skill_durationBase = 11.6, curse_aoeRadiusInc = 52, CurseEffect_effective_projectileTakenInc = 51, }, - [28] = { skill_manaCostBase = 59, skill_durationBase = 11.7, curse_aoeRadiusInc = 54, CurseEffect_effective_projectileTakenInc = 52, }, - [29] = { skill_manaCostBase = 60, skill_durationBase = 11.8, curse_aoeRadiusInc = 56, CurseEffect_effective_projectileTakenInc = 53, }, - [30] = { skill_manaCostBase = 61, skill_durationBase = 11.9, curse_aoeRadiusInc = 58, CurseEffect_effective_projectileTakenInc = 54, }, - } + [1] = { 24, 9, 0, 25, }, + [2] = { 26, 9.1, 2, 26, }, + [3] = { 27, 9.2, 4, 27, }, + [4] = { 29, 9.3, 6, 28, }, + [5] = { 30, 9.4, 8, 29, }, + [6] = { 32, 9.5, 10, 30, }, + [7] = { 34, 9.6, 12, 31, }, + [8] = { 35, 9.7, 14, 32, }, + [9] = { 37, 9.8, 16, 33, }, + [10] = { 38, 9.9, 18, 34, }, + [11] = { 39, 10, 20, 35, }, + [12] = { 40, 10.1, 22, 36, }, + [13] = { 42, 10.2, 24, 37, }, + [14] = { 43, 10.3, 26, 38, }, + [15] = { 44, 10.4, 28, 39, }, + [16] = { 45, 10.5, 30, 40, }, + [17] = { 46, 10.6, 32, 41, }, + [18] = { 47, 10.7, 34, 42, }, + [19] = { 48, 10.8, 36, 43, }, + [20] = { 50, 10.9, 38, 44, }, + [21] = { 51, 11, 40, 45, }, + [22] = { 52, 11.1, 42, 46, }, + [23] = { 53, 11.2, 44, 47, }, + [24] = { 54, 11.3, 46, 48, }, + [25] = { 56, 11.4, 48, 49, }, + [26] = { 57, 11.5, 50, 50, }, + [27] = { 58, 11.6, 52, 51, }, + [28] = { 59, 11.7, 54, 52, }, + [29] = { 60, 11.8, 56, 53, }, + [30] = { 61, 11.9, 58, 54, }, + }, } gems["Puncture"] = { dexterity = true, + active_skill = true, attack = true, - bow = true, - melee = true, duration = true, - hit = true, - base = { - skill_manaCostBase = 6, - bleedChance = 100, + melee = true, + bow = true, + color = 2, + baseFlags = { + attack = true, + melee = true, + projectile = true, + duration = true, }, - quality = { - durationInc = 1, + skillTypes = { [1] = true, [48] = true, [3] = true, [6] = true, [12] = true, [17] = true, [19] = true, [22] = true, [25] = true, [28] = true, [24] = true, [40] = true, }, + baseMods = { + skill("castTime", 1), + skill("manaCost", 6), + --"base_bleed_on_hit_still_%_of_physical_damage_to_deal_per_minute" = 600 + --"base_bleed_on_hit_moving_%_of_physical_damage_to_deal_per_minute" = 3000 + --"bleed_on_hit_base_duration" = 5000 + --"skill_can_fire_arrows" = ? + mod("BleedChance", "BASE", 100), + }, + qualityMods = { + mod("Duration", "INC", 1), --"skill_effect_duration_+%" = 1 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { attack_damageMore = 1, }, - [2] = { attack_damageMore = 1.012, }, - [3] = { attack_damageMore = 1.024, }, - [4] = { attack_damageMore = 1.036, }, - [5] = { attack_damageMore = 1.048, }, - [6] = { attack_damageMore = 1.06, }, - [7] = { attack_damageMore = 1.072, }, - [8] = { attack_damageMore = 1.084, }, - [9] = { attack_damageMore = 1.096, }, - [10] = { attack_damageMore = 1.108, }, - [11] = { attack_damageMore = 1.12, }, - [12] = { attack_damageMore = 1.132, }, - [13] = { attack_damageMore = 1.144, }, - [14] = { attack_damageMore = 1.156, }, - [15] = { attack_damageMore = 1.168, }, - [16] = { attack_damageMore = 1.18, }, - [17] = { attack_damageMore = 1.192, }, - [18] = { attack_damageMore = 1.204, }, - [19] = { attack_damageMore = 1.216, }, - [20] = { attack_damageMore = 1.228, }, - [21] = { attack_damageMore = 1.24, }, - [22] = { attack_damageMore = 1.252, }, - [23] = { attack_damageMore = 1.264, }, - [24] = { attack_damageMore = 1.276, }, - [25] = { attack_damageMore = 1.288, }, - [26] = { attack_damageMore = 1.3, }, - [27] = { attack_damageMore = 1.312, }, - [28] = { attack_damageMore = 1.324, }, - [29] = { attack_damageMore = 1.336, }, - [30] = { attack_damageMore = 1.348, }, - } + [1] = { nil, }, + [2] = { 1.2, }, + [3] = { 2.4, }, + [4] = { 3.6, }, + [5] = { 4.8, }, + [6] = { 6, }, + [7] = { 7.2, }, + [8] = { 8.4, }, + [9] = { 9.6, }, + [10] = { 10.8, }, + [11] = { 12, }, + [12] = { 13.2, }, + [13] = { 14.4, }, + [14] = { 15.6, }, + [15] = { 16.8, }, + [16] = { 18, }, + [17] = { 19.2, }, + [18] = { 20.4, }, + [19] = { 21.6, }, + [20] = { 22.8, }, + [21] = { 24, }, + [22] = { 25.2, }, + [23] = { 26.4, }, + [24] = { 27.6, }, + [25] = { 28.8, }, + [26] = { 30, }, + [27] = { 31.2, }, + [28] = { 32.4, }, + [29] = { 33.6, }, + [30] = { 34.8, }, + }, } gems["Purity of Ice"] = { - dexterity = true, aura = true, + dexterity = true, + active_skill = true, spell = true, - aoe = true, + area = true, cold = true, - base = { - skill_castTime = 1.2, - skill_manaReservedPercent = 35, + color = 2, + baseFlags = { + spell = true, + aura = true, + area = true, + cold = true, }, - quality = { - aura_aoeRadiusInc = 1, + skillTypes = { [2] = true, [11] = true, [5] = true, [15] = true, [27] = true, [16] = true, [18] = true, [44] = true, [34] = true, }, + baseMods = { + skill("castTime", 1.2), + skill("manaCost", 35), + --"base_deal_no_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 1), --"base_skill_area_of_effect_+%" = 1 + }, + levelMods = { + [1] = mod("ColdResist", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Aura" }), --"base_cold_damage_resistance_%" + [2] = mod("ColdResistMax", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Aura" }), --"base_maximum_cold_damage_resistance_%" + [3] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" }, levels = { - [1] = { aura_aoeRadiusInc = 0, AuraEffect_coldResist = 22, AuraEffect_coldResistMax = 0, }, - [2] = { aura_aoeRadiusInc = 3, AuraEffect_coldResist = 23, AuraEffect_coldResistMax = 0, }, - [3] = { aura_aoeRadiusInc = 6, AuraEffect_coldResist = 24, AuraEffect_coldResistMax = 0, }, - [4] = { aura_aoeRadiusInc = 9, AuraEffect_coldResist = 25, AuraEffect_coldResistMax = 0, }, - [5] = { aura_aoeRadiusInc = 12, AuraEffect_coldResist = 26, AuraEffect_coldResistMax = 1, }, - [6] = { aura_aoeRadiusInc = 15, AuraEffect_coldResist = 27, AuraEffect_coldResistMax = 1, }, - [7] = { aura_aoeRadiusInc = 18, AuraEffect_coldResist = 28, AuraEffect_coldResistMax = 1, }, - [8] = { aura_aoeRadiusInc = 21, AuraEffect_coldResist = 29, AuraEffect_coldResistMax = 1, }, - [9] = { aura_aoeRadiusInc = 23, AuraEffect_coldResist = 30, AuraEffect_coldResistMax = 1, }, - [10] = { aura_aoeRadiusInc = 25, AuraEffect_coldResist = 31, AuraEffect_coldResistMax = 1, }, - [11] = { aura_aoeRadiusInc = 27, AuraEffect_coldResist = 32, AuraEffect_coldResistMax = 2, }, - [12] = { aura_aoeRadiusInc = 29, AuraEffect_coldResist = 33, AuraEffect_coldResistMax = 2, }, - [13] = { aura_aoeRadiusInc = 31, AuraEffect_coldResist = 34, AuraEffect_coldResistMax = 2, }, - [14] = { aura_aoeRadiusInc = 33, AuraEffect_coldResist = 35, AuraEffect_coldResistMax = 2, }, - [15] = { aura_aoeRadiusInc = 35, AuraEffect_coldResist = 36, AuraEffect_coldResistMax = 2, }, - [16] = { aura_aoeRadiusInc = 36, AuraEffect_coldResist = 37, AuraEffect_coldResistMax = 2, }, - [17] = { aura_aoeRadiusInc = 37, AuraEffect_coldResist = 38, AuraEffect_coldResistMax = 3, }, - [18] = { aura_aoeRadiusInc = 38, AuraEffect_coldResist = 39, AuraEffect_coldResistMax = 3, }, - [19] = { aura_aoeRadiusInc = 39, AuraEffect_coldResist = 40, AuraEffect_coldResistMax = 3, }, - [20] = { aura_aoeRadiusInc = 40, AuraEffect_coldResist = 41, AuraEffect_coldResistMax = 4, }, - [21] = { aura_aoeRadiusInc = 41, AuraEffect_coldResist = 42, AuraEffect_coldResistMax = 4, }, - [22] = { aura_aoeRadiusInc = 42, AuraEffect_coldResist = 43, AuraEffect_coldResistMax = 4, }, - [23] = { aura_aoeRadiusInc = 43, AuraEffect_coldResist = 44, AuraEffect_coldResistMax = 5, }, - [24] = { aura_aoeRadiusInc = 44, AuraEffect_coldResist = 45, AuraEffect_coldResistMax = 5, }, - [25] = { aura_aoeRadiusInc = 45, AuraEffect_coldResist = 46, AuraEffect_coldResistMax = 5, }, - [26] = { aura_aoeRadiusInc = 46, AuraEffect_coldResist = 47, AuraEffect_coldResistMax = 5, }, - [27] = { aura_aoeRadiusInc = 47, AuraEffect_coldResist = 48, AuraEffect_coldResistMax = 5, }, - [28] = { aura_aoeRadiusInc = 48, AuraEffect_coldResist = 49, AuraEffect_coldResistMax = 5, }, - [29] = { aura_aoeRadiusInc = 49, AuraEffect_coldResist = 50, AuraEffect_coldResistMax = 5, }, - [30] = { aura_aoeRadiusInc = 50, AuraEffect_coldResist = 51, AuraEffect_coldResistMax = 5, }, - } + [1] = { 22, 0, 0, }, + [2] = { 23, 0, 3, }, + [3] = { 24, 0, 6, }, + [4] = { 25, 0, 9, }, + [5] = { 26, 1, 12, }, + [6] = { 27, 1, 15, }, + [7] = { 28, 1, 18, }, + [8] = { 29, 1, 21, }, + [9] = { 30, 1, 23, }, + [10] = { 31, 1, 25, }, + [11] = { 32, 2, 27, }, + [12] = { 33, 2, 29, }, + [13] = { 34, 2, 31, }, + [14] = { 35, 2, 33, }, + [15] = { 36, 2, 35, }, + [16] = { 37, 2, 36, }, + [17] = { 38, 3, 37, }, + [18] = { 39, 3, 38, }, + [19] = { 40, 3, 39, }, + [20] = { 41, 4, 40, }, + [21] = { 42, 4, 41, }, + [22] = { 43, 4, 42, }, + [23] = { 44, 5, 43, }, + [24] = { 45, 5, 44, }, + [25] = { 46, 5, 45, }, + [26] = { 47, 5, 46, }, + [27] = { 48, 5, 47, }, + [28] = { 49, 5, 48, }, + [29] = { 50, 5, 49, }, + [30] = { 51, 5, 50, }, + }, } gems["Rain of Arrows"] = { dexterity = true, + active_skill = true, attack = true, + area = true, bow = true, - aoe = true, - hit = true, - base = { + color = 2, + baseFlags = { + attack = true, + projectile = true, + area = true, }, - quality = { - aoeRadiusInc = 0.5, + skillTypes = { [1] = true, [48] = true, [11] = true, [14] = true, [22] = true, [17] = true, [19] = true, }, + baseMods = { + skill("castTime", 1), + --"base_is_projectile" = ? + --"is_area_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = mod("Damage", "MORE", nil, ModFlag.Attack), + [3] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" }, levels = { - [1] = { skill_manaCostBase = 7, attack_damageMore = 1.1, aoeRadiusInc = 0, }, - [2] = { skill_manaCostBase = 7, attack_damageMore = 1.11, aoeRadiusInc = 1, }, - [3] = { skill_manaCostBase = 7, attack_damageMore = 1.12, aoeRadiusInc = 2, }, - [4] = { skill_manaCostBase = 8, attack_damageMore = 1.13, aoeRadiusInc = 3, }, - [5] = { skill_manaCostBase = 8, attack_damageMore = 1.14, aoeRadiusInc = 4, }, - [6] = { skill_manaCostBase = 8, attack_damageMore = 1.15, aoeRadiusInc = 5, }, - [7] = { skill_manaCostBase = 8, attack_damageMore = 1.16, aoeRadiusInc = 6, }, - [8] = { skill_manaCostBase = 8, attack_damageMore = 1.17, aoeRadiusInc = 7, }, - [9] = { skill_manaCostBase = 9, attack_damageMore = 1.18, aoeRadiusInc = 8, }, - [10] = { skill_manaCostBase = 9, attack_damageMore = 1.19, aoeRadiusInc = 9, }, - [11] = { skill_manaCostBase = 9, attack_damageMore = 1.2, aoeRadiusInc = 10, }, - [12] = { skill_manaCostBase = 9, attack_damageMore = 1.21, aoeRadiusInc = 11, }, - [13] = { skill_manaCostBase = 9, attack_damageMore = 1.22, aoeRadiusInc = 12, }, - [14] = { skill_manaCostBase = 10, attack_damageMore = 1.23, aoeRadiusInc = 13, }, - [15] = { skill_manaCostBase = 10, attack_damageMore = 1.24, aoeRadiusInc = 14, }, - [16] = { skill_manaCostBase = 10, attack_damageMore = 1.25, aoeRadiusInc = 15, }, - [17] = { skill_manaCostBase = 10, attack_damageMore = 1.26, aoeRadiusInc = 16, }, - [18] = { skill_manaCostBase = 10, attack_damageMore = 1.27, aoeRadiusInc = 17, }, - [19] = { skill_manaCostBase = 11, attack_damageMore = 1.28, aoeRadiusInc = 18, }, - [20] = { skill_manaCostBase = 11, attack_damageMore = 1.29, aoeRadiusInc = 19, }, - [21] = { skill_manaCostBase = 11, attack_damageMore = 1.3, aoeRadiusInc = 20, }, - [22] = { skill_manaCostBase = 11, attack_damageMore = 1.31, aoeRadiusInc = 21, }, - [23] = { skill_manaCostBase = 11, attack_damageMore = 1.32, aoeRadiusInc = 22, }, - [24] = { skill_manaCostBase = 11, attack_damageMore = 1.33, aoeRadiusInc = 23, }, - [25] = { skill_manaCostBase = 11, attack_damageMore = 1.34, aoeRadiusInc = 24, }, - [26] = { skill_manaCostBase = 12, attack_damageMore = 1.35, aoeRadiusInc = 25, }, - [27] = { skill_manaCostBase = 12, attack_damageMore = 1.36, aoeRadiusInc = 26, }, - [28] = { skill_manaCostBase = 12, attack_damageMore = 1.37, aoeRadiusInc = 27, }, - [29] = { skill_manaCostBase = 12, attack_damageMore = 1.38, aoeRadiusInc = 28, }, - [30] = { skill_manaCostBase = 12, attack_damageMore = 1.39, aoeRadiusInc = 29, }, - } + [1] = { 7, 10, 0, }, + [2] = { 7, 11, 1, }, + [3] = { 7, 12, 2, }, + [4] = { 8, 13, 3, }, + [5] = { 8, 14, 4, }, + [6] = { 8, 15, 5, }, + [7] = { 8, 16, 6, }, + [8] = { 8, 17, 7, }, + [9] = { 9, 18, 8, }, + [10] = { 9, 19, 9, }, + [11] = { 9, 20, 10, }, + [12] = { 9, 21, 11, }, + [13] = { 9, 22, 12, }, + [14] = { 10, 23, 13, }, + [15] = { 10, 24, 14, }, + [16] = { 10, 25, 15, }, + [17] = { 10, 26, 16, }, + [18] = { 10, 27, 17, }, + [19] = { 11, 28, 18, }, + [20] = { 11, 29, 19, }, + [21] = { 11, 30, 20, }, + [22] = { 11, 31, 21, }, + [23] = { 11, 32, 22, }, + [24] = { 11, 33, 23, }, + [25] = { 11, 34, 24, }, + [26] = { 12, 35, 25, }, + [27] = { 12, 36, 26, }, + [28] = { 12, 37, 27, }, + [29] = { 12, 38, 28, }, + [30] = { 12, 39, 29, }, + }, +} +gems["Vaal Rain of Arrows"] = { + dexterity = true, + active_skill = true, + vaal = true, + attack = true, + area = true, + duration = true, + bow = true, + color = 2, + baseFlags = { + attack = true, + projectile = true, + area = true, + duration = true, + vaal = true, + }, + skillTypes = { [1] = true, [48] = true, [11] = true, [14] = true, [22] = true, [17] = true, [19] = true, [12] = true, [43] = true, }, + baseMods = { + skill("castTime", 1), + --"base_is_projectile" = ? + --"is_area_damage" = ? + --"rain_of_arrows_pin" = ? + skill("cannotBeEvaded", true), --"global_always_hit" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), + [2] = skill("duration", nil), --"base_skill_effect_duration" + [3] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" + }, + levels = { + [1] = { 40, 3.4, 0, }, + [2] = { 41.5, 3.45, 1, }, + [3] = { 43, 3.5, 2, }, + [4] = { 44.5, 3.55, 3, }, + [5] = { 46, 3.6, 4, }, + [6] = { 47.5, 3.65, 5, }, + [7] = { 49, 3.7, 6, }, + [8] = { 50.5, 3.75, 7, }, + [9] = { 52, 3.8, 8, }, + [10] = { 53.5, 3.85, 9, }, + [11] = { 55, 3.9, 10, }, + [12] = { 56.5, 3.95, 11, }, + [13] = { 58, 4, 12, }, + [14] = { 59.5, 4.05, 13, }, + [15] = { 61, 4.1, 14, }, + [16] = { 62.5, 4.15, 15, }, + [17] = { 64, 4.2, 16, }, + [18] = { 65.5, 4.25, 17, }, + [19] = { 67, 4.3, 18, }, + [20] = { 68.5, 4.35, 19, }, + [21] = { 70, 4.4, 20, }, + [22] = { 71.5, 4.45, 21, }, + [23] = { 73, 4.5, 22, }, + [24] = { 74.5, 4.55, 23, }, + [25] = { 76, 4.6, 24, }, + [26] = { 77.5, 4.65, 25, }, + [27] = { 79, 4.7, 26, }, + [28] = { 80.5, 4.75, 27, }, + [29] = { 82, 4.8, 28, }, + [30] = { 83.5, 4.85, 29, }, + }, } gems["Reave"] = { dexterity = true, + active_skill = true, attack = true, + area = true, melee = true, - aoe = true, - hit = true, - base = { - skill_manaCostBase = 6, + color = 2, + baseFlags = { + attack = true, + melee = true, + area = true, }, - quality = { - attackSpeedInc = 0.5, + skillTypes = { [1] = true, [6] = true, [11] = true, [28] = true, [24] = true, }, + baseMods = { + skill("castTime", 1), + skill("manaCost", 6), + --"reave_area_of_effect_+%_final_per_stage" = 20 + --"is_area_damage" = ? + }, + qualityMods = { + mod("Speed", "INC", 0.5, ModFlag.Attack, 0, nil), --"attack_speed_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { attack_damageMore = 1, }, - [2] = { attack_damageMore = 1.02, }, - [3] = { attack_damageMore = 1.04, }, - [4] = { attack_damageMore = 1.06, }, - [5] = { attack_damageMore = 1.08, }, - [6] = { attack_damageMore = 1.1, }, - [7] = { attack_damageMore = 1.12, }, - [8] = { attack_damageMore = 1.14, }, - [9] = { attack_damageMore = 1.16, }, - [10] = { attack_damageMore = 1.18, }, - [11] = { attack_damageMore = 1.2, }, - [12] = { attack_damageMore = 1.22, }, - [13] = { attack_damageMore = 1.24, }, - [14] = { attack_damageMore = 1.26, }, - [15] = { attack_damageMore = 1.28, }, - [16] = { attack_damageMore = 1.3, }, - [17] = { attack_damageMore = 1.32, }, - [18] = { attack_damageMore = 1.34, }, - [19] = { attack_damageMore = 1.36, }, - [20] = { attack_damageMore = 1.38, }, - [21] = { attack_damageMore = 1.4, }, - [22] = { attack_damageMore = 1.42, }, - [23] = { attack_damageMore = 1.44, }, - [24] = { attack_damageMore = 1.46, }, - [25] = { attack_damageMore = 1.48, }, - [26] = { attack_damageMore = 1.5, }, - [27] = { attack_damageMore = 1.52, }, - [28] = { attack_damageMore = 1.54, }, - [29] = { attack_damageMore = 1.56, }, - [30] = { attack_damageMore = 1.58, }, - } + [1] = { nil, }, + [2] = { 2, }, + [3] = { 4, }, + [4] = { 6, }, + [5] = { 8, }, + [6] = { 10, }, + [7] = { 12, }, + [8] = { 14, }, + [9] = { 16, }, + [10] = { 18, }, + [11] = { 20, }, + [12] = { 22, }, + [13] = { 24, }, + [14] = { 26, }, + [15] = { 28, }, + [16] = { 30, }, + [17] = { 32, }, + [18] = { 34, }, + [19] = { 36, }, + [20] = { 38, }, + [21] = { 40, }, + [22] = { 42, }, + [23] = { 44, }, + [24] = { 46, }, + [25] = { 48, }, + [26] = { 50, }, + [27] = { 52, }, + [28] = { 54, }, + [29] = { 56, }, + [30] = { 58, }, + }, +} +gems["Vaal Reave"] = { + dexterity = true, + active_skill = true, + vaal = true, + attack = true, + area = true, + melee = true, + color = 2, + baseFlags = { + attack = true, + melee = true, + area = true, + vaal = true, + }, + skillTypes = { [1] = true, [6] = true, [11] = true, [28] = true, [24] = true, [43] = true, }, + baseMods = { + skill("castTime", 1), + --"reave_area_of_effect_+%_final_per_stage" = 20 + --"reave_rotation_on_repeat" = 135 + --"reave_additional_max_stacks" = 4 + --"base_attack_repeat_count" = 7 + mod("Speed", "MORE", 150, ModFlag.Attack), --"active_skill_attack_speed_+%_final" = 150 + --"reave_additional_starting_stacks" = 4 + --"is_area_damage" = ? + skill("cannotBeEvaded", true), --"global_always_hit" = ? + }, + qualityMods = { + mod("Speed", "INC", 0.5, ModFlag.Attack, 0, nil), --"attack_speed_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), + }, + levels = { + [1] = { nil, }, + [2] = { 1.2, }, + [3] = { 2.4, }, + [4] = { 3.6, }, + [5] = { 4.8, }, + [6] = { 6, }, + [7] = { 7.2, }, + [8] = { 8.4, }, + [9] = { 9.6, }, + [10] = { 10.8, }, + [11] = { 12, }, + [12] = { 13.2, }, + [13] = { 14.4, }, + [14] = { 15.6, }, + [15] = { 16.8, }, + [16] = { 18, }, + [17] = { 19.2, }, + [18] = { 20.4, }, + [19] = { 21.6, }, + [20] = { 22.8, }, + [21] = { 24, }, + [22] = { 25.2, }, + [23] = { 26.4, }, + [24] = { 27.6, }, + [25] = { 28.8, }, + [26] = { 30, }, + [27] = { 31.2, }, + [28] = { 32.4, }, + [29] = { 33.6, }, + [30] = { 34.8, }, + }, } gems["Riposte"] = { - dexterity = true, trigger = true, + dexterity = true, + active_skill = true, attack = true, melee = true, - hit = true, - showAverage = true, - base = { + color = 2, + baseFlags = { + attack = true, + melee = true, }, - quality = { - damageInc = 1, + skillTypes = { [1] = true, [24] = true, [25] = true, [6] = true, [47] = true, [57] = true, }, + baseMods = { + skill("castTime", 1), + --"melee_counterattack_trigger_on_block_%" = 100 + --"attack_unusable_if_triggerable" = ? + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + --"skill_double_hits_when_dual_wielding" = ? + }, + qualityMods = { + mod("Damage", "INC", 1, 0, 0, nil), --"damage_+%" = 1 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { attack_damageMore = 1, }, - [2] = { attack_damageMore = 1.02, }, - [3] = { attack_damageMore = 1.04, }, - [4] = { attack_damageMore = 1.06, }, - [5] = { attack_damageMore = 1.08, }, - [6] = { attack_damageMore = 1.1, }, - [7] = { attack_damageMore = 1.12, }, - [8] = { attack_damageMore = 1.14, }, - [9] = { attack_damageMore = 1.16, }, - [10] = { attack_damageMore = 1.18, }, - [11] = { attack_damageMore = 1.2, }, - [12] = { attack_damageMore = 1.22, }, - [13] = { attack_damageMore = 1.24, }, - [14] = { attack_damageMore = 1.26, }, - [15] = { attack_damageMore = 1.28, }, - [16] = { attack_damageMore = 1.3, }, - [17] = { attack_damageMore = 1.32, }, - [18] = { attack_damageMore = 1.34, }, - [19] = { attack_damageMore = 1.36, }, - [20] = { attack_damageMore = 1.38, }, - [21] = { attack_damageMore = 1.4, }, - [22] = { attack_damageMore = 1.42, }, - [23] = { attack_damageMore = 1.44, }, - [24] = { attack_damageMore = 1.46, }, - [25] = { attack_damageMore = 1.48, }, - [26] = { attack_damageMore = 1.5, }, - [27] = { attack_damageMore = 1.52, }, - [28] = { attack_damageMore = 1.54, }, - [29] = { attack_damageMore = 1.56, }, - [30] = { attack_damageMore = 1.58, }, - } + [1] = { nil, }, + [2] = { 2, }, + [3] = { 4, }, + [4] = { 6, }, + [5] = { 8, }, + [6] = { 10, }, + [7] = { 12, }, + [8] = { 14, }, + [9] = { 16, }, + [10] = { 18, }, + [11] = { 20, }, + [12] = { 22, }, + [13] = { 24, }, + [14] = { 26, }, + [15] = { 28, }, + [16] = { 30, }, + [17] = { 32, }, + [18] = { 34, }, + [19] = { 36, }, + [20] = { 38, }, + [21] = { 40, }, + [22] = { 42, }, + [23] = { 44, }, + [24] = { 46, }, + [25] = { 48, }, + [26] = { 50, }, + [27] = { 52, }, + [28] = { 54, }, + [29] = { 56, }, + [30] = { 58, }, + }, } gems["Shrapnel Shot"] = { - dexterity = true, - attack = true, - bow = true, - aoe = true, lightning = true, - hit = true, + dexterity = true, + active_skill = true, + attack = true, + area = true, + bow = true, parts = { { name = "Arrow", - aoe = false, + area = false, }, { name = "Cone", - aoe = true, + area = true, }, }, - base = { - pierceChance = 100, - skill_physicalConvertTolightning = 40, + color = 2, + baseFlags = { + attack = true, + projectile = true, + area = true, + lightning = true, }, - quality = { - aoeRadiusInc = 0.5, + skillTypes = { [1] = true, [3] = true, [11] = true, [22] = true, [17] = true, [19] = true, [35] = true, [48] = true, }, + baseMods = { + skill("castTime", 1), + --"base_arrow_pierce_%" = 100 + mod("Damage", "MORE", 0, ModFlag.Area), --"active_skill_area_damage_+%_final" = 0 + mod("PhysicalDamageConvertToLightning", "BASE", 40, 0, 0, nil), --"base_physical_damage_%_to_convert_to_lightning" = 40 + --"base_is_projectile" = ? + --"skill_can_fire_arrows" = ? + mod("PierceChance", "BASE", 100), --"always_pierce" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { skill_manaCostBase = 6, attack_damageMore = 0.8, }, - [2] = { skill_manaCostBase = 6, attack_damageMore = 0.81, }, - [3] = { skill_manaCostBase = 6, attack_damageMore = 0.82, }, - [4] = { skill_manaCostBase = 7, attack_damageMore = 0.83, }, - [5] = { skill_manaCostBase = 7, attack_damageMore = 0.84, }, - [6] = { skill_manaCostBase = 7, attack_damageMore = 0.85, }, - [7] = { skill_manaCostBase = 7, attack_damageMore = 0.86, }, - [8] = { skill_manaCostBase = 8, attack_damageMore = 0.87, }, - [9] = { skill_manaCostBase = 8, attack_damageMore = 0.88, }, - [10] = { skill_manaCostBase = 8, attack_damageMore = 0.89, }, - [11] = { skill_manaCostBase = 8, attack_damageMore = 0.9, }, - [12] = { skill_manaCostBase = 8, attack_damageMore = 0.91, }, - [13] = { skill_manaCostBase = 9, attack_damageMore = 0.92, }, - [14] = { skill_manaCostBase = 9, attack_damageMore = 0.93, }, - [15] = { skill_manaCostBase = 9, attack_damageMore = 0.94, }, - [16] = { skill_manaCostBase = 9, attack_damageMore = 0.95, }, - [17] = { skill_manaCostBase = 9, attack_damageMore = 0.96, }, - [18] = { skill_manaCostBase = 10, attack_damageMore = 0.97, }, - [19] = { skill_manaCostBase = 10, attack_damageMore = 0.98, }, - [20] = { skill_manaCostBase = 10, attack_damageMore = 0.99, }, - [21] = { skill_manaCostBase = 10, attack_damageMore = 1, }, - [22] = { skill_manaCostBase = 10, attack_damageMore = 1.01, }, - [23] = { skill_manaCostBase = 11, attack_damageMore = 1.02, }, - [24] = { skill_manaCostBase = 11, attack_damageMore = 1.03, }, - [25] = { skill_manaCostBase = 11, attack_damageMore = 1.04, }, - [26] = { skill_manaCostBase = 11, attack_damageMore = 1.05, }, - [27] = { skill_manaCostBase = 11, attack_damageMore = 1.06, }, - [28] = { skill_manaCostBase = 12, attack_damageMore = 1.07, }, - [29] = { skill_manaCostBase = 12, attack_damageMore = 1.08, }, - [30] = { skill_manaCostBase = 12, attack_damageMore = 1.09, }, - } + [1] = { 6, -20, }, + [2] = { 6, -19, }, + [3] = { 6, -18, }, + [4] = { 7, -17, }, + [5] = { 7, -16, }, + [6] = { 7, -15, }, + [7] = { 7, -14, }, + [8] = { 8, -13, }, + [9] = { 8, -12, }, + [10] = { 8, -11, }, + [11] = { 8, -10, }, + [12] = { 8, -9, }, + [13] = { 9, -8, }, + [14] = { 9, -7, }, + [15] = { 9, -6, }, + [16] = { 9, -5, }, + [17] = { 9, -4, }, + [18] = { 10, -3, }, + [19] = { 10, -2, }, + [20] = { 10, -1, }, + [21] = { 10, nil, }, + [22] = { 10, 1, }, + [23] = { 11, 2, }, + [24] = { 11, 3, }, + [25] = { 11, 4, }, + [26] = { 11, 5, }, + [27] = { 11, 6, }, + [28] = { 12, 7, }, + [29] = { 12, 8, }, + [30] = { 12, 9, }, + }, } gems["Siege Ballista"] = { - dexterity = true, - attack = true, totem = true, - bow = true, + dexterity = true, + active_skill = true, + attack = true, duration = true, - hit = true, - base = { - skill_durationBase = 8, - pierceChance = 100, - attackSpeedMore = 0.5, + bow = true, + color = 2, + baseFlags = { + attack = true, + projectile = true, + totem = true, + duration = true, }, - quality = { - totemPlacementSpeedInc = 1, + skillTypes = { [1] = true, [3] = true, [48] = true, [17] = true, [19] = true, [30] = true, [12] = true, }, + skillTotemId = 12, + baseMods = { + skill("castTime", 1), + mod("Speed", "MORE", -50, ModFlag.Attack), --"active_skill_attack_speed_+%_final" = -50 + --"base_arrow_pierce_%" = 100 + --"base_totem_range" = 80 + --"base_totem_duration" = 8000 + --"base_is_projectile" = ? + --"base_skill_is_totemified" = ? + --"is_totem" = ? + --"skill_can_fire_arrows" = ? + mod("PierceChance", "BASE", 100), --"always_pierce" = ? + }, + qualityMods = { + mod("TotemPlacementSpeed", "INC", 1), --"summon_totem_cast_speed_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = mod("Damage", "MORE", nil, ModFlag.Attack), + [3] = skill("totemLevel", nil), --"base_active_skill_totem_level" }, levels = { - [1] = { skill_manaCostBase = 8, attack_damageMore = 1.4, }, - [2] = { skill_manaCostBase = 8, attack_damageMore = 1.416, }, - [3] = { skill_manaCostBase = 8, attack_damageMore = 1.432, }, - [4] = { skill_manaCostBase = 9, attack_damageMore = 1.448, }, - [5] = { skill_manaCostBase = 9, attack_damageMore = 1.464, }, - [6] = { skill_manaCostBase = 9, attack_damageMore = 1.48, }, - [7] = { skill_manaCostBase = 9, attack_damageMore = 1.496, }, - [8] = { skill_manaCostBase = 9, attack_damageMore = 1.512, }, - [9] = { skill_manaCostBase = 9, attack_damageMore = 1.528, }, - [10] = { skill_manaCostBase = 10, attack_damageMore = 1.544, }, - [11] = { skill_manaCostBase = 10, attack_damageMore = 1.56, }, - [12] = { skill_manaCostBase = 10, attack_damageMore = 1.576, }, - [13] = { skill_manaCostBase = 10, attack_damageMore = 1.592, }, - [14] = { skill_manaCostBase = 10, attack_damageMore = 1.608, }, - [15] = { skill_manaCostBase = 11, attack_damageMore = 1.624, }, - [16] = { skill_manaCostBase = 11, attack_damageMore = 1.64, }, - [17] = { skill_manaCostBase = 12, attack_damageMore = 1.656, }, - [18] = { skill_manaCostBase = 12, attack_damageMore = 1.672, }, - [19] = { skill_manaCostBase = 12, attack_damageMore = 1.688, }, - [20] = { skill_manaCostBase = 13, attack_damageMore = 1.704, }, - [21] = { skill_manaCostBase = 13, attack_damageMore = 1.72, }, - [22] = { skill_manaCostBase = 13, attack_damageMore = 1.736, }, - [23] = { skill_manaCostBase = 14, attack_damageMore = 1.752, }, - [24] = { skill_manaCostBase = 14, attack_damageMore = 1.768, }, - [25] = { skill_manaCostBase = 14, attack_damageMore = 1.784, }, - [26] = { skill_manaCostBase = 14, attack_damageMore = 1.8, }, - [27] = { skill_manaCostBase = 14, attack_damageMore = 1.816, }, - [28] = { skill_manaCostBase = 14, attack_damageMore = 1.832, }, - [29] = { skill_manaCostBase = 15, attack_damageMore = 1.848, }, - [30] = { skill_manaCostBase = 15, attack_damageMore = 1.864, }, - } + [1] = { 8, 40, 4, }, + [2] = { 8, 41.6, 6, }, + [3] = { 8, 43.2, 9, }, + [4] = { 9, 44.8, 12, }, + [5] = { 9, 46.4, 16, }, + [6] = { 9, 48, 20, }, + [7] = { 9, 49.6, 24, }, + [8] = { 9, 51.2, 28, }, + [9] = { 9, 52.8, 32, }, + [10] = { 10, 54.4, 36, }, + [11] = { 10, 56, 40, }, + [12] = { 10, 57.6, 44, }, + [13] = { 10, 59.2, 48, }, + [14] = { 10, 60.8, 52, }, + [15] = { 11, 62.4, 55, }, + [16] = { 11, 64, 58, }, + [17] = { 12, 65.6, 61, }, + [18] = { 12, 67.2, 64, }, + [19] = { 12, 68.8, 67, }, + [20] = { 13, 70.4, 70, }, + [21] = { 13, 72, 72, }, + [22] = { 13, 73.6, 74, }, + [23] = { 14, 75.2, 76, }, + [24] = { 14, 76.8, 78, }, + [25] = { 14, 78.4, 80, }, + [26] = { 14, 80, 82, }, + [27] = { 14, 81.6, 84, }, + [28] = { 14, 83.2, 86, }, + [29] = { 15, 84.8, 88, }, + [30] = { 15, 86.4, 90, }, + }, } -gems["Smoke Mine"] = { - dexterity = true, - spell = true, +gems["Smoke Mine"] = { mine = true, - aoe = true, + dexterity = true, + active_skill = true, + spell = true, + area = true, duration = true, movement = true, - hit = true, - base = { - skill_castTime = 0.5, - BuffEffect_movementSpeedInc = 30, + color = 2, + baseFlags = { + spell = true, + mine = true, + area = true, + duration = true, + movement = true, }, - quality = { - aoeRadiusInc = 1, + skillTypes = { [2] = true, [11] = true, [12] = true, [38] = true, [41] = true, }, + baseMods = { + skill("castTime", 0.5), + --"base_mine_duration" = 16000 + mod("MovementSpeed", "INC", 30, 0, 0, nil), --"base_movement_velocity_+%" = 30 + --"is_remote_mine" = ? + --"base_skill_is_mined" = ? + --"base_deal_no_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 1), --"base_skill_area_of_effect_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("duration", nil), --"base_skill_effect_duration" }, levels = { - [1] = { skill_manaCostBase = 6, skill_durationBase = 4, }, - [2] = { skill_manaCostBase = 6, skill_durationBase = 4.1, }, - [3] = { skill_manaCostBase = 7, skill_durationBase = 4.2, }, - [4] = { skill_manaCostBase = 7, skill_durationBase = 4.3, }, - [5] = { skill_manaCostBase = 8, skill_durationBase = 4.4, }, - [6] = { skill_manaCostBase = 8, skill_durationBase = 4.5, }, - [7] = { skill_manaCostBase = 9, skill_durationBase = 4.6, }, - [8] = { skill_manaCostBase = 9, skill_durationBase = 4.7, }, - [9] = { skill_manaCostBase = 9, skill_durationBase = 4.8, }, - [10] = { skill_manaCostBase = 10, skill_durationBase = 4.9, }, - [11] = { skill_manaCostBase = 10, skill_durationBase = 5, }, - [12] = { skill_manaCostBase = 10, skill_durationBase = 5.1, }, - [13] = { skill_manaCostBase = 10, skill_durationBase = 5.2, }, - [14] = { skill_manaCostBase = 11, skill_durationBase = 5.3, }, - [15] = { skill_manaCostBase = 11, skill_durationBase = 5.4, }, - [16] = { skill_manaCostBase = 11, skill_durationBase = 5.5, }, - [17] = { skill_manaCostBase = 12, skill_durationBase = 5.6, }, - [18] = { skill_manaCostBase = 12, skill_durationBase = 5.7, }, - [19] = { skill_manaCostBase = 12, skill_durationBase = 5.8, }, - [20] = { skill_manaCostBase = 13, skill_durationBase = 5.9, }, - [21] = { skill_manaCostBase = 13, skill_durationBase = 6, }, - [22] = { skill_manaCostBase = 13, skill_durationBase = 6.1, }, - [23] = { skill_manaCostBase = 14, skill_durationBase = 6.2, }, - [24] = { skill_manaCostBase = 14, skill_durationBase = 6.3, }, - [25] = { skill_manaCostBase = 14, skill_durationBase = 6.4, }, - [26] = { skill_manaCostBase = 14, skill_durationBase = 6.5, }, - [27] = { skill_manaCostBase = 14, skill_durationBase = 6.6, }, - [28] = { skill_manaCostBase = 14, skill_durationBase = 6.7, }, - [29] = { skill_manaCostBase = 15, skill_durationBase = 6.8, }, - [30] = { skill_manaCostBase = 15, skill_durationBase = 6.9, }, - } + [1] = { 6, 4, }, + [2] = { 6, 4.1, }, + [3] = { 7, 4.2, }, + [4] = { 7, 4.3, }, + [5] = { 8, 4.4, }, + [6] = { 8, 4.5, }, + [7] = { 9, 4.6, }, + [8] = { 9, 4.7, }, + [9] = { 9, 4.8, }, + [10] = { 10, 4.9, }, + [11] = { 10, 5, }, + [12] = { 10, 5.1, }, + [13] = { 10, 5.2, }, + [14] = { 11, 5.3, }, + [15] = { 11, 5.4, }, + [16] = { 11, 5.5, }, + [17] = { 12, 5.6, }, + [18] = { 12, 5.7, }, + [19] = { 12, 5.8, }, + [20] = { 13, 5.9, }, + [21] = { 13, 6, }, + [22] = { 13, 6.1, }, + [23] = { 14, 6.2, }, + [24] = { 14, 6.3, }, + [25] = { 14, 6.4, }, + [26] = { 14, 6.5, }, + [27] = { 14, 6.6, }, + [28] = { 14, 6.7, }, + [29] = { 15, 6.8, }, + [30] = { 15, 6.9, }, + }, } gems["Spectral Throw"] = { - dexterity = true, - attack = true, projectile = true, - hit = true, - base = { - pierceChance = 100, + dexterity = true, + active_skill = true, + attack = true, + color = 2, + baseFlags = { + attack = true, + projectile = true, }, - quality = { - attackSpeedInc = 0.5, + skillTypes = { [1] = true, [48] = true, [3] = true, [6] = true, }, + baseMods = { + skill("castTime", 1), + --"base_is_projectile" = ? + mod("PierceChance", "BASE", 100), + }, + qualityMods = { + mod("Speed", "INC", 0.5, ModFlag.Attack, 0, nil), --"attack_speed_+%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { skill_manaCostBase = 7, attack_damageMore = 0.54, }, - [2] = { skill_manaCostBase = 7, attack_damageMore = 0.56, }, - [3] = { skill_manaCostBase = 7, attack_damageMore = 0.579, }, - [4] = { skill_manaCostBase = 7, attack_damageMore = 0.598, }, - [5] = { skill_manaCostBase = 7, attack_damageMore = 0.617, }, - [6] = { skill_manaCostBase = 7, attack_damageMore = 0.636, }, - [7] = { skill_manaCostBase = 7, attack_damageMore = 0.656, }, - [8] = { skill_manaCostBase = 7, attack_damageMore = 0.675, }, - [9] = { skill_manaCostBase = 7, attack_damageMore = 0.694, }, - [10] = { skill_manaCostBase = 7, attack_damageMore = 0.713, }, - [11] = { skill_manaCostBase = 8, attack_damageMore = 0.732, }, - [12] = { skill_manaCostBase = 8, attack_damageMore = 0.752, }, - [13] = { skill_manaCostBase = 8, attack_damageMore = 0.771, }, - [14] = { skill_manaCostBase = 8, attack_damageMore = 0.79, }, - [15] = { skill_manaCostBase = 8, attack_damageMore = 0.809, }, - [16] = { skill_manaCostBase = 9, attack_damageMore = 0.828, }, - [17] = { skill_manaCostBase = 9, attack_damageMore = 0.848, }, - [18] = { skill_manaCostBase = 9, attack_damageMore = 0.867, }, - [19] = { skill_manaCostBase = 9, attack_damageMore = 0.886, }, - [20] = { skill_manaCostBase = 9, attack_damageMore = 0.905, }, - [21] = { skill_manaCostBase = 10, attack_damageMore = 0.924, }, - [22] = { skill_manaCostBase = 10, attack_damageMore = 0.944, }, - [23] = { skill_manaCostBase = 10, attack_damageMore = 0.963, }, - [24] = { skill_manaCostBase = 10, attack_damageMore = 0.982, }, - [25] = { skill_manaCostBase = 10, attack_damageMore = 1, }, - [26] = { skill_manaCostBase = 10, attack_damageMore = 1.02, }, - [27] = { skill_manaCostBase = 10, attack_damageMore = 1.039, }, - [28] = { skill_manaCostBase = 10, attack_damageMore = 1.058, }, - [29] = { skill_manaCostBase = 10, attack_damageMore = 1.077, }, - [30] = { skill_manaCostBase = 10, attack_damageMore = 1.096, }, - } + [1] = { 7, -46, }, + [2] = { 7, -44, }, + [3] = { 7, -42.1, }, + [4] = { 7, -40.2, }, + [5] = { 7, -38.3, }, + [6] = { 7, -36.4, }, + [7] = { 7, -34.4, }, + [8] = { 7, -32.5, }, + [9] = { 7, -30.6, }, + [10] = { 7, -28.7, }, + [11] = { 8, -26.8, }, + [12] = { 8, -24.8, }, + [13] = { 8, -22.9, }, + [14] = { 8, -21, }, + [15] = { 8, -19.1, }, + [16] = { 9, -17.2, }, + [17] = { 9, -15.2, }, + [18] = { 9, -13.3, }, + [19] = { 9, -11.4, }, + [20] = { 9, -9.5, }, + [21] = { 10, -7.6, }, + [22] = { 10, -5.6, }, + [23] = { 10, -3.7, }, + [24] = { 10, -1.8, }, + [25] = { 10, nil, }, + [26] = { 10, 2, }, + [27] = { 10, 3.9, }, + [28] = { 10, 5.8, }, + [29] = { 10, 7.7, }, + [30] = { 10, 9.6, }, + }, +} +gems["Vaal Spectral Throw"] = { + projectile = true, + dexterity = true, + active_skill = true, + vaal = true, + attack = true, + color = 2, + baseFlags = { + attack = true, + projectile = true, + vaal = true, + }, + skillTypes = { [1] = true, [48] = true, [3] = true, [6] = true, [43] = true, }, + baseMods = { + skill("castTime", 1), + --"projectiles_nova" = ? + --"base_is_projectile" = ? + skill("cannotBeEvaded", true), --"global_always_hit" = ? + }, + qualityMods = { + mod("Speed", "INC", 0.5, ModFlag.Attack, 0, nil), --"attack_speed_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), + }, + levels = { + [1] = { -30, }, + [2] = { -28.2, }, + [3] = { -26.4, }, + [4] = { -24.6, }, + [5] = { -22.8, }, + [6] = { -21, }, + [7] = { -19.2, }, + [8] = { -17.4, }, + [9] = { -15.6, }, + [10] = { -13.8, }, + [11] = { -12, }, + [12] = { -10.2, }, + [13] = { -8.4, }, + [14] = { -6.6, }, + [15] = { -4.8, }, + [16] = { -3, }, + [17] = { -1.2, }, + [18] = { 0.6, }, + [19] = { 2.4, }, + [20] = { 4.2, }, + [21] = { 6, }, + [22] = { 7.8, }, + [23] = { 9.6, }, + [24] = { 11.4, }, + [25] = { 13.2, }, + [26] = { 15, }, + [27] = { 16.8, }, + [28] = { 18.6, }, + [29] = { 20.4, }, + [30] = { 22.2, }, + }, } gems["Split Arrow"] = { dexterity = true, + active_skill = true, attack = true, bow = true, - hit = true, - base = { + color = 2, + baseFlags = { + attack = true, + projectile = true, }, - quality = { - attackSpeedInc = 0.5, + skillTypes = { [1] = true, [48] = true, [3] = true, [22] = true, [17] = true, [19] = true, }, + baseMods = { + skill("castTime", 1), + --"skill_can_fire_arrows" = ? + }, + qualityMods = { + mod("Speed", "INC", 0.5, ModFlag.Attack, 0, nil), --"attack_speed_+%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = mod("Damage", "MORE", nil, ModFlag.Attack), + [3] = mod("ProjectileCount", "BASE", nil), --"base_number_of_additional_arrows" }, levels = { - [1] = { skill_manaCostBase = 6, attack_damageMore = 0.9, projectileCount = 4, }, - [2] = { skill_manaCostBase = 6, attack_damageMore = 0.91, projectileCount = 4, }, - [3] = { skill_manaCostBase = 6, attack_damageMore = 0.92, projectileCount = 4, }, - [4] = { skill_manaCostBase = 7, attack_damageMore = 0.93, projectileCount = 4, }, - [5] = { skill_manaCostBase = 7, attack_damageMore = 0.94, projectileCount = 4, }, - [6] = { skill_manaCostBase = 7, attack_damageMore = 0.95, projectileCount = 4, }, - [7] = { skill_manaCostBase = 7, attack_damageMore = 0.96, projectileCount = 4, }, - [8] = { skill_manaCostBase = 8, attack_damageMore = 0.97, projectileCount = 5, }, - [9] = { skill_manaCostBase = 8, attack_damageMore = 0.98, projectileCount = 5, }, - [10] = { skill_manaCostBase = 8, attack_damageMore = 0.99, projectileCount = 5, }, - [11] = { skill_manaCostBase = 8, attack_damageMore = 1, projectileCount = 5, }, - [12] = { skill_manaCostBase = 8, attack_damageMore = 1.01, projectileCount = 5, }, - [13] = { skill_manaCostBase = 9, attack_damageMore = 1.02, projectileCount = 5, }, - [14] = { skill_manaCostBase = 9, attack_damageMore = 1.03, projectileCount = 5, }, - [15] = { skill_manaCostBase = 9, attack_damageMore = 1.04, projectileCount = 6, }, - [16] = { skill_manaCostBase = 9, attack_damageMore = 1.05, projectileCount = 6, }, - [17] = { skill_manaCostBase = 9, attack_damageMore = 1.06, projectileCount = 6, }, - [18] = { skill_manaCostBase = 10, attack_damageMore = 1.07, projectileCount = 6, }, - [19] = { skill_manaCostBase = 10, attack_damageMore = 1.08, projectileCount = 6, }, - [20] = { skill_manaCostBase = 10, attack_damageMore = 1.09, projectileCount = 6, }, - [21] = { skill_manaCostBase = 10, attack_damageMore = 1.1, projectileCount = 6, }, - [22] = { skill_manaCostBase = 10, attack_damageMore = 1.11, projectileCount = 7, }, - [23] = { skill_manaCostBase = 11, attack_damageMore = 1.12, projectileCount = 7, }, - [24] = { skill_manaCostBase = 11, attack_damageMore = 1.13, projectileCount = 7, }, - [25] = { skill_manaCostBase = 11, attack_damageMore = 1.14, projectileCount = 7, }, - [26] = { skill_manaCostBase = 11, attack_damageMore = 1.15, projectileCount = 7, }, - [27] = { skill_manaCostBase = 11, attack_damageMore = 1.16, projectileCount = 7, }, - [28] = { skill_manaCostBase = 12, attack_damageMore = 1.17, projectileCount = 7, }, - [29] = { skill_manaCostBase = 12, attack_damageMore = 1.18, projectileCount = 8, }, - [30] = { skill_manaCostBase = 12, attack_damageMore = 1.19, projectileCount = 8, }, - } + [1] = { 6, -10, 4, }, + [2] = { 6, -9, 4, }, + [3] = { 6, -8, 4, }, + [4] = { 7, -7, 4, }, + [5] = { 7, -6, 4, }, + [6] = { 7, -5, 4, }, + [7] = { 7, -4, 4, }, + [8] = { 8, -3, 5, }, + [9] = { 8, -2, 5, }, + [10] = { 8, -1, 5, }, + [11] = { 8, nil, 5, }, + [12] = { 8, 1, 5, }, + [13] = { 9, 2, 5, }, + [14] = { 9, 3, 5, }, + [15] = { 9, 4, 6, }, + [16] = { 9, 5, 6, }, + [17] = { 9, 6, 6, }, + [18] = { 10, 7, 6, }, + [19] = { 10, 8, 6, }, + [20] = { 10, 9, 6, }, + [21] = { 10, 10, 6, }, + [22] = { 10, 11, 7, }, + [23] = { 11, 12, 7, }, + [24] = { 11, 13, 7, }, + [25] = { 11, 14, 7, }, + [26] = { 11, 15, 7, }, + [27] = { 11, 16, 7, }, + [28] = { 12, 17, 7, }, + [29] = { 12, 18, 8, }, + [30] = { 12, 19, 8, }, + }, } gems["Summon Ice Golem"] = { - dexterity = true, - spell = true, - minion = true, golem = true, + dexterity = true, + active_skill = true, cold = true, - hit = true, - base = { - skill_castTime = 1, - BuffEffect_Cond_HaveColdGolem = true, + minion = true, + spell = true, + color = 2, + baseFlags = { + spell = true, + minion = true, + golem = true, + cold = true, }, - quality = { - minionLifeInc = 1, - minion_damageInc = 1, + skillTypes = { [36] = true, [34] = true, [19] = true, [9] = true, [21] = true, [26] = true, [2] = true, [18] = true, [17] = true, [49] = true, [60] = true, }, + baseMods = { + skill("castTime", 1), + --"base_number_of_golems_allowed" = 1 + --"display_minion_monster_type" = 6 + mod("Misc", "LIST", { type = "Condition", var = "HaveColdGolem" }, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), + }, + qualityMods = { + mod("MinionLife", "INC", 1), --"minion_maximum_life_+%" = 1 + mod("Damage", "INC", 1, 0, KeywordFlag.Minion), --"minion_damage_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + --[2] = "base_actor_scale_+%" + [3] = mod("CritChance", "INC", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"ice_golem_grants_critical_strike_chance_+%" + [4] = mod("Accuracy", "INC", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"ice_golem_grants_accuracy_+%" + [5] = mod("MinionLife", "INC", nil), --"minion_maximum_life_+%" + --[6] = "display_minion_monster_level" }, levels = { - [1] = { skill_manaCostBase = 30, minionLifeInc = 30, BuffEffect_critChanceInc = 20, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 20, BuffEffect_accuracyInc = 20, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 20, }, - [2] = { skill_manaCostBase = 32, minionLifeInc = 32, BuffEffect_critChanceInc = 21, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 21, BuffEffect_accuracyInc = 21, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 21, }, - [3] = { skill_manaCostBase = 34, minionLifeInc = 34, BuffEffect_critChanceInc = 21, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 21, BuffEffect_accuracyInc = 21, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 21, }, - [4] = { skill_manaCostBase = 36, minionLifeInc = 36, BuffEffect_critChanceInc = 22, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 22, BuffEffect_accuracyInc = 22, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 22, }, - [5] = { skill_manaCostBase = 38, minionLifeInc = 38, BuffEffect_critChanceInc = 22, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 22, BuffEffect_accuracyInc = 22, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 22, }, - [6] = { skill_manaCostBase = 40, minionLifeInc = 40, BuffEffect_critChanceInc = 23, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 23, BuffEffect_accuracyInc = 23, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 23, }, - [7] = { skill_manaCostBase = 42, minionLifeInc = 42, BuffEffect_critChanceInc = 23, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 23, BuffEffect_accuracyInc = 23, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 23, }, - [8] = { skill_manaCostBase = 44, minionLifeInc = 44, BuffEffect_critChanceInc = 24, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 24, BuffEffect_accuracyInc = 24, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 24, }, - [9] = { skill_manaCostBase = 44, minionLifeInc = 46, BuffEffect_critChanceInc = 24, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 24, BuffEffect_accuracyInc = 24, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 24, }, - [10] = { skill_manaCostBase = 46, minionLifeInc = 48, BuffEffect_critChanceInc = 25, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 25, BuffEffect_accuracyInc = 25, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 25, }, - [11] = { skill_manaCostBase = 48, minionLifeInc = 50, BuffEffect_critChanceInc = 25, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 25, BuffEffect_accuracyInc = 25, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 25, }, - [12] = { skill_manaCostBase = 48, minionLifeInc = 52, BuffEffect_critChanceInc = 26, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 26, BuffEffect_accuracyInc = 26, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 26, }, - [13] = { skill_manaCostBase = 50, minionLifeInc = 54, BuffEffect_critChanceInc = 26, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 26, BuffEffect_accuracyInc = 26, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 26, }, - [14] = { skill_manaCostBase = 50, minionLifeInc = 56, BuffEffect_critChanceInc = 27, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 27, BuffEffect_accuracyInc = 27, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 27, }, - [15] = { skill_manaCostBase = 52, minionLifeInc = 58, BuffEffect_critChanceInc = 27, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 27, BuffEffect_accuracyInc = 27, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 27, }, - [16] = { skill_manaCostBase = 52, minionLifeInc = 60, BuffEffect_critChanceInc = 28, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 28, BuffEffect_accuracyInc = 28, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 28, }, - [17] = { skill_manaCostBase = 52, minionLifeInc = 62, BuffEffect_critChanceInc = 28, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 28, BuffEffect_accuracyInc = 28, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 28, }, - [18] = { skill_manaCostBase = 52, minionLifeInc = 64, BuffEffect_critChanceInc = 29, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 29, BuffEffect_accuracyInc = 29, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 29, }, - [19] = { skill_manaCostBase = 54, minionLifeInc = 66, BuffEffect_critChanceInc = 29, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 29, BuffEffect_accuracyInc = 29, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 29, }, - [20] = { skill_manaCostBase = 54, minionLifeInc = 68, BuffEffect_critChanceInc = 30, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 30, BuffEffect_accuracyInc = 30, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 30, }, - [21] = { skill_manaCostBase = 56, minionLifeInc = 70, BuffEffect_critChanceInc = 30, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 30, BuffEffect_accuracyInc = 30, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 30, }, - [22] = { skill_manaCostBase = 56, minionLifeInc = 72, BuffEffect_critChanceInc = 31, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 31, BuffEffect_accuracyInc = 31, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 31, }, - [23] = { skill_manaCostBase = 58, minionLifeInc = 74, BuffEffect_critChanceInc = 31, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 31, BuffEffect_accuracyInc = 31, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 31, }, - [24] = { skill_manaCostBase = 58, minionLifeInc = 76, BuffEffect_critChanceInc = 32, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 32, BuffEffect_accuracyInc = 32, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 32, }, - [25] = { skill_manaCostBase = 60, minionLifeInc = 78, BuffEffect_critChanceInc = 32, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 32, BuffEffect_accuracyInc = 32, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 32, }, - [26] = { skill_manaCostBase = 60, minionLifeInc = 80, BuffEffect_critChanceInc = 33, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 33, BuffEffect_accuracyInc = 33, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 33, }, - [27] = { skill_manaCostBase = 60, minionLifeInc = 82, BuffEffect_critChanceInc = 33, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 33, BuffEffect_accuracyInc = 33, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 33, }, - [28] = { skill_manaCostBase = 60, minionLifeInc = 84, BuffEffect_critChanceInc = 34, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 34, BuffEffect_accuracyInc = 34, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 34, }, - [29] = { skill_manaCostBase = 62, minionLifeInc = 86, BuffEffect_critChanceInc = 34, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 34, BuffEffect_accuracyInc = 34, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 34, }, - [30] = { skill_manaCostBase = 62, minionLifeInc = 88, BuffEffect_critChanceInc = 35, BuffEffect_CondMod_LiegeOfThePrimordial_critChanceInc = 35, BuffEffect_accuracyInc = 35, BuffEffect_CondMod_LiegeOfThePrimordial_accuracyInc = 35, }, - } + [1] = { 30, 0, 20, 20, 30, 34, }, + [2] = { 32, 1, 21, 21, 32, 36, }, + [3] = { 34, 1, 21, 21, 34, 38, }, + [4] = { 36, 2, 22, 22, 36, 40, }, + [5] = { 38, 2, 22, 22, 38, 42, }, + [6] = { 40, 3, 23, 23, 40, 44, }, + [7] = { 42, 3, 23, 23, 42, 46, }, + [8] = { 44, 4, 24, 24, 44, 48, }, + [9] = { 44, 4, 24, 24, 46, 50, }, + [10] = { 46, 5, 25, 25, 48, 52, }, + [11] = { 48, 5, 25, 25, 50, 54, }, + [12] = { 48, 6, 26, 26, 52, 56, }, + [13] = { 50, 6, 26, 26, 54, 58, }, + [14] = { 50, 7, 27, 27, 56, 60, }, + [15] = { 52, 7, 27, 27, 58, 62, }, + [16] = { 52, 8, 28, 28, 60, 64, }, + [17] = { 52, 8, 28, 28, 62, 66, }, + [18] = { 52, 9, 29, 29, 64, 68, }, + [19] = { 54, 9, 29, 29, 66, 69, }, + [20] = { 54, 10, 30, 30, 68, 70, }, + [21] = { 56, 10, 30, 30, 70, 72, }, + [22] = { 56, 11, 31, 31, 72, 74, }, + [23] = { 58, 11, 31, 31, 74, 76, }, + [24] = { 58, 12, 32, 32, 76, 78, }, + [25] = { 60, 12, 32, 32, 78, 80, }, + [26] = { 60, 13, 33, 33, 80, 82, }, + [27] = { 60, 13, 33, 33, 82, 84, }, + [28] = { 60, 14, 34, 34, 84, 86, }, + [29] = { 62, 14, 34, 34, 86, 88, }, + [30] = { 62, 15, 35, 35, 88, 90, }, + }, } gems["Temporal Chains"] = { - dexterity = true, curse = true, + dexterity = true, + active_skill = true, spell = true, - aoe = true, + area = true, duration = true, - base = { - skill_castTime = 0.5, - CurseEffect_debuff_durationMore = 1 / 0.6, + color = 2, + baseFlags = { + spell = true, + curse = true, + area = true, }, - quality = { + 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("BuffExpireFaster", "MORE", -40, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"buff_time_passed_-%" = 40 + --"curse_effect_+%_vs_players" = -40 + --"base_deal_no_damage" = ? + skill("debuff", true), + }, + qualityMods = { + --"temporal_chains_action_speed_+%_final" = -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] = "temporal_chains_action_speed_+%_final" }, levels = { - [1] = { skill_manaCostBase = 24, skill_durationBase = 5, curse_aoeRadiusInc = 0, }, - [2] = { skill_manaCostBase = 26, skill_durationBase = 5.05, curse_aoeRadiusInc = 2, }, - [3] = { skill_manaCostBase = 27, skill_durationBase = 5.1, curse_aoeRadiusInc = 4, }, - [4] = { skill_manaCostBase = 29, skill_durationBase = 5.15, curse_aoeRadiusInc = 6, }, - [5] = { skill_manaCostBase = 30, skill_durationBase = 5.2, curse_aoeRadiusInc = 8, }, - [6] = { skill_manaCostBase = 32, skill_durationBase = 5.25, curse_aoeRadiusInc = 10, }, - [7] = { skill_manaCostBase = 34, skill_durationBase = 5.3, curse_aoeRadiusInc = 12, }, - [8] = { skill_manaCostBase = 35, skill_durationBase = 5.35, curse_aoeRadiusInc = 14, }, - [9] = { skill_manaCostBase = 37, skill_durationBase = 5.4, curse_aoeRadiusInc = 16, }, - [10] = { skill_manaCostBase = 38, skill_durationBase = 5.45, curse_aoeRadiusInc = 18, }, - [11] = { skill_manaCostBase = 39, skill_durationBase = 5.5, curse_aoeRadiusInc = 20, }, - [12] = { skill_manaCostBase = 40, skill_durationBase = 5.55, curse_aoeRadiusInc = 22, }, - [13] = { skill_manaCostBase = 42, skill_durationBase = 5.6, curse_aoeRadiusInc = 24, }, - [14] = { skill_manaCostBase = 43, skill_durationBase = 5.65, curse_aoeRadiusInc = 26, }, - [15] = { skill_manaCostBase = 44, skill_durationBase = 5.7, curse_aoeRadiusInc = 28, }, - [16] = { skill_manaCostBase = 45, skill_durationBase = 5.75, curse_aoeRadiusInc = 30, }, - [17] = { skill_manaCostBase = 46, skill_durationBase = 5.8, curse_aoeRadiusInc = 32, }, - [18] = { skill_manaCostBase = 47, skill_durationBase = 5.85, curse_aoeRadiusInc = 34, }, - [19] = { skill_manaCostBase = 48, skill_durationBase = 5.9, curse_aoeRadiusInc = 36, }, - [20] = { skill_manaCostBase = 50, skill_durationBase = 5.95, curse_aoeRadiusInc = 38, }, - [21] = { skill_manaCostBase = 51, skill_durationBase = 6, curse_aoeRadiusInc = 40, }, - [22] = { skill_manaCostBase = 52, skill_durationBase = 6.05, curse_aoeRadiusInc = 42, }, - [23] = { skill_manaCostBase = 53, skill_durationBase = 6.1, curse_aoeRadiusInc = 44, }, - [24] = { skill_manaCostBase = 54, skill_durationBase = 6.15, curse_aoeRadiusInc = 46, }, - [25] = { skill_manaCostBase = 56, skill_durationBase = 6.2, curse_aoeRadiusInc = 48, }, - [26] = { skill_manaCostBase = 57, skill_durationBase = 6.25, curse_aoeRadiusInc = 50, }, - [27] = { skill_manaCostBase = 58, skill_durationBase = 6.3, curse_aoeRadiusInc = 52, }, - [28] = { skill_manaCostBase = 59, skill_durationBase = 6.35, curse_aoeRadiusInc = 54, }, - [29] = { skill_manaCostBase = 60, skill_durationBase = 6.4, curse_aoeRadiusInc = 56, }, - [30] = { skill_manaCostBase = 61, skill_durationBase = 6.45, curse_aoeRadiusInc = 58, }, - } + [1] = { 24, 5, 0, -20, }, + [2] = { 26, 5.05, 2, -20, }, + [3] = { 27, 5.1, 4, -21, }, + [4] = { 29, 5.15, 6, -21, }, + [5] = { 30, 5.2, 8, -22, }, + [6] = { 32, 5.25, 10, -22, }, + [7] = { 34, 5.3, 12, -23, }, + [8] = { 35, 5.35, 14, -23, }, + [9] = { 37, 5.4, 16, -24, }, + [10] = { 38, 5.45, 18, -24, }, + [11] = { 39, 5.5, 20, -25, }, + [12] = { 40, 5.55, 22, -25, }, + [13] = { 42, 5.6, 24, -26, }, + [14] = { 43, 5.65, 26, -26, }, + [15] = { 44, 5.7, 28, -27, }, + [16] = { 45, 5.75, 30, -27, }, + [17] = { 46, 5.8, 32, -28, }, + [18] = { 47, 5.85, 34, -28, }, + [19] = { 48, 5.9, 36, -29, }, + [20] = { 50, 5.95, 38, -29, }, + [21] = { 51, 6, 40, -30, }, + [22] = { 52, 6.05, 42, -30, }, + [23] = { 53, 6.1, 44, -31, }, + [24] = { 54, 6.15, 46, -31, }, + [25] = { 56, 6.2, 48, -32, }, + [26] = { 57, 6.25, 50, -32, }, + [27] = { 58, 6.3, 52, -33, }, + [28] = { 59, 6.35, 54, -33, }, + [29] = { 60, 6.4, 56, -34, }, + [30] = { 61, 6.45, 58, -34, }, + }, } gems["Tornado Shot"] = { dexterity = true, + active_skill = true, attack = true, bow = true, - hit = true, - base = { + color = 2, + baseFlags = { + attack = true, + projectile = true, }, - quality = { - projectile_damageInc = 1, + skillTypes = { [1] = true, [3] = true, [17] = true, [19] = true, [22] = true, [48] = true, }, + baseMods = { + skill("castTime", 1), + --"tornado_shot_num_of_secondary_projectiles" = 3 + --"base_is_projectile" = ? + --"skill_can_fire_arrows" = ? + }, + qualityMods = { + mod("Damage", "INC", 1, ModFlag.Projectile), --"projectile_damage_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { skill_manaCostBase = 8, attack_damageMore = 0.9, }, - [2] = { skill_manaCostBase = 8, attack_damageMore = 0.91, }, - [3] = { skill_manaCostBase = 8, attack_damageMore = 0.92, }, - [4] = { skill_manaCostBase = 8, attack_damageMore = 0.93, }, - [5] = { skill_manaCostBase = 9, attack_damageMore = 0.94, }, - [6] = { skill_manaCostBase = 9, attack_damageMore = 0.95, }, - [7] = { skill_manaCostBase = 9, attack_damageMore = 0.96, }, - [8] = { skill_manaCostBase = 9, attack_damageMore = 0.97, }, - [9] = { skill_manaCostBase = 9, attack_damageMore = 0.98, }, - [10] = { skill_manaCostBase = 9, attack_damageMore = 0.99, }, - [11] = { skill_manaCostBase = 9, attack_damageMore = 1, }, - [12] = { skill_manaCostBase = 10, attack_damageMore = 1.01, }, - [13] = { skill_manaCostBase = 10, attack_damageMore = 1.02, }, - [14] = { skill_manaCostBase = 10, attack_damageMore = 1.03, }, - [15] = { skill_manaCostBase = 10, attack_damageMore = 1.04, }, - [16] = { skill_manaCostBase = 10, attack_damageMore = 1.05, }, - [17] = { skill_manaCostBase = 10, attack_damageMore = 1.06, }, - [18] = { skill_manaCostBase = 10, attack_damageMore = 1.07, }, - [19] = { skill_manaCostBase = 10, attack_damageMore = 1.08, }, - [20] = { skill_manaCostBase = 10, attack_damageMore = 1.09, }, - [21] = { skill_manaCostBase = 10, attack_damageMore = 1.1, }, - [22] = { skill_manaCostBase = 10, attack_damageMore = 1.11, }, - [23] = { skill_manaCostBase = 11, attack_damageMore = 1.12, }, - [24] = { skill_manaCostBase = 11, attack_damageMore = 1.13, }, - [25] = { skill_manaCostBase = 11, attack_damageMore = 1.14, }, - [26] = { skill_manaCostBase = 11, attack_damageMore = 1.15, }, - [27] = { skill_manaCostBase = 11, attack_damageMore = 1.16, }, - [28] = { skill_manaCostBase = 12, attack_damageMore = 1.17, }, - [29] = { skill_manaCostBase = 12, attack_damageMore = 1.18, }, - [30] = { skill_manaCostBase = 12, attack_damageMore = 1.19, }, - } + [1] = { 8, -10, }, + [2] = { 8, -9, }, + [3] = { 8, -8, }, + [4] = { 8, -7, }, + [5] = { 9, -6, }, + [6] = { 9, -5, }, + [7] = { 9, -4, }, + [8] = { 9, -3, }, + [9] = { 9, -2, }, + [10] = { 9, -1, }, + [11] = { 9, nil, }, + [12] = { 10, 1, }, + [13] = { 10, 2, }, + [14] = { 10, 3, }, + [15] = { 10, 4, }, + [16] = { 10, 5, }, + [17] = { 10, 6, }, + [18] = { 10, 7, }, + [19] = { 10, 8, }, + [20] = { 10, 9, }, + [21] = { 10, 10, }, + [22] = { 10, 11, }, + [23] = { 11, 12, }, + [24] = { 11, 13, }, + [25] = { 11, 14, }, + [26] = { 11, 15, }, + [27] = { 11, 16, }, + [28] = { 12, 17, }, + [29] = { 12, 18, }, + [30] = { 12, 19, }, + }, } gems["Viper Strike"] = { dexterity = true, + active_skill = true, attack = true, - melee = true, duration = true, + melee = true, chaos = true, - hit = true, - base = { - skill_manaCostBase = 5, - skill_physicalConvertTochaos = 25, - poisonChance = 100, - poison_durationMore = 4, + color = 2, + baseFlags = { + attack = true, + melee = true, + duration = true, + chaos = true, }, - quality = { - attackSpeedInc = 0.5 + skillTypes = { [1] = true, [6] = true, [12] = true, [28] = true, [24] = true, [25] = true, [40] = true, [50] = true, }, + baseMods = { + skill("castTime", 1), + skill("manaCost", 5), + mod("PhysicalDamageConvertToChaos", "BASE", 25, 0, 0, nil), --"base_physical_damage_%_to_convert_to_chaos" = 25 + mod("PoisonChance", "BASE", 100), --"base_chance_to_poison_on_hit_%" = 100 + skill("duration", 8), --"base_skill_effect_duration" = 8000 + skill("poisonDurationIsSkillDuration", true), --"poison_duration_is_skill_duration" = ? + }, + qualityMods = { + mod("Speed", "INC", 0.5, ModFlag.Attack, 0, nil), --"attack_speed_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { attack_damageMore = 1.3, }, - [2] = { attack_damageMore = 1.326, }, - [3] = { attack_damageMore = 1.352, }, - [4] = { attack_damageMore = 1.378, }, - [5] = { attack_damageMore = 1.404, }, - [6] = { attack_damageMore = 1.43, }, - [7] = { attack_damageMore = 1.456, }, - [8] = { attack_damageMore = 1.482, }, - [9] = { attack_damageMore = 1.508, }, - [10] = { attack_damageMore = 1.534, }, - [11] = { attack_damageMore = 1.56, }, - [12] = { attack_damageMore = 1.586, }, - [13] = { attack_damageMore = 1.612, }, - [14] = { attack_damageMore = 1.638, }, - [15] = { attack_damageMore = 1.664, }, - [16] = { attack_damageMore = 1.69, }, - [17] = { attack_damageMore = 1.716, }, - [18] = { attack_damageMore = 1.742, }, - [19] = { attack_damageMore = 1.768, }, - [20] = { attack_damageMore = 1.794, }, - [21] = { attack_damageMore = 1.82, }, - [22] = { attack_damageMore = 1.846, }, - [23] = { attack_damageMore = 1.872, }, - [24] = { attack_damageMore = 1.898, }, - [25] = { attack_damageMore = 1.924, }, - [26] = { attack_damageMore = 1.95, }, - [27] = { attack_damageMore = 1.976, }, - [28] = { attack_damageMore = 2.002, }, - [29] = { attack_damageMore = 2.028, }, - [30] = { attack_damageMore = 2.054, }, - } + [1] = { 30, }, + [2] = { 32.6, }, + [3] = { 35.2, }, + [4] = { 37.8, }, + [5] = { 40.4, }, + [6] = { 43, }, + [7] = { 45.6, }, + [8] = { 48.2, }, + [9] = { 50.8, }, + [10] = { 53.4, }, + [11] = { 56, }, + [12] = { 58.6, }, + [13] = { 61.2, }, + [14] = { 63.8, }, + [15] = { 66.4, }, + [16] = { 69, }, + [17] = { 71.6, }, + [18] = { 74.2, }, + [19] = { 76.8, }, + [20] = { 79.4, }, + [21] = { 82, }, + [22] = { 84.6, }, + [23] = { 87.2, }, + [24] = { 89.8, }, + [25] = { 92.4, }, + [26] = { 95, }, + [27] = { 97.6, }, + [28] = { 100.2, }, + [29] = { 102.8, }, + [30] = { 105.4, }, + }, } gems["Whirling Blades"] = { dexterity = true, + active_skill = true, attack = true, - melee = true, movement = true, - hit = true, - base = { - skill_attackTime = 2.6, - skill_manaCostBase = 15, + melee = true, + color = 2, + baseFlags = { + attack = true, + melee = true, + movement = true, }, - quality = { - attackSpeedInc = 1, + skillTypes = { [1] = true, [6] = true, [24] = true, [38] = true, }, + baseMods = { + skill("castTime", 2.6), + skill("manaCost", 15), + --"ignores_proximity_shield" = ? + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + skill("castTimeOverridesAttackTime", true), --"cast_time_overrides_attack_duration" = ? + }, + qualityMods = { + mod("Speed", "INC", 0.5, ModFlag.Attack, 0, nil), --"attack_speed_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { attack_damageMore = 0.8, }, - [2] = { attack_damageMore = 0.81, }, - [3] = { attack_damageMore = 0.82, }, - [4] = { attack_damageMore = 0.83, }, - [5] = { attack_damageMore = 0.84, }, - [6] = { attack_damageMore = 0.85, }, - [7] = { attack_damageMore = 0.86, }, - [8] = { attack_damageMore = 0.87, }, - [9] = { attack_damageMore = 0.88, }, - [10] = { attack_damageMore = 0.89, }, - [11] = { attack_damageMore = 0.9, }, - [12] = { attack_damageMore = 0.91, }, - [13] = { attack_damageMore = 0.92, }, - [14] = { attack_damageMore = 0.93, }, - [15] = { attack_damageMore = 0.94, }, - [16] = { attack_damageMore = 0.95, }, - [17] = { attack_damageMore = 0.96, }, - [18] = { attack_damageMore = 0.97, }, - [19] = { attack_damageMore = 0.98, }, - [20] = { attack_damageMore = 0.99, }, - [21] = { attack_damageMore = 1, }, - [22] = { attack_damageMore = 1.01, }, - [23] = { attack_damageMore = 1.02, }, - [24] = { attack_damageMore = 1.03, }, - [25] = { attack_damageMore = 1.04, }, - [26] = { attack_damageMore = 1.05, }, - [27] = { attack_damageMore = 1.06, }, - [28] = { attack_damageMore = 1.07, }, - [29] = { attack_damageMore = 1.08, }, - [30] = { attack_damageMore = 1.09, }, - } + [1] = { -20, }, + [2] = { -19, }, + [3] = { -18, }, + [4] = { -17, }, + [5] = { -16, }, + [6] = { -15, }, + [7] = { -14, }, + [8] = { -13, }, + [9] = { -12, }, + [10] = { -11, }, + [11] = { -10, }, + [12] = { -9, }, + [13] = { -8, }, + [14] = { -7, }, + [15] = { -6, }, + [16] = { -5, }, + [17] = { -4, }, + [18] = { -3, }, + [19] = { -2, }, + [20] = { -1, }, + [21] = { nil, }, + [22] = { 1, }, + [23] = { 2, }, + [24] = { 3, }, + [25] = { 4, }, + [26] = { 5, }, + [27] = { 6, }, + [28] = { 7, }, + [29] = { 8, }, + [30] = { 9, }, + }, } gems["Wild Strike"] = { + projectile = true, dexterity = true, + active_skill = true, attack = true, melee = true, - projectile = true, - chaining = true, - aoe = true, lightning = true, cold = true, fire = true, - hit = true, + area = true, + chaining = true, parts = { { name = "Fire hit", melee = true, projectile = false, chaining = false, - aoe = false, + area = false, }, { name = "Fire explosion", melee = false, projectile = false, chaining = false, - aoe = true, + area = true, }, { name = "Lightning hit", melee = true, projectile = false, chaining = false, - aoe = false, + area = false, }, { name = "Lightning bolt", melee = false, projectile = false, chaining = true, - aoe = false, + area = false, }, { name = "Cold hit", melee = true, projectile = false, chaining = false, - aoe = false, + area = false, }, { name = "Icy wave", melee = false, projectile = true, chaining = false, - aoe = false, + area = false, }, }, - base = { - skill_manaCostBase = 6, - projectileCount = 2, - SkillPart1_skill_physicalConvertTofire = 60, - SkillPart2_skill_physicalConvertTofire = 60, - SkillPart3_skill_physicalConvertTolightning = 60, - SkillPart4_skill_physicalConvertTolightning = 60, - SkillPart5_skill_physicalGainAscold = 60, - SkillPart6_skill_physicalGainAscold = 60, + color = 2, + baseFlags = { + attack = true, + melee = true, + projectile = true, + chaining = true, + area = true, + lightning = true, + cold = true, + fire = true, }, - quality = { - elementalInc = 1, + skillTypes = { [1] = true, [6] = true, [25] = true, [28] = true, [24] = true, [35] = true, [34] = true, [33] = true, [3] = true, [11] = true, [23] = true, [48] = true, }, + baseMods = { + skill("castTime", 1), + skill("manaCost", 6), + --"elemental_strike_physical_damage_%_to_convert" = 60 + --"fixed_projectile_spread" = 70 + mod("ProjectileCount", "BASE", 2), --"number_of_additional_projectiles" = 2 + --"show_number_of_projectiles" = ? + mod("PierceChance", "BASE", 100), --"always_pierce" = ? + skill("PhysicalDamageConvertToFire", 60, { type = "SkillPart", skillPart = 1 }), + skill("PhysicalDamageConvertToFire", 60, { type = "SkillPart", skillPart = 2 }), + skill("PhysicalDamageConvertToLightning", 60, { type = "SkillPart", skillPart = 3 }), + skill("PhysicalDamageConvertToLightning", 60, { type = "SkillPart", skillPart = 4 }), + skill("PhysicalDamageConvertToCold", 60, { type = "SkillPart", skillPart = 5 }), + skill("PhysicalDamageConvertToCold", 60, { type = "SkillPart", skillPart = 6 }), + }, + qualityMods = { + mod("ElementalDamage", "INC", 1), --"elemental_damage_+%" = 1 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), + [2] = mod("ChainCount", "BASE", nil), --"number_of_additional_projectiles_in_chain" + [3] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" }, levels = { - [1] = { attack_damageMore = 1.3, chainCount = 4, aoeRadiusInc = 0, }, - [2] = { attack_damageMore = 1.324, chainCount = 4, aoeRadiusInc = 1, }, - [3] = { attack_damageMore = 1.348, chainCount = 4, aoeRadiusInc = 2, }, - [4] = { attack_damageMore = 1.372, chainCount = 4, aoeRadiusInc = 3, }, - [5] = { attack_damageMore = 1.396, chainCount = 4, aoeRadiusInc = 4, }, - [6] = { attack_damageMore = 1.42, chainCount = 4, aoeRadiusInc = 5, }, - [7] = { attack_damageMore = 1.444, chainCount = 5, aoeRadiusInc = 6, }, - [8] = { attack_damageMore = 1.468, chainCount = 5, aoeRadiusInc = 7, }, - [9] = { attack_damageMore = 1.492, chainCount = 5, aoeRadiusInc = 8, }, - [10] = { attack_damageMore = 1.516, chainCount = 5, aoeRadiusInc = 9, }, - [11] = { attack_damageMore = 1.54, chainCount = 5, aoeRadiusInc = 10, }, - [12] = { attack_damageMore = 1.564, chainCount = 5, aoeRadiusInc = 11, }, - [13] = { attack_damageMore = 1.588, chainCount = 6, aoeRadiusInc = 12, }, - [14] = { attack_damageMore = 1.612, chainCount = 6, aoeRadiusInc = 13, }, - [15] = { attack_damageMore = 1.636, chainCount = 6, aoeRadiusInc = 14, }, - [16] = { attack_damageMore = 1.66, chainCount = 6, aoeRadiusInc = 15, }, - [17] = { attack_damageMore = 1.684, chainCount = 6, aoeRadiusInc = 16, }, - [18] = { attack_damageMore = 1.708, chainCount = 6, aoeRadiusInc = 17, }, - [19] = { attack_damageMore = 1.732, chainCount = 7, aoeRadiusInc = 18, }, - [20] = { attack_damageMore = 1.756, chainCount = 7, aoeRadiusInc = 19, }, - [21] = { attack_damageMore = 1.78, chainCount = 7, aoeRadiusInc = 20, }, - [22] = { attack_damageMore = 1.804, chainCount = 7, aoeRadiusInc = 21, }, - [23] = { attack_damageMore = 1.828, chainCount = 7, aoeRadiusInc = 22, }, - [24] = { attack_damageMore = 1.852, chainCount = 7, aoeRadiusInc = 23, }, - [25] = { attack_damageMore = 1.876, chainCount = 8, aoeRadiusInc = 24, }, - [26] = { attack_damageMore = 1.9, chainCount = 8, aoeRadiusInc = 25, }, - [27] = { attack_damageMore = 1.924, chainCount = 8, aoeRadiusInc = 26, }, - [28] = { attack_damageMore = 1.948, chainCount = 8, aoeRadiusInc = 27, }, - [29] = { attack_damageMore = 1.972, chainCount = 8, aoeRadiusInc = 28, }, - [30] = { attack_damageMore = 1.996, chainCount = 8, aoeRadiusInc = 29, }, - } + [1] = { 30, 4, 0, }, + [2] = { 32.4, 4, 1, }, + [3] = { 34.8, 4, 2, }, + [4] = { 37.2, 4, 3, }, + [5] = { 39.6, 4, 4, }, + [6] = { 42, 4, 5, }, + [7] = { 44.4, 5, 6, }, + [8] = { 46.8, 5, 7, }, + [9] = { 49.2, 5, 8, }, + [10] = { 51.6, 5, 9, }, + [11] = { 54, 5, 10, }, + [12] = { 56.4, 5, 11, }, + [13] = { 58.8, 6, 12, }, + [14] = { 61.2, 6, 13, }, + [15] = { 63.6, 6, 14, }, + [16] = { 66, 6, 15, }, + [17] = { 68.4, 6, 16, }, + [18] = { 70.8, 6, 17, }, + [19] = { 73.2, 7, 18, }, + [20] = { 75.6, 7, 19, }, + [21] = { 78, 7, 20, }, + [22] = { 80.4, 7, 21, }, + [23] = { 82.8, 7, 22, }, + [24] = { 85.2, 7, 23, }, + [25] = { 87.6, 8, 24, }, + [26] = { 90, 8, 25, }, + [27] = { 92.4, 8, 26, }, + [28] = { 94.8, 8, 27, }, + [29] = { 97.2, 8, 28, }, + [30] = { 99.6, 8, 29, }, + }, } - - diff --git a/Data/Gems/act_int.lua b/Data/Gems/act_int.lua index ddd1e166..d02bb690 100644 --- a/Data/Gems/act_int.lua +++ b/Data/Gems/act_int.lua @@ -1,892 +1,1504 @@ -- Path of Building -- --- Active Intelligence skills +-- Active Strength skills -- Skill gem data (c) Grinding Gear Games -- -local gems = ... +local gems, mod, flag, skill = ... gems["Arc"] = { intelligence = true, + active_skill = true, spell = true, chaining = true, lightning = true, - hit = true, - base = { - skill_castTime = 0.8, - skill_damageEffectiveness = 0.7, - skill_critChanceBase = 5, - shockChance = 10, + color = 3, + baseFlags = { + spell = true, + chaining = true, + lightning = true, }, - quality = { - shockChance = 0.5, + skillTypes = { [2] = true, [10] = true, [17] = true, [18] = true, [19] = true, [23] = true, [26] = true, [36] = true, [45] = true, [35] = true, }, + baseMods = { + skill("castTime", 0.8), + skill("damageEffectiveness", 0.7), + skill("critChance", 5), + mod("EnemyShockChance", "BASE", 10), --"base_chance_to_shock_%" = 10 + }, + qualityMods = { + mod("EnemyShockChance", "BASE", 0.5), --"base_chance_to_shock_%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("LightningMin", nil), --"spell_minimum_base_lightning_damage" + [3] = skill("LightningMax", nil), --"spell_maximum_base_lightning_damage" + [4] = mod("ChainCount", "BASE", nil), --"number_of_additional_projectiles_in_chain" }, levels = { - [1] = { skill_manaCostBase = 9, skill_lightningMin = 2, skill_lightningMax = 35, chainCount = 2, }, - [2] = { skill_manaCostBase = 10, skill_lightningMin = 2, skill_lightningMax = 44, chainCount = 2, }, - [3] = { skill_manaCostBase = 11, skill_lightningMin = 3, skill_lightningMax = 58, chainCount = 2, }, - [4] = { skill_manaCostBase = 12, skill_lightningMin = 4, skill_lightningMax = 76, chainCount = 3, }, - [5] = { skill_manaCostBase = 13, skill_lightningMin = 5, skill_lightningMax = 97, chainCount = 3, }, - [6] = { skill_manaCostBase = 14, skill_lightningMin = 6, skill_lightningMax = 123, chainCount = 3, }, - [7] = { skill_manaCostBase = 16, skill_lightningMin = 8, skill_lightningMax = 154, chainCount = 3, }, - [8] = { skill_manaCostBase = 16, skill_lightningMin = 10, skill_lightningMax = 182, chainCount = 4, }, - [9] = { skill_manaCostBase = 17, skill_lightningMin = 11, skill_lightningMax = 214, chainCount = 4, }, - [10] = { skill_manaCostBase = 18, skill_lightningMin = 13, skill_lightningMax = 250, chainCount = 4, }, - [11] = { skill_manaCostBase = 19, skill_lightningMin = 15, skill_lightningMax = 292, chainCount = 4, }, - [12] = { skill_manaCostBase = 20, skill_lightningMin = 18, skill_lightningMax = 340, chainCount = 5, }, - [13] = { skill_manaCostBase = 21, skill_lightningMin = 21, skill_lightningMax = 395, chainCount = 5, }, - [14] = { skill_manaCostBase = 22, skill_lightningMin = 24, skill_lightningMax = 458, chainCount = 5, }, - [15] = { skill_manaCostBase = 23, skill_lightningMin = 28, skill_lightningMax = 529, chainCount = 5, }, - [16] = { skill_manaCostBase = 24, skill_lightningMin = 32, skill_lightningMax = 610, chainCount = 6, }, - [17] = { skill_manaCostBase = 24, skill_lightningMin = 35, skill_lightningMax = 671, chainCount = 6, }, - [18] = { skill_manaCostBase = 25, skill_lightningMin = 39, skill_lightningMax = 736, chainCount = 6, }, - [19] = { skill_manaCostBase = 25, skill_lightningMin = 43, skill_lightningMax = 808, chainCount = 6, }, - [20] = { skill_manaCostBase = 26, skill_lightningMin = 47, skill_lightningMax = 886, chainCount = 7, }, - [21] = { skill_manaCostBase = 26, skill_lightningMin = 51, skill_lightningMax = 971, chainCount = 7, }, - [22] = { skill_manaCostBase = 26, skill_lightningMin = 56, skill_lightningMax = 1064, chainCount = 7, }, - [23] = { skill_manaCostBase = 27, skill_lightningMin = 61, skill_lightningMax = 1164, chainCount = 7, }, - [24] = { skill_manaCostBase = 28, skill_lightningMin = 67, skill_lightningMax = 1274, chainCount = 8, }, - [25] = { skill_manaCostBase = 29, skill_lightningMin = 73, skill_lightningMax = 1393, chainCount = 8, }, - [26] = { skill_manaCostBase = 30, skill_lightningMin = 80, skill_lightningMax = 1523, chainCount = 8, }, - [27] = { skill_manaCostBase = 30, skill_lightningMin = 88, skill_lightningMax = 1663, chainCount = 8, }, - [28] = { skill_manaCostBase = 30, skill_lightningMin = 96, skill_lightningMax = 1816, chainCount = 9, }, - [29] = { skill_manaCostBase = 31, skill_lightningMin = 104, skill_lightningMax = 1983, chainCount = 9, }, - [30] = { skill_manaCostBase = 32, skill_lightningMin = 114, skill_lightningMax = 2163, chainCount = 9, }, - } + [1] = { 9, 2, 35, 2, }, + [2] = { 10, 2, 44, 2, }, + [3] = { 11, 3, 58, 2, }, + [4] = { 12, 4, 76, 3, }, + [5] = { 13, 5, 97, 3, }, + [6] = { 14, 6, 123, 3, }, + [7] = { 16, 8, 154, 3, }, + [8] = { 16, 10, 182, 4, }, + [9] = { 17, 11, 214, 4, }, + [10] = { 18, 13, 250, 4, }, + [11] = { 19, 15, 292, 4, }, + [12] = { 20, 18, 340, 5, }, + [13] = { 21, 21, 395, 5, }, + [14] = { 22, 24, 458, 5, }, + [15] = { 23, 28, 529, 5, }, + [16] = { 24, 32, 610, 6, }, + [17] = { 24, 35, 671, 6, }, + [18] = { 25, 39, 736, 6, }, + [19] = { 25, 43, 808, 6, }, + [20] = { 26, 47, 886, 7, }, + [21] = { 26, 51, 971, 7, }, + [22] = { 26, 56, 1064, 7, }, + [23] = { 27, 61, 1164, 7, }, + [24] = { 28, 67, 1274, 8, }, + [25] = { 29, 73, 1393, 8, }, + [26] = { 30, 80, 1523, 8, }, + [27] = { 30, 88, 1663, 8, }, + [28] = { 30, 96, 1816, 9, }, + [29] = { 31, 104, 1983, 9, }, + [30] = { 32, 114, 2163, 9, }, + }, +} +gems["Vaal Arc"] = { + intelligence = true, + active_skill = true, + vaal = true, + spell = true, + chaining = true, + lightning = true, + color = 3, + baseFlags = { + spell = true, + lightning = true, + vaal = true, + }, + skillTypes = { [2] = true, [10] = true, [17] = true, [18] = true, [19] = true, [23] = true, [26] = true, [43] = true, [35] = true, }, + baseMods = { + skill("castTime", 0.8), + skill("damageEffectiveness", 0.8), + skill("critChance", 5), + mod("EnemyShockChance", "BASE", 100), --"base_chance_to_shock_%" = 100 + mod("ChainCount", "BASE", 40), --"number_of_additional_projectiles_in_chain" = 40 + }, + qualityMods = { + mod("EnemyShockDuration", "INC", 1.5), --"shock_duration_+%" = 1.5 + }, + levelMods = { + [1] = skill("LightningMin", nil), --"spell_minimum_base_lightning_damage" + [2] = skill("LightningMax", nil), --"spell_maximum_base_lightning_damage" + }, + levels = { + [1] = { 2, 35, }, + [2] = { 2, 44, }, + [3] = { 3, 59, }, + [4] = { 4, 77, }, + [5] = { 5, 99, }, + [6] = { 7, 125, }, + [7] = { 8, 158, }, + [8] = { 10, 187, }, + [9] = { 12, 220, }, + [10] = { 14, 259, }, + [11] = { 16, 303, }, + [12] = { 19, 353, }, + [13] = { 22, 411, }, + [14] = { 25, 478, }, + [15] = { 29, 554, }, + [16] = { 34, 641, }, + [17] = { 37, 706, }, + [18] = { 41, 777, }, + [19] = { 45, 854, }, + [20] = { 49, 938, }, + [21] = { 54, 1030, }, + [22] = { 60, 1131, }, + [23] = { 65, 1240, }, + [24] = { 72, 1359, }, + [25] = { 78, 1489, }, + [26] = { 86, 1631, }, + [27] = { 94, 1785, }, + [28] = { 103, 1953, }, + [29] = { 112, 2136, }, + [30] = { 123, 2335, }, + }, } gems["Arctic Breath"] = { - intelligence = true, - spell = true, - aoe = true, projectile = true, + intelligence = true, + active_skill = true, + spell = true, duration = true, + area = true, cold = true, - hit = true, - base = { - skill_castTime = 0.8, - skill_damageEffectiveness = 1, - skill_critChanceBase = 5, + color = 3, + baseFlags = { + spell = true, + area = true, + projectile = true, + duration = true, + cold = true, }, - quality = { - aoeRadiusInc = 0.5, + skillTypes = { [2] = true, [3] = true, [10] = true, [17] = true, [18] = true, [19] = true, [12] = true, [11] = true, [26] = true, [36] = true, [34] = true, [60] = true, }, + baseMods = { + skill("castTime", 0.8), + skill("critChance", 5), + --"base_is_projectile" = 1 + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("ColdMin", nil), --"spell_minimum_base_cold_damage" + [3] = skill("ColdMax", nil), --"spell_maximum_base_cold_damage" + [4] = skill("duration", nil), --"base_skill_effect_duration" }, levels = { - [1] = { skill_manaCostBase = 11, skill_durationBase = 0.88, skill_coldMin = 52, skill_coldMax = 78, }, - [2] = { skill_manaCostBase = 11, skill_durationBase = 0.94, skill_coldMin = 64, skill_coldMax = 96, }, - [3] = { skill_manaCostBase = 12, skill_durationBase = 0.99, skill_coldMin = 77, skill_coldMax = 116, }, - [4] = { skill_manaCostBase = 13, skill_durationBase = 1.05, skill_coldMin = 93, skill_coldMax = 140, }, - [5] = { skill_manaCostBase = 14, skill_durationBase = 1.1, skill_coldMin = 112, skill_coldMax = 168, }, - [6] = { skill_manaCostBase = 14, skill_durationBase = 1.16, skill_coldMin = 126, skill_coldMax = 190, }, - [7] = { skill_manaCostBase = 15, skill_durationBase = 1.21, skill_coldMin = 143, skill_coldMax = 214, }, - [8] = { skill_manaCostBase = 15, skill_durationBase = 1.27, skill_coldMin = 160, skill_coldMax = 240, }, - [9] = { skill_manaCostBase = 16, skill_durationBase = 1.32, skill_coldMin = 180, skill_coldMax = 270, }, - [10] = { skill_manaCostBase = 16, skill_durationBase = 1.35, skill_coldMin = 202, skill_coldMax = 303, }, - [11] = { skill_manaCostBase = 16, skill_durationBase = 1.38, skill_coldMin = 227, skill_coldMax = 340, }, - [12] = { skill_manaCostBase = 17, skill_durationBase = 1.4, skill_coldMin = 254, skill_coldMax = 381, }, - [13] = { skill_manaCostBase = 17, skill_durationBase = 1.43, skill_coldMin = 284, skill_coldMax = 426, }, - [14] = { skill_manaCostBase = 18, skill_durationBase = 1.46, skill_coldMin = 317, skill_coldMax = 476, }, - [15] = { skill_manaCostBase = 18, skill_durationBase = 1.49, skill_coldMin = 354, skill_coldMax = 532, }, - [16] = { skill_manaCostBase = 19, skill_durationBase = 1.51, skill_coldMin = 395, skill_coldMax = 593, }, - [17] = { skill_manaCostBase = 19, skill_durationBase = 1.54, skill_coldMin = 441, skill_coldMax = 661, }, - [18] = { skill_manaCostBase = 20, skill_durationBase = 1.57, skill_coldMin = 491, skill_coldMax = 737, }, - [19] = { skill_manaCostBase = 20, skill_durationBase = 1.6, skill_coldMin = 547, skill_coldMax = 820, }, - [20] = { skill_manaCostBase = 21, skill_durationBase = 1.65, skill_coldMin = 608, skill_coldMax = 913, }, - [21] = { skill_manaCostBase = 21, skill_durationBase = 1.71, skill_coldMin = 677, skill_coldMax = 1015, }, - [22] = { skill_manaCostBase = 22, skill_durationBase = 1.76, skill_coldMin = 752, skill_coldMax = 1128, }, - [23] = { skill_manaCostBase = 22, skill_durationBase = 1.82, skill_coldMin = 835, skill_coldMax = 1252, }, - [24] = { skill_manaCostBase = 23, skill_durationBase = 1.87, skill_coldMin = 927, skill_coldMax = 1390, }, - [25] = { skill_manaCostBase = 23, skill_durationBase = 1.93, skill_coldMin = 1028, skill_coldMax = 1542, }, - [26] = { skill_manaCostBase = 24, skill_durationBase = 1.98, skill_coldMin = 1140, skill_coldMax = 1710, }, - [27] = { skill_manaCostBase = 24, skill_durationBase = 2.04, skill_coldMin = 1264, skill_coldMax = 1896, }, - [28] = { skill_manaCostBase = 25, skill_durationBase = 2.09, skill_coldMin = 1400, skill_coldMax = 2100, }, - [29] = { skill_manaCostBase = 25, skill_durationBase = 2.15, skill_coldMin = 1550, skill_coldMax = 2326, }, - [30] = { skill_manaCostBase = 26, skill_durationBase = 2.2, skill_coldMin = 1716, skill_coldMax = 2574, }, - } + [1] = { 11, 52, 78, 0.88, }, + [2] = { 11, 64, 96, 0.94, }, + [3] = { 12, 77, 116, 0.99, }, + [4] = { 13, 93, 140, 1.05, }, + [5] = { 14, 112, 168, 1.1, }, + [6] = { 14, 126, 190, 1.16, }, + [7] = { 15, 143, 214, 1.21, }, + [8] = { 15, 160, 240, 1.27, }, + [9] = { 16, 180, 270, 1.32, }, + [10] = { 16, 202, 303, 1.35, }, + [11] = { 16, 227, 340, 1.38, }, + [12] = { 17, 254, 381, 1.4, }, + [13] = { 17, 284, 426, 1.43, }, + [14] = { 18, 317, 476, 1.46, }, + [15] = { 18, 354, 532, 1.49, }, + [16] = { 19, 395, 593, 1.51, }, + [17] = { 19, 441, 661, 1.54, }, + [18] = { 20, 491, 737, 1.57, }, + [19] = { 20, 547, 820, 1.6, }, + [20] = { 21, 608, 913, 1.65, }, + [21] = { 21, 677, 1015, 1.71, }, + [22] = { 22, 752, 1128, 1.76, }, + [23] = { 22, 835, 1252, 1.82, }, + [24] = { 23, 927, 1390, 1.87, }, + [25] = { 23, 1028, 1542, 1.93, }, + [26] = { 24, 1140, 1710, 1.98, }, + [27] = { 24, 1264, 1896, 2.04, }, + [28] = { 25, 1400, 2100, 2.09, }, + [29] = { 25, 1550, 2326, 2.15, }, + [30] = { 26, 1716, 2574, 2.2, }, + }, } gems["Assassin's Mark"] = { - intelligence = true, curse = true, + intelligence = true, + active_skill = true, spell = true, - aoe = true, + area = true, duration = true, - debuff = true, - base = { - skill_castTime = 0.5, + color = 3, + baseFlags = { + spell = true, + curse = true, + area = true, + duration = true, }, - quality = { + skillTypes = { [2] = true, [11] = true, [12] = true, [17] = true, [18] = true, [19] = true, [26] = true, [32] = true, [36] = true, }, + baseMods = { + skill("castTime", 0.5), + --"base_self_critical_strike_multiplier_-%" = -20 + --"base_deal_no_damage" = ? + skill("debuff", true), + }, + qualityMods = { + --"chance_to_grant_power_charge_on_death_%" = 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("SelfExtraCritChance", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"additional_chance_to_take_critical_strike_%" + [5] = mod("LifeOnKill", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"life_granted_when_killed" + [6] = mod("ManaOnKill", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"mana_granted_when_killed" + --[7] = "chance_to_grant_power_charge_on_death_%" }, levels = { - [1] = { skill_manaCostBase = 24, skill_durationBase = 6, curse_aoeRadiusInc = 0, CurseEffect_effective_additionalCritChance = 5, CurseEffect_lifeOnKill = 16, CurseEffect_manaOnKill = 16, }, - [2] = { skill_manaCostBase = 26, skill_durationBase = 6.2, curse_aoeRadiusInc = 2, CurseEffect_effective_additionalCritChance = 5, CurseEffect_lifeOnKill = 16, CurseEffect_manaOnKill = 16, }, - [3] = { skill_manaCostBase = 27, skill_durationBase = 6.4, curse_aoeRadiusInc = 4, CurseEffect_effective_additionalCritChance = 5, CurseEffect_lifeOnKill = 17, CurseEffect_manaOnKill = 17, }, - [4] = { skill_manaCostBase = 29, skill_durationBase = 6.6, curse_aoeRadiusInc = 6, CurseEffect_effective_additionalCritChance = 6, CurseEffect_lifeOnKill = 17, CurseEffect_manaOnKill = 17, }, - [5] = { skill_manaCostBase = 30, skill_durationBase = 6.8, curse_aoeRadiusInc = 8, CurseEffect_effective_additionalCritChance = 6, CurseEffect_lifeOnKill = 18, CurseEffect_manaOnKill = 18, }, - [6] = { skill_manaCostBase = 32, skill_durationBase = 7, curse_aoeRadiusInc = 10, CurseEffect_effective_additionalCritChance = 6, CurseEffect_lifeOnKill = 18, CurseEffect_manaOnKill = 18, }, - [7] = { skill_manaCostBase = 34, skill_durationBase = 7.2, curse_aoeRadiusInc = 12, CurseEffect_effective_additionalCritChance = 7, CurseEffect_lifeOnKill = 19, CurseEffect_manaOnKill = 19, }, - [8] = { skill_manaCostBase = 35, skill_durationBase = 7.4, curse_aoeRadiusInc = 14, CurseEffect_effective_additionalCritChance = 7, CurseEffect_lifeOnKill = 19, CurseEffect_manaOnKill = 19, }, - [9] = { skill_manaCostBase = 37, skill_durationBase = 7.6, curse_aoeRadiusInc = 16, CurseEffect_effective_additionalCritChance = 7, CurseEffect_lifeOnKill = 20, CurseEffect_manaOnKill = 20, }, - [10] = { skill_manaCostBase = 38, skill_durationBase = 7.8, curse_aoeRadiusInc = 18, CurseEffect_effective_additionalCritChance = 8, CurseEffect_lifeOnKill = 20, CurseEffect_manaOnKill = 20, }, - [11] = { skill_manaCostBase = 39, skill_durationBase = 8, curse_aoeRadiusInc = 20, CurseEffect_effective_additionalCritChance = 8, CurseEffect_lifeOnKill = 21, CurseEffect_manaOnKill = 21, }, - [12] = { skill_manaCostBase = 40, skill_durationBase = 8.2, curse_aoeRadiusInc = 22, CurseEffect_effective_additionalCritChance = 8, CurseEffect_lifeOnKill = 21, CurseEffect_manaOnKill = 21, }, - [13] = { skill_manaCostBase = 42, skill_durationBase = 8.4, curse_aoeRadiusInc = 24, CurseEffect_effective_additionalCritChance = 8, CurseEffect_lifeOnKill = 22, CurseEffect_manaOnKill = 22, }, - [14] = { skill_manaCostBase = 43, skill_durationBase = 8.6, curse_aoeRadiusInc = 26, CurseEffect_effective_additionalCritChance = 8, CurseEffect_lifeOnKill = 22, CurseEffect_manaOnKill = 22, }, - [15] = { skill_manaCostBase = 44, skill_durationBase = 8.8, curse_aoeRadiusInc = 28, CurseEffect_effective_additionalCritChance = 9, CurseEffect_lifeOnKill = 23, CurseEffect_manaOnKill = 23, }, - [16] = { skill_manaCostBase = 45, skill_durationBase = 9, curse_aoeRadiusInc = 30, CurseEffect_effective_additionalCritChance = 9, CurseEffect_lifeOnKill = 23, CurseEffect_manaOnKill = 23, }, - [17] = { skill_manaCostBase = 46, skill_durationBase = 9.2, curse_aoeRadiusInc = 32, CurseEffect_effective_additionalCritChance = 9, CurseEffect_lifeOnKill = 24, CurseEffect_manaOnKill = 24, }, - [18] = { skill_manaCostBase = 47, skill_durationBase = 9.4, curse_aoeRadiusInc = 34, CurseEffect_effective_additionalCritChance = 9, CurseEffect_lifeOnKill = 24, CurseEffect_manaOnKill = 24, }, - [19] = { skill_manaCostBase = 48, skill_durationBase = 9.6, curse_aoeRadiusInc = 36, CurseEffect_effective_additionalCritChance = 9, CurseEffect_lifeOnKill = 25, CurseEffect_manaOnKill = 25, }, - [20] = { skill_manaCostBase = 50, skill_durationBase = 9.8, curse_aoeRadiusInc = 38, CurseEffect_effective_additionalCritChance = 9, CurseEffect_lifeOnKill = 25, CurseEffect_manaOnKill = 25, }, - [21] = { skill_manaCostBase = 51, skill_durationBase = 10, curse_aoeRadiusInc = 40, CurseEffect_effective_additionalCritChance = 10, CurseEffect_lifeOnKill = 26, CurseEffect_manaOnKill = 26, }, - [22] = { skill_manaCostBase = 52, skill_durationBase = 10.2, curse_aoeRadiusInc = 42, CurseEffect_effective_additionalCritChance = 10, CurseEffect_lifeOnKill = 26, CurseEffect_manaOnKill = 26, }, - [23] = { skill_manaCostBase = 53, skill_durationBase = 10.4, curse_aoeRadiusInc = 44, CurseEffect_effective_additionalCritChance = 10, CurseEffect_lifeOnKill = 27, CurseEffect_manaOnKill = 27, }, - [24] = { skill_manaCostBase = 54, skill_durationBase = 10.6, curse_aoeRadiusInc = 46, CurseEffect_effective_additionalCritChance = 10, CurseEffect_lifeOnKill = 27, CurseEffect_manaOnKill = 27, }, - [25] = { skill_manaCostBase = 56, skill_durationBase = 10.8, curse_aoeRadiusInc = 48, CurseEffect_effective_additionalCritChance = 10, CurseEffect_lifeOnKill = 28, CurseEffect_manaOnKill = 28, }, - [26] = { skill_manaCostBase = 57, skill_durationBase = 11, curse_aoeRadiusInc = 50, CurseEffect_effective_additionalCritChance = 11, CurseEffect_lifeOnKill = 28, CurseEffect_manaOnKill = 28, }, - [27] = { skill_manaCostBase = 58, skill_durationBase = 11.2, curse_aoeRadiusInc = 52, CurseEffect_effective_additionalCritChance = 11, CurseEffect_lifeOnKill = 29, CurseEffect_manaOnKill = 29, }, - [28] = { skill_manaCostBase = 59, skill_durationBase = 11.4, curse_aoeRadiusInc = 54, CurseEffect_effective_additionalCritChance = 11, CurseEffect_lifeOnKill = 29, CurseEffect_manaOnKill = 29, }, - [29] = { skill_manaCostBase = 60, skill_durationBase = 11.6, curse_aoeRadiusInc = 56, CurseEffect_effective_additionalCritChance = 11, CurseEffect_lifeOnKill = 30, CurseEffect_manaOnKill = 30, }, - [30] = { skill_manaCostBase = 61, skill_durationBase = 11.8, curse_aoeRadiusInc = 58, CurseEffect_effective_additionalCritChance = 11, CurseEffect_lifeOnKill = 30, CurseEffect_manaOnKill = 30, }, - } + [1] = { 24, 6, 0, 5, 16, 16, 21, }, + [2] = { 26, 6.2, 2, 5, 16, 16, 21, }, + [3] = { 27, 6.4, 4, 5, 17, 17, 22, }, + [4] = { 29, 6.6, 6, 6, 17, 17, 22, }, + [5] = { 30, 6.8, 8, 6, 18, 18, 23, }, + [6] = { 32, 7, 10, 6, 18, 18, 23, }, + [7] = { 34, 7.2, 12, 7, 19, 19, 24, }, + [8] = { 35, 7.4, 14, 7, 19, 19, 24, }, + [9] = { 37, 7.6, 16, 7, 20, 20, 25, }, + [10] = { 38, 7.8, 18, 8, 20, 20, 25, }, + [11] = { 39, 8, 20, 8, 21, 21, 26, }, + [12] = { 40, 8.2, 22, 8, 21, 21, 26, }, + [13] = { 42, 8.4, 24, 8, 22, 22, 27, }, + [14] = { 43, 8.6, 26, 8, 22, 22, 27, }, + [15] = { 44, 8.8, 28, 9, 23, 23, 28, }, + [16] = { 45, 9, 30, 9, 23, 23, 28, }, + [17] = { 46, 9.2, 32, 9, 24, 24, 29, }, + [18] = { 47, 9.4, 34, 9, 24, 24, 29, }, + [19] = { 48, 9.6, 36, 9, 25, 25, 30, }, + [20] = { 50, 9.8, 38, 9, 25, 25, 30, }, + [21] = { 51, 10, 40, 10, 26, 26, 31, }, + [22] = { 52, 10.2, 42, 10, 26, 26, 31, }, + [23] = { 53, 10.4, 44, 10, 27, 27, 32, }, + [24] = { 54, 10.6, 46, 10, 27, 27, 32, }, + [25] = { 56, 10.8, 48, 10, 28, 28, 33, }, + [26] = { 57, 11, 50, 11, 28, 28, 33, }, + [27] = { 58, 11.2, 52, 11, 29, 29, 34, }, + [28] = { 59, 11.4, 54, 11, 29, 29, 34, }, + [29] = { 60, 11.6, 56, 11, 30, 30, 35, }, + [30] = { 61, 11.8, 58, 11, 30, 30, 35, }, + }, } gems["Ball Lightning"] = { - intelligence = true, - spell = true, - aoe = true, projectile = true, + intelligence = true, + active_skill = true, + spell = true, + area = true, lightning = true, - hit = true, - parts = { - { - aoe = false, - }, + color = 3, + baseFlags = { + spell = true, + projectile = true, + lightning = true, }, - base = { - skill_castTime = 0.8, - skill_damageEffectiveness = 0.2, - skill_critChanceBase = 5, + skillTypes = { [2] = true, [10] = true, [3] = true, [11] = true, [18] = true, [17] = true, [19] = true, [26] = true, [36] = true, [45] = true, [35] = true, }, + baseMods = { + skill("castTime", 0.8), + skill("damageEffectiveness", 0.2), + skill("critChance", 5), + --"active_skill_index" = 0 + --"base_is_projectile" = ? }, - quality = { - lightningInc = 1, + qualityMods = { + mod("LightningDamage", "INC", 1), --"lightning_damage_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("LightningMin", nil), --"spell_minimum_base_lightning_damage" + [3] = skill("LightningMax", nil), --"spell_maximum_base_lightning_damage" }, levels = { - [1] = { skill_manaCostBase = 14, skill_lightningMin = 2, skill_lightningMax = 32, }, - [2] = { skill_manaCostBase = 15, skill_lightningMin = 2, skill_lightningMax = 38, }, - [3] = { skill_manaCostBase = 16, skill_lightningMin = 2, skill_lightningMax = 45, }, - [4] = { skill_manaCostBase = 17, skill_lightningMin = 3, skill_lightningMax = 53, }, - [5] = { skill_manaCostBase = 18, skill_lightningMin = 3, skill_lightningMax = 62, }, - [6] = { skill_manaCostBase = 19, skill_lightningMin = 4, skill_lightningMax = 69, }, - [7] = { skill_manaCostBase = 20, skill_lightningMin = 4, skill_lightningMax = 76, }, - [8] = { skill_manaCostBase = 21, skill_lightningMin = 4, skill_lightningMax = 84, }, - [9] = { skill_manaCostBase = 22, skill_lightningMin = 5, skill_lightningMax = 93, }, - [10] = { skill_manaCostBase = 23, skill_lightningMin = 5, skill_lightningMax = 103, }, - [11] = { skill_manaCostBase = 24, skill_lightningMin = 6, skill_lightningMax = 113, }, - [12] = { skill_manaCostBase = 25, skill_lightningMin = 7, skill_lightningMax = 124, }, - [13] = { skill_manaCostBase = 25, skill_lightningMin = 7, skill_lightningMax = 137, }, - [14] = { skill_manaCostBase = 25, skill_lightningMin = 8, skill_lightningMax = 150, }, - [15] = { skill_manaCostBase = 26, skill_lightningMin = 9, skill_lightningMax = 165, }, - [16] = { skill_manaCostBase = 26, skill_lightningMin = 10, skill_lightningMax = 181, }, - [17] = { skill_manaCostBase = 26, skill_lightningMin = 10, skill_lightningMax = 199, }, - [18] = { skill_manaCostBase = 26, skill_lightningMin = 11, skill_lightningMax = 217, }, - [19] = { skill_manaCostBase = 27, skill_lightningMin = 13, skill_lightningMax = 238, }, - [20] = { skill_manaCostBase = 27, skill_lightningMin = 14, skill_lightningMax = 260, }, - [21] = { skill_manaCostBase = 28, skill_lightningMin = 15, skill_lightningMax = 285, }, - [22] = { skill_manaCostBase = 28, skill_lightningMin = 16, skill_lightningMax = 311, }, - [23] = { skill_manaCostBase = 29, skill_lightningMin = 18, skill_lightningMax = 340, }, - [24] = { skill_manaCostBase = 29, skill_lightningMin = 20, skill_lightningMax = 371, }, - [25] = { skill_manaCostBase = 30, skill_lightningMin = 21, skill_lightningMax = 404, }, - [26] = { skill_manaCostBase = 30, skill_lightningMin = 23, skill_lightningMax = 441, }, - [27] = { skill_manaCostBase = 30, skill_lightningMin = 25, skill_lightningMax = 480, }, - [28] = { skill_manaCostBase = 30, skill_lightningMin = 28, skill_lightningMax = 523, }, - [29] = { skill_manaCostBase = 31, skill_lightningMin = 30, skill_lightningMax = 570, }, - [30] = { skill_manaCostBase = 31, skill_lightningMin = 33, skill_lightningMax = 620, }, - } + [1] = { 14, 2, 32, }, + [2] = { 15, 2, 38, }, + [3] = { 16, 2, 45, }, + [4] = { 17, 3, 53, }, + [5] = { 18, 3, 62, }, + [6] = { 19, 4, 69, }, + [7] = { 20, 4, 76, }, + [8] = { 21, 4, 84, }, + [9] = { 22, 5, 93, }, + [10] = { 23, 5, 103, }, + [11] = { 24, 6, 113, }, + [12] = { 25, 7, 124, }, + [13] = { 25, 7, 137, }, + [14] = { 25, 8, 150, }, + [15] = { 26, 9, 165, }, + [16] = { 26, 10, 181, }, + [17] = { 26, 10, 199, }, + [18] = { 26, 11, 217, }, + [19] = { 27, 13, 238, }, + [20] = { 27, 14, 260, }, + [21] = { 28, 15, 285, }, + [22] = { 28, 16, 311, }, + [23] = { 29, 18, 340, }, + [24] = { 29, 20, 371, }, + [25] = { 30, 21, 404, }, + [26] = { 30, 23, 441, }, + [27] = { 30, 25, 480, }, + [28] = { 30, 28, 523, }, + [29] = { 31, 30, 570, }, + [30] = { 31, 33, 620, }, + }, } gems["Bone Offering"] = { + minion = true, intelligence = true, + active_skill = true, + spell = true, + duration = true, unsupported = true, } gems["Clarity"] = { - intelligence = true, aura = true, + intelligence = true, + active_skill = true, spell = true, - aoe = true, - base = { - skill_castTime = 1.2, + area = true, + color = 3, + baseFlags = { + spell = true, + aura = true, + area = true, }, - quality = { - aura_aoeRadiusInc = 1, + skillTypes = { [2] = true, [11] = true, [5] = true, [15] = true, [27] = true, [18] = true, [44] = true, }, + baseMods = { + skill("castTime", 1.2), + --"base_deal_no_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 1), --"base_skill_area_of_effect_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = mod("ManaRegen", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Aura" }), --"base_mana_regeneration_rate_per_minute" + [3] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" }, levels = { - [1] = { skill_manaReservedBase = 34, aura_aoeRadiusInc = 0, AuraEffect_manaRegenBase = 2.9, }, - [2] = { skill_manaReservedBase = 48, aura_aoeRadiusInc = 3, AuraEffect_manaRegenBase = 4, }, - [3] = { skill_manaReservedBase = 61, aura_aoeRadiusInc = 6, AuraEffect_manaRegenBase = 5.1, }, - [4] = { skill_manaReservedBase = 76, aura_aoeRadiusInc = 9, AuraEffect_manaRegenBase = 6.1, }, - [5] = { skill_manaReservedBase = 89, aura_aoeRadiusInc = 12, AuraEffect_manaRegenBase = 7, }, - [6] = { skill_manaReservedBase = 102, aura_aoeRadiusInc = 15, AuraEffect_manaRegenBase = 7.9, }, - [7] = { skill_manaReservedBase = 115, aura_aoeRadiusInc = 18, AuraEffect_manaRegenBase = 8.8, }, - [8] = { skill_manaReservedBase = 129, aura_aoeRadiusInc = 21, AuraEffect_manaRegenBase = 9.6, }, - [9] = { skill_manaReservedBase = 141, aura_aoeRadiusInc = 23, AuraEffect_manaRegenBase = 10.3, }, - [10] = { skill_manaReservedBase = 154, aura_aoeRadiusInc = 25, AuraEffect_manaRegenBase = 11.1, }, - [11] = { skill_manaReservedBase = 166, aura_aoeRadiusInc = 27, AuraEffect_manaRegenBase = 11.7, }, - [12] = { skill_manaReservedBase = 178, aura_aoeRadiusInc = 29, AuraEffect_manaRegenBase = 12.4, }, - [13] = { skill_manaReservedBase = 190, aura_aoeRadiusInc = 31, AuraEffect_manaRegenBase = 13, }, - [14] = { skill_manaReservedBase = 203, aura_aoeRadiusInc = 33, AuraEffect_manaRegenBase = 13.7, }, - [15] = { skill_manaReservedBase = 214, aura_aoeRadiusInc = 35, AuraEffect_manaRegenBase = 14.2, }, - [16] = { skill_manaReservedBase = 227, aura_aoeRadiusInc = 36, AuraEffect_manaRegenBase = 14.8, }, - [17] = { skill_manaReservedBase = 239, aura_aoeRadiusInc = 37, AuraEffect_manaRegenBase = 15.4, }, - [18] = { skill_manaReservedBase = 251, aura_aoeRadiusInc = 38, AuraEffect_manaRegenBase = 16, }, - [19] = { skill_manaReservedBase = 265, aura_aoeRadiusInc = 39, AuraEffect_manaRegenBase = 16.6, }, - [20] = { skill_manaReservedBase = 279, aura_aoeRadiusInc = 40, AuraEffect_manaRegenBase = 17.2, }, - [21] = { skill_manaReservedBase = 293, aura_aoeRadiusInc = 41, AuraEffect_manaRegenBase = 17.8, }, - [22] = { skill_manaReservedBase = 303, aura_aoeRadiusInc = 42, AuraEffect_manaRegenBase = 18.4, }, - [23] = { skill_manaReservedBase = 313, aura_aoeRadiusInc = 43, AuraEffect_manaRegenBase = 19, }, - [24] = { skill_manaReservedBase = 323, aura_aoeRadiusInc = 44, AuraEffect_manaRegenBase = 19.6, }, - [25] = { skill_manaReservedBase = 333, aura_aoeRadiusInc = 45, AuraEffect_manaRegenBase = 20.2, }, - [26] = { skill_manaReservedBase = 343, aura_aoeRadiusInc = 46, AuraEffect_manaRegenBase = 20.8, }, - [27] = { skill_manaReservedBase = 353, aura_aoeRadiusInc = 47, AuraEffect_manaRegenBase = 21.4, }, - [28] = { skill_manaReservedBase = 363, aura_aoeRadiusInc = 48, AuraEffect_manaRegenBase = 22, }, - [29] = { skill_manaReservedBase = 373, aura_aoeRadiusInc = 49, AuraEffect_manaRegenBase = 22.6, }, - [30] = { skill_manaReservedBase = 383, aura_aoeRadiusInc = 50, AuraEffect_manaRegenBase = 23.2, }, - } + [1] = { 34, 2.9333333333333, 0, }, + [2] = { 48, 4.0333333333333, 3, }, + [3] = { 61, 5.0833333333333, 6, }, + [4] = { 76, 6.0833333333333, 9, }, + [5] = { 89, 7.0166666666667, 12, }, + [6] = { 102, 7.9166666666667, 15, }, + [7] = { 115, 8.75, 18, }, + [8] = { 129, 9.55, 21, }, + [9] = { 141, 10.316666666667, 23, }, + [10] = { 154, 11.05, 25, }, + [11] = { 166, 11.733333333333, 27, }, + [12] = { 178, 12.4, 29, }, + [13] = { 190, 13.033333333333, 31, }, + [14] = { 203, 13.65, 33, }, + [15] = { 214, 14.25, 35, }, + [16] = { 227, 14.85, 36, }, + [17] = { 239, 15.433333333333, 37, }, + [18] = { 251, 16.016666666667, 38, }, + [19] = { 265, 16.6, 39, }, + [20] = { 279, 17.183333333333, 40, }, + [21] = { 293, 17.766666666667, 41, }, + [22] = { 303, 18.366666666667, 42, }, + [23] = { 313, 18.966666666667, 43, }, + [24] = { 323, 19.566666666667, 44, }, + [25] = { 333, 20.166666666667, 45, }, + [26] = { 343, 20.766666666667, 46, }, + [27] = { 353, 21.366666666667, 47, }, + [28] = { 363, 21.983333333333, 48, }, + [29] = { 373, 22.6, 49, }, + [30] = { 383, 23.216666666667, 50, }, + }, +} +gems["Vaal Clarity"] = { + aura = true, + intelligence = true, + active_skill = true, + vaal = true, + spell = true, + area = true, + duration = true, + color = 3, + baseFlags = { + spell = true, + aura = true, + area = true, + duration = true, + vaal = true, + }, + skillTypes = { [2] = true, [5] = true, [11] = true, [18] = true, [27] = true, [12] = true, [43] = true, [44] = true, }, + baseMods = { + skill("castTime", 0.6), + mod("ManaCost", "MORE", -100, 0, 0, { type = "GlobalEffect", effectType = "Aura" }), --"no_mana_cost" = ? + --"base_deal_no_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 1), --"base_skill_area_of_effect_+%" = 1 + }, + levelMods = { + [1] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" + [2] = skill("duration", nil), --"base_skill_effect_duration" + }, + levels = { + [1] = { 0, 8, }, + [2] = { 3, 8.1, }, + [3] = { 6, 8.2, }, + [4] = { 9, 8.3, }, + [5] = { 12, 8.4, }, + [6] = { 15, 8.5, }, + [7] = { 18, 8.6, }, + [8] = { 21, 8.7, }, + [9] = { 23, 8.8, }, + [10] = { 25, 8.9, }, + [11] = { 27, 9, }, + [12] = { 29, 9.1, }, + [13] = { 31, 9.2, }, + [14] = { 33, 9.3, }, + [15] = { 35, 9.4, }, + [16] = { 36, 9.5, }, + [17] = { 37, 9.6, }, + [18] = { 38, 9.7, }, + [19] = { 39, 9.8, }, + [20] = { 40, 9.9, }, + [21] = { 41, 10, }, + [22] = { 42, 10.1, }, + [23] = { 43, 10.2, }, + [24] = { 44, 10.3, }, + [25] = { 45, 10.4, }, + [26] = { 46, 10.5, }, + [27] = { 47, 10.6, }, + [28] = { 48, 10.7, }, + [29] = { 49, 10.8, }, + [30] = { 50, 10.9, }, + }, } gems["Cold Snap"] = { intelligence = true, + active_skill = true, spell = true, - aoe = true, + area = true, cold = true, - hit = true, - base = { - skill_castTime = 0.85, - skill_damageEffectiveness = 1.2, - skill_critChanceBase = 5, - freezeChance = 30, - freeze_durationInc = 30, - chill_durationInc = 110, + color = 3, + baseFlags = { + spell = true, + area = true, + cold = true, }, - quality = { - aoeRadiusInc = 0.5, + skillTypes = { [2] = true, [10] = true, [11] = true, [17] = true, [18] = true, [19] = true, [26] = true, [36] = true, [34] = true, [60] = true, }, + baseMods = { + skill("castTime", 0.85), + skill("damageEffectiveness", 1.2), + skill("critChance", 5), + mod("EnemyFreezeChance", "BASE", 30), --"base_chance_to_freeze_%" = 30 + mod("EnemyFreezeDuration", "INC", 30), --"freeze_duration_+%" = 30 + mod("EnemyChillDuration", "INC", 110), --"chill_duration_+%" = 110 + --"is_area_damage" = 1 + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("ColdMin", nil), --"spell_minimum_base_cold_damage" + [3] = skill("ColdMax", nil), --"spell_maximum_base_cold_damage" }, levels = { - [1] = { skill_manaCostBase = 11, skill_coldMin = 9, skill_coldMax = 13, }, - [2] = { skill_manaCostBase = 12, skill_coldMin = 11, skill_coldMax = 16, }, - [3] = { skill_manaCostBase = 13, skill_coldMin = 14, skill_coldMax = 21, }, - [4] = { skill_manaCostBase = 14, skill_coldMin = 18, skill_coldMax = 27, }, - [5] = { skill_manaCostBase = 15, skill_coldMin = 25, skill_coldMax = 37, }, - [6] = { skill_manaCostBase = 16, skill_coldMin = 32, skill_coldMax = 49, }, - [7] = { skill_manaCostBase = 17, skill_coldMin = 42, skill_coldMax = 63, }, - [8] = { skill_manaCostBase = 18, skill_coldMin = 54, skill_coldMax = 81, }, - [9] = { skill_manaCostBase = 19, skill_coldMin = 68, skill_coldMax = 102, }, - [10] = { skill_manaCostBase = 20, skill_coldMin = 85, skill_coldMax = 128, }, - [11] = { skill_manaCostBase = 21, skill_coldMin = 106, skill_coldMax = 159, }, - [12] = { skill_manaCostBase = 22, skill_coldMin = 131, skill_coldMax = 196, }, - [13] = { skill_manaCostBase = 23, skill_coldMin = 160, skill_coldMax = 240, }, - [14] = { skill_manaCostBase = 24, skill_coldMin = 196, skill_coldMax = 294, }, - [15] = { skill_manaCostBase = 25, skill_coldMin = 227, skill_coldMax = 341, }, - [16] = { skill_manaCostBase = 26, skill_coldMin = 263, skill_coldMax = 394, }, - [17] = { skill_manaCostBase = 26, skill_coldMin = 303, skill_coldMax = 455, }, - [18] = { skill_manaCostBase = 27, skill_coldMin = 350, skill_coldMax = 524, }, - [19] = { skill_manaCostBase = 27, skill_coldMin = 402, skill_coldMax = 603, }, - [20] = { skill_manaCostBase = 28, skill_coldMin = 462, skill_coldMax = 693, }, - [21] = { skill_manaCostBase = 28, skill_coldMin = 506, skill_coldMax = 759, }, - [22] = { skill_manaCostBase = 29, skill_coldMin = 554, skill_coldMax = 832, }, - [23] = { skill_manaCostBase = 29, skill_coldMin = 607, skill_coldMax = 910, }, - [24] = { skill_manaCostBase = 30, skill_coldMin = 664, skill_coldMax = 996, }, - [25] = { skill_manaCostBase = 30, skill_coldMin = 726, skill_coldMax = 1089, }, - [26] = { skill_manaCostBase = 30, skill_coldMin = 794, skill_coldMax = 1191, }, - [27] = { skill_manaCostBase = 30, skill_coldMin = 867, skill_coldMax = 1301, }, - [28] = { skill_manaCostBase = 31, skill_coldMin = 947, skill_coldMax = 1420, }, - [29] = { skill_manaCostBase = 31, skill_coldMin = 1033, skill_coldMax = 1550, }, - [30] = { skill_manaCostBase = 32, skill_coldMin = 1127, skill_coldMax = 1691, }, - } + [1] = { 11, 9, 13, }, + [2] = { 12, 11, 16, }, + [3] = { 13, 14, 21, }, + [4] = { 14, 18, 27, }, + [5] = { 15, 25, 37, }, + [6] = { 16, 32, 49, }, + [7] = { 17, 42, 63, }, + [8] = { 18, 54, 81, }, + [9] = { 19, 68, 102, }, + [10] = { 20, 85, 128, }, + [11] = { 21, 106, 159, }, + [12] = { 22, 131, 196, }, + [13] = { 23, 160, 240, }, + [14] = { 24, 196, 294, }, + [15] = { 25, 227, 341, }, + [16] = { 26, 263, 394, }, + [17] = { 26, 303, 455, }, + [18] = { 27, 350, 524, }, + [19] = { 27, 402, 603, }, + [20] = { 28, 462, 693, }, + [21] = { 28, 506, 759, }, + [22] = { 29, 554, 832, }, + [23] = { 29, 607, 910, }, + [24] = { 30, 664, 996, }, + [25] = { 30, 726, 1089, }, + [26] = { 30, 794, 1191, }, + [27] = { 30, 867, 1301, }, + [28] = { 31, 947, 1420, }, + [29] = { 31, 1033, 1550, }, + [30] = { 32, 1127, 1691, }, + }, +} +gems["Vaal Cold Snap"] = { + intelligence = true, + active_skill = true, + vaal = true, + spell = true, + area = true, + duration = true, + cold = true, + color = 3, + baseFlags = { + spell = true, + area = true, + duration = true, + cold = true, + vaal = true, + }, + skillTypes = { [2] = true, [10] = true, [11] = true, [17] = true, [18] = true, [19] = true, [26] = true, [12] = true, [43] = true, [34] = true, }, + baseMods = { + skill("castTime", 0.85), + skill("damageEffectiveness", 1.4), + skill("critChance", 5), + skill("duration", 10), --"base_skill_effect_duration" = 10000 + mod("EnemyFreezeChance", "BASE", 100), --"base_chance_to_freeze_%" = 100 + --"is_area_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + [1] = skill("ColdMin", nil), --"spell_minimum_base_cold_damage" + [2] = skill("ColdMax", nil), --"spell_maximum_base_cold_damage" + }, + levels = { + [1] = { 11, 17, }, + [2] = { 14, 21, }, + [3] = { 18, 28, }, + [4] = { 24, 35, }, + [5] = { 32, 48, }, + [6] = { 42, 63, }, + [7] = { 55, 82, }, + [8] = { 70, 105, }, + [9] = { 88, 132, }, + [10] = { 111, 166, }, + [11] = { 137, 206, }, + [12] = { 170, 255, }, + [13] = { 208, 313, }, + [14] = { 255, 382, }, + [15] = { 295, 443, }, + [16] = { 342, 512, }, + [17] = { 394, 591, }, + [18] = { 454, 682, }, + [19] = { 523, 784, }, + [20] = { 600, 901, }, + [21] = { 658, 987, }, + [22] = { 721, 1081, }, + [23] = { 789, 1184, }, + [24] = { 863, 1295, }, + [25] = { 944, 1416, }, + [26] = { 1032, 1548, }, + [27] = { 1127, 1691, }, + [28] = { 1231, 1846, }, + [29] = { 1343, 2015, }, + [30] = { 1466, 2199, }, + }, } gems["Conductivity"] = { - intelligence = true, curse = true, + intelligence = true, + active_skill = true, spell = true, - aoe = true, + area = true, duration = true, - debuff = true, lightning = true, - base = { - skill_castTime = 0.5, + color = 3, + baseFlags = { + spell = true, + curse = true, + area = true, + duration = true, + lightning = true, }, - quality = { - CurseEffect_shock_durationInc = 1, + skillTypes = { [2] = true, [11] = true, [12] = true, [17] = true, [18] = true, [19] = true, [26] = true, [32] = true, [36] = true, [45] = true, [35] = true, }, + baseMods = { + skill("castTime", 0.5), + --"base_deal_no_damage" = ? + skill("debuff", true), + }, + qualityMods = { + mod("SelfShockDuration", "INC", 1, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"base_self_shock_duration_-%" = -1 + }, + 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("LightningResist", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"base_lightning_damage_resistance_%" + [5] = mod("SelfShockChance", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"chance_to_be_shocked_%" }, levels = { - [1] = { skill_manaCostBase = 24, skill_durationBase = 9, curse_aoeRadiusInc = 0, CurseEffect_effective_lightningResist = -25, CurseEffect_shockChance = 10, }, - [2] = { skill_manaCostBase = 26, skill_durationBase = 9.1, curse_aoeRadiusInc = 2, CurseEffect_effective_lightningResist = -26, CurseEffect_shockChance = 10, }, - [3] = { skill_manaCostBase = 27, skill_durationBase = 9.2, curse_aoeRadiusInc = 4, CurseEffect_effective_lightningResist = -27, CurseEffect_shockChance = 10, }, - [4] = { skill_manaCostBase = 29, skill_durationBase = 9.3, curse_aoeRadiusInc = 6, CurseEffect_effective_lightningResist = -28, CurseEffect_shockChance = 10, }, - [5] = { skill_manaCostBase = 30, skill_durationBase = 9.4, curse_aoeRadiusInc = 8, CurseEffect_effective_lightningResist = -29, CurseEffect_shockChance = 10, }, - [6] = { skill_manaCostBase = 32, skill_durationBase = 9.5, curse_aoeRadiusInc = 10, CurseEffect_effective_lightningResist = -30, CurseEffect_shockChance = 11, }, - [7] = { skill_manaCostBase = 34, skill_durationBase = 9.6, curse_aoeRadiusInc = 12, CurseEffect_effective_lightningResist = -31, CurseEffect_shockChance = 11, }, - [8] = { skill_manaCostBase = 35, skill_durationBase = 9.7, curse_aoeRadiusInc = 14, CurseEffect_effective_lightningResist = -32, CurseEffect_shockChance = 11, }, - [9] = { skill_manaCostBase = 37, skill_durationBase = 9.8, curse_aoeRadiusInc = 16, CurseEffect_effective_lightningResist = -33, CurseEffect_shockChance = 11, }, - [10] = { skill_manaCostBase = 38, skill_durationBase = 9.9, curse_aoeRadiusInc = 18, CurseEffect_effective_lightningResist = -34, CurseEffect_shockChance = 11, }, - [11] = { skill_manaCostBase = 39, skill_durationBase = 10, curse_aoeRadiusInc = 20, CurseEffect_effective_lightningResist = -35, CurseEffect_shockChance = 12, }, - [12] = { skill_manaCostBase = 40, skill_durationBase = 10.1, curse_aoeRadiusInc = 22, CurseEffect_effective_lightningResist = -36, CurseEffect_shockChance = 12, }, - [13] = { skill_manaCostBase = 42, skill_durationBase = 10.2, curse_aoeRadiusInc = 24, CurseEffect_effective_lightningResist = -37, CurseEffect_shockChance = 12, }, - [14] = { skill_manaCostBase = 43, skill_durationBase = 10.3, curse_aoeRadiusInc = 26, CurseEffect_effective_lightningResist = -38, CurseEffect_shockChance = 12, }, - [15] = { skill_manaCostBase = 44, skill_durationBase = 10.4, curse_aoeRadiusInc = 28, CurseEffect_effective_lightningResist = -39, CurseEffect_shockChance = 12, }, - [16] = { skill_manaCostBase = 45, skill_durationBase = 10.5, curse_aoeRadiusInc = 30, CurseEffect_effective_lightningResist = -40, CurseEffect_shockChance = 13, }, - [17] = { skill_manaCostBase = 46, skill_durationBase = 10.6, curse_aoeRadiusInc = 32, CurseEffect_effective_lightningResist = -41, CurseEffect_shockChance = 13, }, - [18] = { skill_manaCostBase = 47, skill_durationBase = 10.7, curse_aoeRadiusInc = 34, CurseEffect_effective_lightningResist = -42, CurseEffect_shockChance = 13, }, - [19] = { skill_manaCostBase = 48, skill_durationBase = 10.8, curse_aoeRadiusInc = 36, CurseEffect_effective_lightningResist = -43, CurseEffect_shockChance = 13, }, - [20] = { skill_manaCostBase = 50, skill_durationBase = 10.9, curse_aoeRadiusInc = 38, CurseEffect_effective_lightningResist = -44, CurseEffect_shockChance = 14, }, - [21] = { skill_manaCostBase = 51, skill_durationBase = 11, curse_aoeRadiusInc = 40, CurseEffect_effective_lightningResist = -45, CurseEffect_shockChance = 14, }, - [22] = { skill_manaCostBase = 52, skill_durationBase = 11.1, curse_aoeRadiusInc = 42, CurseEffect_effective_lightningResist = -46, CurseEffect_shockChance = 14, }, - [23] = { skill_manaCostBase = 53, skill_durationBase = 11.2, curse_aoeRadiusInc = 44, CurseEffect_effective_lightningResist = -47, CurseEffect_shockChance = 15, }, - [24] = { skill_manaCostBase = 54, skill_durationBase = 11.3, curse_aoeRadiusInc = 46, CurseEffect_effective_lightningResist = -48, CurseEffect_shockChance = 15, }, - [25] = { skill_manaCostBase = 56, skill_durationBase = 11.4, curse_aoeRadiusInc = 48, CurseEffect_effective_lightningResist = -49, CurseEffect_shockChance = 15, }, - [26] = { skill_manaCostBase = 57, skill_durationBase = 11.5, curse_aoeRadiusInc = 50, CurseEffect_effective_lightningResist = -50, CurseEffect_shockChance = 16, }, - [27] = { skill_manaCostBase = 58, skill_durationBase = 11.6, curse_aoeRadiusInc = 52, CurseEffect_effective_lightningResist = -51, CurseEffect_shockChance = 16, }, - [28] = { skill_manaCostBase = 59, skill_durationBase = 11.7, curse_aoeRadiusInc = 54, CurseEffect_effective_lightningResist = -52, CurseEffect_shockChance = 16, }, - [29] = { skill_manaCostBase = 60, skill_durationBase = 11.8, curse_aoeRadiusInc = 56, CurseEffect_effective_lightningResist = -53, CurseEffect_shockChance = 17, }, - [30] = { skill_manaCostBase = 61, skill_durationBase = 11.9, curse_aoeRadiusInc = 58, CurseEffect_effective_lightningResist = -54, CurseEffect_shockChance = 17, }, - } + [1] = { 24, 9, 0, -25, 10, }, + [2] = { 26, 9.1, 2, -26, 10, }, + [3] = { 27, 9.2, 4, -27, 10, }, + [4] = { 29, 9.3, 6, -28, 10, }, + [5] = { 30, 9.4, 8, -29, 10, }, + [6] = { 32, 9.5, 10, -30, 11, }, + [7] = { 34, 9.6, 12, -31, 11, }, + [8] = { 35, 9.7, 14, -32, 11, }, + [9] = { 37, 9.8, 16, -33, 11, }, + [10] = { 38, 9.9, 18, -34, 11, }, + [11] = { 39, 10, 20, -35, 12, }, + [12] = { 40, 10.1, 22, -36, 12, }, + [13] = { 42, 10.2, 24, -37, 12, }, + [14] = { 43, 10.3, 26, -38, 12, }, + [15] = { 44, 10.4, 28, -39, 12, }, + [16] = { 45, 10.5, 30, -40, 13, }, + [17] = { 46, 10.6, 32, -41, 13, }, + [18] = { 47, 10.7, 34, -42, 13, }, + [19] = { 48, 10.8, 36, -43, 13, }, + [20] = { 50, 10.9, 38, -44, 14, }, + [21] = { 51, 11, 40, -45, 14, }, + [22] = { 52, 11.1, 42, -46, 14, }, + [23] = { 53, 11.2, 44, -47, 15, }, + [24] = { 54, 11.3, 46, -48, 15, }, + [25] = { 56, 11.4, 48, -49, 15, }, + [26] = { 57, 11.5, 50, -50, 16, }, + [27] = { 58, 11.6, 52, -51, 16, }, + [28] = { 59, 11.7, 54, -52, 16, }, + [29] = { 60, 11.8, 56, -53, 17, }, + [30] = { 61, 11.9, 58, -54, 17, }, + }, } gems["Contagion"] = { intelligence = true, + active_skill = true, spell = true, - aoe = true, + area = true, duration = true, - debuff = true, chaos = true, - damage = true, - base = { - skill_castTime = 0.85, - skill_dotIsSpell = true, - skill_durationBase = 5, + color = 3, + baseFlags = { + spell = true, + area = true, + duration = true, + chaos = true, }, - quality = { - aoeRadiusInc = 0.5, + skillTypes = { [2] = true, [11] = true, [12] = true, [17] = true, [18] = true, [40] = true, [50] = true, [26] = true, [36] = true, [19] = true, [52] = true, [59] = true, }, + baseMods = { + skill("castTime", 0.85), + skill("duration", 5), --"base_skill_effect_duration" = 5000 + --"is_area_damage" = ? + skill("dotIsSpell", true), --"spell_damage_modifiers_apply_to_damage_over_time" = ? + skill("debuff", true), + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("ChaosDot", nil), --"base_chaos_damage_to_deal_per_minute" }, levels = { - [1] = { skill_manaCostBase = 11, skill_chaosDotBase = 3.2, }, - [2] = { skill_manaCostBase = 12, skill_chaosDotBase = 3.9, }, - [3] = { skill_manaCostBase = 13, skill_chaosDotBase = 5.2, }, - [4] = { skill_manaCostBase = 14, skill_chaosDotBase = 6.7, }, - [5] = { skill_manaCostBase = 15, skill_chaosDotBase = 9.1, }, - [6] = { skill_manaCostBase = 16, skill_chaosDotBase = 12.1, }, - [7] = { skill_manaCostBase = 17, skill_chaosDotBase = 15.8, }, - [8] = { skill_manaCostBase = 18, skill_chaosDotBase = 20.3, }, - [9] = { skill_manaCostBase = 19, skill_chaosDotBase = 25.9, }, - [10] = { skill_manaCostBase = 20, skill_chaosDotBase = 32.6, }, - [11] = { skill_manaCostBase = 21, skill_chaosDotBase = 40.9, }, - [12] = { skill_manaCostBase = 22, skill_chaosDotBase = 50.9, }, - [13] = { skill_manaCostBase = 23, skill_chaosDotBase = 63, }, - [14] = { skill_manaCostBase = 24, skill_chaosDotBase = 77.6, }, - [15] = { skill_manaCostBase = 25, skill_chaosDotBase = 90.5, }, - [16] = { skill_manaCostBase = 26, skill_chaosDotBase = 105.2, }, - [17] = { skill_manaCostBase = 26, skill_chaosDotBase = 122.2, }, - [18] = { skill_manaCostBase = 27, skill_chaosDotBase = 141.7, }, - [19] = { skill_manaCostBase = 27, skill_chaosDotBase = 163.9, }, - [20] = { skill_manaCostBase = 28, skill_chaosDotBase = 189.4, }, - [21] = { skill_manaCostBase = 28, skill_chaosDotBase = 208.3, }, - [22] = { skill_manaCostBase = 29, skill_chaosDotBase = 229.1, }, - [23] = { skill_manaCostBase = 29, skill_chaosDotBase = 251.8, }, - [24] = { skill_manaCostBase = 30, skill_chaosDotBase = 276.5, }, - [25] = { skill_manaCostBase = 30, skill_chaosDotBase = 303.5, }, - [26] = { skill_manaCostBase = 30, skill_chaosDotBase = 333, }, - [27] = { skill_manaCostBase = 30, skill_chaosDotBase = 365.2, }, - [28] = { skill_manaCostBase = 31, skill_chaosDotBase = 400.4, }, - [29] = { skill_manaCostBase = 31, skill_chaosDotBase = 438.7, }, - [30] = { skill_manaCostBase = 32, skill_chaosDotBase = 480.4, }, - } + [1] = { 11, 3.1666666666667, }, + [2] = { 12, 3.9, }, + [3] = { 13, 5.15, }, + [4] = { 14, 6.65, }, + [5] = { 15, 9.0666666666667, }, + [6] = { 16, 12.066666666667, }, + [7] = { 17, 15.766666666667, }, + [8] = { 18, 20.3, }, + [9] = { 19, 25.866666666667, }, + [10] = { 20, 32.65, }, + [11] = { 21, 40.9, }, + [12] = { 22, 50.9, }, + [13] = { 23, 63, }, + [14] = { 24, 77.583333333333, }, + [15] = { 25, 90.466666666667, }, + [16] = { 26, 105.25, }, + [17] = { 26, 122.2, }, + [18] = { 27, 141.65, }, + [19] = { 27, 163.9, }, + [20] = { 28, 189.36666666667, }, + [21] = { 28, 208.35, }, + [22] = { 29, 229.08333333333, }, + [23] = { 29, 251.75, }, + [24] = { 30, 276.5, }, + [25] = { 30, 303.51666666667, }, + [26] = { 30, 333.03333333333, }, + [27] = { 30, 365.21666666667, }, + [28] = { 31, 400.35, }, + [29] = { 31, 438.66666666667, }, + [30] = { 32, 480.45, }, + }, } gems["Conversion Trap"] = { + trap = true, intelligence = true, + active_skill = true, + spell = true, + duration = true, unsupported = true, } gems["Convocation"] = { + minion = true, intelligence = true, + active_skill = true, + spell = true, + duration = true, unsupported = true, } gems["Discharge"] = { intelligence = true, + active_skill = true, spell = true, - aoe = true, - lightning = true, - cold = true, + area = true, fire = true, - hit = true, - base = { - skill_castTime = 1, - skill_critChanceBase = 7, - skill_damageEffectiveness = 1.5, + cold = true, + lightning = true, + color = 3, + baseFlags = { + spell = true, + area = true, + lightning = true, + cold = true, + fire = true, }, - quality = { - aoeRadiusInc = 0.5, + skillTypes = { [2] = true, [10] = true, [11] = true, [18] = true, [26] = true, [36] = true, [45] = true, [33] = true, [34] = true, [35] = true, [60] = true, }, + baseMods = { + skill("castTime", 1), + skill("damageEffectiveness", 1.5), + skill("critChance", 7), + --"skill_override_pvp_scaling_time_ms" = 1400 + --"triggered_discharge_damage_+%_final" = -35 + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + --"is_area_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("LightningMin", nil, { type = "Multiplier", var = "PowerCharge" }), --"spell_minimum_base_lightning_damage_per_power_charge" + [3] = skill("LightningMax", nil, { type = "Multiplier", var = "PowerCharge" }), --"spell_maximum_base_lightning_damage_per_power_charge" + [4] = skill("FireMin", nil, { type = "Multiplier", var = "EnduranceCharge" }), --"spell_minimum_base_fire_damage_per_endurance_charge" + [5] = skill("FireMax", nil, { type = "Multiplier", var = "EnduranceCharge" }), --"spell_maximum_base_fire_damage_per_endurance_charge" + [6] = skill("ColdMin", nil, { type = "Multiplier", var = "FrenzyCharge" }), --"spell_minimum_base_cold_damage_per_frenzy_charge" + [7] = skill("ColdMax", nil, { type = "Multiplier", var = "FrenzyCharge" }), --"spell_maximum_base_cold_damage_per_frenzy_charge" }, levels = { - [1] = { skill_manaCostBase = 24, PerPower_skill_lightningMin = 4, PerPower_skill_lightningMax = 77, PerEndurance_skill_fireMin = 29, PerEndurance_skill_fireMax = 43, PerFrenzy_skill_coldMin = 24, PerFrenzy_skill_coldMax = 36, }, - [2] = { skill_manaCostBase = 26, PerPower_skill_lightningMin = 5, PerPower_skill_lightningMax = 92, PerEndurance_skill_fireMin = 34, PerEndurance_skill_fireMax = 51, PerFrenzy_skill_coldMin = 28, PerFrenzy_skill_coldMax = 42, }, - [3] = { skill_manaCostBase = 27, PerPower_skill_lightningMin = 6, PerPower_skill_lightningMax = 108, PerEndurance_skill_fireMin = 40, PerEndurance_skill_fireMax = 60, PerFrenzy_skill_coldMin = 33, PerFrenzy_skill_coldMax = 49, }, - [4] = { skill_manaCostBase = 29, PerPower_skill_lightningMin = 7, PerPower_skill_lightningMax = 126, PerEndurance_skill_fireMin = 47, PerEndurance_skill_fireMax = 71, PerFrenzy_skill_coldMin = 39, PerFrenzy_skill_coldMax = 58, }, - [5] = { skill_manaCostBase = 31, PerPower_skill_lightningMin = 8, PerPower_skill_lightningMax = 147, PerEndurance_skill_fireMin = 55, PerEndurance_skill_fireMax = 83, PerFrenzy_skill_coldMin = 45, PerFrenzy_skill_coldMax = 68, }, - [6] = { skill_manaCostBase = 32, PerPower_skill_lightningMin = 9, PerPower_skill_lightningMax = 163, PerEndurance_skill_fireMin = 61, PerEndurance_skill_fireMax = 91, PerFrenzy_skill_coldMin = 50, PerFrenzy_skill_coldMax = 75, }, - [7] = { skill_manaCostBase = 33, PerPower_skill_lightningMin = 9, PerPower_skill_lightningMax = 180, PerEndurance_skill_fireMin = 67, PerEndurance_skill_fireMax = 101, PerFrenzy_skill_coldMin = 55, PerFrenzy_skill_coldMax = 82, }, - [8] = { skill_manaCostBase = 34, PerPower_skill_lightningMin = 10, PerPower_skill_lightningMax = 198, PerEndurance_skill_fireMin = 74, PerEndurance_skill_fireMax = 111, PerFrenzy_skill_coldMin = 61, PerFrenzy_skill_coldMax = 91, }, - [9] = { skill_manaCostBase = 35, PerPower_skill_lightningMin = 11, PerPower_skill_lightningMax = 218, PerEndurance_skill_fireMin = 82, PerEndurance_skill_fireMax = 122, PerFrenzy_skill_coldMin = 67, PerFrenzy_skill_coldMax = 100, }, - [10] = { skill_manaCostBase = 36, PerPower_skill_lightningMin = 13, PerPower_skill_lightningMax = 240, PerEndurance_skill_fireMin = 90, PerEndurance_skill_fireMax = 135, PerFrenzy_skill_coldMin = 73, PerFrenzy_skill_coldMax = 110, }, - [11] = { skill_manaCostBase = 37, PerPower_skill_lightningMin = 14, PerPower_skill_lightningMax = 263, PerEndurance_skill_fireMin = 99, PerEndurance_skill_fireMax = 148, PerFrenzy_skill_coldMin = 81, PerFrenzy_skill_coldMax = 121, }, - [12] = { skill_manaCostBase = 38, PerPower_skill_lightningMin = 15, PerPower_skill_lightningMax = 289, PerEndurance_skill_fireMin = 108, PerEndurance_skill_fireMax = 162, PerFrenzy_skill_coldMin = 88, PerFrenzy_skill_coldMax = 133, }, - [13] = { skill_manaCostBase = 39, PerPower_skill_lightningMin = 17, PerPower_skill_lightningMax = 317, PerEndurance_skill_fireMin = 119, PerEndurance_skill_fireMax = 178, PerFrenzy_skill_coldMin = 97, PerFrenzy_skill_coldMax = 146, }, - [14] = { skill_manaCostBase = 40, PerPower_skill_lightningMin = 18, PerPower_skill_lightningMax = 347, PerEndurance_skill_fireMin = 130, PerEndurance_skill_fireMax = 195, PerFrenzy_skill_coldMin = 106, PerFrenzy_skill_coldMax = 159, }, - [15] = { skill_manaCostBase = 41, PerPower_skill_lightningMin = 20, PerPower_skill_lightningMax = 380, PerEndurance_skill_fireMin = 142, PerEndurance_skill_fireMax = 213, PerFrenzy_skill_coldMin = 116, PerFrenzy_skill_coldMax = 174, }, - [16] = { skill_manaCostBase = 42, PerPower_skill_lightningMin = 22, PerPower_skill_lightningMax = 415, PerEndurance_skill_fireMin = 155, PerEndurance_skill_fireMax = 233, PerFrenzy_skill_coldMin = 127, PerFrenzy_skill_coldMax = 191, }, - [17] = { skill_manaCostBase = 44, PerPower_skill_lightningMin = 24, PerPower_skill_lightningMax = 454, PerEndurance_skill_fireMin = 170, PerEndurance_skill_fireMax = 255, PerFrenzy_skill_coldMin = 139, PerFrenzy_skill_coldMax = 208, }, - [18] = { skill_manaCostBase = 45, PerPower_skill_lightningMin = 26, PerPower_skill_lightningMax = 495, PerEndurance_skill_fireMin = 185, PerEndurance_skill_fireMax = 278, PerFrenzy_skill_coldMin = 152, PerFrenzy_skill_coldMax = 227, }, - [19] = { skill_manaCostBase = 46, PerPower_skill_lightningMin = 28, PerPower_skill_lightningMax = 540, PerEndurance_skill_fireMin = 202, PerEndurance_skill_fireMax = 303, PerFrenzy_skill_coldMin = 165, PerFrenzy_skill_coldMax = 248, }, - [20] = { skill_manaCostBase = 47, PerPower_skill_lightningMin = 31, PerPower_skill_lightningMax = 589, PerEndurance_skill_fireMin = 220, PerEndurance_skill_fireMax = 331, PerFrenzy_skill_coldMin = 180, PerFrenzy_skill_coldMax = 271, }, - [21] = { skill_manaCostBase = 48, PerPower_skill_lightningMin = 34, PerPower_skill_lightningMax = 642, PerEndurance_skill_fireMin = 240, PerEndurance_skill_fireMax = 360, PerFrenzy_skill_coldMin = 197, PerFrenzy_skill_coldMax = 295, }, - [22] = { skill_manaCostBase = 49, PerPower_skill_lightningMin = 37, PerPower_skill_lightningMax = 699, PerEndurance_skill_fireMin = 262, PerEndurance_skill_fireMax = 392, PerFrenzy_skill_coldMin = 214, PerFrenzy_skill_coldMax = 321, }, - [23] = { skill_manaCostBase = 50, PerPower_skill_lightningMin = 40, PerPower_skill_lightningMax = 761, PerEndurance_skill_fireMin = 285, PerEndurance_skill_fireMax = 427, PerFrenzy_skill_coldMin = 233, PerFrenzy_skill_coldMax = 349, }, - [24] = { skill_manaCostBase = 51, PerPower_skill_lightningMin = 44, PerPower_skill_lightningMax = 828, PerEndurance_skill_fireMin = 310, PerEndurance_skill_fireMax = 465, PerFrenzy_skill_coldMin = 253, PerFrenzy_skill_coldMax = 380, }, - [25] = { skill_manaCostBase = 52, PerPower_skill_lightningMin = 47, PerPower_skill_lightningMax = 900, PerEndurance_skill_fireMin = 337, PerEndurance_skill_fireMax = 505, PerFrenzy_skill_coldMin = 276, PerFrenzy_skill_coldMax = 413, }, - [26] = { skill_manaCostBase = 53, PerPower_skill_lightningMin = 51, PerPower_skill_lightningMax = 978, PerEndurance_skill_fireMin = 366, PerEndurance_skill_fireMax = 549, PerFrenzy_skill_coldMin = 299, PerFrenzy_skill_coldMax = 449, }, - [27] = { skill_manaCostBase = 54, PerPower_skill_lightningMin = 56, PerPower_skill_lightningMax = 1062, PerEndurance_skill_fireMin = 397, PerEndurance_skill_fireMax = 596, PerFrenzy_skill_coldMin = 325, PerFrenzy_skill_coldMax = 488, }, - [28] = { skill_manaCostBase = 55, PerPower_skill_lightningMin = 61, PerPower_skill_lightningMax = 1153, PerEndurance_skill_fireMin = 431, PerEndurance_skill_fireMax = 647, PerFrenzy_skill_coldMin = 353, PerFrenzy_skill_coldMax = 529, }, - [29] = { skill_manaCostBase = 57, PerPower_skill_lightningMin = 66, PerPower_skill_lightningMax = 1251, PerEndurance_skill_fireMin = 468, PerEndurance_skill_fireMax = 702, PerFrenzy_skill_coldMin = 383, PerFrenzy_skill_coldMax = 575, }, - [30] = { skill_manaCostBase = 58, PerPower_skill_lightningMin = 71, PerPower_skill_lightningMax = 1357, PerEndurance_skill_fireMin = 508, PerEndurance_skill_fireMax = 762, PerFrenzy_skill_coldMin = 416, PerFrenzy_skill_coldMax = 623, }, - } + [1] = { 24, 4, 77, 29, 43, 24, 36, }, + [2] = { 26, 5, 92, 34, 51, 28, 42, }, + [3] = { 27, 6, 108, 40, 60, 33, 49, }, + [4] = { 29, 7, 126, 47, 71, 39, 58, }, + [5] = { 31, 8, 147, 55, 83, 45, 68, }, + [6] = { 32, 9, 163, 61, 91, 50, 75, }, + [7] = { 33, 9, 180, 67, 101, 55, 82, }, + [8] = { 34, 10, 198, 74, 111, 61, 91, }, + [9] = { 35, 11, 218, 82, 122, 67, 100, }, + [10] = { 36, 13, 240, 90, 135, 73, 110, }, + [11] = { 37, 14, 263, 99, 148, 81, 121, }, + [12] = { 38, 15, 289, 108, 162, 88, 133, }, + [13] = { 39, 17, 317, 119, 178, 97, 146, }, + [14] = { 40, 18, 347, 130, 195, 106, 159, }, + [15] = { 41, 20, 380, 142, 213, 116, 174, }, + [16] = { 42, 22, 415, 155, 233, 127, 191, }, + [17] = { 44, 24, 454, 170, 255, 139, 208, }, + [18] = { 45, 26, 495, 185, 278, 152, 227, }, + [19] = { 46, 28, 540, 202, 303, 165, 248, }, + [20] = { 47, 31, 589, 220, 331, 180, 271, }, + [21] = { 48, 34, 642, 240, 360, 197, 295, }, + [22] = { 49, 37, 699, 262, 392, 214, 321, }, + [23] = { 50, 40, 761, 285, 427, 233, 349, }, + [24] = { 51, 44, 828, 310, 465, 253, 380, }, + [25] = { 52, 47, 900, 337, 505, 276, 413, }, + [26] = { 53, 51, 978, 366, 549, 299, 449, }, + [27] = { 54, 56, 1062, 397, 596, 325, 488, }, + [28] = { 55, 61, 1153, 431, 647, 353, 529, }, + [29] = { 57, 66, 1251, 468, 702, 383, 575, }, + [30] = { 58, 71, 1357, 508, 762, 416, 623, }, + }, } gems["Discipline"] = { - intelligence = true, aura = true, + intelligence = true, + active_skill = true, spell = true, - aoe = true, - base = { - skill_castTime = 1.2, - skill_manaReservedPercent = 35, + area = true, + color = 3, + baseFlags = { + spell = true, + aura = true, + area = true, }, - quality = { - aura_aoeRadius = 1, + skillTypes = { [2] = true, [11] = true, [5] = true, [15] = true, [27] = true, [16] = true, [18] = true, [44] = true, }, + baseMods = { + skill("castTime", 1.2), + skill("manaCost", 35), + --"base_deal_no_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 1), --"base_skill_area_of_effect_+%" = 1 + }, + levelMods = { + [1] = mod("EnergyShield", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Aura" }), --"base_maximum_energy_shield" + [2] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" }, levels = { - [1] = { aura_aoeRadiusInc = 0, AuraEffect_energyShieldBase = 60, }, - [2] = { aura_aoeRadiusInc = 3, AuraEffect_energyShieldBase = 70, }, - [3] = { aura_aoeRadiusInc = 6, AuraEffect_energyShieldBase = 78, }, - [4] = { aura_aoeRadiusInc = 9, AuraEffect_energyShieldBase = 89, }, - [5] = { aura_aoeRadiusInc = 12, AuraEffect_energyShieldBase = 100, }, - [6] = { aura_aoeRadiusInc = 15, AuraEffect_energyShieldBase = 111, }, - [7] = { aura_aoeRadiusInc = 18, AuraEffect_energyShieldBase = 125, }, - [8] = { aura_aoeRadiusInc = 21, AuraEffect_energyShieldBase = 139, }, - [9] = { aura_aoeRadiusInc = 23, AuraEffect_energyShieldBase = 154, }, - [10] = { aura_aoeRadiusInc = 25, AuraEffect_energyShieldBase = 165, }, - [11] = { aura_aoeRadiusInc = 27, AuraEffect_energyShieldBase = 173, }, - [12] = { aura_aoeRadiusInc = 29, AuraEffect_energyShieldBase = 187, }, - [13] = { aura_aoeRadiusInc = 31, AuraEffect_energyShieldBase = 201, }, - [14] = { aura_aoeRadiusInc = 33, AuraEffect_energyShieldBase = 213, }, - [15] = { aura_aoeRadiusInc = 35, AuraEffect_energyShieldBase = 227, }, - [16] = { aura_aoeRadiusInc = 36, AuraEffect_energyShieldBase = 239, }, - [17] = { aura_aoeRadiusInc = 37, AuraEffect_energyShieldBase = 253, }, - [18] = { aura_aoeRadiusInc = 38, AuraEffect_energyShieldBase = 269, }, - [19] = { aura_aoeRadiusInc = 39, AuraEffect_energyShieldBase = 281, }, - [20] = { aura_aoeRadiusInc = 40, AuraEffect_energyShieldBase = 303, }, - [21] = { aura_aoeRadiusInc = 41, AuraEffect_energyShieldBase = 315, }, - [22] = { aura_aoeRadiusInc = 42, AuraEffect_energyShieldBase = 330, }, - [23] = { aura_aoeRadiusInc = 43, AuraEffect_energyShieldBase = 340, }, - [24] = { aura_aoeRadiusInc = 44, AuraEffect_energyShieldBase = 357, }, - [25] = { aura_aoeRadiusInc = 45, AuraEffect_energyShieldBase = 374, }, - [26] = { aura_aoeRadiusInc = 46, AuraEffect_energyShieldBase = 384, }, - [27] = { aura_aoeRadiusInc = 47, AuraEffect_energyShieldBase = 406, }, - [28] = { aura_aoeRadiusInc = 48, AuraEffect_energyShieldBase = 425, }, - [29] = { aura_aoeRadiusInc = 49, AuraEffect_energyShieldBase = 450, }, - [30] = { aura_aoeRadiusInc = 50, AuraEffect_energyShieldBase = 455, }, - } + [1] = { 60, 0, }, + [2] = { 70, 3, }, + [3] = { 78, 6, }, + [4] = { 89, 9, }, + [5] = { 100, 12, }, + [6] = { 111, 15, }, + [7] = { 125, 18, }, + [8] = { 139, 21, }, + [9] = { 154, 23, }, + [10] = { 165, 25, }, + [11] = { 173, 27, }, + [12] = { 187, 29, }, + [13] = { 201, 31, }, + [14] = { 213, 33, }, + [15] = { 227, 35, }, + [16] = { 239, 36, }, + [17] = { 253, 37, }, + [18] = { 269, 38, }, + [19] = { 281, 39, }, + [20] = { 303, 40, }, + [21] = { 315, 41, }, + [22] = { 330, 42, }, + [23] = { 340, 43, }, + [24] = { 357, 44, }, + [25] = { 374, 45, }, + [26] = { 384, 46, }, + [27] = { 406, 47, }, + [28] = { 425, 48, }, + [29] = { 450, 49, }, + [30] = { 455, 50, }, + }, +} +gems["Vaal Discipline"] = { + aura = true, + intelligence = true, + active_skill = true, + vaal = true, + spell = true, + area = true, + duration = true, + color = 3, + baseFlags = { + spell = true, + aura = true, + area = true, + duration = true, + vaal = true, + }, + skillTypes = { [2] = true, [5] = true, [11] = true, [18] = true, [27] = true, [12] = true, [43] = true, [44] = true, }, + baseMods = { + skill("castTime", 0.6), + skill("duration", 3), --"base_skill_effect_duration" = 3000 + --"energy_shield_recharge_not_delayed_by_damage" = ? + --"base_deal_no_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 1), --"base_skill_area_of_effect_+%" = 1 + }, + levelMods = { + [1] = mod("EnergyShield", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Aura" }), --"base_maximum_energy_shield" + [2] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" + }, + levels = { + [1] = { 181, 0, }, + [2] = { 210, 3, }, + [3] = { 233, 6, }, + [4] = { 268, 9, }, + [5] = { 301, 12, }, + [6] = { 334, 15, }, + [7] = { 376, 18, }, + [8] = { 418, 21, }, + [9] = { 463, 23, }, + [10] = { 496, 25, }, + [11] = { 519, 27, }, + [12] = { 562, 29, }, + [13] = { 602, 31, }, + [14] = { 638, 33, }, + [15] = { 680, 35, }, + [16] = { 716, 36, }, + [17] = { 759, 37, }, + [18] = { 807, 38, }, + [19] = { 842, 39, }, + [20] = { 908, 40, }, + [21] = { 944, 41, }, + [22] = { 991, 42, }, + [23] = { 1019, 43, }, + [24] = { 1070, 44, }, + [25] = { 1123, 45, }, + [26] = { 1153, 46, }, + [27] = { 1217, 47, }, + [28] = { 1276, 48, }, + [29] = { 1350, 49, }, + [30] = { 1364, 50, }, + }, } gems["Elemental Weakness"] = { - intelligence = true, curse = true, + intelligence = true, + active_skill = true, spell = true, - aoe = true, + area = true, duration = true, - debuff = true, - base = { - skill_castTime = 0.5, + color = 3, + baseFlags = { + spell = true, + curse = true, + area = true, + duration = true, }, - quality = { - CurseEffect_effective_elementalResist = -0.25, + skillTypes = { [2] = true, [11] = true, [12] = true, [17] = true, [18] = true, [19] = true, [26] = true, [32] = true, [36] = true, }, + baseMods = { + skill("castTime", 0.5), + --"base_deal_no_damage" = ? + skill("debuff", true), + }, + qualityMods = { + mod("ElementalResist", "BASE", -0.25, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"base_resist_all_elements_%" = -0.25 + }, + 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("ElementalResist", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"base_resist_all_elements_%" }, levels = { - [1] = { skill_manaCostBase = 24, skill_durationBase = 9, curse_aoeRadiusInc = 0, CurseEffect_effective_elementalResist = -20, }, - [2] = { skill_manaCostBase = 26, skill_durationBase = 9.1, curse_aoeRadiusInc = 2, CurseEffect_effective_elementalResist = -21, }, - [3] = { skill_manaCostBase = 27, skill_durationBase = 9.2, curse_aoeRadiusInc = 4, CurseEffect_effective_elementalResist = -22, }, - [4] = { skill_manaCostBase = 29, skill_durationBase = 9.3, curse_aoeRadiusInc = 6, CurseEffect_effective_elementalResist = -23, }, - [5] = { skill_manaCostBase = 30, skill_durationBase = 9.4, curse_aoeRadiusInc = 8, CurseEffect_effective_elementalResist = -24, }, - [6] = { skill_manaCostBase = 32, skill_durationBase = 9.5, curse_aoeRadiusInc = 10, CurseEffect_effective_elementalResist = -25, }, - [7] = { skill_manaCostBase = 34, skill_durationBase = 9.6, curse_aoeRadiusInc = 12, CurseEffect_effective_elementalResist = -26, }, - [8] = { skill_manaCostBase = 35, skill_durationBase = 9.7, curse_aoeRadiusInc = 14, CurseEffect_effective_elementalResist = -27, }, - [9] = { skill_manaCostBase = 37, skill_durationBase = 9.8, curse_aoeRadiusInc = 16, CurseEffect_effective_elementalResist = -28, }, - [10] = { skill_manaCostBase = 38, skill_durationBase = 9.9, curse_aoeRadiusInc = 18, CurseEffect_effective_elementalResist = -29, }, - [11] = { skill_manaCostBase = 39, skill_durationBase = 10, curse_aoeRadiusInc = 20, CurseEffect_effective_elementalResist = -30, }, - [12] = { skill_manaCostBase = 40, skill_durationBase = 10.1, curse_aoeRadiusInc = 22, CurseEffect_effective_elementalResist = -31, }, - [13] = { skill_manaCostBase = 42, skill_durationBase = 10.2, curse_aoeRadiusInc = 24, CurseEffect_effective_elementalResist = -32, }, - [14] = { skill_manaCostBase = 43, skill_durationBase = 10.3, curse_aoeRadiusInc = 26, CurseEffect_effective_elementalResist = -33, }, - [15] = { skill_manaCostBase = 44, skill_durationBase = 10.4, curse_aoeRadiusInc = 28, CurseEffect_effective_elementalResist = -34, }, - [16] = { skill_manaCostBase = 45, skill_durationBase = 10.5, curse_aoeRadiusInc = 30, CurseEffect_effective_elementalResist = -35, }, - [17] = { skill_manaCostBase = 46, skill_durationBase = 10.6, curse_aoeRadiusInc = 32, CurseEffect_effective_elementalResist = -36, }, - [18] = { skill_manaCostBase = 47, skill_durationBase = 10.7, curse_aoeRadiusInc = 34, CurseEffect_effective_elementalResist = -37, }, - [19] = { skill_manaCostBase = 48, skill_durationBase = 10.8, curse_aoeRadiusInc = 36, CurseEffect_effective_elementalResist = -38, }, - [20] = { skill_manaCostBase = 50, skill_durationBase = 10.9, curse_aoeRadiusInc = 38, CurseEffect_effective_elementalResist = -39, }, - [21] = { skill_manaCostBase = 51, skill_durationBase = 11, curse_aoeRadiusInc = 40, CurseEffect_effective_elementalResist = -40, }, - [22] = { skill_manaCostBase = 52, skill_durationBase = 11.1, curse_aoeRadiusInc = 42, CurseEffect_effective_elementalResist = -41, }, - [23] = { skill_manaCostBase = 53, skill_durationBase = 11.2, curse_aoeRadiusInc = 44, CurseEffect_effective_elementalResist = -42, }, - [24] = { skill_manaCostBase = 54, skill_durationBase = 11.3, curse_aoeRadiusInc = 46, CurseEffect_effective_elementalResist = -43, }, - [25] = { skill_manaCostBase = 56, skill_durationBase = 11.4, curse_aoeRadiusInc = 48, CurseEffect_effective_elementalResist = -44, }, - [26] = { skill_manaCostBase = 57, skill_durationBase = 11.5, curse_aoeRadiusInc = 50, CurseEffect_effective_elementalResist = -45, }, - [27] = { skill_manaCostBase = 58, skill_durationBase = 11.6, curse_aoeRadiusInc = 52, CurseEffect_effective_elementalResist = -46, }, - [28] = { skill_manaCostBase = 59, skill_durationBase = 11.7, curse_aoeRadiusInc = 54, CurseEffect_effective_elementalResist = -47, }, - [29] = { skill_manaCostBase = 60, skill_durationBase = 11.8, curse_aoeRadiusInc = 56, CurseEffect_effective_elementalResist = -48, }, - [30] = { skill_manaCostBase = 61, skill_durationBase = 11.9, curse_aoeRadiusInc = 58, CurseEffect_effective_elementalResist = -49, }, - } + [1] = { 24, 9, 0, -20, }, + [2] = { 26, 9.1, 2, -21, }, + [3] = { 27, 9.2, 4, -22, }, + [4] = { 29, 9.3, 6, -23, }, + [5] = { 30, 9.4, 8, -24, }, + [6] = { 32, 9.5, 10, -25, }, + [7] = { 34, 9.6, 12, -26, }, + [8] = { 35, 9.7, 14, -27, }, + [9] = { 37, 9.8, 16, -28, }, + [10] = { 38, 9.9, 18, -29, }, + [11] = { 39, 10, 20, -30, }, + [12] = { 40, 10.1, 22, -31, }, + [13] = { 42, 10.2, 24, -32, }, + [14] = { 43, 10.3, 26, -33, }, + [15] = { 44, 10.4, 28, -34, }, + [16] = { 45, 10.5, 30, -35, }, + [17] = { 46, 10.6, 32, -36, }, + [18] = { 47, 10.7, 34, -37, }, + [19] = { 48, 10.8, 36, -38, }, + [20] = { 50, 10.9, 38, -39, }, + [21] = { 51, 11, 40, -40, }, + [22] = { 52, 11.1, 42, -41, }, + [23] = { 53, 11.2, 44, -42, }, + [24] = { 54, 11.3, 46, -43, }, + [25] = { 56, 11.4, 48, -44, }, + [26] = { 57, 11.5, 50, -45, }, + [27] = { 58, 11.6, 52, -46, }, + [28] = { 59, 11.7, 54, -47, }, + [29] = { 60, 11.8, 56, -48, }, + [30] = { 61, 11.9, 58, -49, }, + }, } gems["Enfeeble"] = { - intelligence = true, curse = true, + intelligence = true, + active_skill = true, spell = true, - aoe = true, + area = true, duration = true, - debuff = true, - base = { - skill_castTime = 0.5, + color = 3, + baseFlags = { + spell = true, + curse = true, + area = true, + duration = true, }, - quality = { + 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 + --"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 + }, + 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_+" }, levels = { - [1] = { skill_manaCostBase = 24, skill_durationBase = 9, curse_aoeRadiusInc = 0, }, - [2] = { skill_manaCostBase = 26, skill_durationBase = 9.1, curse_aoeRadiusInc = 2, }, - [3] = { skill_manaCostBase = 27, skill_durationBase = 9.2, curse_aoeRadiusInc = 4, }, - [4] = { skill_manaCostBase = 29, skill_durationBase = 9.3, curse_aoeRadiusInc = 6, }, - [5] = { skill_manaCostBase = 30, skill_durationBase = 9.4, curse_aoeRadiusInc = 8, }, - [6] = { skill_manaCostBase = 32, skill_durationBase = 9.5, curse_aoeRadiusInc = 10, }, - [7] = { skill_manaCostBase = 34, skill_durationBase = 9.6, curse_aoeRadiusInc = 12, }, - [8] = { skill_manaCostBase = 35, skill_durationBase = 9.7, curse_aoeRadiusInc = 14, }, - [9] = { skill_manaCostBase = 37, skill_durationBase = 9.8, curse_aoeRadiusInc = 16, }, - [10] = { skill_manaCostBase = 38, skill_durationBase = 9.9, curse_aoeRadiusInc = 18, }, - [11] = { skill_manaCostBase = 39, skill_durationBase = 10, curse_aoeRadiusInc = 20, }, - [12] = { skill_manaCostBase = 40, skill_durationBase = 10.1, curse_aoeRadiusInc = 22, }, - [13] = { skill_manaCostBase = 42, skill_durationBase = 10.2, curse_aoeRadiusInc = 24, }, - [14] = { skill_manaCostBase = 43, skill_durationBase = 10.3, curse_aoeRadiusInc = 26, }, - [15] = { skill_manaCostBase = 44, skill_durationBase = 10.4, curse_aoeRadiusInc = 28, }, - [16] = { skill_manaCostBase = 45, skill_durationBase = 10.5, curse_aoeRadiusInc = 30, }, - [17] = { skill_manaCostBase = 46, skill_durationBase = 10.6, curse_aoeRadiusInc = 32, }, - [18] = { skill_manaCostBase = 47, skill_durationBase = 10.7, curse_aoeRadiusInc = 34, }, - [19] = { skill_manaCostBase = 48, skill_durationBase = 10.8, curse_aoeRadiusInc = 36, }, - [20] = { skill_manaCostBase = 50, skill_durationBase = 10.9, curse_aoeRadiusInc = 38, }, - [21] = { skill_manaCostBase = 51, skill_durationBase = 11, curse_aoeRadiusInc = 40, }, - [22] = { skill_manaCostBase = 52, skill_durationBase = 11.1, curse_aoeRadiusInc = 42, }, - [23] = { skill_manaCostBase = 53, skill_durationBase = 11.2, curse_aoeRadiusInc = 44, }, - [24] = { skill_manaCostBase = 54, skill_durationBase = 11.3, curse_aoeRadiusInc = 46, }, - [25] = { skill_manaCostBase = 56, skill_durationBase = 11.4, curse_aoeRadiusInc = 48, }, - [26] = { skill_manaCostBase = 57, skill_durationBase = 11.5, curse_aoeRadiusInc = 50, }, - [27] = { skill_manaCostBase = 58, skill_durationBase = 11.6, curse_aoeRadiusInc = 52, }, - [28] = { skill_manaCostBase = 59, skill_durationBase = 11.7, curse_aoeRadiusInc = 54, }, - [29] = { skill_manaCostBase = 60, skill_durationBase = 11.8, curse_aoeRadiusInc = 56, }, - [30] = { skill_manaCostBase = 61, skill_durationBase = 11.9, curse_aoeRadiusInc = 58, }, - } + [1] = { 24, 9, 0, -18, -21, -21, }, + [2] = { 26, 9.1, 2, -19, -21, -21, }, + [3] = { 27, 9.2, 4, -20, -22, -22, }, + [4] = { 29, 9.3, 6, -21, -22, -22, }, + [5] = { 30, 9.4, 8, -22, -23, -23, }, + [6] = { 32, 9.5, 10, -23, -23, -23, }, + [7] = { 34, 9.6, 12, -24, -24, -24, }, + [8] = { 35, 9.7, 14, -25, -24, -24, }, + [9] = { 37, 9.8, 16, -26, -25, -25, }, + [10] = { 38, 9.9, 18, -27, -25, -25, }, + [11] = { 39, 10, 20, -28, -26, -26, }, + [12] = { 40, 10.1, 22, -29, -26, -26, }, + [13] = { 42, 10.2, 24, -30, -27, -27, }, + [14] = { 43, 10.3, 26, -31, -27, -27, }, + [15] = { 44, 10.4, 28, -32, -28, -28, }, + [16] = { 45, 10.5, 30, -33, -28, -28, }, + [17] = { 46, 10.6, 32, -34, -29, -29, }, + [18] = { 47, 10.7, 34, -35, -29, -29, }, + [19] = { 48, 10.8, 36, -36, -30, -30, }, + [20] = { 50, 10.9, 38, -37, -30, -30, }, + [21] = { 51, 11, 40, -38, -31, -31, }, + [22] = { 52, 11.1, 42, -39, -31, -31, }, + [23] = { 53, 11.2, 44, -40, -32, -32, }, + [24] = { 54, 11.3, 46, -41, -32, -32, }, + [25] = { 56, 11.4, 48, -42, -33, -33, }, + [26] = { 57, 11.5, 50, -43, -33, -33, }, + [27] = { 58, 11.6, 52, -44, -34, -34, }, + [28] = { 59, 11.7, 54, -45, -34, -34, }, + [29] = { 60, 11.8, 56, -46, -35, -35, }, + [30] = { 61, 11.9, 58, -47, -35, -35, }, + }, } gems["Essence Drain"] = { - intelligence = true, - spell = true, projectile = true, + intelligence = true, + active_skill = true, + spell = true, duration = true, - debuff = true, chaos = true, - hit = true, - base = { - skill_critChanceBase = 5, - skill_damageEffectiveness = 0.6, - skill_castTime = 0.75, - skill_dotIsSpell = true, - skill_durationBase = 3.8, + color = 3, + baseFlags = { + spell = true, + projectile = true, + duration = true, + chaos = true, }, - quality = { - chaosInc = 1, + skillTypes = { [2] = true, [3] = true, [12] = true, [18] = true, [26] = true, [40] = true, [50] = true, [10] = true, [36] = true, }, + baseMods = { + skill("castTime", 0.75), + skill("damageEffectiveness", 0.6), + skill("critChance", 5), + --"siphon_life_leech_from_damage_permyriad" = 50 + skill("duration", 3.8), --"base_skill_effect_duration" = 3800 + skill("dotIsSpell", true), --"spell_damage_modifiers_apply_to_damage_over_time" = ? + --"base_is_projectile" = ? + skill("debuff", true), + }, + qualityMods = { + mod("ChaosDamage", "INC", 1), --"chaos_damage_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("ChaosDot", nil), --"base_chaos_damage_to_deal_per_minute" + [3] = skill("ChaosMin", nil), --"spell_minimum_base_chaos_damage" + [4] = skill("ChaosMax", nil), --"spell_maximum_base_chaos_damage" }, levels = { - [1] = { skill_manaCostBase = 9, skill_chaosDotBase = 21.5, skill_chaosMin = 6, skill_chaosMax = 9, }, - [2] = { skill_manaCostBase = 10, skill_chaosDotBase = 27.6, skill_chaosMin = 8, skill_chaosMax = 12, }, - [3] = { skill_manaCostBase = 11, skill_chaosDotBase = 37.6, skill_chaosMin = 11, skill_chaosMax = 16, }, - [4] = { skill_manaCostBase = 12, skill_chaosDotBase = 50.3, skill_chaosMin = 14, skill_chaosMax = 22, }, - [5] = { skill_manaCostBase = 13, skill_chaosDotBase = 66.3, skill_chaosMin = 19, skill_chaosMax = 29, }, - [6] = { skill_manaCostBase = 14, skill_chaosDotBase = 86.3, skill_chaosMin = 25, skill_chaosMax = 37, }, - [7] = { skill_manaCostBase = 16, skill_chaosDotBase = 111.3, skill_chaosMin = 32, skill_chaosMax = 48, }, - [8] = { skill_manaCostBase = 16, skill_chaosDotBase = 133.9, skill_chaosMin = 39, skill_chaosMax = 58, }, - [9] = { skill_manaCostBase = 17, skill_chaosDotBase = 160.6, skill_chaosMin = 46, skill_chaosMax = 69, }, - [10] = { skill_manaCostBase = 18, skill_chaosDotBase = 191.8, skill_chaosMin = 55, skill_chaosMax = 83, }, - [11] = { skill_manaCostBase = 19, skill_chaosDotBase = 228.5, skill_chaosMin = 66, skill_chaosMax = 99, }, - [12] = { skill_manaCostBase = 20, skill_chaosDotBase = 271.4, skill_chaosMin = 78, skill_chaosMax = 117, }, - [13] = { skill_manaCostBase = 21, skill_chaosDotBase = 321.5, skill_chaosMin = 93, skill_chaosMax = 139, }, - [14] = { skill_manaCostBase = 22, skill_chaosDotBase = 380.1, skill_chaosMin = 109, skill_chaosMax = 164, }, - [15] = { skill_manaCostBase = 23, skill_chaosDotBase = 448.3, skill_chaosMin = 129, skill_chaosMax = 194, }, - [16] = { skill_manaCostBase = 24, skill_chaosDotBase = 527.8, skill_chaosMin = 152, skill_chaosMax = 228, }, - [17] = { skill_manaCostBase = 24, skill_chaosDotBase = 587.9, skill_chaosMin = 169, skill_chaosMax = 254, }, - [18] = { skill_manaCostBase = 25, skill_chaosDotBase = 654.4, skill_chaosMin = 188, skill_chaosMax = 283, }, - [19] = { skill_manaCostBase = 26, skill_chaosDotBase = 727.8, skill_chaosMin = 210, skill_chaosMax = 314, }, - [20] = { skill_manaCostBase = 27, skill_chaosDotBase = 809, skill_chaosMin = 233, skill_chaosMax = 349, }, - [21] = { skill_manaCostBase = 28, skill_chaosDotBase = 898.7, skill_chaosMin = 259, skill_chaosMax = 388, }, - [22] = { skill_manaCostBase = 29, skill_chaosDotBase = 997.7, skill_chaosMin = 287, skill_chaosMax = 431, }, - [23] = { skill_manaCostBase = 29, skill_chaosDotBase = 1107, skill_chaosMin = 319, skill_chaosMax = 478, }, - [24] = { skill_manaCostBase = 30, skill_chaosDotBase = 1227.6, skill_chaosMin = 354, skill_chaosMax = 530, }, - [25] = { skill_manaCostBase = 30, skill_chaosDotBase = 1360.6, skill_chaosMin = 392, skill_chaosMax = 588, }, - [26] = { skill_manaCostBase = 31, skill_chaosDotBase = 1507.3, skill_chaosMin = 434, skill_chaosMax = 651, }, - [27] = { skill_manaCostBase = 32, skill_chaosDotBase = 1669.1, skill_chaosMin = 481, skill_chaosMax = 721, }, - [28] = { skill_manaCostBase = 33, skill_chaosDotBase = 1847.3, skill_chaosMin = 532, skill_chaosMax = 798, }, - [29] = { skill_manaCostBase = 33, skill_chaosDotBase = 2043.7, skill_chaosMin = 589, skill_chaosMax = 883, }, - [30] = { skill_manaCostBase = 34, skill_chaosDotBase = 2260, skill_chaosMin = 651, skill_chaosMax = 976, }, - } + [1] = { 9, 21.483333333333, 6, 9, }, + [2] = { 10, 27.566666666667, 8, 12, }, + [3] = { 11, 37.6, 11, 16, }, + [4] = { 12, 50.3, 14, 22, }, + [5] = { 13, 66.266666666667, 19, 29, }, + [6] = { 14, 86.283333333333, 25, 37, }, + [7] = { 16, 111.26666666667, 32, 48, }, + [8] = { 16, 133.93333333333, 39, 58, }, + [9] = { 17, 160.58333333333, 46, 69, }, + [10] = { 18, 191.85, 55, 83, }, + [11] = { 19, 228.5, 66, 99, }, + [12] = { 20, 271.4, 78, 117, }, + [13] = { 21, 321.53333333333, 93, 139, }, + [14] = { 22, 380.05, 109, 164, }, + [15] = { 23, 448.3, 129, 194, }, + [16] = { 24, 527.78333333333, 152, 228, }, + [17] = { 24, 587.88333333333, 169, 254, }, + [18] = { 25, 654.35, 188, 283, }, + [19] = { 26, 727.81666666667, 210, 314, }, + [20] = { 27, 809, 233, 349, }, + [21] = { 28, 898.68333333333, 259, 388, }, + [22] = { 29, 997.7, 287, 431, }, + [23] = { 29, 1107, 319, 478, }, + [24] = { 30, 1227.6, 354, 530, }, + [25] = { 30, 1360.6333333333, 392, 588, }, + [26] = { 31, 1507.3333333333, 434, 651, }, + [27] = { 32, 1669.0666666667, 481, 721, }, + [28] = { 33, 1847.3, 532, 798, }, + [29] = { 33, 2043.6833333333, 589, 883, }, + [30] = { 34, 2260, 651, 976, }, + }, } gems["Fire Nova Mine"] = { - intelligence = true, - spell = true, + area = true, mine = true, - aoe = true, + intelligence = true, + active_skill = true, + spell = true, fire = true, - hit = true, - base = { - skill_castTime = 1, - skill_damageEffectiveness = 0.3, - skill_critChanceBase = 5, + duration = true, + color = 3, + baseFlags = { + spell = true, + mine = true, + area = true, + duration = true, + fire = true, }, - quality = { - fireInc = 1, + skillTypes = { [2] = true, [10] = true, [36] = true, [11] = true, [33] = true, [26] = true, [41] = true, [12] = true, }, + baseMods = { + skill("castTime", 0.4), + skill("damageEffectiveness", 0.3), + skill("critChance", 5), + --"base_mine_duration" = 16000 + --"base_spell_repeat_count" = 3 + --"base_skill_is_mined" = ? + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + --"is_remote_mine" = ? + --"is_area_damage" = ? + }, + qualityMods = { + mod("FireDamage", "INC", 1), --"fire_damage_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("FireMin", nil), --"spell_minimum_base_fire_damage" + [3] = skill("FireMax", nil), --"spell_maximum_base_fire_damage" + --[4] = "fire_nova_damage_+%_per_repeat_final" }, levels = { - [1] = { skill_manaCostBase = 12, skill_fireMin = 6, skill_fireMax = 9, }, - [2] = { skill_manaCostBase = 13, skill_fireMin = 7, skill_fireMax = 11, }, - [3] = { skill_manaCostBase = 15, skill_fireMin = 10, skill_fireMax = 14, }, - [4] = { skill_manaCostBase = 17, skill_fireMin = 12, skill_fireMax = 18, }, - [5] = { skill_manaCostBase = 18, skill_fireMin = 16, skill_fireMax = 23, }, - [6] = { skill_manaCostBase = 20, skill_fireMin = 20, skill_fireMax = 29, }, - [7] = { skill_manaCostBase = 22, skill_fireMin = 24, skill_fireMax = 36, }, - [8] = { skill_manaCostBase = 23, skill_fireMin = 28, skill_fireMax = 43, }, - [9] = { skill_manaCostBase = 24, skill_fireMin = 33, skill_fireMax = 50, }, - [10] = { skill_manaCostBase = 25, skill_fireMin = 39, skill_fireMax = 58, }, - [11] = { skill_manaCostBase = 27, skill_fireMin = 45, skill_fireMax = 67, }, - [12] = { skill_manaCostBase = 28, skill_fireMin = 52, skill_fireMax = 77, }, - [13] = { skill_manaCostBase = 29, skill_fireMin = 60, skill_fireMax = 89, }, - [14] = { skill_manaCostBase = 31, skill_fireMin = 68, skill_fireMax = 103, }, - [15] = { skill_manaCostBase = 32, skill_fireMin = 79, skill_fireMax = 118, }, - [16] = { skill_manaCostBase = 33, skill_fireMin = 90, skill_fireMax = 135, }, - [17] = { skill_manaCostBase = 34, skill_fireMin = 98, skill_fireMax = 148, }, - [18] = { skill_manaCostBase = 35, skill_fireMin = 107, skill_fireMax = 161, }, - [19] = { skill_manaCostBase = 36, skill_fireMin = 117, skill_fireMax = 176, }, - [20] = { skill_manaCostBase = 36, skill_fireMin = 128, skill_fireMax = 192, }, - [21] = { skill_manaCostBase = 37, skill_fireMin = 140, skill_fireMax = 210, }, - [22] = { skill_manaCostBase = 38, skill_fireMin = 152, skill_fireMax = 228, }, - [23] = { skill_manaCostBase = 39, skill_fireMin = 166, skill_fireMax = 249, }, - [24] = { skill_manaCostBase = 40, skill_fireMin = 181, skill_fireMax = 271, }, - [25] = { skill_manaCostBase = 41, skill_fireMin = 197, skill_fireMax = 295, }, - [26] = { skill_manaCostBase = 41, skill_fireMin = 214, skill_fireMax = 321, }, - [27] = { skill_manaCostBase = 42, skill_fireMin = 232, skill_fireMax = 349, }, - [28] = { skill_manaCostBase = 43, skill_fireMin = 253, skill_fireMax = 379, }, - [29] = { skill_manaCostBase = 44, skill_fireMin = 274, skill_fireMax = 412, }, - [30] = { skill_manaCostBase = 45, skill_fireMin = 298, skill_fireMax = 447, }, - } + [1] = { 12, 6, 9, 20, }, + [2] = { 13, 7, 11, 20, }, + [3] = { 15, 10, 14, 21, }, + [4] = { 17, 12, 18, 21, }, + [5] = { 18, 16, 23, 22, }, + [6] = { 20, 20, 29, 22, }, + [7] = { 22, 24, 36, 23, }, + [8] = { 23, 28, 43, 23, }, + [9] = { 24, 33, 50, 24, }, + [10] = { 25, 39, 58, 24, }, + [11] = { 27, 45, 67, 25, }, + [12] = { 28, 52, 77, 25, }, + [13] = { 29, 60, 89, 26, }, + [14] = { 31, 68, 103, 26, }, + [15] = { 32, 79, 118, 27, }, + [16] = { 33, 90, 135, 27, }, + [17] = { 34, 98, 148, 28, }, + [18] = { 35, 107, 161, 28, }, + [19] = { 36, 117, 176, 29, }, + [20] = { 36, 128, 192, 29, }, + [21] = { 37, 140, 210, 30, }, + [22] = { 38, 152, 228, 30, }, + [23] = { 39, 166, 249, 31, }, + [24] = { 40, 181, 271, 31, }, + [25] = { 41, 197, 295, 32, }, + [26] = { 41, 214, 321, 32, }, + [27] = { 42, 232, 349, 33, }, + [28] = { 43, 253, 379, 33, }, + [29] = { 44, 274, 412, 34, }, + [30] = { 45, 298, 447, 34, }, + }, } gems["Fireball"] = { - intelligence = true, - spell = true, - aoe = true, projectile = true, + intelligence = true, + active_skill = true, + spell = true, + area = true, fire = true, - hit = true, - base = { - skill_castTime = 0.85, - skill_damageEffectiveness = 1, - skill_critChanceBase = 6, + color = 3, + baseFlags = { + spell = true, + projectile = true, + fire = true, }, - quality = { - igniteChance = 0.5, + skillTypes = { [3] = true, [2] = true, [10] = true, [11] = true, [17] = true, [18] = true, [19] = true, [26] = true, [36] = true, [33] = true, }, + baseMods = { + skill("castTime", 0.85), + skill("critChance", 6), + --"base_is_projectile" = ? + }, + qualityMods = { + mod("EnemyIgniteChance", "BASE", 0.5), --"base_chance_to_ignite_%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("FireMin", nil), --"spell_minimum_base_fire_damage" + [3] = skill("FireMax", nil), --"spell_maximum_base_fire_damage" + [4] = mod("EnemyIgniteChance", "BASE", nil), --"base_chance_to_ignite_%" }, levels = { - [1] = { skill_manaCostBase = 6, skill_fireMin = 7, skill_fireMax = 10, igniteChance = 20, }, - [2] = { skill_manaCostBase = 6, skill_fireMin = 8, skill_fireMax = 11, igniteChance = 21, }, - [3] = { skill_manaCostBase = 7, skill_fireMin = 10, skill_fireMax = 14, igniteChance = 22, }, - [4] = { skill_manaCostBase = 8, skill_fireMin = 13, skill_fireMax = 20, igniteChance = 23, }, - [5] = { skill_manaCostBase = 9, skill_fireMin = 19, skill_fireMax = 29, igniteChance = 24, }, - [6] = { skill_manaCostBase = 10, skill_fireMin = 29, skill_fireMax = 43, igniteChance = 25, }, - [7] = { skill_manaCostBase = 11, skill_fireMin = 39, skill_fireMax = 58, igniteChance = 26, }, - [8] = { skill_manaCostBase = 12, skill_fireMin = 52, skill_fireMax = 77, igniteChance = 27, }, - [9] = { skill_manaCostBase = 13, skill_fireMin = 67, skill_fireMax = 101, igniteChance = 28, }, - [10] = { skill_manaCostBase = 15, skill_fireMin = 87, skill_fireMax = 131, igniteChance = 29, }, - [11] = { skill_manaCostBase = 16, skill_fireMin = 112, skill_fireMax = 168, igniteChance = 30, }, - [12] = { skill_manaCostBase = 17, skill_fireMin = 142, skill_fireMax = 213, igniteChance = 31, }, - [13] = { skill_manaCostBase = 18, skill_fireMin = 180, skill_fireMax = 270, igniteChance = 32, }, - [14] = { skill_manaCostBase = 19, skill_fireMin = 226, skill_fireMax = 339, igniteChance = 33, }, - [15] = { skill_manaCostBase = 21, skill_fireMin = 283, skill_fireMax = 424, igniteChance = 34, }, - [16] = { skill_manaCostBase = 22, skill_fireMin = 352, skill_fireMax = 528, igniteChance = 35, }, - [17] = { skill_manaCostBase = 23, skill_fireMin = 437, skill_fireMax = 655, igniteChance = 36, }, - [18] = { skill_manaCostBase = 24, skill_fireMin = 540, skill_fireMax = 810, igniteChance = 37, }, - [19] = { skill_manaCostBase = 25, skill_fireMin = 632, skill_fireMax = 948, igniteChance = 38, }, - [20] = { skill_manaCostBase = 26, skill_fireMin = 739, skill_fireMax = 1109, igniteChance = 39, }, - [21] = { skill_manaCostBase = 27, skill_fireMin = 819, skill_fireMax = 1229, igniteChance = 40, }, - [22] = { skill_manaCostBase = 27, skill_fireMin = 908, skill_fireMax = 1362, igniteChance = 41, }, - [23] = { skill_manaCostBase = 28, skill_fireMin = 1005, skill_fireMax = 1508, igniteChance = 42, }, - [24] = { skill_manaCostBase = 28, skill_fireMin = 1113, skill_fireMax = 1669, igniteChance = 43, }, - [25] = { skill_manaCostBase = 29, skill_fireMin = 1231, skill_fireMax = 1847, igniteChance = 44, }, - [26] = { skill_manaCostBase = 30, skill_fireMin = 1361, skill_fireMax = 2042, igniteChance = 45, }, - [27] = { skill_manaCostBase = 30, skill_fireMin = 1504, skill_fireMax = 2257, igniteChance = 46, }, - [28] = { skill_manaCostBase = 31, skill_fireMin = 1662, skill_fireMax = 2493, igniteChance = 47, }, - [29] = { skill_manaCostBase = 31, skill_fireMin = 1835, skill_fireMax = 2752, igniteChance = 48, }, - [30] = { skill_manaCostBase = 32, skill_fireMin = 2025, skill_fireMax = 3038, igniteChance = 49, }, - } + [1] = { 6, 7, 10, 20, }, + [2] = { 6, 8, 11, 21, }, + [3] = { 7, 10, 14, 22, }, + [4] = { 8, 13, 20, 23, }, + [5] = { 9, 19, 29, 24, }, + [6] = { 10, 29, 43, 25, }, + [7] = { 11, 39, 58, 26, }, + [8] = { 12, 52, 77, 27, }, + [9] = { 13, 67, 101, 28, }, + [10] = { 15, 87, 131, 29, }, + [11] = { 16, 112, 168, 30, }, + [12] = { 17, 142, 213, 31, }, + [13] = { 18, 180, 270, 32, }, + [14] = { 19, 226, 339, 33, }, + [15] = { 21, 283, 424, 34, }, + [16] = { 22, 352, 528, 35, }, + [17] = { 23, 437, 655, 36, }, + [18] = { 24, 540, 810, 37, }, + [19] = { 25, 632, 948, 38, }, + [20] = { 26, 739, 1109, 39, }, + [21] = { 27, 819, 1229, 40, }, + [22] = { 27, 908, 1362, 41, }, + [23] = { 28, 1005, 1508, 42, }, + [24] = { 28, 1113, 1669, 43, }, + [25] = { 29, 1231, 1847, 44, }, + [26] = { 30, 1361, 2042, 45, }, + [27] = { 30, 1504, 2257, 46, }, + [28] = { 31, 1662, 2493, 47, }, + [29] = { 31, 1835, 2752, 48, }, + [30] = { 32, 2025, 3038, 49, }, + }, +} +gems["Vaal Fireball"] = { + projectile = true, + intelligence = true, + active_skill = true, + vaal = true, + spell = true, + area = true, + fire = true, + color = 3, + baseFlags = { + spell = true, + projectile = true, + fire = true, + vaal = true, + }, + skillTypes = { [3] = true, [2] = true, [10] = true, [11] = true, [17] = true, [18] = true, [19] = true, [26] = true, [43] = true, [33] = true, }, + baseMods = { + skill("castTime", 0.85), + skill("damageEffectiveness", 1.25), + skill("critChance", 6), + --"base_number_of_projectiles_in_spiral_nova" = 32 + --"projectile_spiral_nova_time_ms" = 2000 + --"projectile_spiral_nova_angle" = -720 + mod("AreaRadius", "INC", 50), --"base_skill_area_of_effect_+%" = 50 + --"base_is_projectile" = ? + }, + qualityMods = { + mod("EnemyIgniteChance", "BASE", 1.5), --"base_chance_to_ignite_%" = 1.5 + }, + levelMods = { + [1] = skill("FireMin", nil), --"spell_minimum_base_fire_damage" + [2] = skill("FireMax", nil), --"spell_maximum_base_fire_damage" + }, + levels = { + [1] = { 8, 11, }, + [2] = { 9, 13, }, + [3] = { 11, 16, }, + [4] = { 14, 22, }, + [5] = { 20, 30, }, + [6] = { 30, 45, }, + [7] = { 39, 59, }, + [8] = { 51, 76, }, + [9] = { 65, 98, }, + [10] = { 82, 124, }, + [11] = { 103, 155, }, + [12] = { 128, 192, }, + [13] = { 158, 238, }, + [14] = { 195, 292, }, + [15] = { 238, 357, }, + [16] = { 289, 434, }, + [17] = { 351, 526, }, + [18] = { 424, 636, }, + [19] = { 488, 732, }, + [20] = { 560, 841, }, + [21] = { 614, 921, }, + [22] = { 673, 1009, }, + [23] = { 736, 1105, }, + [24] = { 806, 1209, }, + [25] = { 881, 1322, }, + [26] = { 963, 1445, }, + [27] = { 1052, 1578, }, + [28] = { 1149, 1723, }, + [29] = { 1254, 1881, }, + [30] = { 1368, 2052, }, + }, } gems["Firestorm"] = { intelligence = true, + active_skill = true, spell = true, - aoe = true, + area = true, duration = true, fire = true, - hit = true, - base = { - skill_castTime = 0.9, - skill_damageEffectiveness = 0.3, - skill_critChanceBase = 6, - skill_durationBase = 2, + color = 3, + baseFlags = { + spell = true, + area = true, + duration = true, + fire = true, }, - quality = { - damageInc = 1, + skillTypes = { [2] = true, [10] = true, [11] = true, [12] = true, [17] = true, [18] = true, [19] = true, [26] = true, [36] = true, [33] = true, }, + baseMods = { + skill("castTime", 0.9), + skill("damageEffectiveness", 0.3), + skill("critChance", 6), + skill("duration", 2), --"base_skill_effect_duration" = 2000 + --"fire_storm_fireball_delay_ms" = 100 + --"is_area_damage" = 1 + --"skill_override_pvp_scaling_time_ms" = 450 + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + }, + qualityMods = { + mod("Damage", "INC", 1, 0, 0, nil), --"damage_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("FireMin", nil), --"spell_minimum_base_fire_damage" + [3] = skill("FireMax", nil), --"spell_maximum_base_fire_damage" }, levels = { - [1] = { skill_manaCostBase = 9, skill_fireMin = 4, skill_fireMax = 10, }, - [2] = { skill_manaCostBase = 10, skill_fireMin = 9, skill_fireMax = 13, }, - [3] = { skill_manaCostBase = 11, skill_fireMin = 11, skill_fireMax = 17, }, - [4] = { skill_manaCostBase = 12, skill_fireMin = 15, skill_fireMax = 22, }, - [5] = { skill_manaCostBase = 13, skill_fireMin = 19, skill_fireMax = 28, }, - [6] = { skill_manaCostBase = 14, skill_fireMin = 23, skill_fireMax = 35, }, - [7] = { skill_manaCostBase = 15, skill_fireMin = 29, skill_fireMax = 44, }, - [8] = { skill_manaCostBase = 16, skill_fireMin = 35, skill_fireMax = 52, }, - [9] = { skill_manaCostBase = 17, skill_fireMin = 40, skill_fireMax = 61, }, - [10] = { skill_manaCostBase = 18, skill_fireMin = 47, skill_fireMax = 71, }, - [11] = { skill_manaCostBase = 19, skill_fireMin = 55, skill_fireMax = 82, }, - [12] = { skill_manaCostBase = 20, skill_fireMin = 64, skill_fireMax = 95, }, - [13] = { skill_manaCostBase = 21, skill_fireMin = 74, skill_fireMax = 110, }, - [14] = { skill_manaCostBase = 22, skill_fireMin = 85, skill_fireMax = 127, }, - [15] = { skill_manaCostBase = 23, skill_fireMin = 98, skill_fireMax = 147, }, - [16] = { skill_manaCostBase = 24, skill_fireMin = 112, skill_fireMax = 169, }, - [17] = { skill_manaCostBase = 24, skill_fireMin = 123, skill_fireMax = 185, }, - [18] = { skill_manaCostBase = 25, skill_fireMin = 135, skill_fireMax = 203, }, - [19] = { skill_manaCostBase = 25, skill_fireMin = 148, skill_fireMax = 222, }, - [20] = { skill_manaCostBase = 26, skill_fireMin = 162, skill_fireMax = 243, }, - [21] = { skill_manaCostBase = 26, skill_fireMin = 177, skill_fireMax = 265, }, - [22] = { skill_manaCostBase = 27, skill_fireMin = 193, skill_fireMax = 290, }, - [23] = { skill_manaCostBase = 27, skill_fireMin = 211, skill_fireMax = 317, }, - [24] = { skill_manaCostBase = 28, skill_fireMin = 231, skill_fireMax = 346, }, - [25] = { skill_manaCostBase = 29, skill_fireMin = 251, skill_fireMax = 377, }, - [26] = { skill_manaCostBase = 30, skill_fireMin = 274, skill_fireMax = 411, }, - [27] = { skill_manaCostBase = 30, skill_fireMin = 299, skill_fireMax = 448, }, - [28] = { skill_manaCostBase = 30, skill_fireMin = 326, skill_fireMax = 488, }, - [29] = { skill_manaCostBase = 31, skill_fireMin = 355, skill_fireMax = 532, }, - [30] = { skill_manaCostBase = 32, skill_fireMin = 386, skill_fireMax = 579, }, - } + [1] = { 9, 4, 10, }, + [2] = { 10, 9, 13, }, + [3] = { 11, 11, 17, }, + [4] = { 12, 15, 22, }, + [5] = { 13, 19, 28, }, + [6] = { 14, 23, 35, }, + [7] = { 15, 29, 44, }, + [8] = { 16, 35, 52, }, + [9] = { 17, 40, 61, }, + [10] = { 18, 47, 71, }, + [11] = { 19, 55, 82, }, + [12] = { 20, 64, 95, }, + [13] = { 21, 74, 110, }, + [14] = { 22, 85, 127, }, + [15] = { 23, 98, 147, }, + [16] = { 24, 112, 169, }, + [17] = { 24, 123, 185, }, + [18] = { 25, 135, 203, }, + [19] = { 25, 148, 222, }, + [20] = { 26, 162, 243, }, + [21] = { 26, 177, 265, }, + [22] = { 27, 193, 290, }, + [23] = { 27, 211, 317, }, + [24] = { 28, 231, 346, }, + [25] = { 29, 251, 377, }, + [26] = { 30, 274, 411, }, + [27] = { 30, 299, 448, }, + [28] = { 30, 326, 488, }, + [29] = { 31, 355, 532, }, + [30] = { 32, 386, 579, }, + }, } gems["Flame Dash"] = { intelligence = true, + active_skill = true, spell = true, - fire = true, movement = true, duration = true, - hit = true, - base = { - skill_castTime = 0.75, - skill_damageEffectiveness = 1, - skill_critChanceBase = 6, - skill_durationBase = 4, + fire = true, + color = 3, + baseFlags = { + spell = true, + duration = true, + movement = true, + fire = true, }, - quality = { - castSpeedInc = 0.5, + skillTypes = { [2] = true, [38] = true, [10] = true, [40] = true, [12] = true, [18] = true, [36] = true, [33] = true, [17] = true, [19] = true, }, + baseMods = { + skill("castTime", 0.75), + skill("critChance", 6), + skill("duration", 4), --"base_skill_effect_duration" = 4000 + --"is_area_damage" = ? + }, + qualityMods = { + mod("Speed", "INC", 0.5, ModFlag.Spell), --"base_cast_speed_+%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("FireMin", nil), --"spell_minimum_base_fire_damage" + [3] = skill("FireMax", nil), --"spell_maximum_base_fire_damage" + [4] = skill("FireDot", nil), --"base_fire_damage_to_deal_per_minute" }, levels = { - [1] = { skill_manaCostBase = 10, skill_fireMin = 6, skill_fireMax = 9, skill_fireDotBase = 10.9, }, - [2] = { skill_manaCostBase = 11, skill_fireMin = 8, skill_fireMax = 11, skill_fireDotBase = 14.3, }, - [3] = { skill_manaCostBase = 12, skill_fireMin = 11, skill_fireMax = 16, skill_fireDotBase = 20, }, - [4] = { skill_manaCostBase = 13, skill_fireMin = 15, skill_fireMax = 22, skill_fireDotBase = 27.4, }, - [5] = { skill_manaCostBase = 14, skill_fireMin = 20, skill_fireMax = 29, skill_fireDotBase = 36.8, }, - [6] = { skill_manaCostBase = 15, skill_fireMin = 26, skill_fireMax = 39, skill_fireDotBase = 48.9, }, - [7] = { skill_manaCostBase = 16, skill_fireMin = 34, skill_fireMax = 51, skill_fireDotBase = 64.2, }, - [8] = { skill_manaCostBase = 17, skill_fireMin = 42, skill_fireMax = 63, skill_fireDotBase = 78.2, }, - [9] = { skill_manaCostBase = 18, skill_fireMin = 51, skill_fireMax = 76, skill_fireDotBase = 95, }, - [10] = { skill_manaCostBase = 20, skill_fireMin = 61, skill_fireMax = 92, skill_fireDotBase = 114.9, }, - [11] = { skill_manaCostBase = 21, skill_fireMin = 74, skill_fireMax = 111, skill_fireDotBase = 138.5, }, - [12] = { skill_manaCostBase = 22, skill_fireMin = 89, skill_fireMax = 133, skill_fireDotBase = 166.5, }, - [13] = { skill_manaCostBase = 24, skill_fireMin = 106, skill_fireMax = 160, skill_fireDotBase = 199.6, }, - [14] = { skill_manaCostBase = 25, skill_fireMin = 127, skill_fireMax = 191, skill_fireDotBase = 238.6, }, - [15] = { skill_manaCostBase = 26, skill_fireMin = 152, skill_fireMax = 228, skill_fireDotBase = 284.7, }, - [16] = { skill_manaCostBase = 27, skill_fireMin = 181, skill_fireMax = 271, skill_fireDotBase = 339, }, - [17] = { skill_manaCostBase = 28, skill_fireMin = 215, skill_fireMax = 322, skill_fireDotBase = 402.9, }, - [18] = { skill_manaCostBase = 29, skill_fireMin = 255, skill_fireMax = 382, skill_fireDotBase = 478.1, }, - [19] = { skill_manaCostBase = 30, skill_fireMin = 285, skill_fireMax = 428, skill_fireDotBase = 535.3, }, - [20] = { skill_manaCostBase = 30, skill_fireMin = 319, skill_fireMax = 479, skill_fireDotBase = 599, }, - [21] = { skill_manaCostBase = 31, skill_fireMin = 357, skill_fireMax = 536, skill_fireDotBase = 669.9, }, - [22] = { skill_manaCostBase = 32, skill_fireMin = 399, skill_fireMax = 599, skill_fireDotBase = 748.7, }, - [23] = { skill_manaCostBase = 33, skill_fireMin = 446, skill_fireMax = 669, skill_fireDotBase = 836.4, }, - [24] = { skill_manaCostBase = 34, skill_fireMin = 498, skill_fireMax = 747, skill_fireDotBase = 933.7, }, - [25] = { skill_manaCostBase = 34, skill_fireMin = 556, skill_fireMax = 833, skill_fireDotBase = 1041.9, }, - [26] = { skill_manaCostBase = 35, skill_fireMin = 620, skill_fireMax = 930, skill_fireDotBase = 1162, }, - [27] = { skill_manaCostBase = 36, skill_fireMin = 691, skill_fireMax = 1036, skill_fireDotBase = 1295.3, }, - [28] = { skill_manaCostBase = 37, skill_fireMin = 770, skill_fireMax = 1155, skill_fireDotBase = 1443.3, }, - [29] = { skill_manaCostBase = 38, skill_fireMin = 857, skill_fireMax = 1286, skill_fireDotBase = 1607.5, }, - [30] = { skill_manaCostBase = 38, skill_fireMin = 954, skill_fireMax = 1432, skill_fireDotBase = 1789.6, }, - } + [1] = { 10, 6, 9, 10.9, }, + [2] = { 11, 8, 11, 14.3, }, + [3] = { 12, 11, 16, 20.016666666667, }, + [4] = { 13, 15, 22, 27.366666666667, }, + [5] = { 14, 20, 29, 36.816666666667, }, + [6] = { 15, 26, 39, 48.866666666667, }, + [7] = { 16, 34, 51, 64.15, }, + [8] = { 17, 42, 63, 78.233333333333, }, + [9] = { 18, 51, 76, 94.983333333333, }, + [10] = { 20, 61, 92, 114.9, }, + [11] = { 21, 74, 111, 138.5, }, + [12] = { 22, 89, 133, 166.48333333333, }, + [13] = { 24, 106, 160, 199.55, }, + [14] = { 25, 127, 191, 238.61666666667, }, + [15] = { 26, 152, 228, 284.7, }, + [16] = { 27, 181, 271, 339, }, + [17] = { 28, 215, 322, 402.9, }, + [18] = { 29, 255, 382, 478.05, }, + [19] = { 30, 285, 428, 535.3, }, + [20] = { 30, 319, 479, 599.01666666667, }, + [21] = { 31, 357, 536, 669.9, }, + [22] = { 32, 399, 599, 748.71666666667, }, + [23] = { 33, 446, 669, 836.35, }, + [24] = { 34, 498, 747, 933.7, }, + [25] = { 34, 556, 833, 1041.8666666667, }, + [26] = { 35, 620, 930, 1161.9666666667, }, + [27] = { 36, 691, 1036, 1295.3166666667, }, + [28] = { 37, 770, 1155, 1443.3, }, + [29] = { 38, 857, 1286, 1607.4833333333, }, + [30] = { 38, 954, 1432, 1789.6, }, + }, } gems["Flame Surge"] = { intelligence = true, + active_skill = true, spell = true, - aoe = true, + area = true, fire = true, - hit = true, - base = { - skill_castTime = 0.5, - skill_damageEffectiveness = 1, - skill_critChanceBase = 6, - CondMod_EnemyBurning_spell_damageMore = 1.5, - cannotIgnite = true, + color = 3, + baseFlags = { + spell = true, + area = true, + fire = true, }, - quality = { - castSpeedInc = 0.5, + skillTypes = { [2] = true, [10] = true, [17] = true, [18] = true, [19] = true, [26] = true, [36] = true, [11] = true, [33] = true, }, + baseMods = { + skill("castTime", 0.5), + skill("critChance", 6), + mod("Damage", "MORE", 50, bit.bor(ModFlag.Spell, ModFlag.Hit), 0, { type = "Condition", var = "EnemyBurning" }), --"flame_whip_damage_+%_final_vs_burning_enemies" = 50 + flag("CannotIgnite"), --"never_ignite" = ? + --"is_area_damage" = ? + }, + qualityMods = { + mod("Speed", "INC", 0.5, ModFlag.Spell), --"base_cast_speed_+%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("FireMin", nil), --"spell_minimum_base_fire_damage" + [3] = skill("FireMax", nil), --"spell_maximum_base_fire_damage" }, levels = { - [1] = { skill_manaCostBase = 9, skill_fireMin = 21, skill_fireMax = 31, }, - [2] = { skill_manaCostBase = 10, skill_fireMin = 26, skill_fireMax = 39, }, - [3] = { skill_manaCostBase = 11, skill_fireMin = 35, skill_fireMax = 52, }, - [4] = { skill_manaCostBase = 12, skill_fireMin = 45, skill_fireMax = 67, }, - [5] = { skill_manaCostBase = 13, skill_fireMin = 57, skill_fireMax = 86, }, - [6] = { skill_manaCostBase = 14, skill_fireMin = 73, skill_fireMax = 109, }, - [7] = { skill_manaCostBase = 15, skill_fireMin = 91, skill_fireMax = 137, }, - [8] = { skill_manaCostBase = 16, skill_fireMin = 107, skill_fireMax = 161, }, - [9] = { skill_manaCostBase = 17, skill_fireMin = 126, skill_fireMax = 189, }, - [10] = { skill_manaCostBase = 18, skill_fireMin = 147, skill_fireMax = 221, }, - [11] = { skill_manaCostBase = 19, skill_fireMin = 171, skill_fireMax = 257, }, - [12] = { skill_manaCostBase = 20, skill_fireMin = 199, skill_fireMax = 299, }, - [13] = { skill_manaCostBase = 21, skill_fireMin = 231, skill_fireMax = 346, }, - [14] = { skill_manaCostBase = 22, skill_fireMin = 267, skill_fireMax = 401, }, - [15] = { skill_manaCostBase = 22, skill_fireMin = 308, skill_fireMax = 462, }, - [16] = { skill_manaCostBase = 23, skill_fireMin = 355, skill_fireMax = 533, }, - [17] = { skill_manaCostBase = 23, skill_fireMin = 390, skill_fireMax = 585, }, - [18] = { skill_manaCostBase = 24, skill_fireMin = 428, skill_fireMax = 642, }, - [19] = { skill_manaCostBase = 25, skill_fireMin = 469, skill_fireMax = 703, }, - [20] = { skill_manaCostBase = 26, skill_fireMin = 514, skill_fireMax = 771, }, - [21] = { skill_manaCostBase = 26, skill_fireMin = 563, skill_fireMax = 844, }, - [22] = { skill_manaCostBase = 26, skill_fireMin = 616, skill_fireMax = 923, }, - [23] = { skill_manaCostBase = 27, skill_fireMin = 673, skill_fireMax = 1010, }, - [24] = { skill_manaCostBase = 28, skill_fireMin = 736, skill_fireMax = 1104, }, - [25] = { skill_manaCostBase = 29, skill_fireMin = 804, skill_fireMax = 1206, }, - [26] = { skill_manaCostBase = 30, skill_fireMin = 878, skill_fireMax = 1317, }, - [27] = { skill_manaCostBase = 30, skill_fireMin = 958, skill_fireMax = 1437, }, - [28] = { skill_manaCostBase = 30, skill_fireMin = 1045, skill_fireMax = 1567, }, - [29] = { skill_manaCostBase = 31, skill_fireMin = 1139, skill_fireMax = 1709, }, - [30] = { skill_manaCostBase = 32, skill_fireMin = 1242, skill_fireMax = 1863, }, - } + [1] = { 9, 21, 31, }, + [2] = { 10, 26, 39, }, + [3] = { 11, 35, 52, }, + [4] = { 12, 45, 67, }, + [5] = { 13, 57, 86, }, + [6] = { 14, 73, 109, }, + [7] = { 15, 91, 137, }, + [8] = { 16, 107, 161, }, + [9] = { 17, 126, 189, }, + [10] = { 18, 147, 221, }, + [11] = { 19, 171, 257, }, + [12] = { 20, 199, 299, }, + [13] = { 21, 231, 346, }, + [14] = { 22, 267, 401, }, + [15] = { 22, 308, 462, }, + [16] = { 23, 355, 533, }, + [17] = { 23, 390, 585, }, + [18] = { 24, 428, 642, }, + [19] = { 25, 469, 703, }, + [20] = { 26, 514, 771, }, + [21] = { 26, 563, 844, }, + [22] = { 26, 616, 923, }, + [23] = { 27, 673, 1010, }, + [24] = { 28, 736, 1104, }, + [25] = { 29, 804, 1206, }, + [26] = { 30, 878, 1317, }, + [27] = { 30, 958, 1437, }, + [28] = { 30, 1045, 1567, }, + [29] = { 31, 1139, 1709, }, + [30] = { 32, 1242, 1863, }, + }, } gems["Flameblast"] = { intelligence = true, + active_skill = true, spell = true, - aoe = true, + area = true, fire = true, - hit = true, parts = { { name = "1 Stage", @@ -895,494 +1507,779 @@ gems["Flameblast"] = { name = "10 Stages", }, }, - base = { - skill_castTime = 0.2, - skill_damageEffectiveness = 0.5, - skill_critChanceBase = 5, - SkillPart2_spell_damageMore = 10.9, - SkillPart2_castSpeedMore = 0.1, + color = 3, + baseFlags = { + spell = true, + area = true, + fire = true, }, - quality = { - damageInc = 1, + skillTypes = { [2] = true, [10] = true, [11] = true, [18] = true, [33] = true, [58] = true, }, + baseMods = { + skill("castTime", 0.2), + skill("damageEffectiveness", 0.5), + skill("critChance", 5), + --"charged_blast_spell_damage_+%_final_per_stack" = 110 + --"is_area_damage" = ? + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + mod("Damage", "MORE", 990, 0, 0, { type = "SkillPart", skillPart = 2 }), + mod("Speed", "MORE", -90, 0, 0, { type = "SkillPart", skillPart = 2 }), + skill("showAverage", false), + }, + qualityMods = { + mod("Damage", "INC", 1, 0, 0, nil), --"damage_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("FireMin", nil), --"spell_minimum_base_fire_damage" + [3] = skill("FireMax", nil), --"spell_maximum_base_fire_damage" }, levels = { - [1] = { skill_manaCostBase = 6, skill_fireMin = 32, skill_fireMax = 48, }, - [2] = { skill_manaCostBase = 6, skill_fireMin = 38, skill_fireMax = 57, }, - [3] = { skill_manaCostBase = 6, skill_fireMin = 45, skill_fireMax = 67, }, - [4] = { skill_manaCostBase = 6, skill_fireMin = 52, skill_fireMax = 78, }, - [5] = { skill_manaCostBase = 7, skill_fireMin = 61, skill_fireMax = 91, }, - [6] = { skill_manaCostBase = 7, skill_fireMin = 67, skill_fireMax = 101, }, - [7] = { skill_manaCostBase = 7, skill_fireMin = 74, skill_fireMax = 111, }, - [8] = { skill_manaCostBase = 7, skill_fireMin = 82, skill_fireMax = 123, }, - [9] = { skill_manaCostBase = 7, skill_fireMin = 90, skill_fireMax = 135, }, - [10] = { skill_manaCostBase = 8, skill_fireMin = 99, skill_fireMax = 148, }, - [11] = { skill_manaCostBase = 8, skill_fireMin = 109, skill_fireMax = 163, }, - [12] = { skill_manaCostBase = 8, skill_fireMin = 119, skill_fireMax = 179, }, - [13] = { skill_manaCostBase = 8, skill_fireMin = 130, skill_fireMax = 196, }, - [14] = { skill_manaCostBase = 8, skill_fireMin = 143, skill_fireMax = 214, }, - [15] = { skill_manaCostBase = 9, skill_fireMin = 156, skill_fireMax = 234, }, - [16] = { skill_manaCostBase = 9, skill_fireMin = 171, skill_fireMax = 256, }, - [17] = { skill_manaCostBase = 9, skill_fireMin = 186, skill_fireMax = 279, }, - [18] = { skill_manaCostBase = 9, skill_fireMin = 203, skill_fireMax = 305, }, - [19] = { skill_manaCostBase = 9, skill_fireMin = 221, skill_fireMax = 332, }, - [20] = { skill_manaCostBase = 9, skill_fireMin = 241, skill_fireMax = 362, }, - [21] = { skill_manaCostBase = 10, skill_fireMin = 263, skill_fireMax = 394, }, - [22] = { skill_manaCostBase = 10, skill_fireMin = 286, skill_fireMax = 429, }, - [23] = { skill_manaCostBase = 10, skill_fireMin = 311, skill_fireMax = 466, }, - [24] = { skill_manaCostBase = 11, skill_fireMin = 338, skill_fireMax = 507, }, - [25] = { skill_manaCostBase = 11, skill_fireMin = 367, skill_fireMax = 550, }, - [26] = { skill_manaCostBase = 11, skill_fireMin = 398, skill_fireMax = 598, }, - [27] = { skill_manaCostBase = 12, skill_fireMin = 432, skill_fireMax = 649, }, - [28] = { skill_manaCostBase = 12, skill_fireMin = 469, skill_fireMax = 704, }, - [29] = { skill_manaCostBase = 12, skill_fireMin = 509, skill_fireMax = 763, }, - [30] = { skill_manaCostBase = 13, skill_fireMin = 551, skill_fireMax = 827, }, - } + [1] = { 6, 32, 48, }, + [2] = { 6, 38, 57, }, + [3] = { 6, 45, 67, }, + [4] = { 6, 52, 78, }, + [5] = { 7, 61, 91, }, + [6] = { 7, 67, 101, }, + [7] = { 7, 74, 111, }, + [8] = { 7, 82, 123, }, + [9] = { 7, 90, 135, }, + [10] = { 8, 99, 148, }, + [11] = { 8, 109, 163, }, + [12] = { 8, 119, 179, }, + [13] = { 8, 130, 196, }, + [14] = { 8, 143, 214, }, + [15] = { 9, 156, 234, }, + [16] = { 9, 171, 256, }, + [17] = { 9, 186, 279, }, + [18] = { 9, 203, 305, }, + [19] = { 9, 221, 332, }, + [20] = { 9, 241, 362, }, + [21] = { 10, 263, 394, }, + [22] = { 10, 286, 429, }, + [23] = { 10, 311, 466, }, + [24] = { 11, 338, 507, }, + [25] = { 11, 367, 550, }, + [26] = { 11, 398, 598, }, + [27] = { 12, 432, 649, }, + [28] = { 12, 469, 704, }, + [29] = { 12, 509, 763, }, + [30] = { 13, 551, 827, }, + }, +} +gems["Vaal Flameblast"] = { + intelligence = true, + active_skill = true, + vaal = true, + spell = true, + area = true, + fire = true, + color = 3, + baseFlags = { + spell = true, + area = true, + fire = true, + vaal = true, + }, + skillTypes = { [2] = true, [10] = true, [11] = true, [18] = true, [43] = true, [33] = true, }, + baseMods = { + skill("castTime", 1), + skill("damageEffectiveness", 0.6), + skill("critChance", 5), + --"charged_blast_spell_damage_+%_final_per_stack" = 110 + --"is_area_damage" = ? + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + mod("Damage", "MORE", 1100, ModFlag.Spell), + }, + qualityMods = { + mod("Damage", "INC", 1, 0, 0, nil), --"damage_+%" = 1 + }, + levelMods = { + [1] = skill("FireMin", nil), --"spell_minimum_base_fire_damage" + [2] = skill("FireMax", nil), --"spell_maximum_base_fire_damage" + }, + levels = { + [1] = { 39, 58, }, + [2] = { 46, 68, }, + [3] = { 53, 80, }, + [4] = { 62, 93, }, + [5] = { 71, 107, }, + [6] = { 78, 117, }, + [7] = { 86, 129, }, + [8] = { 94, 141, }, + [9] = { 103, 154, }, + [10] = { 113, 169, }, + [11] = { 123, 184, }, + [12] = { 134, 201, }, + [13] = { 146, 219, }, + [14] = { 159, 238, }, + [15] = { 173, 259, }, + [16] = { 188, 282, }, + [17] = { 204, 306, }, + [18] = { 221, 332, }, + [19] = { 240, 360, }, + [20] = { 260, 390, }, + [21] = { 281, 422, }, + [22] = { 305, 457, }, + [23] = { 329, 494, }, + [24] = { 356, 534, }, + [25] = { 385, 577, }, + [26] = { 416, 623, }, + [27] = { 449, 673, }, + [28] = { 484, 726, }, + [29] = { 522, 783, }, + [30] = { 563, 844, }, + }, } gems["Flammability"] = { - intelligence = true, curse = true, + intelligence = true, + active_skill = true, spell = true, - aoe = true, + area = true, duration = true, - debuff = true, fire = true, - base = { - skill_castTime = 0.5, + color = 3, + baseFlags = { + spell = true, + curse = true, + area = true, + duration = true, + fire = true, }, - quality = { - CurseEffect_ignite_durationInc = 0.5, + skillTypes = { [2] = true, [11] = true, [12] = true, [17] = true, [18] = true, [19] = true, [26] = true, [32] = true, [36] = true, [33] = true, }, + baseMods = { + skill("castTime", 0.5), + --"base_deal_no_damage" = ? + skill("debuff", true), + }, + qualityMods = { + mod("SelfIgniteDuration", "INC", 0.5, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"base_self_ignite_duration_-%" = -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("FireResist", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"base_fire_damage_resistance_%" + [5] = mod("SelfIgniteChance", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"chance_to_be_ignited_%" }, levels = { - [1] = { skill_manaCostBase = 24, skill_durationBase = 9, curse_aoeRadiusInc = 0, CurseEffect_effective_fireResist = -25, CurseEffect_igniteChance = 10, }, - [2] = { skill_manaCostBase = 26, skill_durationBase = 9.1, curse_aoeRadiusInc = 2, CurseEffect_effective_fireResist = -26, CurseEffect_igniteChance = 10, }, - [3] = { skill_manaCostBase = 27, skill_durationBase = 9.2, curse_aoeRadiusInc = 4, CurseEffect_effective_fireResist = -27, CurseEffect_igniteChance = 10, }, - [4] = { skill_manaCostBase = 29, skill_durationBase = 9.3, curse_aoeRadiusInc = 6, CurseEffect_effective_fireResist = -28, CurseEffect_igniteChance = 10, }, - [5] = { skill_manaCostBase = 30, skill_durationBase = 9.4, curse_aoeRadiusInc = 8, CurseEffect_effective_fireResist = -29, CurseEffect_igniteChance = 10, }, - [6] = { skill_manaCostBase = 32, skill_durationBase = 9.5, curse_aoeRadiusInc = 10, CurseEffect_effective_fireResist = -30, CurseEffect_igniteChance = 11, }, - [7] = { skill_manaCostBase = 34, skill_durationBase = 9.6, curse_aoeRadiusInc = 12, CurseEffect_effective_fireResist = -31, CurseEffect_igniteChance = 11, }, - [8] = { skill_manaCostBase = 35, skill_durationBase = 9.7, curse_aoeRadiusInc = 14, CurseEffect_effective_fireResist = -32, CurseEffect_igniteChance = 11, }, - [9] = { skill_manaCostBase = 37, skill_durationBase = 9.8, curse_aoeRadiusInc = 16, CurseEffect_effective_fireResist = -33, CurseEffect_igniteChance = 11, }, - [10] = { skill_manaCostBase = 38, skill_durationBase = 9.9, curse_aoeRadiusInc = 18, CurseEffect_effective_fireResist = -34, CurseEffect_igniteChance = 11, }, - [11] = { skill_manaCostBase = 39, skill_durationBase = 10, curse_aoeRadiusInc = 20, CurseEffect_effective_fireResist = -35, CurseEffect_igniteChance = 12, }, - [12] = { skill_manaCostBase = 40, skill_durationBase = 10.1, curse_aoeRadiusInc = 22, CurseEffect_effective_fireResist = -36, CurseEffect_igniteChance = 12, }, - [13] = { skill_manaCostBase = 42, skill_durationBase = 10.2, curse_aoeRadiusInc = 24, CurseEffect_effective_fireResist = -37, CurseEffect_igniteChance = 12, }, - [14] = { skill_manaCostBase = 43, skill_durationBase = 10.3, curse_aoeRadiusInc = 26, CurseEffect_effective_fireResist = -38, CurseEffect_igniteChance = 12, }, - [15] = { skill_manaCostBase = 44, skill_durationBase = 10.4, curse_aoeRadiusInc = 28, CurseEffect_effective_fireResist = -39, CurseEffect_igniteChance = 12, }, - [16] = { skill_manaCostBase = 45, skill_durationBase = 10.5, curse_aoeRadiusInc = 30, CurseEffect_effective_fireResist = -40, CurseEffect_igniteChance = 13, }, - [17] = { skill_manaCostBase = 46, skill_durationBase = 10.6, curse_aoeRadiusInc = 32, CurseEffect_effective_fireResist = -41, CurseEffect_igniteChance = 13, }, - [18] = { skill_manaCostBase = 47, skill_durationBase = 10.7, curse_aoeRadiusInc = 34, CurseEffect_effective_fireResist = -42, CurseEffect_igniteChance = 13, }, - [19] = { skill_manaCostBase = 48, skill_durationBase = 10.8, curse_aoeRadiusInc = 36, CurseEffect_effective_fireResist = -43, CurseEffect_igniteChance = 13, }, - [20] = { skill_manaCostBase = 50, skill_durationBase = 10.9, curse_aoeRadiusInc = 38, CurseEffect_effective_fireResist = -44, CurseEffect_igniteChance = 14, }, - [21] = { skill_manaCostBase = 51, skill_durationBase = 11, curse_aoeRadiusInc = 40, CurseEffect_effective_fireResist = -45, CurseEffect_igniteChance = 14, }, - [22] = { skill_manaCostBase = 52, skill_durationBase = 11.1, curse_aoeRadiusInc = 42, CurseEffect_effective_fireResist = -46, CurseEffect_igniteChance = 14, }, - [23] = { skill_manaCostBase = 53, skill_durationBase = 11.2, curse_aoeRadiusInc = 44, CurseEffect_effective_fireResist = -47, CurseEffect_igniteChance = 15, }, - [24] = { skill_manaCostBase = 54, skill_durationBase = 11.3, curse_aoeRadiusInc = 46, CurseEffect_effective_fireResist = -48, CurseEffect_igniteChance = 15, }, - [25] = { skill_manaCostBase = 56, skill_durationBase = 11.4, curse_aoeRadiusInc = 48, CurseEffect_effective_fireResist = -49, CurseEffect_igniteChance = 15, }, - [26] = { skill_manaCostBase = 57, skill_durationBase = 11.5, curse_aoeRadiusInc = 50, CurseEffect_effective_fireResist = -50, CurseEffect_igniteChance = 16, }, - [27] = { skill_manaCostBase = 58, skill_durationBase = 11.6, curse_aoeRadiusInc = 52, CurseEffect_effective_fireResist = -51, CurseEffect_igniteChance = 16, }, - [28] = { skill_manaCostBase = 59, skill_durationBase = 11.7, curse_aoeRadiusInc = 54, CurseEffect_effective_fireResist = -52, CurseEffect_igniteChance = 16, }, - [29] = { skill_manaCostBase = 60, skill_durationBase = 11.8, curse_aoeRadiusInc = 56, CurseEffect_effective_fireResist = -53, CurseEffect_igniteChance = 17, }, - [30] = { skill_manaCostBase = 61, skill_durationBase = 11.9, curse_aoeRadiusInc = 58, CurseEffect_effective_fireResist = -54, CurseEffect_igniteChance = 17, }, - } + [1] = { 24, 9, 0, -25, 10, }, + [2] = { 26, 9.1, 2, -26, 10, }, + [3] = { 27, 9.2, 4, -27, 10, }, + [4] = { 29, 9.3, 6, -28, 10, }, + [5] = { 30, 9.4, 8, -29, 10, }, + [6] = { 32, 9.5, 10, -30, 11, }, + [7] = { 34, 9.6, 12, -31, 11, }, + [8] = { 35, 9.7, 14, -32, 11, }, + [9] = { 37, 9.8, 16, -33, 11, }, + [10] = { 38, 9.9, 18, -34, 11, }, + [11] = { 39, 10, 20, -35, 12, }, + [12] = { 40, 10.1, 22, -36, 12, }, + [13] = { 42, 10.2, 24, -37, 12, }, + [14] = { 43, 10.3, 26, -38, 12, }, + [15] = { 44, 10.4, 28, -39, 12, }, + [16] = { 45, 10.5, 30, -40, 13, }, + [17] = { 46, 10.6, 32, -41, 13, }, + [18] = { 47, 10.7, 34, -42, 13, }, + [19] = { 48, 10.8, 36, -43, 13, }, + [20] = { 50, 10.9, 38, -44, 14, }, + [21] = { 51, 11, 40, -45, 14, }, + [22] = { 52, 11.1, 42, -46, 14, }, + [23] = { 53, 11.2, 44, -47, 15, }, + [24] = { 54, 11.3, 46, -48, 15, }, + [25] = { 56, 11.4, 48, -49, 15, }, + [26] = { 57, 11.5, 50, -50, 16, }, + [27] = { 58, 11.6, 52, -51, 16, }, + [28] = { 59, 11.7, 54, -52, 16, }, + [29] = { 60, 11.8, 56, -53, 17, }, + [30] = { 61, 11.9, 58, -54, 17, }, + }, } gems["Flesh Offering"] = { + minion = true, intelligence = true, + active_skill = true, + spell = true, + duration = true, unsupported = true, } gems["Freezing Pulse"] = { - intelligence = true, - spell = true, projectile = true, + intelligence = true, + active_skill = true, spell = true, - hit = true, - base = { - skill_castTime = 0.65, - skill_damageEffectiveness = 1.25, - skill_critChanceBase = 6, - pierceChance = 100, - freezeChance = 25, + cold = true, + color = 3, + baseFlags = { + spell = true, + projectile = true, + cold = true, }, - quality = { - projectileSpeedInc = 2, + skillTypes = { [2] = true, [3] = true, [10] = true, [17] = true, [18] = true, [19] = true, [26] = true, [36] = true, [34] = true, [60] = true, }, + baseMods = { + skill("castTime", 0.65), + skill("damageEffectiveness", 1.25), + skill("critChance", 6), + --"base_is_projectile" = ? + mod("PierceChance", "BASE", 100), --"always_pierce" = ? + mod("EnemyFreezeChance", "BASE", 25), + }, + qualityMods = { + mod("ProjectileSpeed", "INC", 2), --"base_projectile_speed_+%" = 2 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("ColdMin", nil), --"spell_minimum_base_cold_damage" + [3] = skill("ColdMax", nil), --"spell_maximum_base_cold_damage" + [4] = mod("ProjectileSpeed", "INC", nil), --"base_projectile_speed_+%" }, levels = { - [1] = { skill_manaCostBase = 4, skill_coldMin = 7, skill_coldMax = 11, projectileSpeedInc = 0, }, - [2] = { skill_manaCostBase = 5, skill_coldMin = 8, skill_coldMax = 13, projectileSpeedInc = 1, }, - [3] = { skill_manaCostBase = 6, skill_coldMin = 11, skill_coldMax = 16, projectileSpeedInc = 2, }, - [4] = { skill_manaCostBase = 7, skill_coldMin = 15, skill_coldMax = 23, projectileSpeedInc = 3, }, - [5] = { skill_manaCostBase = 8, skill_coldMin = 22, skill_coldMax = 33, projectileSpeedInc = 4, }, - [6] = { skill_manaCostBase = 9, skill_coldMin = 32, skill_coldMax = 49, projectileSpeedInc = 5, }, - [7] = { skill_manaCostBase = 10, skill_coldMin = 43, skill_coldMax = 65, projectileSpeedInc = 6, }, - [8] = { skill_manaCostBase = 11, skill_coldMin = 57, skill_coldMax = 85, projectileSpeedInc = 7, }, - [9] = { skill_manaCostBase = 12, skill_coldMin = 73, skill_coldMax = 110, projectileSpeedInc = 8, }, - [10] = { skill_manaCostBase = 13, skill_coldMin = 93, skill_coldMax = 140, projectileSpeedInc = 9, }, - [11] = { skill_manaCostBase = 14, skill_coldMin = 118, skill_coldMax = 176, projectileSpeedInc = 10, }, - [12] = { skill_manaCostBase = 14, skill_coldMin = 148, skill_coldMax = 221, projectileSpeedInc = 11, }, - [13] = { skill_manaCostBase = 15, skill_coldMin = 184, skill_coldMax = 276, projectileSpeedInc = 12, }, - [14] = { skill_manaCostBase = 16, skill_coldMin = 228, skill_coldMax = 342, projectileSpeedInc = 13, }, - [15] = { skill_manaCostBase = 17, skill_coldMin = 281, skill_coldMax = 421, projectileSpeedInc = 14, }, - [16] = { skill_manaCostBase = 18, skill_coldMin = 345, skill_coldMax = 517, projectileSpeedInc = 15, }, - [17] = { skill_manaCostBase = 18, skill_coldMin = 422, skill_coldMax = 633, projectileSpeedInc = 16, }, - [18] = { skill_manaCostBase = 18, skill_coldMin = 515, skill_coldMax = 772, projectileSpeedInc = 17, }, - [19] = { skill_manaCostBase = 18, skill_coldMin = 596, skill_coldMax = 894, projectileSpeedInc = 18, }, - [20] = { skill_manaCostBase = 18, skill_coldMin = 689, skill_coldMax = 1034, projectileSpeedInc = 19, }, - [21] = { skill_manaCostBase = 18, skill_coldMin = 759, skill_coldMax = 1138, projectileSpeedInc = 20, }, - [22] = { skill_manaCostBase = 19, skill_coldMin = 835, skill_coldMax = 1252, projectileSpeedInc = 21, }, - [23] = { skill_manaCostBase = 19, skill_coldMin = 918, skill_coldMax = 1377, projectileSpeedInc = 22, }, - [24] = { skill_manaCostBase = 19, skill_coldMin = 1009, skill_coldMax = 1513, projectileSpeedInc = 23, }, - [25] = { skill_manaCostBase = 20, skill_coldMin = 1108, skill_coldMax = 1662, projectileSpeedInc = 24, }, - [26] = { skill_manaCostBase = 20, skill_coldMin = 1216, skill_coldMax = 1824, projectileSpeedInc = 25, }, - [27] = { skill_manaCostBase = 20, skill_coldMin = 1335, skill_coldMax = 2002, projectileSpeedInc = 26, }, - [28] = { skill_manaCostBase = 21, skill_coldMin = 1464, skill_coldMax = 2196, projectileSpeedInc = 27, }, - [29] = { skill_manaCostBase = 21, skill_coldMin = 1605, skill_coldMax = 2407, projectileSpeedInc = 28, }, - [30] = { skill_manaCostBase = 21, skill_coldMin = 1759, skill_coldMax = 2638, projectileSpeedInc = 29, }, - } + [1] = { 4, 7, 11, 0, }, + [2] = { 5, 8, 13, 1, }, + [3] = { 6, 11, 16, 2, }, + [4] = { 7, 15, 23, 3, }, + [5] = { 8, 22, 33, 4, }, + [6] = { 9, 32, 49, 5, }, + [7] = { 10, 43, 65, 6, }, + [8] = { 11, 57, 85, 7, }, + [9] = { 12, 73, 110, 8, }, + [10] = { 13, 93, 140, 9, }, + [11] = { 14, 118, 176, 10, }, + [12] = { 14, 148, 221, 11, }, + [13] = { 15, 184, 276, 12, }, + [14] = { 16, 228, 342, 13, }, + [15] = { 17, 281, 421, 14, }, + [16] = { 18, 345, 517, 15, }, + [17] = { 18, 422, 633, 16, }, + [18] = { 18, 515, 772, 17, }, + [19] = { 18, 596, 894, 18, }, + [20] = { 18, 689, 1034, 19, }, + [21] = { 18, 759, 1138, 20, }, + [22] = { 19, 835, 1252, 21, }, + [23] = { 19, 918, 1377, 22, }, + [24] = { 19, 1009, 1513, 23, }, + [25] = { 20, 1108, 1662, 24, }, + [26] = { 20, 1216, 1824, 25, }, + [27] = { 20, 1335, 2002, 26, }, + [28] = { 21, 1464, 2196, 27, }, + [29] = { 21, 1605, 2407, 28, }, + [30] = { 21, 1759, 2638, 29, }, + }, } gems["Frost Bomb"] = { intelligence = true, + active_skill = true, spell = true, - aoe = true, + area = true, duration = true, cold = true, - hit = true, - showAverage = true, - base = { - skill_castTime = 0.5, - skill_damageEffectiveness = 1.3, - skill_critChanceBase = 6, - skill_durationBase = 3.5, - BuffEffect_effective_coldResist = -20, + color = 3, + baseFlags = { + spell = true, + area = true, + duration = true, + cold = true, }, - quality = { - coldInc = 1, + skillTypes = { [2] = true, [11] = true, [12] = true, [34] = true, [10] = true, [26] = true, [18] = true, [17] = true, [19] = true, [36] = true, [60] = true, }, + baseMods = { + skill("castTime", 0.5), + skill("damageEffectiveness", 1.3), + skill("critChance", 6), + skill("duration", 3.5), --"base_skill_effect_duration" = 3500 + --"base_secondary_skill_effect_duration" = 2000 + mod("ColdResist", "BASE", -20, 0, 0, { type = "GlobalEffect", effectType = "Debuff" }), --"base_cold_damage_resistance_%" = -20 + --"life_regeneration_rate_+%" = -75 + --"is_area_damage" = ? + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + }, + qualityMods = { + mod("ColdDamage", "INC", 1), --"cold_damage_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("ColdMin", nil), --"spell_minimum_base_cold_damage" + [3] = skill("ColdMax", nil), --"spell_maximum_base_cold_damage" }, levels = { - [1] = { skill_manaCostBase = 6, skill_coldMin = 10, skill_coldMax = 14, }, - [2] = { skill_manaCostBase = 7, skill_coldMin = 12, skill_coldMax = 18, }, - [3] = { skill_manaCostBase = 8, skill_coldMin = 15, skill_coldMax = 23, }, - [4] = { skill_manaCostBase = 9, skill_coldMin = 20, skill_coldMax = 30, }, - [5] = { skill_manaCostBase = 10, skill_coldMin = 27, skill_coldMax = 40, }, - [6] = { skill_manaCostBase = 11, skill_coldMin = 36, skill_coldMax = 54, }, - [7] = { skill_manaCostBase = 12, skill_coldMin = 46, skill_coldMax = 70, }, - [8] = { skill_manaCostBase = 13, skill_coldMin = 59, skill_coldMax = 89, }, - [9] = { skill_manaCostBase = 13, skill_coldMin = 75, skill_coldMax = 113, }, - [10] = { skill_manaCostBase = 14, skill_coldMin = 94, skill_coldMax = 142, }, - [11] = { skill_manaCostBase = 14, skill_coldMin = 118, skill_coldMax = 176, }, - [12] = { skill_manaCostBase = 15, skill_coldMin = 145, skill_coldMax = 218, }, - [13] = { skill_manaCostBase = 16, skill_coldMin = 179, skill_coldMax = 268, }, - [14] = { skill_manaCostBase = 16, skill_coldMin = 219, skill_coldMax = 329, }, - [15] = { skill_manaCostBase = 17, skill_coldMin = 254, skill_coldMax = 382, }, - [16] = { skill_manaCostBase = 18, skill_coldMin = 295, skill_coldMax = 442, }, - [17] = { skill_manaCostBase = 18, skill_coldMin = 341, skill_coldMax = 511, }, - [18] = { skill_manaCostBase = 19, skill_coldMin = 393, skill_coldMax = 590, }, - [19] = { skill_manaCostBase = 19, skill_coldMin = 453, skill_coldMax = 679, }, - [20] = { skill_manaCostBase = 19, skill_coldMin = 521, skill_coldMax = 781, }, - [21] = { skill_manaCostBase = 20, skill_coldMin = 572, skill_coldMax = 857, }, - [22] = { skill_manaCostBase = 21, skill_coldMin = 627, skill_coldMax = 940, }, - [23] = { skill_manaCostBase = 21, skill_coldMin = 687, skill_coldMax = 1030, }, - [24] = { skill_manaCostBase = 21, skill_coldMin = 752, skill_coldMax = 1128, }, - [25] = { skill_manaCostBase = 22, skill_coldMin = 823, skill_coldMax = 1235, }, - [26] = { skill_manaCostBase = 23, skill_coldMin = 900, skill_coldMax = 1351, }, - [27] = { skill_manaCostBase = 23, skill_coldMin = 985, skill_coldMax = 1477, }, - [28] = { skill_manaCostBase = 23, skill_coldMin = 1076, skill_coldMax = 1614, }, - [29] = { skill_manaCostBase = 24, skill_coldMin = 1176, skill_coldMax = 1764, }, - [30] = { skill_manaCostBase = 24, skill_coldMin = 1284, skill_coldMax = 1926, }, - } + [1] = { 6, 10, 14, }, + [2] = { 7, 12, 18, }, + [3] = { 8, 15, 23, }, + [4] = { 9, 20, 30, }, + [5] = { 10, 27, 40, }, + [6] = { 11, 36, 54, }, + [7] = { 12, 46, 70, }, + [8] = { 13, 59, 89, }, + [9] = { 13, 75, 113, }, + [10] = { 14, 94, 142, }, + [11] = { 14, 118, 176, }, + [12] = { 15, 145, 218, }, + [13] = { 16, 179, 268, }, + [14] = { 16, 219, 329, }, + [15] = { 17, 254, 382, }, + [16] = { 18, 295, 442, }, + [17] = { 18, 341, 511, }, + [18] = { 19, 393, 590, }, + [19] = { 19, 453, 679, }, + [20] = { 19, 521, 781, }, + [21] = { 20, 572, 857, }, + [22] = { 21, 627, 940, }, + [23] = { 21, 687, 1030, }, + [24] = { 21, 752, 1128, }, + [25] = { 22, 823, 1235, }, + [26] = { 23, 900, 1351, }, + [27] = { 23, 985, 1477, }, + [28] = { 23, 1076, 1614, }, + [29] = { 24, 1176, 1764, }, + [30] = { 24, 1284, 1926, }, + }, } gems["Frost Wall"] = { intelligence = true, + active_skill = true, spell = true, duration = true, cold = true, - hit = true, - base = { - skill_castTime = 0.5, + color = 3, + baseFlags = { + spell = true, + duration = true, + cold = true, }, - quality = { - durationInc = 1, + skillTypes = { [2] = true, [10] = true, [12] = true, [17] = true, [18] = true, [19] = true, [26] = true, [36] = true, [34] = true, [60] = true, }, + baseMods = { + skill("castTime", 0.5), + --"wall_expand_delay_ms" = 150 + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + }, + qualityMods = { + mod("Duration", "INC", 1), --"skill_effect_duration_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("duration", nil), --"base_skill_effect_duration" + --[3] = "wall_maximum_length" + [4] = skill("ColdMin", nil), --"spell_minimum_base_cold_damage" + [5] = skill("ColdMax", nil), --"spell_maximum_base_cold_damage" }, levels = { - [1] = { skill_manaCostBase = 14, skill_durationBase = 3, skill_coldMin = 8, skill_coldMax = 12, }, - [2] = { skill_manaCostBase = 16, skill_durationBase = 3.1, skill_coldMin = 9, skill_coldMax = 16, }, - [3] = { skill_manaCostBase = 18, skill_durationBase = 3.2, skill_coldMin = 14, skill_coldMax = 23, }, - [4] = { skill_manaCostBase = 20, skill_durationBase = 3.3, skill_coldMin = 18, skill_coldMax = 27, }, - [5] = { skill_manaCostBase = 21, skill_durationBase = 3.4, skill_coldMin = 25, skill_coldMax = 37, }, - [6] = { skill_manaCostBase = 23, skill_durationBase = 3.5, skill_coldMin = 32, skill_coldMax = 49, }, - [7] = { skill_manaCostBase = 24, skill_durationBase = 3.6, skill_coldMin = 42, skill_coldMax = 63, }, - [8] = { skill_manaCostBase = 25, skill_durationBase = 3.7, skill_coldMin = 54, skill_coldMax = 81, }, - [9] = { skill_manaCostBase = 26, skill_durationBase = 3.8, skill_coldMin = 68, skill_coldMax = 102, }, - [10] = { skill_manaCostBase = 27, skill_durationBase = 3.9, skill_coldMin = 85, skill_coldMax = 128, }, - [11] = { skill_manaCostBase = 28, skill_durationBase = 4, skill_coldMin = 106, skill_coldMax = 159, }, - [12] = { skill_manaCostBase = 29, skill_durationBase = 4.1, skill_coldMin = 131, skill_coldMax = 196, }, - [13] = { skill_manaCostBase = 30, skill_durationBase = 4.2, skill_coldMin = 160, skill_coldMax = 240, }, - [14] = { skill_manaCostBase = 31, skill_durationBase = 4.3, skill_coldMin = 196, skill_coldMax = 294, }, - [15] = { skill_manaCostBase = 32, skill_durationBase = 4.4, skill_coldMin = 227, skill_coldMax = 341, }, - [16] = { skill_manaCostBase = 33, skill_durationBase = 4.5, skill_coldMin = 263, skill_coldMax = 394, }, - [17] = { skill_manaCostBase = 34, skill_durationBase = 4.6, skill_coldMin = 303, skill_coldMax = 455, }, - [18] = { skill_manaCostBase = 35, skill_durationBase = 4.7, skill_coldMin = 350, skill_coldMax = 524, }, - [19] = { skill_manaCostBase = 36, skill_durationBase = 4.8, skill_coldMin = 402, skill_coldMax = 603, }, - [20] = { skill_manaCostBase = 37, skill_durationBase = 4.9, skill_coldMin = 462, skill_coldMax = 693, }, - [21] = { skill_manaCostBase = 38, skill_durationBase = 5, skill_coldMin = 506, skill_coldMax = 759, }, - [22] = { skill_manaCostBase = 38, skill_durationBase = 5.1, skill_coldMin = 554, skill_coldMax = 832, }, - [23] = { skill_manaCostBase = 38, skill_durationBase = 5.2, skill_coldMin = 607, skill_coldMax = 910, }, - [24] = { skill_manaCostBase = 39, skill_durationBase = 5.3, skill_coldMin = 664, skill_coldMax = 996, }, - [25] = { skill_manaCostBase = 40, skill_durationBase = 5.4, skill_coldMin = 726, skill_coldMax = 1089, }, - [26] = { skill_manaCostBase = 40, skill_durationBase = 5.5, skill_coldMin = 794, skill_coldMax = 1191, }, - [27] = { skill_manaCostBase = 41, skill_durationBase = 5.6, skill_coldMin = 867, skill_coldMax = 1301, }, - [28] = { skill_manaCostBase = 42, skill_durationBase = 5.7, skill_coldMin = 947, skill_coldMax = 1420, }, - [29] = { skill_manaCostBase = 42, skill_durationBase = 5.8, skill_coldMin = 1033, skill_coldMax = 1550, }, - [30] = { skill_manaCostBase = 42, skill_durationBase = 5.9, skill_coldMin = 1127, skill_coldMax = 1691, }, - } + [1] = { 14, 3, 28, 8, 12, }, + [2] = { 16, 3.1, 28, 9, 16, }, + [3] = { 18, 3.2, 28, 14, 23, }, + [4] = { 20, 3.3, 28, 18, 27, }, + [5] = { 21, 3.4, 35, 25, 37, }, + [6] = { 23, 3.5, 35, 32, 49, }, + [7] = { 24, 3.6, 35, 42, 63, }, + [8] = { 25, 3.7, 35, 54, 81, }, + [9] = { 26, 3.8, 42, 68, 102, }, + [10] = { 27, 3.9, 42, 85, 128, }, + [11] = { 28, 4, 42, 106, 159, }, + [12] = { 29, 4.1, 42, 131, 196, }, + [13] = { 30, 4.2, 49, 160, 240, }, + [14] = { 31, 4.3, 49, 196, 294, }, + [15] = { 32, 4.4, 49, 227, 341, }, + [16] = { 33, 4.5, 49, 263, 394, }, + [17] = { 34, 4.6, 56, 303, 455, }, + [18] = { 35, 4.7, 56, 350, 524, }, + [19] = { 36, 4.8, 56, 402, 603, }, + [20] = { 37, 4.9, 56, 462, 693, }, + [21] = { 38, 5, 63, 506, 759, }, + [22] = { 38, 5.1, 63, 554, 832, }, + [23] = { 38, 5.2, 63, 607, 910, }, + [24] = { 39, 5.3, 63, 664, 996, }, + [25] = { 40, 5.4, 70, 726, 1089, }, + [26] = { 40, 5.5, 70, 794, 1191, }, + [27] = { 41, 5.6, 70, 867, 1301, }, + [28] = { 42, 5.7, 70, 947, 1420, }, + [29] = { 42, 5.8, 77, 1033, 1550, }, + [30] = { 42, 5.9, 77, 1127, 1691, }, + }, } gems["Frostbite"] = { - intelligence = true, curse = true, + intelligence = true, + active_skill = true, spell = true, - aoe = true, + area = true, duration = true, - debuff = true, cold = true, - base = { - skill_castTime = 0.5, + color = 3, + baseFlags = { + spell = true, + curse = true, + area = true, + duration = true, + cold = true, }, - quality = { - CurseEffect_freeze_durationInc = 1, + skillTypes = { [2] = true, [11] = true, [12] = true, [17] = true, [18] = true, [19] = true, [26] = true, [32] = true, [36] = true, [34] = true, [60] = true, }, + baseMods = { + skill("castTime", 0.5), + --"base_deal_no_damage" = ? + skill("debuff", true), + }, + qualityMods = { + mod("SelfFreezeDuration", "INC", 1, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"base_self_freeze_duration_-%" = -1 + }, + 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("ColdResist", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"base_cold_damage_resistance_%" + [5] = mod("SelfFreezeChance", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"chance_to_be_frozen_%" }, levels = { - [1] = { skill_manaCostBase = 24, skill_durationBase = 9, curse_aoeRadiusInc = 0, CurseEffect_effective_coldResist = -25, CurseEffect_freezeChance = 10, }, - [2] = { skill_manaCostBase = 26, skill_durationBase = 9.1, curse_aoeRadiusInc = 2, CurseEffect_effective_coldResist = -26, CurseEffect_freezeChance = 10, }, - [3] = { skill_manaCostBase = 27, skill_durationBase = 9.2, curse_aoeRadiusInc = 4, CurseEffect_effective_coldResist = -27, CurseEffect_freezeChance = 10, }, - [4] = { skill_manaCostBase = 29, skill_durationBase = 9.3, curse_aoeRadiusInc = 6, CurseEffect_effective_coldResist = -28, CurseEffect_freezeChance = 10, }, - [5] = { skill_manaCostBase = 30, skill_durationBase = 9.4, curse_aoeRadiusInc = 8, CurseEffect_effective_coldResist = -29, CurseEffect_freezeChance = 10, }, - [6] = { skill_manaCostBase = 32, skill_durationBase = 9.5, curse_aoeRadiusInc = 10, CurseEffect_effective_coldResist = -30, CurseEffect_freezeChance = 11, }, - [7] = { skill_manaCostBase = 34, skill_durationBase = 9.6, curse_aoeRadiusInc = 12, CurseEffect_effective_coldResist = -31, CurseEffect_freezeChance = 11, }, - [8] = { skill_manaCostBase = 35, skill_durationBase = 9.7, curse_aoeRadiusInc = 14, CurseEffect_effective_coldResist = -32, CurseEffect_freezeChance = 11, }, - [9] = { skill_manaCostBase = 37, skill_durationBase = 9.8, curse_aoeRadiusInc = 16, CurseEffect_effective_coldResist = -33, CurseEffect_freezeChance = 11, }, - [10] = { skill_manaCostBase = 38, skill_durationBase = 9.9, curse_aoeRadiusInc = 18, CurseEffect_effective_coldResist = -34, CurseEffect_freezeChance = 11, }, - [11] = { skill_manaCostBase = 39, skill_durationBase = 10, curse_aoeRadiusInc = 20, CurseEffect_effective_coldResist = -35, CurseEffect_freezeChance = 12, }, - [12] = { skill_manaCostBase = 40, skill_durationBase = 10.1, curse_aoeRadiusInc = 22, CurseEffect_effective_coldResist = -36, CurseEffect_freezeChance = 12, }, - [13] = { skill_manaCostBase = 42, skill_durationBase = 10.2, curse_aoeRadiusInc = 24, CurseEffect_effective_coldResist = -37, CurseEffect_freezeChance = 12, }, - [14] = { skill_manaCostBase = 43, skill_durationBase = 10.3, curse_aoeRadiusInc = 26, CurseEffect_effective_coldResist = -38, CurseEffect_freezeChance = 12, }, - [15] = { skill_manaCostBase = 44, skill_durationBase = 10.4, curse_aoeRadiusInc = 28, CurseEffect_effective_coldResist = -39, CurseEffect_freezeChance = 12, }, - [16] = { skill_manaCostBase = 45, skill_durationBase = 10.5, curse_aoeRadiusInc = 30, CurseEffect_effective_coldResist = -40, CurseEffect_freezeChance = 13, }, - [17] = { skill_manaCostBase = 46, skill_durationBase = 10.6, curse_aoeRadiusInc = 32, CurseEffect_effective_coldResist = -41, CurseEffect_freezeChance = 13, }, - [18] = { skill_manaCostBase = 47, skill_durationBase = 10.7, curse_aoeRadiusInc = 34, CurseEffect_effective_coldResist = -42, CurseEffect_freezeChance = 13, }, - [19] = { skill_manaCostBase = 48, skill_durationBase = 10.8, curse_aoeRadiusInc = 36, CurseEffect_effective_coldResist = -43, CurseEffect_freezeChance = 13, }, - [20] = { skill_manaCostBase = 50, skill_durationBase = 10.9, curse_aoeRadiusInc = 38, CurseEffect_effective_coldResist = -44, CurseEffect_freezeChance = 14, }, - [21] = { skill_manaCostBase = 51, skill_durationBase = 11, curse_aoeRadiusInc = 40, CurseEffect_effective_coldResist = -45, CurseEffect_freezeChance = 14, }, - [22] = { skill_manaCostBase = 52, skill_durationBase = 11.1, curse_aoeRadiusInc = 42, CurseEffect_effective_coldResist = -46, CurseEffect_freezeChance = 14, }, - [23] = { skill_manaCostBase = 53, skill_durationBase = 11.2, curse_aoeRadiusInc = 44, CurseEffect_effective_coldResist = -47, CurseEffect_freezeChance = 15, }, - [24] = { skill_manaCostBase = 54, skill_durationBase = 11.3, curse_aoeRadiusInc = 46, CurseEffect_effective_coldResist = -48, CurseEffect_freezeChance = 15, }, - [25] = { skill_manaCostBase = 56, skill_durationBase = 11.4, curse_aoeRadiusInc = 48, CurseEffect_effective_coldResist = -49, CurseEffect_freezeChance = 15, }, - [26] = { skill_manaCostBase = 57, skill_durationBase = 11.5, curse_aoeRadiusInc = 50, CurseEffect_effective_coldResist = -50, CurseEffect_freezeChance = 16, }, - [27] = { skill_manaCostBase = 58, skill_durationBase = 11.6, curse_aoeRadiusInc = 52, CurseEffect_effective_coldResist = -51, CurseEffect_freezeChance = 16, }, - [28] = { skill_manaCostBase = 59, skill_durationBase = 11.7, curse_aoeRadiusInc = 54, CurseEffect_effective_coldResist = -52, CurseEffect_freezeChance = 16, }, - [29] = { skill_manaCostBase = 60, skill_durationBase = 11.8, curse_aoeRadiusInc = 56, CurseEffect_effective_coldResist = -53, CurseEffect_freezeChance = 17, }, - [30] = { skill_manaCostBase = 61, skill_durationBase = 11.9, curse_aoeRadiusInc = 58, CurseEffect_effective_coldResist = -54, CurseEffect_freezeChance = 17, }, - } + [1] = { 24, 9, 0, -25, 10, }, + [2] = { 26, 9.1, 2, -26, 10, }, + [3] = { 27, 9.2, 4, -27, 10, }, + [4] = { 29, 9.3, 6, -28, 10, }, + [5] = { 30, 9.4, 8, -29, 10, }, + [6] = { 32, 9.5, 10, -30, 11, }, + [7] = { 34, 9.6, 12, -31, 11, }, + [8] = { 35, 9.7, 14, -32, 11, }, + [9] = { 37, 9.8, 16, -33, 11, }, + [10] = { 38, 9.9, 18, -34, 11, }, + [11] = { 39, 10, 20, -35, 12, }, + [12] = { 40, 10.1, 22, -36, 12, }, + [13] = { 42, 10.2, 24, -37, 12, }, + [14] = { 43, 10.3, 26, -38, 12, }, + [15] = { 44, 10.4, 28, -39, 12, }, + [16] = { 45, 10.5, 30, -40, 13, }, + [17] = { 46, 10.6, 32, -41, 13, }, + [18] = { 47, 10.7, 34, -42, 13, }, + [19] = { 48, 10.8, 36, -43, 13, }, + [20] = { 50, 10.9, 38, -44, 14, }, + [21] = { 51, 11, 40, -45, 14, }, + [22] = { 52, 11.1, 42, -46, 14, }, + [23] = { 53, 11.2, 44, -47, 15, }, + [24] = { 54, 11.3, 46, -48, 15, }, + [25] = { 56, 11.4, 48, -49, 15, }, + [26] = { 57, 11.5, 50, -50, 16, }, + [27] = { 58, 11.6, 52, -51, 16, }, + [28] = { 59, 11.7, 54, -52, 16, }, + [29] = { 60, 11.8, 56, -53, 17, }, + [30] = { 61, 11.9, 58, -54, 17, }, + }, } gems["Frostbolt"] = { - intelligence = true, - spell = true, projectile = true, + intelligence = true, + active_skill = true, + spell = true, cold = true, - hit = true, - base = { - skill_castTime = 0.75, - skill_critChanceBase = 5, - pierceChance = 100, + color = 3, + baseFlags = { + spell = true, + projectile = true, + cold = true, }, - quality = { - coldInc = 1, + skillTypes = { [2] = true, [3] = true, [10] = true, [17] = true, [18] = true, [19] = true, [26] = true, [34] = true, [36] = true, [60] = true, }, + baseMods = { + skill("castTime", 0.75), + skill("critChance", 5), + --"base_is_projectile" = ? + mod("PierceChance", "BASE", 100), --"always_pierce" = ? + }, + qualityMods = { + mod("ColdDamage", "INC", 1), --"cold_damage_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("ColdMin", nil), --"spell_minimum_base_cold_damage" + [3] = skill("ColdMax", nil), --"spell_maximum_base_cold_damage" }, levels = { - [1] = { skill_manaCostBase = 6, skill_coldMin = 6, skill_coldMax = 10, }, - [2] = { skill_manaCostBase = 6, skill_coldMin = 7, skill_coldMax = 11, }, - [3] = { skill_manaCostBase = 7, skill_coldMin = 9, skill_coldMax = 14, }, - [4] = { skill_manaCostBase = 8, skill_coldMin = 13, skill_coldMax = 19, }, - [5] = { skill_manaCostBase = 9, skill_coldMin = 18, skill_coldMax = 27, }, - [6] = { skill_manaCostBase = 10, skill_coldMin = 28, skill_coldMax = 42, }, - [7] = { skill_manaCostBase = 11, skill_coldMin = 38, skill_coldMax = 57, }, - [8] = { skill_manaCostBase = 12, skill_coldMin = 50, skill_coldMax = 75, }, - [9] = { skill_manaCostBase = 13, skill_coldMin = 66, skill_coldMax = 99, }, - [10] = { skill_manaCostBase = 14, skill_coldMin = 86, skill_coldMax = 128, }, - [11] = { skill_manaCostBase = 14, skill_coldMin = 110, skill_coldMax = 165, }, - [12] = { skill_manaCostBase = 15, skill_coldMin = 141, skill_coldMax = 211, }, - [13] = { skill_manaCostBase = 16, skill_coldMin = 178, skill_coldMax = 268, }, - [14] = { skill_manaCostBase = 16, skill_coldMin = 225, skill_coldMax = 338, }, - [15] = { skill_manaCostBase = 17, skill_coldMin = 283, skill_coldMax = 424, }, - [16] = { skill_manaCostBase = 18, skill_coldMin = 354, skill_coldMax = 530, }, - [17] = { skill_manaCostBase = 18, skill_coldMin = 440, skill_coldMax = 661, }, - [18] = { skill_manaCostBase = 19, skill_coldMin = 547, skill_coldMax = 820, }, - [19] = { skill_manaCostBase = 19, skill_coldMin = 642, skill_coldMax = 963, }, - [20] = { skill_manaCostBase = 20, skill_coldMin = 752, skill_coldMax = 1129, }, - [21] = { skill_manaCostBase = 20, skill_coldMin = 836, skill_coldMax = 1254, }, - [22] = { skill_manaCostBase = 21, skill_coldMin = 928, skill_coldMax = 1392, }, - [23] = { skill_manaCostBase = 21, skill_coldMin = 1030, skill_coldMax = 1544, }, - [24] = { skill_manaCostBase = 21, skill_coldMin = 1142, skill_coldMax = 1713, }, - [25] = { skill_manaCostBase = 22, skill_coldMin = 1266, skill_coldMax = 1898, }, - [26] = { skill_manaCostBase = 23, skill_coldMin = 1402, skill_coldMax = 2103, }, - [27] = { skill_manaCostBase = 23, skill_coldMin = 1552, skill_coldMax = 2329, }, - [28] = { skill_manaCostBase = 23, skill_coldMin = 1718, skill_coldMax = 2577, }, - [29] = { skill_manaCostBase = 24, skill_coldMin = 1901, skill_coldMax = 2851, }, - [30] = { skill_manaCostBase = 24, skill_coldMin = 2102, skill_coldMax = 3153, }, - } + [1] = { 6, 6, 10, }, + [2] = { 6, 7, 11, }, + [3] = { 7, 9, 14, }, + [4] = { 8, 13, 19, }, + [5] = { 9, 18, 27, }, + [6] = { 10, 28, 42, }, + [7] = { 11, 38, 57, }, + [8] = { 12, 50, 75, }, + [9] = { 13, 66, 99, }, + [10] = { 14, 86, 128, }, + [11] = { 14, 110, 165, }, + [12] = { 15, 141, 211, }, + [13] = { 16, 178, 268, }, + [14] = { 16, 225, 338, }, + [15] = { 17, 283, 424, }, + [16] = { 18, 354, 530, }, + [17] = { 18, 440, 661, }, + [18] = { 19, 547, 820, }, + [19] = { 19, 642, 963, }, + [20] = { 20, 752, 1129, }, + [21] = { 20, 836, 1254, }, + [22] = { 21, 928, 1392, }, + [23] = { 21, 1030, 1544, }, + [24] = { 21, 1142, 1713, }, + [25] = { 22, 1266, 1898, }, + [26] = { 23, 1402, 2103, }, + [27] = { 23, 1552, 2329, }, + [28] = { 23, 1718, 2577, }, + [29] = { 24, 1901, 2851, }, + [30] = { 24, 2102, 3153, }, + }, } gems["Glacial Cascade"] = { intelligence = true, + active_skill = true, spell = true, - aoe = true, + area = true, cold = true, - hit = true, - base = { - skill_castTime = 0.8, - skill_damageEffectiveness = 0.6, - skill_critChanceBase = 5, + color = 3, + baseFlags = { + spell = true, + area = true, + cold = true, }, - quality = { - damageInc = 1, + skillTypes = { [2] = true, [10] = true, [11] = true, [17] = true, [18] = true, [19] = true, [26] = true, [36] = true, [34] = true, [60] = true, }, + baseMods = { + skill("castTime", 0.8), + skill("damageEffectiveness", 0.6), + skill("critChance", 5), + --"upheaval_number_of_spikes" = 7 + --"is_area_damage" = ? + }, + qualityMods = { + mod("Damage", "INC", 1, 0, 0, nil), --"damage_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("PhysicalMin", nil), --"spell_minimum_base_physical_damage" + [3] = skill("PhysicalMax", nil), --"spell_maximum_base_physical_damage" + [4] = skill("ColdMin", nil), --"spell_minimum_base_cold_damage" + [5] = skill("ColdMax", nil), --"spell_maximum_base_cold_damage" }, levels = { - [1] = { skill_manaCostBase = 13, skill_physicalMin = 12, skill_physicalMax = 19, skill_coldMin = 23, skill_coldMax = 35, }, - [2] = { skill_manaCostBase = 14, skill_physicalMin = 15, skill_physicalMax = 23, skill_coldMin = 28, skill_coldMax = 42, }, - [3] = { skill_manaCostBase = 15, skill_physicalMin = 18, skill_physicalMax = 27, skill_coldMin = 33, skill_coldMax = 50, }, - [4] = { skill_manaCostBase = 16, skill_physicalMin = 21, skill_physicalMax = 32, skill_coldMin = 39, skill_coldMax = 59, }, - [5] = { skill_manaCostBase = 17, skill_physicalMin = 25, skill_physicalMax = 38, skill_coldMin = 46, skill_coldMax = 69, }, - [6] = { skill_manaCostBase = 18, skill_physicalMin = 27, skill_physicalMax = 42, skill_coldMin = 51, skill_coldMax = 77, }, - [7] = { skill_manaCostBase = 18, skill_physicalMin = 31, skill_physicalMax = 47, skill_coldMin = 57, skill_coldMax = 85, }, - [8] = { skill_manaCostBase = 19, skill_physicalMin = 34, skill_physicalMax = 52, skill_coldMin = 63, skill_coldMax = 95, }, - [9] = { skill_manaCostBase = 19, skill_physicalMin = 38, skill_physicalMax = 58, skill_coldMin = 70, skill_coldMax = 105, }, - [10] = { skill_manaCostBase = 20, skill_physicalMin = 42, skill_physicalMax = 64, skill_coldMin = 77, skill_coldMax = 116, }, - [11] = { skill_manaCostBase = 21, skill_physicalMin = 46, skill_physicalMax = 71, skill_coldMin = 85, skill_coldMax = 129, }, - [12] = { skill_manaCostBase = 21, skill_physicalMin = 51, skill_physicalMax = 78, skill_coldMin = 94, skill_coldMax = 142, }, - [13] = { skill_manaCostBase = 22, skill_physicalMin = 56, skill_physicalMax = 86, skill_coldMin = 104, skill_coldMax = 157, }, - [14] = { skill_manaCostBase = 22, skill_physicalMin = 62, skill_physicalMax = 95, skill_coldMin = 115, skill_coldMax = 173, }, - [15] = { skill_manaCostBase = 23, skill_physicalMin = 68, skill_physicalMax = 105, skill_coldMin = 127, skill_coldMax = 191, }, - [16] = { skill_manaCostBase = 24, skill_physicalMin = 75, skill_physicalMax = 116, skill_coldMin = 139, skill_coldMax = 210, }, - [17] = { skill_manaCostBase = 24, skill_physicalMin = 83, skill_physicalMax = 127, skill_coldMin = 153, skill_coldMax = 231, }, - [18] = { skill_manaCostBase = 25, skill_physicalMin = 91, skill_physicalMax = 140, skill_coldMin = 169, skill_coldMax = 254, }, - [19] = { skill_manaCostBase = 25, skill_physicalMin = 100, skill_physicalMax = 154, skill_coldMin = 185, skill_coldMax = 280, }, - [20] = { skill_manaCostBase = 26, skill_physicalMin = 110, skill_physicalMax = 169, skill_coldMin = 203, skill_coldMax = 307, }, - [21] = { skill_manaCostBase = 27, skill_physicalMin = 120, skill_physicalMax = 185, skill_coldMin = 223, skill_coldMax = 337, }, - [22] = { skill_manaCostBase = 27, skill_physicalMin = 132, skill_physicalMax = 203, skill_coldMin = 245, skill_coldMax = 369, }, - [23] = { skill_manaCostBase = 28, skill_physicalMin = 145, skill_physicalMax = 223, skill_coldMin = 268, skill_coldMax = 405, }, - [24] = { skill_manaCostBase = 28, skill_physicalMin = 158, skill_physicalMax = 244, skill_coldMin = 294, skill_coldMax = 443, }, - [25] = { skill_manaCostBase = 29, skill_physicalMin = 174, skill_physicalMax = 267, skill_coldMin = 322, skill_coldMax = 485, }, - [26] = { skill_manaCostBase = 30, skill_physicalMin = 190, skill_physicalMax = 292, skill_coldMin = 352, skill_coldMax = 531, }, - [27] = { skill_manaCostBase = 30, skill_physicalMin = 208, skill_physicalMax = 319, skill_coldMin = 385, skill_coldMax = 581, }, - [28] = { skill_manaCostBase = 31, skill_physicalMin = 227, skill_physicalMax = 349, skill_coldMin = 421, skill_coldMax = 635, }, - [29] = { skill_manaCostBase = 31, skill_physicalMin = 248, skill_physicalMax = 382, skill_coldMin = 460, skill_coldMax = 694, }, - [30] = { skill_manaCostBase = 32, skill_physicalMin = 271, skill_physicalMax = 417, skill_coldMin = 502, skill_coldMax = 758, }, - } + [1] = { 13, 12, 19, 23, 35, }, + [2] = { 14, 15, 23, 28, 42, }, + [3] = { 15, 18, 27, 33, 50, }, + [4] = { 16, 21, 32, 39, 59, }, + [5] = { 17, 25, 38, 46, 69, }, + [6] = { 18, 27, 42, 51, 77, }, + [7] = { 18, 31, 47, 57, 85, }, + [8] = { 19, 34, 52, 63, 95, }, + [9] = { 19, 38, 58, 70, 105, }, + [10] = { 20, 42, 64, 77, 116, }, + [11] = { 21, 46, 71, 85, 129, }, + [12] = { 21, 51, 78, 94, 142, }, + [13] = { 22, 56, 86, 104, 157, }, + [14] = { 22, 62, 95, 115, 173, }, + [15] = { 23, 68, 105, 127, 191, }, + [16] = { 24, 75, 116, 139, 210, }, + [17] = { 24, 83, 127, 153, 231, }, + [18] = { 25, 91, 140, 169, 254, }, + [19] = { 25, 100, 154, 185, 280, }, + [20] = { 26, 110, 169, 203, 307, }, + [21] = { 27, 120, 185, 223, 337, }, + [22] = { 27, 132, 203, 245, 369, }, + [23] = { 28, 145, 223, 268, 405, }, + [24] = { 28, 158, 244, 294, 443, }, + [25] = { 29, 174, 267, 322, 485, }, + [26] = { 30, 190, 292, 352, 531, }, + [27] = { 30, 208, 319, 385, 581, }, + [28] = { 31, 227, 349, 421, 635, }, + [29] = { 31, 248, 382, 460, 694, }, + [30] = { 32, 271, 417, 502, 758, }, + }, } gems["Herald of Thunder"] = { intelligence = true, + active_skill = true, cast = true, - aoe = true, + area = true, duration = true, lightning = true, - hit = true, - parts = { - { - aoe = false, - }, + color = 3, + baseFlags = { + cast = true, + duration = true, + lightning = true, }, - base = { - skill_castTime = 1, - skill_damageEffectiveness = 1.2, - skill_manaReservedPercent = 25, - skill_durationBase = 6, - cannotShock = true, + skillTypes = { [39] = true, [5] = true, [15] = true, [16] = true, [10] = true, [11] = true, [12] = true, [35] = true, }, + baseMods = { + skill("castTime", 1), + skill("manaCost", 25), + skill("damageEffectiveness", 1.2), + skill("duration", 6), --"base_skill_effect_duration" = 6000 + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + flag("CannotShock"), --"never_shock" = ? + --"display_skill_deals_secondary_damage" = ? + --"skill_can_add_multiple_charges_per_action" = ? }, - quality = { - BuffEffect_lightningInc = 0.75, + qualityMods = { + mod("LightningDamage", "INC", 0.75, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"herald_of_thunder_lightning_damage_+%" = 0.75 + }, + levelMods = { + [1] = mod("LightningMin", "BASE", nil, ModFlag.Spell, 0, { type = "GlobalEffect", effectType = "Buff" }), --"spell_minimum_added_lightning_damage" + [2] = mod("LightningMax", "BASE", nil, ModFlag.Spell, 0, { type = "GlobalEffect", effectType = "Buff" }), --"spell_maximum_added_lightning_damage" + [3] = mod("LightningMin", "BASE", nil, ModFlag.Attack, 0, { type = "GlobalEffect", effectType = "Buff" }), --"attack_minimum_added_lightning_damage" + [4] = mod("LightningMax", "BASE", nil, ModFlag.Attack, 0, { type = "GlobalEffect", effectType = "Buff" }), --"attack_maximum_added_lightning_damage" + [5] = skill("LightningMin", nil), --"secondary_minimum_base_lightning_damage" + [6] = skill("LightningMax", nil), --"secondary_maximum_base_lightning_damage" }, levels = { - [1] = { BuffEffect_spell_lightningMin = 2, BuffEffect_spell_lightningMax = 7, BuffEffect_attack_lightningMin = 2, BuffEffect_attack_lightningMax = 7, skill_lightningMin = 1, skill_lightningMax = 34, }, - [2] = { BuffEffect_spell_lightningMin = 2, BuffEffect_spell_lightningMax = 9, BuffEffect_attack_lightningMin = 2, BuffEffect_attack_lightningMax = 9, skill_lightningMin = 1, skill_lightningMax = 47, }, - [3] = { BuffEffect_spell_lightningMin = 3, BuffEffect_spell_lightningMax = 11, BuffEffect_attack_lightningMin = 3, BuffEffect_attack_lightningMax = 11, skill_lightningMin = 1, skill_lightningMax = 65, }, - [4] = { BuffEffect_spell_lightningMin = 3, BuffEffect_spell_lightningMax = 14, BuffEffect_attack_lightningMin = 3, BuffEffect_attack_lightningMax = 14, skill_lightningMin = 2, skill_lightningMax = 87, }, - [5] = { BuffEffect_spell_lightningMin = 4, BuffEffect_spell_lightningMax = 16, BuffEffect_attack_lightningMin = 4, BuffEffect_attack_lightningMax = 16, skill_lightningMin = 2, skill_lightningMax = 108, }, - [6] = { BuffEffect_spell_lightningMin = 5, BuffEffect_spell_lightningMax = 18, BuffEffect_attack_lightningMin = 5, BuffEffect_attack_lightningMax = 18, skill_lightningMin = 3, skill_lightningMax = 135, }, - [7] = { BuffEffect_spell_lightningMin = 5, BuffEffect_spell_lightningMax = 21, BuffEffect_attack_lightningMin = 5, BuffEffect_attack_lightningMax = 21, skill_lightningMin = 3, skill_lightningMax = 166, }, - [8] = { BuffEffect_spell_lightningMin = 6, BuffEffect_spell_lightningMax = 24, BuffEffect_attack_lightningMin = 6, BuffEffect_attack_lightningMax = 24, skill_lightningMin = 4, skill_lightningMax = 203, }, - [9] = { BuffEffect_spell_lightningMin = 7, BuffEffect_spell_lightningMax = 27, BuffEffect_attack_lightningMin = 7, BuffEffect_attack_lightningMax = 27, skill_lightningMin = 5, skill_lightningMax = 248, }, - [10] = { BuffEffect_spell_lightningMin = 8, BuffEffect_spell_lightningMax = 31, BuffEffect_attack_lightningMin = 8, BuffEffect_attack_lightningMax = 31, skill_lightningMin = 6, skill_lightningMax = 301, }, - [11] = { BuffEffect_spell_lightningMin = 9, BuffEffect_spell_lightningMax = 35, BuffEffect_attack_lightningMin = 9, BuffEffect_attack_lightningMax = 35, skill_lightningMin = 8, skill_lightningMax = 363, }, - [12] = { BuffEffect_spell_lightningMin = 10, BuffEffect_spell_lightningMax = 39, BuffEffect_attack_lightningMin = 10, BuffEffect_attack_lightningMax = 39, skill_lightningMin = 9, skill_lightningMax = 436, }, - [13] = { BuffEffect_spell_lightningMin = 11, BuffEffect_spell_lightningMax = 44, BuffEffect_attack_lightningMin = 11, BuffEffect_attack_lightningMax = 44, skill_lightningMin = 11, skill_lightningMax = 522, }, - [14] = { BuffEffect_spell_lightningMin = 12, BuffEffect_spell_lightningMax = 49, BuffEffect_attack_lightningMin = 12, BuffEffect_attack_lightningMax = 49, skill_lightningMin = 13, skill_lightningMax = 623, }, - [15] = { BuffEffect_spell_lightningMin = 13, BuffEffect_spell_lightningMax = 53, BuffEffect_attack_lightningMin = 13, BuffEffect_attack_lightningMax = 53, skill_lightningMin = 15, skill_lightningMax = 708, }, - [16] = { BuffEffect_spell_lightningMin = 14, BuffEffect_spell_lightningMax = 57, BuffEffect_attack_lightningMin = 14, BuffEffect_attack_lightningMax = 57, skill_lightningMin = 17, skill_lightningMax = 803, }, - [17] = { BuffEffect_spell_lightningMin = 15, BuffEffect_spell_lightningMax = 61, BuffEffect_attack_lightningMin = 15, BuffEffect_attack_lightningMax = 61, skill_lightningMin = 19, skill_lightningMax = 908, }, - [18] = { BuffEffect_spell_lightningMin = 16, BuffEffect_spell_lightningMax = 66, BuffEffect_attack_lightningMin = 16, BuffEffect_attack_lightningMax = 66, skill_lightningMin = 21, skill_lightningMax = 1026, }, - [19] = { BuffEffect_spell_lightningMin = 18, BuffEffect_spell_lightningMax = 71, BuffEffect_attack_lightningMin = 18, BuffEffect_attack_lightningMax = 71, skill_lightningMin = 24, skill_lightningMax = 1157, }, - [20] = { BuffEffect_spell_lightningMin = 19, BuffEffect_spell_lightningMax = 76, BuffEffect_attack_lightningMin = 19, BuffEffect_attack_lightningMax = 76, skill_lightningMin = 27, skill_lightningMax = 1303, }, - [21] = { BuffEffect_spell_lightningMin = 20, BuffEffect_spell_lightningMax = 81, BuffEffect_attack_lightningMin = 20, BuffEffect_attack_lightningMax = 81, skill_lightningMin = 31, skill_lightningMax = 1451, }, - [22] = { BuffEffect_spell_lightningMin = 22, BuffEffect_spell_lightningMax = 87, BuffEffect_attack_lightningMin = 22, BuffEffect_attack_lightningMax = 87, skill_lightningMin = 34, skill_lightningMax = 1615, }, - [23] = { BuffEffect_spell_lightningMin = 23, BuffEffect_spell_lightningMax = 94, BuffEffect_attack_lightningMin = 23, BuffEffect_attack_lightningMax = 94, skill_lightningMin = 38, skill_lightningMax = 1796, }, - [24] = { BuffEffect_spell_lightningMin = 25, BuffEffect_spell_lightningMax = 100, BuffEffect_attack_lightningMin = 25, BuffEffect_attack_lightningMax = 100, skill_lightningMin = 43, skill_lightningMax = 1995, }, - [25] = { BuffEffect_spell_lightningMin = 27, BuffEffect_spell_lightningMax = 107, BuffEffect_attack_lightningMin = 27, BuffEffect_attack_lightningMax = 107, skill_lightningMin = 48, skill_lightningMax = 2215, }, - [26] = { BuffEffect_spell_lightningMin = 29, BuffEffect_spell_lightningMax = 115, BuffEffect_attack_lightningMin = 29, BuffEffect_attack_lightningMax = 115, skill_lightningMin = 54, skill_lightningMax = 2457, }, - [27] = { BuffEffect_spell_lightningMin = 31, BuffEffect_spell_lightningMax = 123, BuffEffect_attack_lightningMin = 31, BuffEffect_attack_lightningMax = 123, skill_lightningMin = 60, skill_lightningMax = 2723, }, - [28] = { BuffEffect_spell_lightningMin = 33, BuffEffect_spell_lightningMax = 131, BuffEffect_attack_lightningMin = 33, BuffEffect_attack_lightningMax = 131, skill_lightningMin = 67, skill_lightningMax = 3016, }, - [29] = { BuffEffect_spell_lightningMin = 35, BuffEffect_spell_lightningMax = 140, BuffEffect_attack_lightningMin = 35, BuffEffect_attack_lightningMax = 140, skill_lightningMin = 75, skill_lightningMax = 3338, }, - [30] = { BuffEffect_spell_lightningMin = 37, BuffEffect_spell_lightningMax = 150, BuffEffect_attack_lightningMin = 37, BuffEffect_attack_lightningMax = 150, skill_lightningMin = 83, skill_lightningMax = 3692, }, - } + [1] = { 2, 7, 2, 7, 1, 34, }, + [2] = { 2, 9, 2, 9, 1, 47, }, + [3] = { 3, 11, 3, 11, 1, 65, }, + [4] = { 3, 14, 3, 14, 2, 87, }, + [5] = { 4, 16, 4, 16, 2, 108, }, + [6] = { 5, 18, 5, 18, 3, 135, }, + [7] = { 5, 21, 5, 21, 3, 166, }, + [8] = { 6, 24, 6, 24, 4, 203, }, + [9] = { 7, 27, 7, 27, 5, 248, }, + [10] = { 8, 31, 8, 31, 6, 301, }, + [11] = { 9, 35, 9, 35, 8, 363, }, + [12] = { 10, 39, 10, 39, 9, 436, }, + [13] = { 11, 44, 11, 44, 11, 522, }, + [14] = { 12, 49, 12, 49, 13, 623, }, + [15] = { 13, 53, 13, 53, 15, 708, }, + [16] = { 14, 57, 14, 57, 17, 803, }, + [17] = { 15, 61, 15, 61, 19, 908, }, + [18] = { 16, 66, 16, 66, 21, 1026, }, + [19] = { 18, 71, 18, 71, 24, 1157, }, + [20] = { 19, 76, 19, 76, 27, 1303, }, + [21] = { 20, 81, 20, 81, 31, 1451, }, + [22] = { 22, 87, 22, 87, 34, 1615, }, + [23] = { 23, 94, 23, 94, 38, 1796, }, + [24] = { 25, 100, 25, 100, 43, 1995, }, + [25] = { 27, 107, 27, 107, 48, 2215, }, + [26] = { 29, 115, 29, 115, 54, 2457, }, + [27] = { 31, 123, 31, 123, 60, 2723, }, + [28] = { 33, 131, 33, 131, 67, 3016, }, + [29] = { 35, 140, 35, 140, 75, 3338, }, + [30] = { 37, 150, 37, 150, 83, 3692, }, + }, } gems["Ice Nova"] = { intelligence = true, + active_skill = true, spell = true, - aoe = true, + area = true, cold = true, - hit = true, - base = { - skill_castTime = 0.8, - skill_damageEffectiveness = 0.7, - skill_critChanceBase = 6, + color = 3, + baseFlags = { + spell = true, + area = true, + cold = true, }, - quality = { - aoeRadiusInc = 0.5, + skillTypes = { [2] = true, [10] = true, [11] = true, [17] = true, [18] = true, [19] = true, [26] = true, [36] = true, [34] = true, [60] = true, }, + baseMods = { + skill("castTime", 0.8), + skill("damageEffectiveness", 0.7), + skill("critChance", 6), + --"skill_art_variation" = 0 + --"is_area_damage" = 1 + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("ColdMin", nil), --"spell_minimum_base_cold_damage" + [3] = skill("ColdMax", nil), --"spell_maximum_base_cold_damage" }, levels = { - [1] = { skill_manaCostBase = 10, skill_coldMin = 14, skill_coldMax = 21, }, - [2] = { skill_manaCostBase = 11, skill_coldMin = 17, skill_coldMax = 26, }, - [3] = { skill_manaCostBase = 13, skill_coldMin = 22, skill_coldMax = 35, }, - [4] = { skill_manaCostBase = 14, skill_coldMin = 29, skill_coldMax = 46, }, - [5] = { skill_manaCostBase = 16, skill_coldMin = 38, skill_coldMax = 59, }, - [6] = { skill_manaCostBase = 17, skill_coldMin = 48, skill_coldMax = 75, }, - [7] = { skill_manaCostBase = 19, skill_coldMin = 61, skill_coldMax = 95, }, - [8] = { skill_manaCostBase = 20, skill_coldMin = 72, skill_coldMax = 113, }, - [9] = { skill_manaCostBase = 21, skill_coldMin = 85, skill_coldMax = 133, }, - [10] = { skill_manaCostBase = 22, skill_coldMin = 100, skill_coldMax = 157, }, - [11] = { skill_manaCostBase = 23, skill_coldMin = 117, skill_coldMax = 184, }, - [12] = { skill_manaCostBase = 24, skill_coldMin = 137, skill_coldMax = 215, }, - [13] = { skill_manaCostBase = 25, skill_coldMin = 160, skill_coldMax = 250, }, - [14] = { skill_manaCostBase = 26, skill_coldMin = 186, skill_coldMax = 291, }, - [15] = { skill_manaCostBase = 27, skill_coldMin = 216, skill_coldMax = 338, }, - [16] = { skill_manaCostBase = 28, skill_coldMin = 251, skill_coldMax = 392, }, - [17] = { skill_manaCostBase = 29, skill_coldMin = 277, skill_coldMax = 432, }, - [18] = { skill_manaCostBase = 30, skill_coldMin = 305, skill_coldMax = 476, }, - [19] = { skill_manaCostBase = 30, skill_coldMin = 335, skill_coldMax = 524, }, - [20] = { skill_manaCostBase = 31, skill_coldMin = 369, skill_coldMax = 577, }, - [21] = { skill_manaCostBase = 32, skill_coldMin = 406, skill_coldMax = 634, }, - [22] = { skill_manaCostBase = 33, skill_coldMin = 446, skill_coldMax = 696, }, - [23] = { skill_manaCostBase = 34, skill_coldMin = 489, skill_coldMax = 765, }, - [24] = { skill_manaCostBase = 34, skill_coldMin = 537, skill_coldMax = 839, }, - [25] = { skill_manaCostBase = 34, skill_coldMin = 589, skill_coldMax = 920, }, - [26] = { skill_manaCostBase = 34, skill_coldMin = 646, skill_coldMax = 1009, }, - [27] = { skill_manaCostBase = 35, skill_coldMin = 708, skill_coldMax = 1106, }, - [28] = { skill_manaCostBase = 35, skill_coldMin = 775, skill_coldMax = 1211, }, - [29] = { skill_manaCostBase = 35, skill_coldMin = 849, skill_coldMax = 1326, }, - [30] = { skill_manaCostBase = 35, skill_coldMin = 929, skill_coldMax = 1451, }, - } + [1] = { 10, 14, 21, }, + [2] = { 11, 17, 26, }, + [3] = { 13, 22, 35, }, + [4] = { 14, 29, 46, }, + [5] = { 16, 38, 59, }, + [6] = { 17, 48, 75, }, + [7] = { 19, 61, 95, }, + [8] = { 20, 72, 113, }, + [9] = { 21, 85, 133, }, + [10] = { 22, 100, 157, }, + [11] = { 23, 117, 184, }, + [12] = { 24, 137, 215, }, + [13] = { 25, 160, 250, }, + [14] = { 26, 186, 291, }, + [15] = { 27, 216, 338, }, + [16] = { 28, 251, 392, }, + [17] = { 29, 277, 432, }, + [18] = { 30, 305, 476, }, + [19] = { 30, 335, 524, }, + [20] = { 31, 369, 577, }, + [21] = { 32, 406, 634, }, + [22] = { 33, 446, 696, }, + [23] = { 34, 489, 765, }, + [24] = { 34, 537, 839, }, + [25] = { 34, 589, 920, }, + [26] = { 34, 646, 1009, }, + [27] = { 35, 708, 1106, }, + [28] = { 35, 775, 1211, }, + [29] = { 35, 849, 1326, }, + [30] = { 35, 929, 1451, }, + }, +} +gems["Vaal Ice Nova"] = { + intelligence = true, + active_skill = true, + vaal = true, + spell = true, + area = true, + cold = true, + color = 3, + baseFlags = { + spell = true, + area = true, + cold = true, + vaal = true, + }, + skillTypes = { [2] = true, [10] = true, [11] = true, [17] = true, [18] = true, [19] = true, [26] = true, [43] = true, [34] = true, }, + baseMods = { + skill("castTime", 0.8), + skill("damageEffectiveness", 0.7), + skill("critChance", 6), + --"ice_nova_number_of_repeats" = 5 + --"ice_nova_radius_+%_per_repeat" = -20 + --"is_area_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + [1] = skill("ColdMin", nil), --"spell_minimum_base_cold_damage" + [2] = skill("ColdMax", nil), --"spell_maximum_base_cold_damage" + }, + levels = { + [1] = { 11, 17, }, + [2] = { 14, 22, }, + [3] = { 18, 29, }, + [4] = { 24, 37, }, + [5] = { 31, 48, }, + [6] = { 39, 61, }, + [7] = { 49, 76, }, + [8] = { 57, 89, }, + [9] = { 67, 105, }, + [10] = { 78, 123, }, + [11] = { 91, 143, }, + [12] = { 106, 166, }, + [13] = { 123, 193, }, + [14] = { 143, 223, }, + [15] = { 164, 257, }, + [16] = { 189, 296, }, + [17] = { 208, 325, }, + [18] = { 228, 357, }, + [19] = { 250, 391, }, + [20] = { 274, 428, }, + [21] = { 300, 469, }, + [22] = { 328, 513, }, + [23] = { 359, 561, }, + [24] = { 393, 613, }, + [25] = { 429, 670, }, + [26] = { 468, 732, }, + [27] = { 511, 799, }, + [28] = { 558, 871, }, + [29] = { 608, 950, }, + [30] = { 663, 1035, }, + }, } gems["Ice Spear"] = { - intelligence = true, - spell = true, projectile = true, + intelligence = true, + active_skill = true, + spell = true, cold = true, - hit = true, parts = { { name = "First Form", @@ -1391,55 +2288,69 @@ gems["Ice Spear"] = { name = "Second Form", }, }, - base = { - skill_castTime = 0.85, - skill_damageEffectiveness = 0.8, - skill_critChanceBase = 7, - SkillPart1_pierceChance = 100, - SkillPart2_critChanceInc = 600, + color = 3, + baseFlags = { + spell = true, + projectile = true, + cold = true, }, - quality = { - projectileSpeedInc = 2, + skillTypes = { [2] = true, [3] = true, [10] = true, [17] = true, [18] = true, [19] = true, [26] = true, [36] = true, [34] = true, [60] = true, }, + baseMods = { + skill("castTime", 0.85), + skill("damageEffectiveness", 0.8), + skill("critChance", 7), + --"base_is_projectile" = 1 + mod("CritChance", "INT", 600, 0, 0, { type = "SkillPart", skillPart = 2 }), --"ice_spear_second_form_critical_strike_chance_+%" = 600 + mod("PierceChance", "BASE", 100, 0, 0, { type = "SkillPart", skillPart = 1 }), + }, + qualityMods = { + mod("ProjectileSpeed", "INC", 2), --"base_projectile_speed_+%" = 2 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("ColdMin", nil), --"spell_minimum_base_cold_damage" + [3] = skill("ColdMax", nil), --"spell_maximum_base_cold_damage" + [4] = mod("EnemyChillDuration", "INC", nil), --"chill_duration_+%" }, levels = { - [1] = { skill_manaCostBase = 9, skill_coldMin = 17, skill_coldMax = 26, chill_durationInc = 40, }, - [2] = { skill_manaCostBase = 10, skill_coldMin = 21, skill_coldMax = 31, chill_durationInc = 42, }, - [3] = { skill_manaCostBase = 11, skill_coldMin = 28, skill_coldMax = 42, chill_durationInc = 44, }, - [4] = { skill_manaCostBase = 12, skill_coldMin = 36, skill_coldMax = 53, chill_durationInc = 46, }, - [5] = { skill_manaCostBase = 13, skill_coldMin = 47, skill_coldMax = 70, chill_durationInc = 48, }, - [6] = { skill_manaCostBase = 14, skill_coldMin = 61, skill_coldMax = 91, chill_durationInc = 50, }, - [7] = { skill_manaCostBase = 16, skill_coldMin = 78, skill_coldMax = 117, chill_durationInc = 52, }, - [8] = { skill_manaCostBase = 16, skill_coldMin = 94, skill_coldMax = 140, chill_durationInc = 54, }, - [9] = { skill_manaCostBase = 17, skill_coldMin = 112, skill_coldMax = 168, chill_durationInc = 56, }, - [10] = { skill_manaCostBase = 18, skill_coldMin = 133, skill_coldMax = 200, chill_durationInc = 58, }, - [11] = { skill_manaCostBase = 19, skill_coldMin = 158, skill_coldMax = 237, chill_durationInc = 60, }, - [12] = { skill_manaCostBase = 20, skill_coldMin = 187, skill_coldMax = 281, chill_durationInc = 62, }, - [13] = { skill_manaCostBase = 21, skill_coldMin = 221, skill_coldMax = 332, chill_durationInc = 64, }, - [14] = { skill_manaCostBase = 22, skill_coldMin = 261, skill_coldMax = 391, chill_durationInc = 66, }, - [15] = { skill_manaCostBase = 23, skill_coldMin = 307, skill_coldMax = 460, chill_durationInc = 68, }, - [16] = { skill_manaCostBase = 24, skill_coldMin = 360, skill_coldMax = 540, chill_durationInc = 70, }, - [17] = { skill_manaCostBase = 24, skill_coldMin = 400, skill_coldMax = 600, chill_durationInc = 72, }, - [18] = { skill_manaCostBase = 25, skill_coldMin = 445, skill_coldMax = 667, chill_durationInc = 74, }, - [19] = { skill_manaCostBase = 26, skill_coldMin = 494, skill_coldMax = 741, chill_durationInc = 76, }, - [20] = { skill_manaCostBase = 27, skill_coldMin = 548, skill_coldMax = 822, chill_durationInc = 78, }, - [21] = { skill_manaCostBase = 28, skill_coldMin = 607, skill_coldMax = 911, chill_durationInc = 80, }, - [22] = { skill_manaCostBase = 29, skill_coldMin = 673, skill_coldMax = 1009, chill_durationInc = 82, }, - [23] = { skill_manaCostBase = 29, skill_coldMin = 745, skill_coldMax = 1118, chill_durationInc = 84, }, - [24] = { skill_manaCostBase = 30, skill_coldMin = 825, skill_coldMax = 1237, chill_durationInc = 86, }, - [25] = { skill_manaCostBase = 30, skill_coldMin = 912, skill_coldMax = 1369, chill_durationInc = 88, }, - [26] = { skill_manaCostBase = 31, skill_coldMin = 1009, skill_coldMax = 1513, chill_durationInc = 90, }, - [27] = { skill_manaCostBase = 32, skill_coldMin = 1115, skill_coldMax = 1672, chill_durationInc = 92, }, - [28] = { skill_manaCostBase = 33, skill_coldMin = 1232, skill_coldMax = 1847, chill_durationInc = 94, }, - [29] = { skill_manaCostBase = 33, skill_coldMin = 1360, skill_coldMax = 2040, chill_durationInc = 96, }, - [30] = { skill_manaCostBase = 34, skill_coldMin = 1501, skill_coldMax = 2251, chill_durationInc = 98, }, - } + [1] = { 9, 17, 26, 40, }, + [2] = { 10, 21, 31, 42, }, + [3] = { 11, 28, 42, 44, }, + [4] = { 12, 36, 53, 46, }, + [5] = { 13, 47, 70, 48, }, + [6] = { 14, 61, 91, 50, }, + [7] = { 16, 78, 117, 52, }, + [8] = { 16, 94, 140, 54, }, + [9] = { 17, 112, 168, 56, }, + [10] = { 18, 133, 200, 58, }, + [11] = { 19, 158, 237, 60, }, + [12] = { 20, 187, 281, 62, }, + [13] = { 21, 221, 332, 64, }, + [14] = { 22, 261, 391, 66, }, + [15] = { 23, 307, 460, 68, }, + [16] = { 24, 360, 540, 70, }, + [17] = { 24, 400, 600, 72, }, + [18] = { 25, 445, 667, 74, }, + [19] = { 26, 494, 741, 76, }, + [20] = { 27, 548, 822, 78, }, + [21] = { 28, 607, 911, 80, }, + [22] = { 29, 673, 1009, 82, }, + [23] = { 29, 745, 1118, 84, }, + [24] = { 30, 825, 1237, 86, }, + [25] = { 30, 912, 1369, 88, }, + [26] = { 31, 1009, 1513, 90, }, + [27] = { 32, 1115, 1672, 92, }, + [28] = { 33, 1232, 1847, 94, }, + [29] = { 33, 1360, 2040, 96, }, + [30] = { 34, 1501, 2251, 98, }, + }, } gems["Incinerate"] = { - intelligence = true, - spell = true, projectile = true, + intelligence = true, + active_skill = true, + spell = true, fire = true, - hit = true, parts = { { name = "Base damage", @@ -1448,548 +2359,990 @@ gems["Incinerate"] = { name = "Fully charged", }, }, - base = { - skill_castTime = 0.2, - skill_damageEffectiveness = 0.3, - skill_baseCrit = 0, - pierceChance = 100, - SkillPart2_spell_damageMore = 2.5, + color = 3, + baseFlags = { + spell = true, + projectile = true, + fire = true, }, - quality = { - projectileSpeedInc = 2, + skillTypes = { [2] = true, [3] = true, [10] = true, [18] = true, [33] = true, [58] = true, }, + baseMods = { + skill("castTime", 0.2), + skill("damageEffectiveness", 0.3), + --"flamethrower_damage_+%_per_stage_final" = 50 + --"base_is_projectile" = ? + mod("PierceChance", "BASE", 100), --"always_pierce" = ? + --"skill_can_add_multiple_charges_per_action" = ? + mod("Damage", "MORE", 150, ModFlag.Spell, 0, { type = "SkillPart", skillPart = 2 }), + }, + qualityMods = { + mod("ProjectileSpeed", "INC", 2), --"base_projectile_speed_+%" = 2 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("FireMin", nil), --"spell_minimum_base_fire_damage" + [3] = skill("FireMax", nil), --"spell_maximum_base_fire_damage" }, levels = { - [1] = { skill_manaCostBase = 6, skill_fireMin = 6, skill_fireMax = 9, }, - [2] = { skill_manaCostBase = 6, skill_fireMin = 7, skill_fireMax = 11, }, - [3] = { skill_manaCostBase = 6, skill_fireMin = 10, skill_fireMax = 15, }, - [4] = { skill_manaCostBase = 6, skill_fireMin = 13, skill_fireMax = 19, }, - [5] = { skill_manaCostBase = 6, skill_fireMin = 16, skill_fireMax = 24, }, - [6] = { skill_manaCostBase = 6, skill_fireMin = 20, skill_fireMax = 31, }, - [7] = { skill_manaCostBase = 6, skill_fireMin = 25, skill_fireMax = 38, }, - [8] = { skill_manaCostBase = 6, skill_fireMin = 30, skill_fireMax = 45, }, - [9] = { skill_manaCostBase = 7, skill_fireMin = 35, skill_fireMax = 52, }, - [10] = { skill_manaCostBase = 7, skill_fireMin = 41, skill_fireMax = 61, }, - [11] = { skill_manaCostBase = 7, skill_fireMin = 47, skill_fireMax = 71, }, - [12] = { skill_manaCostBase = 7, skill_fireMin = 54, skill_fireMax = 82, }, - [13] = { skill_manaCostBase = 7, skill_fireMin = 63, skill_fireMax = 94, }, - [14] = { skill_manaCostBase = 7, skill_fireMin = 72, skill_fireMax = 108, }, - [15] = { skill_manaCostBase = 8, skill_fireMin = 83, skill_fireMax = 125, }, - [16] = { skill_manaCostBase = 8, skill_fireMin = 95, skill_fireMax = 143, }, - [17] = { skill_manaCostBase = 8, skill_fireMin = 104, skill_fireMax = 157, }, - [18] = { skill_manaCostBase = 8, skill_fireMin = 114, skill_fireMax = 171, }, - [19] = { skill_manaCostBase = 8, skill_fireMin = 125, skill_fireMax = 187, }, - [20] = { skill_manaCostBase = 9, skill_fireMin = 136, skill_fireMax = 204, }, - [21] = { skill_manaCostBase = 9, skill_fireMin = 149, skill_fireMax = 223, }, - [22] = { skill_manaCostBase = 9, skill_fireMin = 162, skill_fireMax = 244, }, - [23] = { skill_manaCostBase = 9, skill_fireMin = 177, skill_fireMax = 266, }, - [24] = { skill_manaCostBase = 9, skill_fireMin = 193, skill_fireMax = 289, }, - [25] = { skill_manaCostBase = 9, skill_fireMin = 210, skill_fireMax = 315, }, - [26] = { skill_manaCostBase = 10, skill_fireMin = 229, skill_fireMax = 343, }, - [27] = { skill_manaCostBase = 10, skill_fireMin = 249, skill_fireMax = 374, }, - [28] = { skill_manaCostBase = 10, skill_fireMin = 271, skill_fireMax = 406, }, - [29] = { skill_manaCostBase = 10, skill_fireMin = 295, skill_fireMax = 442, }, - [30] = { skill_manaCostBase = 10, skill_fireMin = 320, skill_fireMax = 480, }, - } + [1] = { 6, 6, 9, }, + [2] = { 6, 7, 11, }, + [3] = { 6, 10, 15, }, + [4] = { 6, 13, 19, }, + [5] = { 6, 16, 24, }, + [6] = { 6, 20, 31, }, + [7] = { 6, 25, 38, }, + [8] = { 6, 30, 45, }, + [9] = { 7, 35, 52, }, + [10] = { 7, 41, 61, }, + [11] = { 7, 47, 71, }, + [12] = { 7, 54, 82, }, + [13] = { 7, 63, 94, }, + [14] = { 7, 72, 108, }, + [15] = { 8, 83, 125, }, + [16] = { 8, 95, 143, }, + [17] = { 8, 104, 157, }, + [18] = { 8, 114, 171, }, + [19] = { 8, 125, 187, }, + [20] = { 9, 136, 204, }, + [21] = { 9, 149, 223, }, + [22] = { 9, 162, 244, }, + [23] = { 9, 177, 266, }, + [24] = { 9, 193, 289, }, + [25] = { 9, 210, 315, }, + [26] = { 10, 229, 343, }, + [27] = { 10, 249, 374, }, + [28] = { 10, 271, 406, }, + [29] = { 10, 295, 442, }, + [30] = { 10, 320, 480, }, + }, } gems["Kinetic Blast"] = { intelligence = true, + active_skill = true, attack = true, + area = true, projectile = true, - aoe = true, - hit = true, parts = { { name = "Projectile", - aoe = false, + area = false, }, { name = "Explosions", - aoe = true, + area = true, }, }, - base = { - area_damageMore = 0.75, + color = 3, + baseFlags = { + attack = true, + projectile = true, + area = true, }, - quality = { - aoeRadiusInc = 0.5, + skillTypes = { [1] = true, [48] = true, [3] = true, [6] = true, [11] = true, [17] = true, [19] = true, [22] = true, }, + baseMods = { + skill("castTime", 1), + --"cluster_burst_spawn_amount" = 4 + mod("Damage", "MORE", -25, ModFlag.Area), --"active_skill_area_damage_+%_final" = -25 + --"base_is_projectile" = ? + --"skill_can_fire_wand_projectiles" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = mod("Damage", "MORE", nil, ModFlag.Attack), + [3] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" }, levels = { - [1] = { skill_manaCostBase = 15, attack_damageMore = 1.2, aoeRadiusInc = 0, }, - [2] = { skill_manaCostBase = 15, attack_damageMore = 1.214, aoeRadiusInc = 1, }, - [3] = { skill_manaCostBase = 15, attack_damageMore = 1.228, aoeRadiusInc = 2, }, - [4] = { skill_manaCostBase = 15, attack_damageMore = 1.242, aoeRadiusInc = 3, }, - [5] = { skill_manaCostBase = 15, attack_damageMore = 1.256, aoeRadiusInc = 4, }, - [6] = { skill_manaCostBase = 15, attack_damageMore = 1.27, aoeRadiusInc = 5, }, - [7] = { skill_manaCostBase = 15, attack_damageMore = 1.284, aoeRadiusInc = 6, }, - [8] = { skill_manaCostBase = 15, attack_damageMore = 1.298, aoeRadiusInc = 7, }, - [9] = { skill_manaCostBase = 16, attack_damageMore = 1.312, aoeRadiusInc = 8, }, - [10] = { skill_manaCostBase = 16, attack_damageMore = 1.326, aoeRadiusInc = 9, }, - [11] = { skill_manaCostBase = 16, attack_damageMore = 1.34, aoeRadiusInc = 10, }, - [12] = { skill_manaCostBase = 16, attack_damageMore = 1.354, aoeRadiusInc = 11, }, - [13] = { skill_manaCostBase = 16, attack_damageMore = 1.368, aoeRadiusInc = 12, }, - [14] = { skill_manaCostBase = 16, attack_damageMore = 1.382, aoeRadiusInc = 13, }, - [15] = { skill_manaCostBase = 16, attack_damageMore = 1.396, aoeRadiusInc = 14, }, - [16] = { skill_manaCostBase = 16, attack_damageMore = 1.41, aoeRadiusInc = 15, }, - [17] = { skill_manaCostBase = 16, attack_damageMore = 1.424, aoeRadiusInc = 16, }, - [18] = { skill_manaCostBase = 16, attack_damageMore = 1.438, aoeRadiusInc = 17, }, - [19] = { skill_manaCostBase = 16, attack_damageMore = 1.452, aoeRadiusInc = 18, }, - [20] = { skill_manaCostBase = 16, attack_damageMore = 1.466, aoeRadiusInc = 19, }, - [21] = { skill_manaCostBase = 16, attack_damageMore = 1.48, aoeRadiusInc = 20, }, - [22] = { skill_manaCostBase = 16, attack_damageMore = 1.494, aoeRadiusInc = 21, }, - [23] = { skill_manaCostBase = 16, attack_damageMore = 1.508, aoeRadiusInc = 22, }, - [24] = { skill_manaCostBase = 16, attack_damageMore = 1.522, aoeRadiusInc = 23, }, - [25] = { skill_manaCostBase = 17, attack_damageMore = 1.536, aoeRadiusInc = 24, }, - [26] = { skill_manaCostBase = 17, attack_damageMore = 1.55, aoeRadiusInc = 25, }, - [27] = { skill_manaCostBase = 17, attack_damageMore = 1.564, aoeRadiusInc = 26, }, - [28] = { skill_manaCostBase = 17, attack_damageMore = 1.578, aoeRadiusInc = 27, }, - [29] = { skill_manaCostBase = 17, attack_damageMore = 1.592, aoeRadiusInc = 28, }, - [30] = { skill_manaCostBase = 17, attack_damageMore = 1.606, aoeRadiusInc = 29, }, - } + [1] = { 15, 20, 0, }, + [2] = { 15, 21.4, 1, }, + [3] = { 15, 22.8, 2, }, + [4] = { 15, 24.2, 3, }, + [5] = { 15, 25.6, 4, }, + [6] = { 15, 27, 5, }, + [7] = { 15, 28.4, 6, }, + [8] = { 15, 29.8, 7, }, + [9] = { 16, 31.2, 8, }, + [10] = { 16, 32.6, 9, }, + [11] = { 16, 34, 10, }, + [12] = { 16, 35.4, 11, }, + [13] = { 16, 36.8, 12, }, + [14] = { 16, 38.2, 13, }, + [15] = { 16, 39.6, 14, }, + [16] = { 16, 41, 15, }, + [17] = { 16, 42.4, 16, }, + [18] = { 16, 43.8, 17, }, + [19] = { 16, 45.2, 18, }, + [20] = { 16, 46.6, 19, }, + [21] = { 16, 48, 20, }, + [22] = { 16, 49.4, 21, }, + [23] = { 16, 50.8, 22, }, + [24] = { 16, 52.2, 23, }, + [25] = { 17, 53.6, 24, }, + [26] = { 17, 55, 25, }, + [27] = { 17, 56.4, 26, }, + [28] = { 17, 57.8, 27, }, + [29] = { 17, 59.2, 28, }, + [30] = { 17, 60.6, 29, }, + }, } gems["Lightning Tendrils"] = { intelligence = true, + active_skill = true, spell = true, - aoe = true, + area = true, lightning = true, - hit = true, - base = { - skill_castTime = 0.8, - skill_damageEffectiveness = 0.35, - skill_critChanceBase = 6, - skill_dpsMultiplier = 4, + color = 3, + baseFlags = { + spell = true, + area = true, + lightning = true, }, - quality = { - lightningInc = 1, + skillTypes = { [2] = true, [10] = true, [11] = true, [18] = true, [26] = true, [35] = true, }, + baseMods = { + skill("castTime", 0.8), + skill("damageEffectiveness", 0.35), + skill("critChance", 6), + --"base_skill_number_of_additional_hits" = 3 + --"is_area_damage" = ? + skill("dpsMultiplier", 4), + }, + qualityMods = { + mod("LightningDamage", "INC", 1), --"lightning_damage_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("LightningMin", nil), --"spell_minimum_base_lightning_damage" + [3] = skill("LightningMax", nil), --"spell_maximum_base_lightning_damage" }, levels = { - [1] = { skill_manaCostBase = 6, skill_lightningMin = 1, skill_lightningMax = 3, }, - [2] = { skill_manaCostBase = 7, skill_lightningMin = 1, skill_lightningMax = 4, }, - [3] = { skill_manaCostBase = 8, skill_lightningMin = 1, skill_lightningMax = 5, }, - [4] = { skill_manaCostBase = 9, skill_lightningMin = 1, skill_lightningMax = 7, }, - [5] = { skill_manaCostBase = 10, skill_lightningMin = 1, skill_lightningMax = 10, }, - [6] = { skill_manaCostBase = 11, skill_lightningMin = 1, skill_lightningMax = 16, }, - [7] = { skill_manaCostBase = 12, skill_lightningMin = 1, skill_lightningMax = 21, }, - [8] = { skill_manaCostBase = 13, skill_lightningMin = 1, skill_lightningMax = 28, }, - [9] = { skill_manaCostBase = 14, skill_lightningMin = 2, skill_lightningMax = 38, }, - [10] = { skill_manaCostBase = 16, skill_lightningMin = 3, skill_lightningMax = 49, }, - [11] = { skill_manaCostBase = 18, skill_lightningMin = 3, skill_lightningMax = 64, }, - [12] = { skill_manaCostBase = 19, skill_lightningMin = 4, skill_lightningMax = 82, }, - [13] = { skill_manaCostBase = 20, skill_lightningMin = 6, skill_lightningMax = 105, }, - [14] = { skill_manaCostBase = 21, skill_lightningMin = 7, skill_lightningMax = 133, }, - [15] = { skill_manaCostBase = 22, skill_lightningMin = 9, skill_lightningMax = 168, }, - [16] = { skill_manaCostBase = 23, skill_lightningMin = 11, skill_lightningMax = 212, }, - [17] = { skill_manaCostBase = 24, skill_lightningMin = 14, skill_lightningMax = 265, }, - [18] = { skill_manaCostBase = 25, skill_lightningMin = 17, skill_lightningMax = 332, }, - [19] = { skill_manaCostBase = 26, skill_lightningMin = 21, skill_lightningMax = 392, }, - [20] = { skill_manaCostBase = 26, skill_lightningMin = 24, skill_lightningMax = 461, }, - [21] = { skill_manaCostBase = 27, skill_lightningMin = 27, skill_lightningMax = 514, }, - [22] = { skill_manaCostBase = 27, skill_lightningMin = 30, skill_lightningMax = 573, }, - [23] = { skill_manaCostBase = 28, skill_lightningMin = 34, skill_lightningMax = 638, }, - [24] = { skill_manaCostBase = 28, skill_lightningMin = 37, skill_lightningMax = 710, }, - [25] = { skill_manaCostBase = 29, skill_lightningMin = 42, skill_lightningMax = 790, }, - [26] = { skill_manaCostBase = 29, skill_lightningMin = 46, skill_lightningMax = 878, }, - [27] = { skill_manaCostBase = 30, skill_lightningMin = 51, skill_lightningMax = 975, }, - [28] = { skill_manaCostBase = 30, skill_lightningMin = 57, skill_lightningMax = 1083, }, - [29] = { skill_manaCostBase = 31, skill_lightningMin = 63, skill_lightningMax = 1202, }, - [30] = { skill_manaCostBase = 31, skill_lightningMin = 70, skill_lightningMax = 1334, }, - } + [1] = { 6, 1, 3, }, + [2] = { 7, 1, 4, }, + [3] = { 8, 1, 5, }, + [4] = { 9, 1, 7, }, + [5] = { 10, 1, 10, }, + [6] = { 11, 1, 16, }, + [7] = { 12, 1, 21, }, + [8] = { 13, 1, 28, }, + [9] = { 14, 2, 38, }, + [10] = { 16, 3, 49, }, + [11] = { 18, 3, 64, }, + [12] = { 19, 4, 82, }, + [13] = { 20, 6, 105, }, + [14] = { 21, 7, 133, }, + [15] = { 22, 9, 168, }, + [16] = { 23, 11, 212, }, + [17] = { 24, 14, 265, }, + [18] = { 25, 17, 332, }, + [19] = { 26, 21, 392, }, + [20] = { 26, 24, 461, }, + [21] = { 27, 27, 514, }, + [22] = { 27, 30, 573, }, + [23] = { 28, 34, 638, }, + [24] = { 28, 37, 710, }, + [25] = { 29, 42, 790, }, + [26] = { 29, 46, 878, }, + [27] = { 30, 51, 975, }, + [28] = { 30, 57, 1083, }, + [29] = { 31, 63, 1202, }, + [30] = { 31, 70, 1334, }, + }, } gems["Lightning Trap"] = { - intelligence = true, - spell = true, - trap = true, projectile = true, + trap = true, + intelligence = true, + active_skill = true, + spell = true, + duration = true, lightning = true, - hit = true, - base = { - skill_castTime = 1, - skill_damageEffectiveness = 0.9, - skill_critChanceBase = 5, - skill_trapCooldown = 2, - projectileCount = 8, + color = 3, + baseFlags = { + spell = true, + trap = true, + projectile = true, + lightning = true, }, - quality = { - trapThrowingSpeedInc = 0.5, + skillTypes = { [2] = true, [10] = true, [3] = true, [37] = true, [19] = true, [12] = true, [35] = true, }, + baseMods = { + skill("castTime", 1), + skill("damageEffectiveness", 0.9), + skill("critChance", 5), + --"base_trap_duration" = 16000 + mod("ProjectileCount", "BASE", 8), --"number_of_additional_projectiles" = 8 + --"projectiles_nova" = ? + --"is_trap" = ? + --"base_skill_is_trapped" = ? + --"base_is_projectile" = ? + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + skill("trapCooldown", 2), + }, + qualityMods = { + mod("TrapThrowingSpeed", "INC", 0.5), --"trap_throwing_speed_+%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("LightningMin", nil), --"spell_minimum_base_lightning_damage" + [3] = skill("LightningMax", nil), --"spell_maximum_base_lightning_damage" }, levels = { - [1] = { skill_manaCostBase = 8, skill_lightningMin = 3, skill_lightningMax = 62, }, - [2] = { skill_manaCostBase = 9, skill_lightningMin = 4, skill_lightningMax = 77, }, - [3] = { skill_manaCostBase = 10, skill_lightningMin = 5, skill_lightningMax = 98, }, - [4] = { skill_manaCostBase = 10, skill_lightningMin = 7, skill_lightningMax = 124, }, - [5] = { skill_manaCostBase = 11, skill_lightningMin = 8, skill_lightningMax = 153, }, - [6] = { skill_manaCostBase = 12, skill_lightningMin = 10, skill_lightningMax = 188, }, - [7] = { skill_manaCostBase = 13, skill_lightningMin = 12, skill_lightningMax = 228, }, - [8] = { skill_manaCostBase = 14, skill_lightningMin = 14, skill_lightningMax = 263, }, - [9] = { skill_manaCostBase = 14, skill_lightningMin = 16, skill_lightningMax = 301, }, - [10] = { skill_manaCostBase = 16, skill_lightningMin = 18, skill_lightningMax = 344, }, - [11] = { skill_manaCostBase = 17, skill_lightningMin = 21, skill_lightningMax = 391, }, - [12] = { skill_manaCostBase = 18, skill_lightningMin = 23, skill_lightningMax = 444, }, - [13] = { skill_manaCostBase = 19, skill_lightningMin = 26, skill_lightningMax = 503, }, - [14] = { skill_manaCostBase = 20, skill_lightningMin = 30, skill_lightningMax = 568, }, - [15] = { skill_manaCostBase = 21, skill_lightningMin = 34, skill_lightningMax = 640, }, - [16] = { skill_manaCostBase = 22, skill_lightningMin = 38, skill_lightningMax = 720, }, - [17] = { skill_manaCostBase = 22, skill_lightningMin = 41, skill_lightningMax = 779, }, - [18] = { skill_manaCostBase = 23, skill_lightningMin = 44, skill_lightningMax = 841, }, - [19] = { skill_manaCostBase = 24, skill_lightningMin = 48, skill_lightningMax = 907, }, - [20] = { skill_manaCostBase = 24, skill_lightningMin = 52, skill_lightningMax = 979, }, - [21] = { skill_manaCostBase = 25, skill_lightningMin = 56, skill_lightningMax = 1055, }, - [22] = { skill_manaCostBase = 26, skill_lightningMin = 60, skill_lightningMax = 1136, }, - [23] = { skill_manaCostBase = 26, skill_lightningMin = 64, skill_lightningMax = 1223, }, - [24] = { skill_manaCostBase = 27, skill_lightningMin = 69, skill_lightningMax = 1316, }, - [25] = { skill_manaCostBase = 27, skill_lightningMin = 74, skill_lightningMax = 1415, }, - [26] = { skill_manaCostBase = 28, skill_lightningMin = 80, skill_lightningMax = 1521, }, - [27] = { skill_manaCostBase = 29, skill_lightningMin = 86, skill_lightningMax = 1634, }, - [28] = { skill_manaCostBase = 30, skill_lightningMin = 92, skill_lightningMax = 1755, }, - [29] = { skill_manaCostBase = 30, skill_lightningMin = 99, skill_lightningMax = 1884, }, - [30] = { skill_manaCostBase = 30, skill_lightningMin = 106, skill_lightningMax = 2021, }, - } + [1] = { 8, 3, 62, }, + [2] = { 9, 4, 77, }, + [3] = { 10, 5, 98, }, + [4] = { 10, 7, 124, }, + [5] = { 11, 8, 153, }, + [6] = { 12, 10, 188, }, + [7] = { 13, 12, 228, }, + [8] = { 14, 14, 263, }, + [9] = { 14, 16, 301, }, + [10] = { 16, 18, 344, }, + [11] = { 17, 21, 391, }, + [12] = { 18, 23, 444, }, + [13] = { 19, 26, 503, }, + [14] = { 20, 30, 568, }, + [15] = { 21, 34, 640, }, + [16] = { 22, 38, 720, }, + [17] = { 22, 41, 779, }, + [18] = { 23, 44, 841, }, + [19] = { 24, 48, 907, }, + [20] = { 24, 52, 979, }, + [21] = { 25, 56, 1055, }, + [22] = { 26, 60, 1136, }, + [23] = { 26, 64, 1223, }, + [24] = { 27, 69, 1316, }, + [25] = { 27, 74, 1415, }, + [26] = { 28, 80, 1521, }, + [27] = { 29, 86, 1634, }, + [28] = { 30, 92, 1755, }, + [29] = { 30, 99, 1884, }, + [30] = { 30, 106, 2021, }, + }, +} +gems["Vaal Lightning Trap"] = { + projectile = true, + trap = true, + intelligence = true, + active_skill = true, + vaal = true, + spell = true, + duration = true, + lightning = true, + color = 3, + baseFlags = { + spell = true, + trap = true, + projectile = true, + duration = true, + lightning = true, + vaal = true, + }, + skillTypes = { [2] = true, [10] = true, [3] = true, [37] = true, [19] = true, [12] = true, [43] = true, [35] = true, }, + baseMods = { + skill("castTime", 1), + skill("damageEffectiveness", 0.9), + skill("critChance", 5), + --"base_trap_duration" = 16000 + mod("ProjectileCount", "BASE", 8), --"number_of_additional_projectiles" = 8 + skill("duration", 4), --"base_skill_effect_duration" = 4000 + mod("PierceChance", "BASE", 100), --"pierce_%" = 100 + --"projectiles_nova" = ? + --"is_trap" = ? + --"base_skill_is_trapped" = ? + --"base_is_projectile" = ? + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + --"lightning_trap_projectiles_leave_shocking_ground" = ? + }, + qualityMods = { + mod("TrapThrowingSpeed", "INC", 0.5), --"trap_throwing_speed_+%" = 0.5 + }, + levelMods = { + [1] = skill("LightningMin", nil), --"spell_minimum_base_lightning_damage" + [2] = skill("LightningMax", nil), --"spell_maximum_base_lightning_damage" + }, + levels = { + [1] = { 3, 62, }, + [2] = { 4, 77, }, + [3] = { 5, 98, }, + [4] = { 7, 124, }, + [5] = { 8, 153, }, + [6] = { 10, 188, }, + [7] = { 12, 228, }, + [8] = { 14, 263, }, + [9] = { 16, 301, }, + [10] = { 18, 344, }, + [11] = { 21, 391, }, + [12] = { 23, 444, }, + [13] = { 26, 503, }, + [14] = { 30, 568, }, + [15] = { 34, 640, }, + [16] = { 38, 720, }, + [17] = { 41, 779, }, + [18] = { 44, 841, }, + [19] = { 48, 907, }, + [20] = { 52, 979, }, + [21] = { 56, 1055, }, + [22] = { 60, 1136, }, + [23] = { 64, 1223, }, + [24] = { 69, 1316, }, + [25] = { 74, 1415, }, + [26] = { 80, 1521, }, + [27] = { 86, 1634, }, + [28] = { 92, 1755, }, + [29] = { 99, 1884, }, + [30] = { 106, 2021, }, + }, } gems["Lightning Warp"] = { intelligence = true, + active_skill = true, spell = true, - aoe = true, - lightning = true, - movement = true, + area = true, duration = true, - hit = true, - showAverage = true, - base = { - skill_castTime = 1, - skill_damageEffectiveness = 0.6, - skill_critChanceBase = 5, + movement = true, + lightning = true, + color = 3, + baseFlags = { + spell = true, + area = true, + duration = true, + movement = true, + lightning = true, }, - quality = { - castSpeedInc = 1, + skillTypes = { [2] = true, [10] = true, [11] = true, [12] = true, [17] = true, [18] = true, [19] = true, [36] = true, [38] = true, [45] = true, [35] = true, }, + baseMods = { + skill("castTime", 1), + skill("damageEffectiveness", 0.6), + skill("critChance", 5), + --"is_area_damage" = 1 + --"skill_override_pvp_scaling_time_ms" = 1000 + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + }, + qualityMods = { + mod("Speed", "INC", 1, ModFlag.Spell), --"base_cast_speed_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("LightningMin", nil), --"spell_minimum_base_lightning_damage" + [3] = skill("LightningMax", nil), --"spell_maximum_base_lightning_damage" + [4] = mod("Duration", "INC", nil), --"skill_effect_duration_+%" }, levels = { - [1] = { skill_manaCostBase = 15, skill_lightningMin = 1, skill_lightningMax = 19, durationInc = -0, }, - [2] = { skill_manaCostBase = 16, skill_lightningMin = 1, skill_lightningMax = 24, durationInc = -2, }, - [3] = { skill_manaCostBase = 17, skill_lightningMin = 2, skill_lightningMax = 33, durationInc = -4, }, - [4] = { skill_manaCostBase = 18, skill_lightningMin = 2, skill_lightningMax = 44, durationInc = -6, }, - [5] = { skill_manaCostBase = 18, skill_lightningMin = 3, skill_lightningMax = 58, durationInc = -8, }, - [6] = { skill_manaCostBase = 20, skill_lightningMin = 4, skill_lightningMax = 75, durationInc = -10, }, - [7] = { skill_manaCostBase = 21, skill_lightningMin = 5, skill_lightningMax = 96, durationInc = -12, }, - [8] = { skill_manaCostBase = 22, skill_lightningMin = 6, skill_lightningMax = 115, durationInc = -14, }, - [9] = { skill_manaCostBase = 23, skill_lightningMin = 7, skill_lightningMax = 137, durationInc = -16, }, - [10] = { skill_manaCostBase = 24, skill_lightningMin = 9, skill_lightningMax = 162, durationInc = -18, }, - [11] = { skill_manaCostBase = 26, skill_lightningMin = 10, skill_lightningMax = 192, durationInc = -20, }, - [12] = { skill_manaCostBase = 26, skill_lightningMin = 12, skill_lightningMax = 226, durationInc = -22, }, - [13] = { skill_manaCostBase = 27, skill_lightningMin = 14, skill_lightningMax = 266, durationInc = -24, }, - [14] = { skill_manaCostBase = 28, skill_lightningMin = 16, skill_lightningMax = 312, durationInc = -26, }, - [15] = { skill_manaCostBase = 29, skill_lightningMin = 19, skill_lightningMax = 365, durationInc = -28, }, - [16] = { skill_manaCostBase = 30, skill_lightningMin = 22, skill_lightningMax = 426, durationInc = -30, }, - [17] = { skill_manaCostBase = 30, skill_lightningMin = 26, skill_lightningMax = 497, durationInc = -32, }, - [18] = { skill_manaCostBase = 31, skill_lightningMin = 30, skill_lightningMax = 579, durationInc = -34, }, - [19] = { skill_manaCostBase = 32, skill_lightningMin = 34, skill_lightningMax = 640, durationInc = -36, }, - [20] = { skill_manaCostBase = 33, skill_lightningMin = 37, skill_lightningMax = 707, durationInc = -38, }, - [21] = { skill_manaCostBase = 34, skill_lightningMin = 41, skill_lightningMax = 780, durationInc = -40, }, - [22] = { skill_manaCostBase = 34, skill_lightningMin = 45, skill_lightningMax = 861, durationInc = -42, }, - [23] = { skill_manaCostBase = 34, skill_lightningMin = 50, skill_lightningMax = 949, durationInc = -44, }, - [24] = { skill_manaCostBase = 34, skill_lightningMin = 55, skill_lightningMax = 1046, durationInc = -46, }, - [25] = { skill_manaCostBase = 35, skill_lightningMin = 61, skill_lightningMax = 1152, durationInc = -48, }, - [26] = { skill_manaCostBase = 35, skill_lightningMin = 67, skill_lightningMax = 1269, durationInc = -50, }, - [27] = { skill_manaCostBase = 36, skill_lightningMin = 73, skill_lightningMax = 1396, durationInc = -52, }, - [28] = { skill_manaCostBase = 37, skill_lightningMin = 81, skill_lightningMax = 1536, durationInc = -54, }, - [29] = { skill_manaCostBase = 37, skill_lightningMin = 89, skill_lightningMax = 1689, durationInc = -56, }, - [30] = { skill_manaCostBase = 37, skill_lightningMin = 98, skill_lightningMax = 1856, durationInc = -58, }, - } + [1] = { 15, 1, 19, 0, }, + [2] = { 16, 1, 24, -2, }, + [3] = { 17, 2, 33, -4, }, + [4] = { 18, 2, 44, -6, }, + [5] = { 18, 3, 58, -8, }, + [6] = { 20, 4, 75, -10, }, + [7] = { 21, 5, 96, -12, }, + [8] = { 22, 6, 115, -14, }, + [9] = { 23, 7, 137, -16, }, + [10] = { 24, 9, 162, -18, }, + [11] = { 26, 10, 192, -20, }, + [12] = { 26, 12, 226, -22, }, + [13] = { 27, 14, 266, -24, }, + [14] = { 28, 16, 312, -26, }, + [15] = { 29, 19, 365, -28, }, + [16] = { 30, 22, 426, -30, }, + [17] = { 30, 26, 497, -32, }, + [18] = { 31, 30, 579, -34, }, + [19] = { 32, 34, 640, -36, }, + [20] = { 33, 37, 707, -38, }, + [21] = { 34, 41, 780, -40, }, + [22] = { 34, 45, 861, -42, }, + [23] = { 34, 50, 949, -44, }, + [24] = { 34, 55, 1046, -46, }, + [25] = { 35, 61, 1152, -48, }, + [26] = { 35, 67, 1269, -50, }, + [27] = { 36, 73, 1396, -52, }, + [28] = { 37, 81, 1536, -54, }, + [29] = { 37, 89, 1689, -56, }, + [30] = { 37, 98, 1856, -58, }, + }, +} +gems["Vaal Lightning Warp"] = { + intelligence = true, + active_skill = true, + vaal = true, + spell = true, + area = true, + duration = true, + lightning = true, + color = 3, + baseFlags = { + spell = true, + area = true, + duration = true, + lightning = true, + vaal = true, + }, + skillTypes = { [2] = true, [10] = true, [11] = true, [12] = true, [17] = true, [18] = true, [19] = true, [43] = true, [35] = true, }, + baseMods = { + skill("castTime", 1), + skill("damageEffectiveness", 0.5), + skill("critChance", 5), + --"is_area_damage" = 1 + --"skill_override_pvp_scaling_time_ms" = 1000 + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + }, + qualityMods = { + mod("Speed", "INC", 1, ModFlag.Spell), --"base_cast_speed_+%" = 1 + }, + levelMods = { + [1] = skill("LightningMin", nil), --"spell_minimum_base_lightning_damage" + [2] = skill("LightningMax", nil), --"spell_maximum_base_lightning_damage" + [3] = mod("Duration", "INC", nil), --"skill_effect_duration_+%" + }, + levels = { + [1] = { 1, 18, 0, }, + [2] = { 1, 24, -2, }, + [3] = { 2, 32, -4, }, + [4] = { 2, 42, -6, }, + [5] = { 3, 54, -8, }, + [6] = { 4, 70, -10, }, + [7] = { 5, 88, -12, }, + [8] = { 5, 104, -14, }, + [9] = { 6, 123, -16, }, + [10] = { 8, 145, -18, }, + [11] = { 9, 170, -20, }, + [12] = { 10, 199, -22, }, + [13] = { 12, 232, -24, }, + [14] = { 14, 270, -26, }, + [15] = { 17, 314, -28, }, + [16] = { 19, 364, -30, }, + [17] = { 22, 420, -32, }, + [18] = { 26, 485, -34, }, + [19] = { 28, 534, -36, }, + [20] = { 31, 586, -38, }, + [21] = { 34, 644, -40, }, + [22] = { 37, 707, -42, }, + [23] = { 41, 775, -44, }, + [24] = { 45, 850, -46, }, + [25] = { 49, 931, -48, }, + [26] = { 54, 1019, -50, }, + [27] = { 59, 1116, -52, }, + [28] = { 64, 1221, -54, }, + [29] = { 70, 1335, -56, }, + [30] = { 77, 1459, -58, }, + }, } gems["Magma Orb"] = { - intelligence = true, - spell = true, projectile = true, - chaining = true, - aoe = true, + intelligence = true, + active_skill = true, + spell = true, + area = true, fire = true, - hit = true, - base = { - skill_castTime = 0.7, - skill_damageEffectiveness = 1.25, - skill_critChanceBase = 5, + chaining = true, + color = 3, + baseFlags = { + spell = true, + projectile = true, + area = true, + chaining = true, + fire = true, }, - quality = { - damageInc = 1, + skillTypes = { [2] = true, [10] = true, [11] = true, [17] = true, [19] = true, [18] = true, [36] = true, [33] = true, [3] = true, [26] = true, [23] = true, }, + baseMods = { + skill("castTime", 0.7), + skill("damageEffectiveness", 1.25), + skill("critChance", 5), + --"is_area_damage" = ? + --"base_is_projectile" = ? + }, + qualityMods = { + mod("Damage", "INC", 1, 0, 0, nil), --"damage_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("FireMin", nil), --"spell_minimum_base_fire_damage" + [3] = skill("FireMax", nil), --"spell_maximum_base_fire_damage" + [4] = mod("ChainCount", "BASE", nil), --"number_of_additional_projectiles_in_chain" }, levels = { - [1] = { skill_manaCostBase = 5, skill_fireMin = 6, skill_fireMax = 9, chainCount = 1, }, - [2] = { skill_manaCostBase = 6, skill_fireMin = 7, skill_fireMax = 10, chainCount = 1, }, - [3] = { skill_manaCostBase = 6, skill_fireMin = 8, skill_fireMax = 12, chainCount = 1, }, - [4] = { skill_manaCostBase = 7, skill_fireMin = 11, skill_fireMax = 17, chainCount = 1, }, - [5] = { skill_manaCostBase = 7, skill_fireMin = 16, skill_fireMax = 24, chainCount = 1, }, - [6] = { skill_manaCostBase = 8, skill_fireMin = 25, skill_fireMax = 37, chainCount = 1, }, - [7] = { skill_manaCostBase = 9, skill_fireMin = 33, skill_fireMax = 50, chainCount = 1, }, - [8] = { skill_manaCostBase = 10, skill_fireMin = 44, skill_fireMax = 66, chainCount = 1, }, - [9] = { skill_manaCostBase = 11, skill_fireMin = 58, skill_fireMax = 87, chainCount = 1, }, - [10] = { skill_manaCostBase = 12, skill_fireMin = 75, skill_fireMax = 112, chainCount = 2, }, - [11] = { skill_manaCostBase = 13, skill_fireMin = 96, skill_fireMax = 144, chainCount = 2, }, - [12] = { skill_manaCostBase = 14, skill_fireMin = 122, skill_fireMax = 183, chainCount = 2, }, - [13] = { skill_manaCostBase = 15, skill_fireMin = 154, skill_fireMax = 232, chainCount = 2, }, - [14] = { skill_manaCostBase = 16, skill_fireMin = 194, skill_fireMax = 291, chainCount = 2, }, - [15] = { skill_manaCostBase = 18, skill_fireMin = 243, skill_fireMax = 365, chainCount = 2, }, - [16] = { skill_manaCostBase = 19, skill_fireMin = 303, skill_fireMax = 454, chainCount = 2, }, - [17] = { skill_manaCostBase = 20, skill_fireMin = 376, skill_fireMax = 564, chainCount = 2, }, - [18] = { skill_manaCostBase = 21, skill_fireMin = 466, skill_fireMax = 698, chainCount = 2, }, - [19] = { skill_manaCostBase = 21, skill_fireMin = 545, skill_fireMax = 818, chainCount = 2, }, - [20] = { skill_manaCostBase = 22, skill_fireMin = 637, skill_fireMax = 956, chainCount = 2, }, - [21] = { skill_manaCostBase = 23, skill_fireMin = 707, skill_fireMax = 1060, chainCount = 3, }, - [22] = { skill_manaCostBase = 23, skill_fireMin = 784, skill_fireMax = 1175, chainCount = 3, }, - [23] = { skill_manaCostBase = 24, skill_fireMin = 868, skill_fireMax = 1302, chainCount = 3, }, - [24] = { skill_manaCostBase = 24, skill_fireMin = 961, skill_fireMax = 1442, chainCount = 3, }, - [25] = { skill_manaCostBase = 25, skill_fireMin = 1063, skill_fireMax = 1595, chainCount = 3, }, - [26] = { skill_manaCostBase = 26, skill_fireMin = 1176, skill_fireMax = 1764, chainCount = 3, }, - [27] = { skill_manaCostBase = 26, skill_fireMin = 1300, skill_fireMax = 1950, chainCount = 3, }, - [28] = { skill_manaCostBase = 27, skill_fireMin = 1437, skill_fireMax = 2155, chainCount = 3, }, - [29] = { skill_manaCostBase = 27, skill_fireMin = 1587, skill_fireMax = 2380, chainCount = 3, }, - [30] = { skill_manaCostBase = 28, skill_fireMin = 1752, skill_fireMax = 2628, chainCount = 3, }, - } + [1] = { 5, 6, 9, 1, }, + [2] = { 6, 7, 10, 1, }, + [3] = { 6, 8, 12, 1, }, + [4] = { 7, 11, 17, 1, }, + [5] = { 7, 16, 24, 1, }, + [6] = { 8, 25, 37, 1, }, + [7] = { 9, 33, 50, 1, }, + [8] = { 10, 44, 66, 1, }, + [9] = { 11, 58, 87, 1, }, + [10] = { 12, 75, 112, 2, }, + [11] = { 13, 96, 144, 2, }, + [12] = { 14, 122, 183, 2, }, + [13] = { 15, 154, 232, 2, }, + [14] = { 16, 194, 291, 2, }, + [15] = { 18, 243, 365, 2, }, + [16] = { 19, 303, 454, 2, }, + [17] = { 20, 376, 564, 2, }, + [18] = { 21, 466, 698, 2, }, + [19] = { 21, 545, 818, 2, }, + [20] = { 22, 637, 956, 2, }, + [21] = { 23, 707, 1060, 3, }, + [22] = { 23, 784, 1175, 3, }, + [23] = { 24, 868, 1302, 3, }, + [24] = { 24, 961, 1442, 3, }, + [25] = { 25, 1063, 1595, 3, }, + [26] = { 26, 1176, 1764, 3, }, + [27] = { 26, 1300, 1950, 3, }, + [28] = { 27, 1437, 2155, 3, }, + [29] = { 27, 1587, 2380, 3, }, + [30] = { 28, 1752, 2628, 3, }, + }, } gems["Orb of Storms"] = { - intelligence = true, - spell = true, - aoe = true, - chaining = true, - duration = true, lightning = true, - hit = true, - showAverage = true, - base = { - skill_castTime = 0.5, - skill_damageEffectiveness = 0.2, - skill_critChanceBase = 5, - skill_durationBase = 10, + intelligence = true, + active_skill = true, + spell = true, + duration = true, + area = true, + chaining = true, + color = 3, + baseFlags = { + spell = true, + area = true, + chaining = true, + duration = true, + lightning = true, }, - quality = { - lightningInc = 1, + skillTypes = { [2] = true, [10] = true, [35] = true, [12] = true, [11] = true, [23] = true, }, + baseMods = { + skill("castTime", 0.5), + skill("damageEffectiveness", 0.2), + skill("critChance", 5), + skill("duration", 10), --"base_skill_effect_duration" = 10000 + mod("ChainCount", "BASE", 0), --"number_of_additional_projectiles_in_chain" = 0 + --"storm_cloud_charged_damage_+%_final" = 0 + --"skill_can_add_multiple_charges_per_action" = ? + }, + qualityMods = { + mod("LightningDamage", "INC", 1), --"lightning_damage_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("LightningMin", nil), --"spell_minimum_base_lightning_damage" + [3] = skill("LightningMax", nil), --"spell_maximum_base_lightning_damage" + --[4] = "projectile_number_to_split" }, levels = { - [1] = { skill_manaCostBase = 11, skill_lightningMin = 1, skill_lightningMax = 3, }, - [2] = { skill_manaCostBase = 12, skill_lightningMin = 1, skill_lightningMax = 3, }, - [3] = { skill_manaCostBase = 13, skill_lightningMin = 1, skill_lightningMax = 4, }, - [4] = { skill_manaCostBase = 14, skill_lightningMin = 2, skill_lightningMax = 6, }, - [5] = { skill_manaCostBase = 15, skill_lightningMin = 3, skill_lightningMax = 8, }, - [6] = { skill_manaCostBase = 16, skill_lightningMin = 3, skill_lightningMax = 10, }, - [7] = { skill_manaCostBase = 17, skill_lightningMin = 4, skill_lightningMax = 13, }, - [8] = { skill_manaCostBase = 18, skill_lightningMin = 6, skill_lightningMax = 17, }, - [9] = { skill_manaCostBase = 19, skill_lightningMin = 7, skill_lightningMax = 22, }, - [10] = { skill_manaCostBase = 20, skill_lightningMin = 10, skill_lightningMax = 29, }, - [11] = { skill_manaCostBase = 21, skill_lightningMin = 12, skill_lightningMax = 36, }, - [12] = { skill_manaCostBase = 22, skill_lightningMin = 15, skill_lightningMax = 45, }, - [13] = { skill_manaCostBase = 23, skill_lightningMin = 19, skill_lightningMax = 56, }, - [14] = { skill_manaCostBase = 24, skill_lightningMin = 23, skill_lightningMax = 70, }, - [15] = { skill_manaCostBase = 25, skill_lightningMin = 27, skill_lightningMax = 82, }, - [16] = { skill_manaCostBase = 26, skill_lightningMin = 32, skill_lightningMax = 96, }, - [17] = { skill_manaCostBase = 26, skill_lightningMin = 37, skill_lightningMax = 112, }, - [18] = { skill_manaCostBase = 27, skill_lightningMin = 44, skill_lightningMax = 131, }, - [19] = { skill_manaCostBase = 27, skill_lightningMin = 51, skill_lightningMax = 152, }, - [20] = { skill_manaCostBase = 28, skill_lightningMin = 59, skill_lightningMax = 177, }, - [21] = { skill_manaCostBase = 28, skill_lightningMin = 65, skill_lightningMax = 195, }, - [22] = { skill_manaCostBase = 29, skill_lightningMin = 72, skill_lightningMax = 215, }, - [23] = { skill_manaCostBase = 29, skill_lightningMin = 79, skill_lightningMax = 238, }, - [24] = { skill_manaCostBase = 30, skill_lightningMin = 87, skill_lightningMax = 262, }, - [25] = { skill_manaCostBase = 30, skill_lightningMin = 96, skill_lightningMax = 289, }, - [26] = { skill_manaCostBase = 30, skill_lightningMin = 106, skill_lightningMax = 318, }, - [27] = { skill_manaCostBase = 30, skill_lightningMin = 117, skill_lightningMax = 350, }, - [28] = { skill_manaCostBase = 31, skill_lightningMin = 128, skill_lightningMax = 385, }, - [29] = { skill_manaCostBase = 31, skill_lightningMin = 141, skill_lightningMax = 424, }, - [30] = { skill_manaCostBase = 32, skill_lightningMin = 155, skill_lightningMax = 466, }, - } + [1] = { 11, 1, 3, 2, }, + [2] = { 12, 1, 3, 2, }, + [3] = { 13, 1, 4, 2, }, + [4] = { 14, 2, 6, 2, }, + [5] = { 15, 3, 8, 2, }, + [6] = { 16, 3, 10, 2, }, + [7] = { 17, 4, 13, 2, }, + [8] = { 18, 6, 17, 2, }, + [9] = { 19, 7, 22, 3, }, + [10] = { 20, 10, 29, 3, }, + [11] = { 21, 12, 36, 3, }, + [12] = { 22, 15, 45, 3, }, + [13] = { 23, 19, 56, 3, }, + [14] = { 24, 23, 70, 3, }, + [15] = { 25, 27, 82, 3, }, + [16] = { 26, 32, 96, 3, }, + [17] = { 26, 37, 112, 4, }, + [18] = { 27, 44, 131, 4, }, + [19] = { 27, 51, 152, 4, }, + [20] = { 28, 59, 177, 4, }, + [21] = { 28, 65, 195, 4, }, + [22] = { 29, 72, 215, 4, }, + [23] = { 29, 79, 238, 4, }, + [24] = { 30, 87, 262, 4, }, + [25] = { 30, 96, 289, 5, }, + [26] = { 30, 106, 318, 5, }, + [27] = { 30, 117, 350, 5, }, + [28] = { 31, 128, 385, 5, }, + [29] = { 31, 141, 424, 5, }, + [30] = { 32, 155, 466, 5, }, + }, } gems["Power Siphon"] = { intelligence = true, + active_skill = true, attack = true, projectile = true, - hit = true, - base = { + color = 3, + baseFlags = { + attack = true, + projectile = true, }, - quality = { - damageInc = 1, + skillTypes = { [1] = true, [48] = true, [6] = true, [3] = true, [22] = true, [17] = true, [19] = true, }, + baseMods = { + skill("castTime", 1), + --"kill_enemy_on_hit_if_under_10%_life" = ? + --"skill_can_fire_wand_projectiles" = ? + }, + qualityMods = { + mod("Damage", "INC", 1, 0, 0, nil), --"damage_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { skill_manaCostBase = 13, attack_damageMore = 1.3, }, - [2] = { skill_manaCostBase = 13, attack_damageMore = 1.316, }, - [3] = { skill_manaCostBase = 13, attack_damageMore = 1.332, }, - [4] = { skill_manaCostBase = 13, attack_damageMore = 1.348, }, - [5] = { skill_manaCostBase = 13, attack_damageMore = 1.364, }, - [6] = { skill_manaCostBase = 13, attack_damageMore = 1.38, }, - [7] = { skill_manaCostBase = 13, attack_damageMore = 1.396, }, - [8] = { skill_manaCostBase = 14, attack_damageMore = 1.412, }, - [9] = { skill_manaCostBase = 14, attack_damageMore = 1.428, }, - [10] = { skill_manaCostBase = 14, attack_damageMore = 1.444, }, - [11] = { skill_manaCostBase = 14, attack_damageMore = 1.46, }, - [12] = { skill_manaCostBase = 14, attack_damageMore = 1.476, }, - [13] = { skill_manaCostBase = 14, attack_damageMore = 1.492, }, - [14] = { skill_manaCostBase = 14, attack_damageMore = 1.508, }, - [15] = { skill_manaCostBase = 14, attack_damageMore = 1.524, }, - [16] = { skill_manaCostBase = 14, attack_damageMore = 1.54, }, - [17] = { skill_manaCostBase = 14, attack_damageMore = 1.556, }, - [18] = { skill_manaCostBase = 14, attack_damageMore = 1.572, }, - [19] = { skill_manaCostBase = 15, attack_damageMore = 1.588, }, - [20] = { skill_manaCostBase = 15, attack_damageMore = 1.604, }, - [21] = { skill_manaCostBase = 15, attack_damageMore = 1.62, }, - [22] = { skill_manaCostBase = 15, attack_damageMore = 1.636, }, - [23] = { skill_manaCostBase = 15, attack_damageMore = 1.652, }, - [24] = { skill_manaCostBase = 15, attack_damageMore = 1.668, }, - [25] = { skill_manaCostBase = 15, attack_damageMore = 1.684, }, - [26] = { skill_manaCostBase = 16, attack_damageMore = 1.7, }, - [27] = { skill_manaCostBase = 16, attack_damageMore = 1.716, }, - [28] = { skill_manaCostBase = 16, attack_damageMore = 1.732, }, - [29] = { skill_manaCostBase = 16, attack_damageMore = 1.748, }, - [30] = { skill_manaCostBase = 16, attack_damageMore = 1.764, }, - } + [1] = { 13, 30, }, + [2] = { 13, 31.6, }, + [3] = { 13, 33.2, }, + [4] = { 13, 34.8, }, + [5] = { 13, 36.4, }, + [6] = { 13, 38, }, + [7] = { 13, 39.6, }, + [8] = { 14, 41.2, }, + [9] = { 14, 42.8, }, + [10] = { 14, 44.4, }, + [11] = { 14, 46, }, + [12] = { 14, 47.6, }, + [13] = { 14, 49.2, }, + [14] = { 14, 50.8, }, + [15] = { 14, 52.4, }, + [16] = { 14, 54, }, + [17] = { 14, 55.6, }, + [18] = { 14, 57.2, }, + [19] = { 15, 58.8, }, + [20] = { 15, 60.4, }, + [21] = { 15, 62, }, + [22] = { 15, 63.6, }, + [23] = { 15, 65.2, }, + [24] = { 15, 66.8, }, + [25] = { 15, 68.4, }, + [26] = { 16, 70, }, + [27] = { 16, 71.6, }, + [28] = { 16, 73.2, }, + [29] = { 16, 74.8, }, + [30] = { 16, 76.4, }, + }, +} +gems["Vaal Power Siphon"] = { + intelligence = true, + active_skill = true, + vaal = true, + attack = true, + projectile = true, + color = 3, + baseFlags = { + attack = true, + projectile = true, + vaal = true, + }, + skillTypes = { [1] = true, [48] = true, [6] = true, [3] = true, [22] = true, [17] = true, [19] = true, [43] = true, }, + baseMods = { + skill("castTime", 1), + --"power_siphon_fire_at_all_targets" = ? + --"skill_can_add_multiple_charges_per_action" = ? + skill("cannotBeEvaded", true), --"global_always_hit" = ? + --"kill_enemy_on_hit_if_under_10%_life" = ? + --"skill_can_fire_wand_projectiles" = ? + }, + qualityMods = { + mod("Damage", "INC", 1, 0, 0, nil), --"damage_+%" = 1 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), + }, + levels = { + [1] = { 25, }, + [2] = { 26.6, }, + [3] = { 28.2, }, + [4] = { 29.8, }, + [5] = { 31.4, }, + [6] = { 33, }, + [7] = { 34.6, }, + [8] = { 36.2, }, + [9] = { 37.8, }, + [10] = { 39.4, }, + [11] = { 41, }, + [12] = { 42.6, }, + [13] = { 44.2, }, + [14] = { 45.8, }, + [15] = { 47.4, }, + [16] = { 49, }, + [17] = { 50.6, }, + [18] = { 52.2, }, + [19] = { 53.8, }, + [20] = { 55.4, }, + [21] = { 57, }, + [22] = { 58.6, }, + [23] = { 60.2, }, + [24] = { 61.8, }, + [25] = { 63.4, }, + [26] = { 65, }, + [27] = { 66.6, }, + [28] = { 68.2, }, + [29] = { 69.8, }, + [30] = { 71.4, }, + }, } gems["Purity of Elements"] = { - intelligence = true, aura = true, + intelligence = true, + active_skill = true, spell = true, - aoe = true, - base = { - skill_castTime = 1.2, - skill_manaReservedPercent = 35, + area = true, + color = 3, + baseFlags = { + spell = true, + aura = true, + area = true, }, - quality = { - aura_aoeRadiusInc = 1, + skillTypes = { [2] = true, [11] = true, [5] = true, [15] = true, [27] = true, [16] = true, [18] = true, [44] = true, }, + baseMods = { + skill("castTime", 1.2), + skill("manaCost", 35), + mod("FireResistMax", "BASE", 0, 0, 0, { type = "GlobalEffect", effectType = "Aura" }), --"base_maximum_fire_damage_resistance_%" = 0 + mod("ColdResistMax", "BASE", 0, 0, 0, { type = "GlobalEffect", effectType = "Aura" }), --"base_maximum_cold_damage_resistance_%" = 0 + mod("LightningResistMax", "BASE", 0, 0, 0, { type = "GlobalEffect", effectType = "Aura" }), --"base_maximum_lightning_damage_resistance_%" = 0 + --"base_deal_no_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 1), --"base_skill_area_of_effect_+%" = 1 + }, + levelMods = { + [1] = mod("ElementalResist", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Aura" }), --"base_resist_all_elements_%" + [2] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" }, levels = { - [1] = { aura_aoeRadiusInc = 0, AuraEffect_elementalResist = 12, }, - [2] = { aura_aoeRadiusInc = 3, AuraEffect_elementalResist = 13, }, - [3] = { aura_aoeRadiusInc = 6, AuraEffect_elementalResist = 14, }, - [4] = { aura_aoeRadiusInc = 9, AuraEffect_elementalResist = 15, }, - [5] = { aura_aoeRadiusInc = 12, AuraEffect_elementalResist = 15, }, - [6] = { aura_aoeRadiusInc = 15, AuraEffect_elementalResist = 16, }, - [7] = { aura_aoeRadiusInc = 18, AuraEffect_elementalResist = 17, }, - [8] = { aura_aoeRadiusInc = 21, AuraEffect_elementalResist = 18, }, - [9] = { aura_aoeRadiusInc = 23, AuraEffect_elementalResist = 19, }, - [10] = { aura_aoeRadiusInc = 25, AuraEffect_elementalResist = 20, }, - [11] = { aura_aoeRadiusInc = 27, AuraEffect_elementalResist = 20, }, - [12] = { aura_aoeRadiusInc = 29, AuraEffect_elementalResist = 21, }, - [13] = { aura_aoeRadiusInc = 31, AuraEffect_elementalResist = 22, }, - [14] = { aura_aoeRadiusInc = 33, AuraEffect_elementalResist = 23, }, - [15] = { aura_aoeRadiusInc = 35, AuraEffect_elementalResist = 24, }, - [16] = { aura_aoeRadiusInc = 36, AuraEffect_elementalResist = 25, }, - [17] = { aura_aoeRadiusInc = 37, AuraEffect_elementalResist = 25, }, - [18] = { aura_aoeRadiusInc = 38, AuraEffect_elementalResist = 26, }, - [19] = { aura_aoeRadiusInc = 39, AuraEffect_elementalResist = 27, }, - [20] = { aura_aoeRadiusInc = 40, AuraEffect_elementalResist = 27, }, - [21] = { aura_aoeRadiusInc = 41, AuraEffect_elementalResist = 28, }, - [22] = { aura_aoeRadiusInc = 42, AuraEffect_elementalResist = 29, }, - [23] = { aura_aoeRadiusInc = 43, AuraEffect_elementalResist = 29, }, - [24] = { aura_aoeRadiusInc = 44, AuraEffect_elementalResist = 30, }, - [25] = { aura_aoeRadiusInc = 45, AuraEffect_elementalResist = 31, }, - [26] = { aura_aoeRadiusInc = 46, AuraEffect_elementalResist = 31, }, - [27] = { aura_aoeRadiusInc = 47, AuraEffect_elementalResist = 32, }, - [28] = { aura_aoeRadiusInc = 48, AuraEffect_elementalResist = 33, }, - [29] = { aura_aoeRadiusInc = 49, AuraEffect_elementalResist = 33, }, - [30] = { aura_aoeRadiusInc = 50, AuraEffect_elementalResist = 34, }, - } + [1] = { 12, 0, }, + [2] = { 13, 3, }, + [3] = { 14, 6, }, + [4] = { 15, 9, }, + [5] = { 15, 12, }, + [6] = { 16, 15, }, + [7] = { 17, 18, }, + [8] = { 18, 21, }, + [9] = { 19, 23, }, + [10] = { 20, 25, }, + [11] = { 20, 27, }, + [12] = { 21, 29, }, + [13] = { 22, 31, }, + [14] = { 23, 33, }, + [15] = { 24, 35, }, + [16] = { 25, 36, }, + [17] = { 25, 37, }, + [18] = { 26, 38, }, + [19] = { 27, 39, }, + [20] = { 27, 40, }, + [21] = { 28, 41, }, + [22] = { 29, 42, }, + [23] = { 29, 43, }, + [24] = { 30, 44, }, + [25] = { 31, 45, }, + [26] = { 31, 46, }, + [27] = { 32, 47, }, + [28] = { 33, 48, }, + [29] = { 33, 49, }, + [30] = { 34, 50, }, + }, } gems["Purity of Lightning"] = { - intelligence = true, aura = true, + intelligence = true, + active_skill = true, spell = true, - aoe = true, + area = true, lightning = true, - base = { - skill_castTime = 1.2, - skill_manaReservedPercent = 35, + color = 3, + baseFlags = { + spell = true, + aura = true, + area = true, }, - quality = { - aura_aoeRadiusInc = 1, + skillTypes = { [2] = true, [11] = true, [5] = true, [15] = true, [27] = true, [16] = true, [18] = true, [44] = true, [35] = true, }, + baseMods = { + skill("castTime", 1.2), + skill("manaCost", 35), + --"base_deal_no_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 1), --"base_skill_area_of_effect_+%" = 1 + }, + levelMods = { + [1] = mod("LightningResist", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Aura" }), --"base_lightning_damage_resistance_%" + [2] = mod("LightningResistMax", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Aura" }), --"base_maximum_lightning_damage_resistance_%" + [3] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" }, levels = { - [1] = { aura_aoeRadiusInc = 0, AuraEffect_lightningResist = 22, AuraEffect_lightningResistMax = 0, }, - [2] = { aura_aoeRadiusInc = 3, AuraEffect_lightningResist = 23, AuraEffect_lightningResistMax = 0, }, - [3] = { aura_aoeRadiusInc = 6, AuraEffect_lightningResist = 24, AuraEffect_lightningResistMax = 0, }, - [4] = { aura_aoeRadiusInc = 9, AuraEffect_lightningResist = 25, AuraEffect_lightningResistMax = 0, }, - [5] = { aura_aoeRadiusInc = 12, AuraEffect_lightningResist = 26, AuraEffect_lightningResistMax = 1, }, - [6] = { aura_aoeRadiusInc = 15, AuraEffect_lightningResist = 27, AuraEffect_lightningResistMax = 1, }, - [7] = { aura_aoeRadiusInc = 18, AuraEffect_lightningResist = 28, AuraEffect_lightningResistMax = 1, }, - [8] = { aura_aoeRadiusInc = 21, AuraEffect_lightningResist = 29, AuraEffect_lightningResistMax = 1, }, - [9] = { aura_aoeRadiusInc = 23, AuraEffect_lightningResist = 30, AuraEffect_lightningResistMax = 1, }, - [10] = { aura_aoeRadiusInc = 25, AuraEffect_lightningResist = 31, AuraEffect_lightningResistMax = 1, }, - [11] = { aura_aoeRadiusInc = 27, AuraEffect_lightningResist = 32, AuraEffect_lightningResistMax = 2, }, - [12] = { aura_aoeRadiusInc = 29, AuraEffect_lightningResist = 33, AuraEffect_lightningResistMax = 2, }, - [13] = { aura_aoeRadiusInc = 31, AuraEffect_lightningResist = 34, AuraEffect_lightningResistMax = 2, }, - [14] = { aura_aoeRadiusInc = 33, AuraEffect_lightningResist = 35, AuraEffect_lightningResistMax = 2, }, - [15] = { aura_aoeRadiusInc = 35, AuraEffect_lightningResist = 36, AuraEffect_lightningResistMax = 2, }, - [16] = { aura_aoeRadiusInc = 36, AuraEffect_lightningResist = 37, AuraEffect_lightningResistMax = 2, }, - [17] = { aura_aoeRadiusInc = 37, AuraEffect_lightningResist = 38, AuraEffect_lightningResistMax = 3, }, - [18] = { aura_aoeRadiusInc = 38, AuraEffect_lightningResist = 39, AuraEffect_lightningResistMax = 3, }, - [19] = { aura_aoeRadiusInc = 39, AuraEffect_lightningResist = 40, AuraEffect_lightningResistMax = 3, }, - [20] = { aura_aoeRadiusInc = 40, AuraEffect_lightningResist = 41, AuraEffect_lightningResistMax = 4, }, - [21] = { aura_aoeRadiusInc = 41, AuraEffect_lightningResist = 42, AuraEffect_lightningResistMax = 4, }, - [22] = { aura_aoeRadiusInc = 42, AuraEffect_lightningResist = 43, AuraEffect_lightningResistMax = 4, }, - [23] = { aura_aoeRadiusInc = 43, AuraEffect_lightningResist = 44, AuraEffect_lightningResistMax = 5, }, - [24] = { aura_aoeRadiusInc = 44, AuraEffect_lightningResist = 45, AuraEffect_lightningResistMax = 5, }, - [25] = { aura_aoeRadiusInc = 45, AuraEffect_lightningResist = 46, AuraEffect_lightningResistMax = 5, }, - [26] = { aura_aoeRadiusInc = 46, AuraEffect_lightningResist = 47, AuraEffect_lightningResistMax = 5, }, - [27] = { aura_aoeRadiusInc = 47, AuraEffect_lightningResist = 48, AuraEffect_lightningResistMax = 5, }, - [28] = { aura_aoeRadiusInc = 48, AuraEffect_lightningResist = 49, AuraEffect_lightningResistMax = 5, }, - [29] = { aura_aoeRadiusInc = 49, AuraEffect_lightningResist = 50, AuraEffect_lightningResistMax = 5, }, - [30] = { aura_aoeRadiusInc = 50, AuraEffect_lightningResist = 51, AuraEffect_lightningResistMax = 5, }, - } + [1] = { 22, 0, 0, }, + [2] = { 23, 0, 3, }, + [3] = { 24, 0, 6, }, + [4] = { 25, 0, 9, }, + [5] = { 26, 1, 12, }, + [6] = { 27, 1, 15, }, + [7] = { 28, 1, 18, }, + [8] = { 29, 1, 21, }, + [9] = { 30, 1, 23, }, + [10] = { 31, 1, 25, }, + [11] = { 32, 2, 27, }, + [12] = { 33, 2, 29, }, + [13] = { 34, 2, 31, }, + [14] = { 35, 2, 33, }, + [15] = { 36, 2, 35, }, + [16] = { 37, 2, 36, }, + [17] = { 38, 3, 37, }, + [18] = { 39, 3, 38, }, + [19] = { 40, 3, 39, }, + [20] = { 41, 4, 40, }, + [21] = { 42, 4, 41, }, + [22] = { 43, 4, 42, }, + [23] = { 44, 5, 43, }, + [24] = { 45, 5, 44, }, + [25] = { 46, 5, 45, }, + [26] = { 47, 5, 46, }, + [27] = { 48, 5, 47, }, + [28] = { 49, 5, 48, }, + [29] = { 50, 5, 49, }, + [30] = { 51, 5, 50, }, + }, } gems["Raise Spectre"] = { intelligence = true, + active_skill = true, + spell = true, + minion = true, unsupported = true, } gems["Raise Zombie"] = { intelligence = true, + active_skill = true, + spell = true, + minion = true, unsupported = true, } gems["Righteous Fire"] = { intelligence = true, + active_skill = true, spell = true, - aoe = true, + area = true, fire = true, - damage = true, - setupFunc = function(mergeMod, output) - mergeMod("skill_fireDotBase", (output.total_life + output.total_energyShield) * 0.5) + setupFunc = function(env, output) + env.mainSkill.skillData.FireDot = (output.Life + output.EnergyShield) * 0.5 end, - base = { - skill_castTime = 1, + color = 3, + baseFlags = { + spell = true, + area = true, + fire = true, }, - quality = { - BuffEffect_spell_damageInc = 1, + skillTypes = { [2] = true, [5] = true, [11] = true, [18] = true, [29] = true, [36] = true, [40] = true, [33] = true, }, + baseMods = { + skill("castTime", 1), + --"base_righteous_fire_%_of_max_life_to_deal_to_nearby_per_minute" = 3000 + --"base_nonlethal_fire_damage_%_of_maximum_life_taken_per_minute" = 5400 + --"base_righteous_fire_%_of_max_energy_shield_to_deal_to_nearby_per_minute" = 3000 + --"base_nonlethal_fire_damage_%_of_maximum_energy_shield_taken_per_minute" = 4200 + }, + qualityMods = { + mod("Damage", "INC", 1, ModFlag.Spell, 0, { type = "GlobalEffect", effectType = "Buff" }), --"spell_damage_+%" = 1 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Spell, 0, { type = "GlobalEffect", effectType = "Buff" }), --"righteous_fire_spell_damage_+%_final" }, levels = { - [1] = { BuffEffect_spell_damageMore = 1.4, }, - [2] = { BuffEffect_spell_damageMore = 1.41, }, - [3] = { BuffEffect_spell_damageMore = 1.42, }, - [4] = { BuffEffect_spell_damageMore = 1.43, }, - [5] = { BuffEffect_spell_damageMore = 1.44, }, - [6] = { BuffEffect_spell_damageMore = 1.45, }, - [7] = { BuffEffect_spell_damageMore = 1.46, }, - [8] = { BuffEffect_spell_damageMore = 1.47, }, - [9] = { BuffEffect_spell_damageMore = 1.48, }, - [10] = { BuffEffect_spell_damageMore = 1.49, }, - [11] = { BuffEffect_spell_damageMore = 1.5, }, - [12] = { BuffEffect_spell_damageMore = 1.51, }, - [13] = { BuffEffect_spell_damageMore = 1.52, }, - [14] = { BuffEffect_spell_damageMore = 1.53, }, - [15] = { BuffEffect_spell_damageMore = 1.54, }, - [16] = { BuffEffect_spell_damageMore = 1.55, }, - [17] = { BuffEffect_spell_damageMore = 1.56, }, - [18] = { BuffEffect_spell_damageMore = 1.57, }, - [19] = { BuffEffect_spell_damageMore = 1.58, }, - [20] = { BuffEffect_spell_damageMore = 1.59, }, - [21] = { BuffEffect_spell_damageMore = 1.6, }, - [22] = { BuffEffect_spell_damageMore = 1.61, }, - [23] = { BuffEffect_spell_damageMore = 1.62, }, - [24] = { BuffEffect_spell_damageMore = 1.63, }, - [25] = { BuffEffect_spell_damageMore = 1.64, }, - [26] = { BuffEffect_spell_damageMore = 1.65, }, - [27] = { BuffEffect_spell_damageMore = 1.66, }, - [28] = { BuffEffect_spell_damageMore = 1.67, }, - [29] = { BuffEffect_spell_damageMore = 1.68, }, - [30] = { BuffEffect_spell_damageMore = 1.69, }, - } + [1] = { 40, }, + [2] = { 41, }, + [3] = { 42, }, + [4] = { 43, }, + [5] = { 44, }, + [6] = { 45, }, + [7] = { 46, }, + [8] = { 47, }, + [9] = { 48, }, + [10] = { 49, }, + [11] = { 50, }, + [12] = { 51, }, + [13] = { 52, }, + [14] = { 53, }, + [15] = { 54, }, + [16] = { 55, }, + [17] = { 56, }, + [18] = { 57, }, + [19] = { 58, }, + [20] = { 59, }, + [21] = { 60, }, + [22] = { 61, }, + [23] = { 62, }, + [24] = { 63, }, + [25] = { 64, }, + [26] = { 65, }, + [27] = { 66, }, + [28] = { 67, }, + [29] = { 68, }, + [30] = { 69, }, + }, +} +gems["Vaal Righteous Fire"] = { + intelligence = true, + active_skill = true, + vaal = true, + spell = true, + area = true, + fire = true, + setupFunc = function(env, output) + env.mainSkill.skillData.FireMin = output.EnergyShield + output.Life - 1 + env.mainSkill.skillData.FireMax = output.EnergyShield + output.Life - 1 + end, + color = 3, + baseFlags = { + spell = true, + area = true, + fire = true, + vaal = true, + }, + skillTypes = { [2] = true, [11] = true, [10] = true, [43] = true, [33] = true, }, + baseMods = { + skill("castTime", 1), + skill("critChance", 5), + --"damage_cannot_be_reflected" = ? + --"is_area_damage" = ? + }, + qualityMods = { + mod("Damage", "INC", 1, ModFlag.Spell, 0, nil), --"spell_damage_+%" = 1 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Hit), --"active_skill_damage_+%_final" + }, + levels = { + [1] = { 20, }, + [2] = { 21, }, + [3] = { 22, }, + [4] = { 23, }, + [5] = { 24, }, + [6] = { 25, }, + [7] = { 26, }, + [8] = { 27, }, + [9] = { 28, }, + [10] = { 29, }, + [11] = { 30, }, + [12] = { 31, }, + [13] = { 32, }, + [14] = { 33, }, + [15] = { 34, }, + [16] = { 35, }, + [17] = { 36, }, + [18] = { 37, }, + [19] = { 38, }, + [20] = { 39, }, + [21] = { 40, }, + [22] = { 41, }, + [23] = { 42, }, + [24] = { 43, }, + [25] = { 44, }, + [26] = { 45, }, + [27] = { 46, }, + [28] = { 47, }, + [29] = { 48, }, + [30] = { 49, }, + }, } gems["Shock Nova"] = { intelligence = true, + active_skill = true, spell = true, - aoe = true, + area = true, lightning = true, - hit = true, parts = { { name = "Ring", @@ -1998,450 +3351,748 @@ gems["Shock Nova"] = { name = "Nova", }, }, - base = { - skill_castTime = 0.75, - skill_damageEffectiveness = 0.6, - skill_critChanceBase = 6, - SkillPart1_spell_damageMore = 0.5, - shockChance = 20, + color = 3, + baseFlags = { + spell = true, + area = true, + lightning = true, }, - quality = { - shock_durationInc = 2, + skillTypes = { [2] = true, [10] = true, [11] = true, [17] = true, [18] = true, [19] = true, [26] = true, [36] = true, [45] = true, [35] = true, [43] = true, }, + baseMods = { + skill("castTime", 0.75), + skill("damageEffectiveness", 0.6), + skill("critChance", 6), + mod("Damage", "MORE", -50, 0, 0, { type = "SkillPart", skillPart = 1 }), --"newshocknova_first_ring_damage_+%_final" = -50 + mod("EnemyShockChance", "BASE", 20), --"base_chance_to_shock_%" = 20 + --"is_area_damage" = ? + }, + qualityMods = { + mod("EnemyShockDuration", "INC", 2), --"shock_duration_+%" = 2 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("LightningMin", nil), --"spell_minimum_base_lightning_damage" + [3] = skill("LightningMax", nil), --"spell_maximum_base_lightning_damage" }, levels = { - [1] = { skill_manaCostBase = 13, skill_lightningMin = 20, skill_lightningMax = 59, }, - [2] = { skill_manaCostBase = 14, skill_lightningMin = 24, skill_lightningMax = 71, }, - [3] = { skill_manaCostBase = 15, skill_lightningMin = 28, skill_lightningMax = 84, }, - [4] = { skill_manaCostBase = 16, skill_lightningMin = 33, skill_lightningMax = 100, }, - [5] = { skill_manaCostBase = 17, skill_lightningMin = 40, skill_lightningMax = 119, }, - [6] = { skill_manaCostBase = 18, skill_lightningMin = 44, skill_lightningMax = 133, }, - [7] = { skill_manaCostBase = 18, skill_lightningMin = 49, skill_lightningMax = 148, }, - [8] = { skill_manaCostBase = 19, skill_lightningMin = 55, skill_lightningMax = 165, }, - [9] = { skill_manaCostBase = 19, skill_lightningMin = 61, skill_lightningMax = 184, }, - [10] = { skill_manaCostBase = 20, skill_lightningMin = 68, skill_lightningMax = 204, }, - [11] = { skill_manaCostBase = 20, skill_lightningMin = 75, skill_lightningMax = 226, }, - [12] = { skill_manaCostBase = 21, skill_lightningMin = 84, skill_lightningMax = 251, }, - [13] = { skill_manaCostBase = 22, skill_lightningMin = 93, skill_lightningMax = 278, }, - [14] = { skill_manaCostBase = 22, skill_lightningMin = 103, skill_lightningMax = 308, }, - [15] = { skill_manaCostBase = 23, skill_lightningMin = 113, skill_lightningMax = 340, }, - [16] = { skill_manaCostBase = 23, skill_lightningMin = 125, skill_lightningMax = 376, }, - [17] = { skill_manaCostBase = 24, skill_lightningMin = 138, skill_lightningMax = 415, }, - [18] = { skill_manaCostBase = 25, skill_lightningMin = 152, skill_lightningMax = 457, }, - [19] = { skill_manaCostBase = 25, skill_lightningMin = 168, skill_lightningMax = 504, }, - [20] = { skill_manaCostBase = 26, skill_lightningMin = 185, skill_lightningMax = 555, }, - [21] = { skill_manaCostBase = 26, skill_lightningMin = 204, skill_lightningMax = 611, }, - [22] = { skill_manaCostBase = 27, skill_lightningMin = 224, skill_lightningMax = 672, }, - [23] = { skill_manaCostBase = 28, skill_lightningMin = 246, skill_lightningMax = 739, }, - [24] = { skill_manaCostBase = 28, skill_lightningMin = 271, skill_lightningMax = 813, }, - [25] = { skill_manaCostBase = 29, skill_lightningMin = 298, skill_lightningMax = 893, }, - [26] = { skill_manaCostBase = 29, skill_lightningMin = 327, skill_lightningMax = 980, }, - [27] = { skill_manaCostBase = 30, skill_lightningMin = 358, skill_lightningMax = 1075, }, - [28] = { skill_manaCostBase = 31, skill_lightningMin = 393, skill_lightningMax = 1179, }, - [29] = { skill_manaCostBase = 31, skill_lightningMin = 431, skill_lightningMax = 1293, }, - [30] = { skill_manaCostBase = 32, skill_lightningMin = 472, skill_lightningMax = 1417, }, - } + [1] = { 13, 20, 59, }, + [2] = { 14, 24, 71, }, + [3] = { 15, 28, 84, }, + [4] = { 16, 33, 100, }, + [5] = { 17, 40, 119, }, + [6] = { 18, 44, 133, }, + [7] = { 18, 49, 148, }, + [8] = { 19, 55, 165, }, + [9] = { 19, 61, 184, }, + [10] = { 20, 68, 204, }, + [11] = { 20, 75, 226, }, + [12] = { 21, 84, 251, }, + [13] = { 22, 93, 278, }, + [14] = { 22, 103, 308, }, + [15] = { 23, 113, 340, }, + [16] = { 23, 125, 376, }, + [17] = { 24, 138, 415, }, + [18] = { 25, 152, 457, }, + [19] = { 25, 168, 504, }, + [20] = { 26, 185, 555, }, + [21] = { 26, 204, 611, }, + [22] = { 27, 224, 672, }, + [23] = { 28, 246, 739, }, + [24] = { 28, 271, 813, }, + [25] = { 29, 298, 893, }, + [26] = { 29, 327, 980, }, + [27] = { 30, 358, 1075, }, + [28] = { 31, 393, 1179, }, + [29] = { 31, 431, 1293, }, + [30] = { 32, 472, 1417, }, + }, } gems["Spark"] = { - intelligence = true, - spell = true, projectile = true, + intelligence = true, + active_skill = true, + spell = true, duration = true, lightning = true, - hit = true, - base = { - skill_castTime = 0.65, - skill_damageEffectiveness = 0.7, - skill_critChanceBase = 6, - skill_baseDur = 1.5, + color = 3, + baseFlags = { + spell = true, + projectile = true, + duration = true, + lightning = true, }, - quality = { - projectileSpeedInc = 1, + skillTypes = { [2] = true, [3] = true, [10] = true, [12] = true, [17] = true, [18] = true, [19] = true, [26] = true, [36] = true, [45] = true, [35] = true, }, + baseMods = { + skill("castTime", 0.65), + skill("damageEffectiveness", 0.7), + skill("critChance", 6), + skill("duration", 1.5), --"base_skill_effect_duration" = 1500 + --"base_is_projectile" = ? + }, + qualityMods = { + mod("ProjectileSpeed", "INC", 1), --"base_projectile_speed_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("LightningMin", nil), --"spell_minimum_base_lightning_damage" + [3] = skill("LightningMax", nil), --"spell_maximum_base_lightning_damage" + [4] = mod("ProjectileCount", "BASE", nil), --"number_of_additional_projectiles" }, levels = { - [1] = { skill_manaCostBase = 5, skill_lightningMin = 1, skill_lightningMax = 20, projectileCount = 4, }, - [2] = { skill_manaCostBase = 6, skill_lightningMin = 1, skill_lightningMax = 22, projectileCount = 4, }, - [3] = { skill_manaCostBase = 7, skill_lightningMin = 1, skill_lightningMax = 27, projectileCount = 4, }, - [4] = { skill_manaCostBase = 8, skill_lightningMin = 2, skill_lightningMax = 36, projectileCount = 4, }, - [5] = { skill_manaCostBase = 9, skill_lightningMin = 3, skill_lightningMax = 49, projectileCount = 4, }, - [6] = { skill_manaCostBase = 10, skill_lightningMin = 4, skill_lightningMax = 69, projectileCount = 4, }, - [7] = { skill_manaCostBase = 11, skill_lightningMin = 5, skill_lightningMax = 88, projectileCount = 4, }, - [8] = { skill_manaCostBase = 12, skill_lightningMin = 6, skill_lightningMax = 110, projectileCount = 4, }, - [9] = { skill_manaCostBase = 14, skill_lightningMin = 7, skill_lightningMax = 136, projectileCount = 5, }, - [10] = { skill_manaCostBase = 16, skill_lightningMin = 9, skill_lightningMax = 167, projectileCount = 5, }, - [11] = { skill_manaCostBase = 17, skill_lightningMin = 11, skill_lightningMax = 202, projectileCount = 5, }, - [12] = { skill_manaCostBase = 18, skill_lightningMin = 13, skill_lightningMax = 243, projectileCount = 5, }, - [13] = { skill_manaCostBase = 19, skill_lightningMin = 15, skill_lightningMax = 291, projectileCount = 5, }, - [14] = { skill_manaCostBase = 20, skill_lightningMin = 18, skill_lightningMax = 345, projectileCount = 5, }, - [15] = { skill_manaCostBase = 21, skill_lightningMin = 22, skill_lightningMax = 409, projectileCount = 5, }, - [16] = { skill_manaCostBase = 22, skill_lightningMin = 25, skill_lightningMax = 481, projectileCount = 5, }, - [17] = { skill_manaCostBase = 22, skill_lightningMin = 30, skill_lightningMax = 565, projectileCount = 6, }, - [18] = { skill_manaCostBase = 22, skill_lightningMin = 35, skill_lightningMax = 661, projectileCount = 6, }, - [19] = { skill_manaCostBase = 22, skill_lightningMin = 39, skill_lightningMax = 742, projectileCount = 6, }, - [20] = { skill_manaCostBase = 23, skill_lightningMin = 44, skill_lightningMax = 832, projectileCount = 6, }, - [21] = { skill_manaCostBase = 23, skill_lightningMin = 47, skill_lightningMax = 897, projectileCount = 6, }, - [22] = { skill_manaCostBase = 24, skill_lightningMin = 51, skill_lightningMax = 967, projectileCount = 6, }, - [23] = { skill_manaCostBase = 24, skill_lightningMin = 55, skill_lightningMax = 1041, projectileCount = 6, }, - [24] = { skill_manaCostBase = 25, skill_lightningMin = 59, skill_lightningMax = 1120, projectileCount = 6, }, - [25] = { skill_manaCostBase = 25, skill_lightningMin = 63, skill_lightningMax = 1205, projectileCount = 7, }, - [26] = { skill_manaCostBase = 26, skill_lightningMin = 68, skill_lightningMax = 1296, projectileCount = 7, }, - [27] = { skill_manaCostBase = 26, skill_lightningMin = 73, skill_lightningMax = 1393, projectileCount = 7, }, - [28] = { skill_manaCostBase = 26, skill_lightningMin = 79, skill_lightningMax = 1496, projectileCount = 7, }, - [29] = { skill_manaCostBase = 26, skill_lightningMin = 85, skill_lightningMax = 1607, projectileCount = 7, }, - [30] = { skill_manaCostBase = 27, skill_lightningMin = 91, skill_lightningMax = 1725, projectileCount = 7, }, - } + [1] = { 5, 1, 20, 4, }, + [2] = { 6, 1, 22, 4, }, + [3] = { 7, 1, 27, 4, }, + [4] = { 8, 2, 36, 4, }, + [5] = { 9, 3, 49, 4, }, + [6] = { 10, 4, 69, 4, }, + [7] = { 11, 5, 88, 4, }, + [8] = { 12, 6, 110, 4, }, + [9] = { 14, 7, 136, 5, }, + [10] = { 16, 9, 167, 5, }, + [11] = { 17, 11, 202, 5, }, + [12] = { 18, 13, 243, 5, }, + [13] = { 19, 15, 291, 5, }, + [14] = { 20, 18, 345, 5, }, + [15] = { 21, 22, 409, 5, }, + [16] = { 22, 25, 481, 5, }, + [17] = { 22, 30, 565, 6, }, + [18] = { 22, 35, 661, 6, }, + [19] = { 22, 39, 742, 6, }, + [20] = { 23, 44, 832, 6, }, + [21] = { 23, 47, 897, 6, }, + [22] = { 24, 51, 967, 6, }, + [23] = { 24, 55, 1041, 6, }, + [24] = { 25, 59, 1120, 6, }, + [25] = { 25, 63, 1205, 7, }, + [26] = { 26, 68, 1296, 7, }, + [27] = { 26, 73, 1393, 7, }, + [28] = { 26, 79, 1496, 7, }, + [29] = { 26, 85, 1607, 7, }, + [30] = { 27, 91, 1725, 7, }, + }, +} +gems["Vaal Spark"] = { + projectile = true, + intelligence = true, + active_skill = true, + vaal = true, + spell = true, + duration = true, + lightning = true, + color = 3, + baseFlags = { + spell = true, + projectile = true, + duration = true, + lightning = true, + vaal = true, + }, + skillTypes = { [2] = true, [3] = true, [10] = true, [12] = true, [17] = true, [18] = true, [19] = true, [26] = true, [43] = true, [35] = true, }, + baseMods = { + skill("castTime", 0.65), + skill("damageEffectiveness", 0.4), + skill("critChance", 5), + skill("duration", 2), --"base_skill_effect_duration" = 2000 + --"base_number_of_projectiles_in_spiral_nova" = 100 + --"projectile_spiral_nova_time_ms" = 3000 + --"projectile_spiral_nova_angle" = 0 + --"base_is_projectile" = ? + }, + qualityMods = { + mod("ProjectileSpeed", "INC", 1), --"base_projectile_speed_+%" = 1 + }, + levelMods = { + [1] = skill("LightningMin", nil), --"spell_minimum_base_lightning_damage" + [2] = skill("LightningMax", nil), --"spell_maximum_base_lightning_damage" + }, + levels = { + [1] = { 1, 11, }, + [2] = { 1, 12, }, + [3] = { 1, 15, }, + [4] = { 1, 19, }, + [5] = { 1, 27, }, + [6] = { 2, 37, }, + [7] = { 3, 48, }, + [8] = { 3, 60, }, + [9] = { 4, 74, }, + [10] = { 5, 91, }, + [11] = { 6, 110, }, + [12] = { 7, 133, }, + [13] = { 8, 159, }, + [14] = { 10, 188, }, + [15] = { 12, 223, }, + [16] = { 14, 263, }, + [17] = { 16, 308, }, + [18] = { 19, 361, }, + [19] = { 21, 405, }, + [20] = { 24, 454, }, + [21] = { 26, 489, }, + [22] = { 28, 527, }, + [23] = { 30, 568, }, + [24] = { 32, 611, }, + [25] = { 35, 658, }, + [26] = { 37, 707, }, + [27] = { 40, 760, }, + [28] = { 43, 816, }, + [29] = { 46, 877, }, + [30] = { 50, 941, }, + }, } gems["Spirit Offering"] = { + minion = true, intelligence = true, + active_skill = true, + spell = true, + duration = true, unsupported = true, } gems["Storm Call"] = { intelligence = true, + active_skill = true, spell = true, - aoe = true, + area = true, duration = true, lightning = true, - hit = true, - base = { - skill_castTime = 0.5, - skill_damageEffectiveness = 0.8, - skill_critChanceBase = 6, - skill_durationBase = 1.5, + color = 3, + baseFlags = { + spell = true, + area = true, + duration = true, + lightning = true, }, - quality = { - aoeRadiusInc = 0.5, + skillTypes = { [2] = true, [10] = true, [11] = true, [12] = true, [17] = true, [18] = true, [19] = true, [36] = true, [26] = true, [45] = true, [35] = true, }, + baseMods = { + skill("castTime", 0.5), + skill("damageEffectiveness", 0.8), + skill("critChance", 6), + skill("duration", 1.5), --"base_skill_effect_duration" = 1500 + --"is_area_damage" = ? + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("LightningMin", nil), --"spell_minimum_base_lightning_damage" + [3] = skill("LightningMax", nil), --"spell_maximum_base_lightning_damage" }, levels = { - [1] = { skill_manaCostBase = 6, skill_lightningMin = 13, skill_lightningMax = 24, }, - [2] = { skill_manaCostBase = 7, skill_lightningMin = 16, skill_lightningMax = 30, }, - [3] = { skill_manaCostBase = 8, skill_lightningMin = 22, skill_lightningMax = 40, }, - [4] = { skill_manaCostBase = 9, skill_lightningMin = 28, skill_lightningMax = 53, }, - [5] = { skill_manaCostBase = 10, skill_lightningMin = 37, skill_lightningMax = 68, }, - [6] = { skill_manaCostBase = 11, skill_lightningMin = 46, skill_lightningMax = 86, }, - [7] = { skill_manaCostBase = 12, skill_lightningMin = 58, skill_lightningMax = 108, }, - [8] = { skill_manaCostBase = 13, skill_lightningMin = 69, skill_lightningMax = 128, }, - [9] = { skill_manaCostBase = 13, skill_lightningMin = 81, skill_lightningMax = 151, }, - [10] = { skill_manaCostBase = 14, skill_lightningMin = 95, skill_lightningMax = 177, }, - [11] = { skill_manaCostBase = 14, skill_lightningMin = 111, skill_lightningMax = 206, }, - [12] = { skill_manaCostBase = 15, skill_lightningMin = 130, skill_lightningMax = 241, }, - [13] = { skill_manaCostBase = 16, skill_lightningMin = 151, skill_lightningMax = 280, }, - [14] = { skill_manaCostBase = 16, skill_lightningMin = 175, skill_lightningMax = 325, }, - [15] = { skill_manaCostBase = 17, skill_lightningMin = 202, skill_lightningMax = 376, }, - [16] = { skill_manaCostBase = 18, skill_lightningMin = 234, skill_lightningMax = 434, }, - [17] = { skill_manaCostBase = 18, skill_lightningMin = 257, skill_lightningMax = 478, }, - [18] = { skill_manaCostBase = 19, skill_lightningMin = 283, skill_lightningMax = 525, }, - [19] = { skill_manaCostBase = 19, skill_lightningMin = 310, skill_lightningMax = 577, }, - [20] = { skill_manaCostBase = 19, skill_lightningMin = 341, skill_lightningMax = 633, }, - [21] = { skill_manaCostBase = 20, skill_lightningMin = 374, skill_lightningMax = 694, }, - [22] = { skill_manaCostBase = 21, skill_lightningMin = 410, skill_lightningMax = 761, }, - [23] = { skill_manaCostBase = 21, skill_lightningMin = 449, skill_lightningMax = 834, }, - [24] = { skill_manaCostBase = 21, skill_lightningMin = 492, skill_lightningMax = 914, }, - [25] = { skill_manaCostBase = 22, skill_lightningMin = 538, skill_lightningMax = 1000, }, - [26] = { skill_manaCostBase = 23, skill_lightningMin = 589, skill_lightningMax = 1094, }, - [27] = { skill_manaCostBase = 23, skill_lightningMin = 644, skill_lightningMax = 1196, }, - [28] = { skill_manaCostBase = 23, skill_lightningMin = 704, skill_lightningMax = 1308, }, - [29] = { skill_manaCostBase = 24, skill_lightningMin = 769, skill_lightningMax = 1429, }, - [30] = { skill_manaCostBase = 24, skill_lightningMin = 840, skill_lightningMax = 1560, }, - } + [1] = { 6, 13, 24, }, + [2] = { 7, 16, 30, }, + [3] = { 8, 22, 40, }, + [4] = { 9, 28, 53, }, + [5] = { 10, 37, 68, }, + [6] = { 11, 46, 86, }, + [7] = { 12, 58, 108, }, + [8] = { 13, 69, 128, }, + [9] = { 13, 81, 151, }, + [10] = { 14, 95, 177, }, + [11] = { 14, 111, 206, }, + [12] = { 15, 130, 241, }, + [13] = { 16, 151, 280, }, + [14] = { 16, 175, 325, }, + [15] = { 17, 202, 376, }, + [16] = { 18, 234, 434, }, + [17] = { 18, 257, 478, }, + [18] = { 19, 283, 525, }, + [19] = { 19, 310, 577, }, + [20] = { 19, 341, 633, }, + [21] = { 20, 374, 694, }, + [22] = { 21, 410, 761, }, + [23] = { 21, 449, 834, }, + [24] = { 21, 492, 914, }, + [25] = { 22, 538, 1000, }, + [26] = { 23, 589, 1094, }, + [27] = { 23, 644, 1196, }, + [28] = { 23, 704, 1308, }, + [29] = { 24, 769, 1429, }, + [30] = { 24, 840, 1560, }, + }, +} +gems["Vaal Storm Call"] = { + intelligence = true, + active_skill = true, + vaal = true, + spell = true, + area = true, + duration = true, + lightning = true, + color = 3, + baseFlags = { + spell = true, + area = true, + duration = true, + lightning = true, + vaal = true, + }, + skillTypes = { [2] = true, [10] = true, [11] = true, [12] = true, [17] = true, [18] = true, [19] = true, [26] = true, [43] = true, [35] = true, }, + baseMods = { + skill("castTime", 0.5), + skill("damageEffectiveness", 0.8), + skill("critChance", 6), + skill("duration", 3), --"base_skill_effect_duration" = 3000 + --"is_area_damage" = ? + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + [1] = skill("LightningMin", nil), --"spell_minimum_base_lightning_damage" + [2] = skill("LightningMax", nil), --"spell_maximum_base_lightning_damage" + }, + levels = { + [1] = { 13, 25, }, + [2] = { 17, 31, }, + [3] = { 22, 41, }, + [4] = { 29, 53, }, + [5] = { 36, 67, }, + [6] = { 46, 85, }, + [7] = { 57, 105, }, + [8] = { 67, 124, }, + [9] = { 78, 144, }, + [10] = { 90, 168, }, + [11] = { 105, 194, }, + [12] = { 121, 225, }, + [13] = { 140, 259, }, + [14] = { 161, 298, }, + [15] = { 184, 343, }, + [16] = { 211, 393, }, + [17] = { 231, 429, }, + [18] = { 253, 470, }, + [19] = { 276, 513, }, + [20] = { 302, 560, }, + [21] = { 329, 611, }, + [22] = { 359, 666, }, + [23] = { 391, 726, }, + [24] = { 426, 791, }, + [25] = { 464, 861, }, + [26] = { 504, 937, }, + [27] = { 549, 1019, }, + [28] = { 596, 1108, }, + [29] = { 648, 1204, }, + [30] = { 704, 1307, }, + }, } gems["Summon Chaos Golem"] = { - intelligence = true, - spell = true, - minion = true, golem = true, + intelligence = true, + active_skill = true, chaos = true, - hit = true, - base = { - skill_castTime = 1, - BuffEffect_Cond_HaveChaosGolem = true, + minion = true, + spell = true, + color = 3, + baseFlags = { + spell = true, + minion = true, + golem = true, + chaos = true, }, - quality = { - minionLifeInc = 1, - minion_damageInc = 1, + skillTypes = { [36] = true, [50] = true, [19] = true, [9] = true, [21] = true, [26] = true, [2] = true, [18] = true, [17] = true, [49] = true, }, + baseMods = { + skill("castTime", 1), + --"base_number_of_golems_allowed" = 1 + --"display_minion_monster_type" = 5 + mod("Misc", "LIST", { type = "Condition", var = "HaveChaosGolem" }, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), + }, + qualityMods = { + mod("MinionLife", "INC", 1), --"minion_maximum_life_+%" = 1 + mod("Damage", "INC", 1, 0, KeywordFlag.Minion), --"minion_damage_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + --[2] = "base_actor_scale_+%" + --[3] = "chaos_golem_grants_additional_physical_damage_reduction_%" + [4] = mod("MinionLife", "INC", nil), --"minion_maximum_life_+%" + --[5] = "display_minion_monster_level" }, levels = { - [1] = { skill_manaCostBase = 30, minionLifeInc = 30, BuffEffect_extraPhysicalRed = 3, }, - [2] = { skill_manaCostBase = 32, minionLifeInc = 32, BuffEffect_extraPhysicalRed = 3, }, - [3] = { skill_manaCostBase = 34, minionLifeInc = 34, BuffEffect_extraPhysicalRed = 3, }, - [4] = { skill_manaCostBase = 36, minionLifeInc = 36, BuffEffect_extraPhysicalRed = 3, }, - [5] = { skill_manaCostBase = 38, minionLifeInc = 38, BuffEffect_extraPhysicalRed = 3, }, - [6] = { skill_manaCostBase = 40, minionLifeInc = 40, BuffEffect_extraPhysicalRed = 3, }, - [7] = { skill_manaCostBase = 42, minionLifeInc = 42, BuffEffect_extraPhysicalRed = 3, }, - [8] = { skill_manaCostBase = 44, minionLifeInc = 44, BuffEffect_extraPhysicalRed = 3, }, - [9] = { skill_manaCostBase = 44, minionLifeInc = 46, BuffEffect_extraPhysicalRed = 3, }, - [10] = { skill_manaCostBase = 46, minionLifeInc = 48, BuffEffect_extraPhysicalRed = 3, }, - [11] = { skill_manaCostBase = 48, minionLifeInc = 50, BuffEffect_extraPhysicalRed = 3, }, - [12] = { skill_manaCostBase = 48, minionLifeInc = 52, BuffEffect_extraPhysicalRed = 4, }, - [13] = { skill_manaCostBase = 50, minionLifeInc = 54, BuffEffect_extraPhysicalRed = 4, }, - [14] = { skill_manaCostBase = 50, minionLifeInc = 56, BuffEffect_extraPhysicalRed = 4, }, - [15] = { skill_manaCostBase = 52, minionLifeInc = 58, BuffEffect_extraPhysicalRed = 4, }, - [16] = { skill_manaCostBase = 52, minionLifeInc = 60, BuffEffect_extraPhysicalRed = 4, }, - [17] = { skill_manaCostBase = 52, minionLifeInc = 62, BuffEffect_extraPhysicalRed = 4, }, - [18] = { skill_manaCostBase = 52, minionLifeInc = 64, BuffEffect_extraPhysicalRed = 4, }, - [19] = { skill_manaCostBase = 54, minionLifeInc = 66, BuffEffect_extraPhysicalRed = 4, }, - [20] = { skill_manaCostBase = 54, minionLifeInc = 68, BuffEffect_extraPhysicalRed = 4, }, - [21] = { skill_manaCostBase = 56, minionLifeInc = 70, BuffEffect_extraPhysicalRed = 4, }, - [22] = { skill_manaCostBase = 56, minionLifeInc = 72, BuffEffect_extraPhysicalRed = 5, }, - [23] = { skill_manaCostBase = 58, minionLifeInc = 74, BuffEffect_extraPhysicalRed = 5, }, - [24] = { skill_manaCostBase = 58, minionLifeInc = 76, BuffEffect_extraPhysicalRed = 5, }, - [25] = { skill_manaCostBase = 60, minionLifeInc = 78, BuffEffect_extraPhysicalRed = 5, }, - [26] = { skill_manaCostBase = 60, minionLifeInc = 80, BuffEffect_extraPhysicalRed = 5, }, - [27] = { skill_manaCostBase = 60, minionLifeInc = 82, BuffEffect_extraPhysicalRed = 5, }, - [28] = { skill_manaCostBase = 60, minionLifeInc = 84, BuffEffect_extraPhysicalRed = 5, }, - [29] = { skill_manaCostBase = 62, minionLifeInc = 86, BuffEffect_extraPhysicalRed = 5, }, - [30] = { skill_manaCostBase = 62, minionLifeInc = 88, BuffEffect_extraPhysicalRed = 5, }, - } + [1] = { 30, 0, 3, 30, 34, }, + [2] = { 32, 1, 3, 32, 36, }, + [3] = { 34, 1, 3, 34, 38, }, + [4] = { 36, 2, 3, 36, 40, }, + [5] = { 38, 2, 3, 38, 42, }, + [6] = { 40, 3, 3, 40, 44, }, + [7] = { 42, 3, 3, 42, 46, }, + [8] = { 44, 4, 3, 44, 48, }, + [9] = { 44, 4, 3, 46, 50, }, + [10] = { 46, 5, 3, 48, 52, }, + [11] = { 48, 5, 3, 50, 54, }, + [12] = { 48, 6, 4, 52, 56, }, + [13] = { 50, 6, 4, 54, 58, }, + [14] = { 50, 7, 4, 56, 60, }, + [15] = { 52, 7, 4, 58, 62, }, + [16] = { 52, 8, 4, 60, 64, }, + [17] = { 52, 8, 4, 62, 66, }, + [18] = { 52, 9, 4, 64, 68, }, + [19] = { 54, 9, 4, 66, 69, }, + [20] = { 54, 10, 4, 68, 70, }, + [21] = { 56, 10, 4, 70, 72, }, + [22] = { 56, 11, 5, 72, 74, }, + [23] = { 58, 11, 5, 74, 76, }, + [24] = { 58, 12, 5, 76, 78, }, + [25] = { 60, 12, 5, 78, 80, }, + [26] = { 60, 13, 5, 80, 82, }, + [27] = { 60, 13, 5, 82, 84, }, + [28] = { 60, 14, 5, 84, 86, }, + [29] = { 62, 14, 5, 86, 88, }, + [30] = { 62, 15, 5, 88, 90, }, + }, } gems["Summon Lightning Golem"] = { - intelligence = true, - spell = true, - minion = true, golem = true, + intelligence = true, + active_skill = true, lightning = true, - hit = true, - base = { - skill_castTime = 1, - BuffEffect_Cond_HaveLightningGolem = true, + minion = true, + spell = true, + color = 3, + baseFlags = { + spell = true, + minion = true, + golem = true, + lightning = true, }, - quality = { - minionLifeInc = 1, - minion_damageInc = 1, + skillTypes = { [36] = true, [35] = true, [19] = true, [9] = true, [21] = true, [26] = true, [2] = true, [18] = true, [17] = true, [49] = true, }, + baseMods = { + skill("castTime", 1), + --"base_number_of_golems_allowed" = 1 + --"display_minion_monster_type" = 11 + mod("Misc", "LIST", { type = "Condition", var = "HaveLightningGolem" }, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), + }, + qualityMods = { + mod("MinionLife", "INC", 1), --"minion_maximum_life_+%" = 1 + mod("Damage", "INC", 1, 0, KeywordFlag.Minion), --"minion_damage_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + --[2] = "base_actor_scale_+%" + [3] = mod("Speed", "INC", nil), --"lightning_golem_grants_attack_and_cast_speed_+%" + [4] = mod("MinionLife", "INC", nil), --"minion_maximum_life_+%" + --[5] = "display_minion_monster_level" }, levels = { - [1] = { skill_manaCostBase = 30, minionLifeInc = 30, BuffEffect_speedInc = 6, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 6, }, - [2] = { skill_manaCostBase = 32, minionLifeInc = 32, BuffEffect_speedInc = 6, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 6, }, - [3] = { skill_manaCostBase = 34, minionLifeInc = 34, BuffEffect_speedInc = 6, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 6, }, - [4] = { skill_manaCostBase = 36, minionLifeInc = 36, BuffEffect_speedInc = 6, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 6, }, - [5] = { skill_manaCostBase = 38, minionLifeInc = 38, BuffEffect_speedInc = 6, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 6, }, - [6] = { skill_manaCostBase = 40, minionLifeInc = 40, BuffEffect_speedInc = 7, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 7, }, - [7] = { skill_manaCostBase = 42, minionLifeInc = 42, BuffEffect_speedInc = 7, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 7, }, - [8] = { skill_manaCostBase = 44, minionLifeInc = 44, BuffEffect_speedInc = 7, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 7, }, - [9] = { skill_manaCostBase = 44, minionLifeInc = 46, BuffEffect_speedInc = 7, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 7, }, - [10] = { skill_manaCostBase = 46, minionLifeInc = 48, BuffEffect_speedInc = 7, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 7, }, - [11] = { skill_manaCostBase = 48, minionLifeInc = 50, BuffEffect_speedInc = 8, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 8, }, - [12] = { skill_manaCostBase = 48, minionLifeInc = 52, BuffEffect_speedInc = 8, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 8, }, - [13] = { skill_manaCostBase = 50, minionLifeInc = 54, BuffEffect_speedInc = 8, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 8, }, - [14] = { skill_manaCostBase = 50, minionLifeInc = 56, BuffEffect_speedInc = 8, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 8, }, - [15] = { skill_manaCostBase = 52, minionLifeInc = 58, BuffEffect_speedInc = 8, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 8, }, - [16] = { skill_manaCostBase = 52, minionLifeInc = 60, BuffEffect_speedInc = 9, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 9, }, - [17] = { skill_manaCostBase = 52, minionLifeInc = 62, BuffEffect_speedInc = 9, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 9, }, - [18] = { skill_manaCostBase = 52, minionLifeInc = 64, BuffEffect_speedInc = 9, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 9, }, - [19] = { skill_manaCostBase = 54, minionLifeInc = 66, BuffEffect_speedInc = 9, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 9, }, - [20] = { skill_manaCostBase = 54, minionLifeInc = 68, BuffEffect_speedInc = 9, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 9, }, - [21] = { skill_manaCostBase = 56, minionLifeInc = 70, BuffEffect_speedInc = 10, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 10, }, - [22] = { skill_manaCostBase = 56, minionLifeInc = 72, BuffEffect_speedInc = 10, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 10, }, - [23] = { skill_manaCostBase = 58, minionLifeInc = 74, BuffEffect_speedInc = 10, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 10, }, - [24] = { skill_manaCostBase = 58, minionLifeInc = 76, BuffEffect_speedInc = 10, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 10, }, - [25] = { skill_manaCostBase = 60, minionLifeInc = 78, BuffEffect_speedInc = 10, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 10, }, - [26] = { skill_manaCostBase = 60, minionLifeInc = 80, BuffEffect_speedInc = 11, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 11, }, - [27] = { skill_manaCostBase = 60, minionLifeInc = 82, BuffEffect_speedInc = 11, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 11, }, - [28] = { skill_manaCostBase = 60, minionLifeInc = 84, BuffEffect_speedInc = 11, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 11, }, - [29] = { skill_manaCostBase = 62, minionLifeInc = 86, BuffEffect_speedInc = 11, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 11, }, - [30] = { skill_manaCostBase = 62, minionLifeInc = 88, BuffEffect_speedInc = 11, BuffEffect_CondMod_LiegeOfThePrimordial_speedInc = 11, }, - } + [1] = { 30, 0, 6, 30, 34, }, + [2] = { 32, 1, 6, 32, 36, }, + [3] = { 34, 2, 6, 34, 38, }, + [4] = { 36, 3, 6, 36, 40, }, + [5] = { 38, 4, 6, 38, 42, }, + [6] = { 40, 5, 7, 40, 44, }, + [7] = { 42, 6, 7, 42, 46, }, + [8] = { 44, 7, 7, 44, 48, }, + [9] = { 44, 8, 7, 46, 50, }, + [10] = { 46, 9, 7, 48, 52, }, + [11] = { 48, 10, 8, 50, 54, }, + [12] = { 48, 11, 8, 52, 56, }, + [13] = { 50, 12, 8, 54, 58, }, + [14] = { 50, 13, 8, 56, 60, }, + [15] = { 52, 14, 8, 58, 62, }, + [16] = { 52, 15, 9, 60, 64, }, + [17] = { 52, 16, 9, 62, 66, }, + [18] = { 52, 17, 9, 64, 68, }, + [19] = { 54, 18, 9, 66, 69, }, + [20] = { 54, 19, 9, 68, 70, }, + [21] = { 56, 20, 10, 70, 72, }, + [22] = { 56, 21, 10, 72, 74, }, + [23] = { 58, 22, 10, 74, 76, }, + [24] = { 58, 23, 10, 76, 78, }, + [25] = { 60, 24, 10, 78, 80, }, + [26] = { 60, 25, 11, 80, 82, }, + [27] = { 60, 26, 11, 82, 84, }, + [28] = { 60, 27, 11, 84, 86, }, + [29] = { 62, 28, 11, 86, 88, }, + [30] = { 62, 29, 11, 88, 90, }, + }, } gems["Summon Raging Spirit"] = { intelligence = true, + active_skill = true, + spell = true, + minion = true, + duration = true, + fire = true, unsupported = true, } gems["Summon Skeletons"] = { intelligence = true, + active_skill = true, + spell = true, + minion = true, + duration = true, + unsupported = true, +} +gems["Vaal Summon Skeletons"] = { + intelligence = true, + active_skill = true, + vaal = true, + spell = true, + minion = true, + duration = true, unsupported = true, } gems["Tempest Shield"] = { intelligence = true, + active_skill = true, spell = true, + lightning = true, chaining = true, duration = true, - lightning = true, - hit = true, - showAverage = true, - base = { - skill_castTime = 0.5, - skill_damageEffectiveness = 0.6, - skill_critChanceBase = 6, - skill_durationBase = 12, - BuffEffect_CondMod_UsingShield_blockChance = 3, - chainCount = 1, + color = 3, + baseFlags = { + spell = true, + duration = true, + chaining = true, + lightning = true, }, - quality = { - lightningInc = 1, + skillTypes = { [2] = true, [10] = true, [13] = true, [27] = true, [35] = true, [23] = true, [45] = true, [36] = true, [12] = true, }, + baseMods = { + skill("castTime", 0.5), + skill("damageEffectiveness", 0.6), + skill("critChance", 6), + --"shield_block_%" = 3 + --"skill_override_pvp_scaling_time_ms" = 700 + mod("ChainCount", "BASE", 1), --"number_of_additional_projectiles_in_chain" = 1 + skill("duration", 12), --"base_skill_effect_duration" = 12000 + --"skill_can_add_multiple_charges_per_action" = ? + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + }, + qualityMods = { + mod("LightningDamage", "INC", 1), --"lightning_damage_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("LightningMin", nil), --"spell_minimum_base_lightning_damage" + [3] = skill("LightningMax", nil), --"spell_maximum_base_lightning_damage" }, levels = { - [1] = { skill_manaCostBase = 17, skill_lightningMin = 24, skill_lightningMax = 36, }, - [2] = { skill_manaCostBase = 17, skill_lightningMin = 31, skill_lightningMax = 46, }, - [3] = { skill_manaCostBase = 17, skill_lightningMin = 39, skill_lightningMax = 58, }, - [4] = { skill_manaCostBase = 18, skill_lightningMin = 48, skill_lightningMax = 72, }, - [5] = { skill_manaCostBase = 18, skill_lightningMin = 55, skill_lightningMax = 83, }, - [6] = { skill_manaCostBase = 18, skill_lightningMin = 64, skill_lightningMax = 96, }, - [7] = { skill_manaCostBase = 18, skill_lightningMin = 74, skill_lightningMax = 111, }, - [8] = { skill_manaCostBase = 19, skill_lightningMin = 85, skill_lightningMax = 127, }, - [9] = { skill_manaCostBase = 19, skill_lightningMin = 97, skill_lightningMax = 145, }, - [10] = { skill_manaCostBase = 19, skill_lightningMin = 110, skill_lightningMax = 165, }, - [11] = { skill_manaCostBase = 20, skill_lightningMin = 125, skill_lightningMax = 187, }, - [12] = { skill_manaCostBase = 20, skill_lightningMin = 141, skill_lightningMax = 212, }, - [13] = { skill_manaCostBase = 20, skill_lightningMin = 159, skill_lightningMax = 239, }, - [14] = { skill_manaCostBase = 20, skill_lightningMin = 180, skill_lightningMax = 269, }, - [15] = { skill_manaCostBase = 20, skill_lightningMin = 194, skill_lightningMax = 291, }, - [16] = { skill_manaCostBase = 21, skill_lightningMin = 210, skill_lightningMax = 315, }, - [17] = { skill_manaCostBase = 21, skill_lightningMin = 227, skill_lightningMax = 340, }, - [18] = { skill_manaCostBase = 21, skill_lightningMin = 245, skill_lightningMax = 367, }, - [19] = { skill_manaCostBase = 21, skill_lightningMin = 264, skill_lightningMax = 396, }, - [20] = { skill_manaCostBase = 21, skill_lightningMin = 284, skill_lightningMax = 426, }, - [21] = { skill_manaCostBase = 22, skill_lightningMin = 306, skill_lightningMax = 459, }, - [22] = { skill_manaCostBase = 22, skill_lightningMin = 330, skill_lightningMax = 494, }, - [23] = { skill_manaCostBase = 22, skill_lightningMin = 354, skill_lightningMax = 532, }, - [24] = { skill_manaCostBase = 22, skill_lightningMin = 381, skill_lightningMax = 572, }, - [25] = { skill_manaCostBase = 22, skill_lightningMin = 410, skill_lightningMax = 614, }, - [26] = { skill_manaCostBase = 23, skill_lightningMin = 440, skill_lightningMax = 660, }, - [27] = { skill_manaCostBase = 23, skill_lightningMin = 472, skill_lightningMax = 708, }, - [28] = { skill_manaCostBase = 23, skill_lightningMin = 507, skill_lightningMax = 760, }, - [29] = { skill_manaCostBase = 23, skill_lightningMin = 543, skill_lightningMax = 815, }, - [30] = { skill_manaCostBase = 23, skill_lightningMin = 583, skill_lightningMax = 874, }, - } + [1] = { 17, 24, 36, }, + [2] = { 17, 31, 46, }, + [3] = { 17, 39, 58, }, + [4] = { 18, 48, 72, }, + [5] = { 18, 55, 83, }, + [6] = { 18, 64, 96, }, + [7] = { 18, 74, 111, }, + [8] = { 19, 85, 127, }, + [9] = { 19, 97, 145, }, + [10] = { 19, 110, 165, }, + [11] = { 20, 125, 187, }, + [12] = { 20, 141, 212, }, + [13] = { 20, 159, 239, }, + [14] = { 20, 180, 269, }, + [15] = { 20, 194, 291, }, + [16] = { 21, 210, 315, }, + [17] = { 21, 227, 340, }, + [18] = { 21, 245, 367, }, + [19] = { 21, 264, 396, }, + [20] = { 21, 284, 426, }, + [21] = { 22, 306, 459, }, + [22] = { 22, 330, 494, }, + [23] = { 22, 354, 532, }, + [24] = { 22, 381, 572, }, + [25] = { 22, 410, 614, }, + [26] = { 23, 440, 660, }, + [27] = { 23, 472, 708, }, + [28] = { 23, 507, 760, }, + [29] = { 23, 543, 815, }, + [30] = { 23, 583, 874, }, + }, } gems["Vortex"] = { intelligence = true, + active_skill = true, spell = true, - aoe = true, - duration = true, + area = true, cold = true, - hit = true, - base = { - skill_castTime = 0.9, - skill_critChanceBase = 5, - skill_dotIsSpell = true, - skill_durationBase = 3, + duration = true, + color = 3, + baseFlags = { + spell = true, + area = true, + duration = true, + cold = true, }, - quality = { - aoeRadiusInc = 0.5, + skillTypes = { [2] = true, [10] = true, [11] = true, [17] = true, [18] = true, [19] = true, [26] = true, [34] = true, [36] = true, [12] = true, [60] = true, }, + baseMods = { + skill("castTime", 0.9), + skill("critChance", 5), + skill("duration", 3), --"base_skill_effect_duration" = 3000 + --"is_area_damage" = ? + skill("dotIsSpell", true), --"spell_damage_modifiers_apply_to_damage_over_time" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("ColdMin", nil), --"spell_minimum_base_cold_damage" + [3] = skill("ColdMax", nil), --"spell_maximum_base_cold_damage" + [4] = skill("ColdDot", nil), --"base_cold_damage_to_deal_per_minute" }, levels = { - [1] = { skill_manaCostBase = 11, skill_coldMin = 50, skill_coldMax = 75, skill_coldDotBase = 41.6, }, - [2] = { skill_manaCostBase = 11, skill_coldMin = 60, skill_coldMax = 90, skill_coldDotBase = 52, }, - [3] = { skill_manaCostBase = 12, skill_coldMin = 71, skill_coldMax = 107, skill_coldDotBase = 64.5, }, - [4] = { skill_manaCostBase = 13, skill_coldMin = 85, skill_coldMax = 127, skill_coldDotBase = 79.5, }, - [5] = { skill_manaCostBase = 14, skill_coldMin = 100, skill_coldMax = 150, skill_coldDotBase = 97.4, }, - [6] = { skill_manaCostBase = 14, skill_coldMin = 112, skill_coldMax = 168, skill_coldDotBase = 112.5, }, - [7] = { skill_manaCostBase = 15, skill_coldMin = 124, skill_coldMax = 187, skill_coldDotBase = 129.7, }, - [8] = { skill_manaCostBase = 15, skill_coldMin = 138, skill_coldMax = 208, skill_coldDotBase = 149, }, - [9] = { skill_manaCostBase = 16, skill_coldMin = 154, skill_coldMax = 231, skill_coldDotBase = 170.9, }, - [10] = { skill_manaCostBase = 16, skill_coldMin = 171, skill_coldMax = 256, skill_coldDotBase = 195.5, }, - [11] = { skill_manaCostBase = 16, skill_coldMin = 189, skill_coldMax = 284, skill_coldDotBase = 223.3, }, - [12] = { skill_manaCostBase = 17, skill_coldMin = 209, skill_coldMax = 314, skill_coldDotBase = 254.5, }, - [13] = { skill_manaCostBase = 17, skill_coldMin = 232, skill_coldMax = 347, skill_coldDotBase = 289.5, }, - [14] = { skill_manaCostBase = 18, skill_coldMin = 256, skill_coldMax = 384, skill_coldDotBase = 328.9, }, - [15] = { skill_manaCostBase = 18, skill_coldMin = 283, skill_coldMax = 424, skill_coldDotBase = 372.9, }, - [16] = { skill_manaCostBase = 19, skill_coldMin = 312, skill_coldMax = 468, skill_coldDotBase = 422.2, }, - [17] = { skill_manaCostBase = 19, skill_coldMin = 344, skill_coldMax = 516, skill_coldDotBase = 477.4, }, - [18] = { skill_manaCostBase = 20, skill_coldMin = 379, skill_coldMax = 568, skill_coldDotBase = 539, }, - [19] = { skill_manaCostBase = 20, skill_coldMin = 417, skill_coldMax = 625, skill_coldDotBase = 607.8, }, - [20] = { skill_manaCostBase = 21, skill_coldMin = 458, skill_coldMax = 688, skill_coldDotBase = 684.5, }, - [21] = { skill_manaCostBase = 21, skill_coldMin = 504, skill_coldMax = 756, skill_coldDotBase = 770, }, - [22] = { skill_manaCostBase = 22, skill_coldMin = 554, skill_coldMax = 831, skill_coldDotBase = 865.2, }, - [23] = { skill_manaCostBase = 22, skill_coldMin = 608, skill_coldMax = 912, skill_coldDotBase = 971.1, }, - [24] = { skill_manaCostBase = 23, skill_coldMin = 667, skill_coldMax = 1001, skill_coldDotBase = 1089, }, - [25] = { skill_manaCostBase = 23, skill_coldMin = 732, skill_coldMax = 1098, skill_coldDotBase = 1219.9, }, - [26] = { skill_manaCostBase = 24, skill_coldMin = 802, skill_coldMax = 1204, skill_coldDotBase = 1365.3, }, - [27] = { skill_manaCostBase = 24, skill_coldMin = 879, skill_coldMax = 1319, skill_coldDotBase = 1526.7, }, - [28] = { skill_manaCostBase = 25, skill_coldMin = 963, skill_coldMax = 1445, skill_coldDotBase = 1705.7, }, - [29] = { skill_manaCostBase = 25, skill_coldMin = 1055, skill_coldMax = 1582, skill_coldDotBase = 1904.1, }, - [30] = { skill_manaCostBase = 26, skill_coldMin = 1154, skill_coldMax = 1731, skill_coldDotBase = 2124, }, - } + [1] = { 11, 50, 75, 41.633333333333, }, + [2] = { 11, 60, 90, 51.983333333333, }, + [3] = { 12, 71, 107, 64.466666666667, }, + [4] = { 13, 85, 127, 79.45, }, + [5] = { 14, 100, 150, 97.383333333333, }, + [6] = { 14, 112, 168, 112.51666666667, }, + [7] = { 15, 124, 187, 129.65, }, + [8] = { 15, 138, 208, 149.01666666667, }, + [9] = { 16, 154, 231, 170.88333333333, }, + [10] = { 16, 171, 256, 195.53333333333, }, + [11] = { 16, 189, 284, 223.28333333333, }, + [12] = { 17, 209, 314, 254.5, }, + [13] = { 17, 232, 347, 289.53333333333, }, + [14] = { 18, 256, 384, 328.85, }, + [15] = { 18, 283, 424, 372.9, }, + [16] = { 19, 312, 468, 422.2, }, + [17] = { 19, 344, 516, 477.35, }, + [18] = { 20, 379, 568, 538.96666666667, }, + [19] = { 20, 417, 625, 607.75, }, + [20] = { 21, 458, 688, 684.46666666667, }, + [21] = { 21, 504, 756, 769.96666666667, }, + [22] = { 22, 554, 831, 865.18333333333, }, + [23] = { 22, 608, 912, 971.15, }, + [24] = { 23, 667, 1001, 1088.9833333333, }, + [25] = { 23, 732, 1098, 1219.9166666667, }, + [26] = { 24, 802, 1204, 1365.3333333333, }, + [27] = { 24, 879, 1319, 1526.7166666667, }, + [28] = { 25, 963, 1445, 1705.7166666667, }, + [29] = { 25, 1055, 1582, 1904.1333333333, }, + [30] = { 26, 1154, 1731, 2123.9666666667, }, + }, } gems["Vulnerability"] = { - intelligence = true, curse = true, + intelligence = true, + active_skill = true, spell = true, - aoe = true, + area = true, duration = true, - debuff = true, - base = { - skill_castTime = 0.5, - CurseEffect_effective_dotTakenInc = 33, + color = 3, + baseFlags = { + spell = true, + curse = true, + area = true, + duration = true, }, - quality = { - CurseEffect_effective_physicalTakenInc = 0.5, + 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("DotTaken", "INC", 33, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"degen_effect_+%" = 33 + --"base_deal_no_damage" = ? + skill("debuff", true), + }, + qualityMods = { + mod("PhysicalDamageTaken", "INC", 0.5, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"physical_damage_taken_+%" = 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("PhysicalDamageTaken", "INC", nil, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"physical_damage_taken_+%" }, levels = { - [1] = { skill_manaCostBase = 24, skill_durationBase = 9, curse_aoeRadiusInc = 0, CurseEffect_effective_physicalTakenInc = 20, }, - [2] = { skill_manaCostBase = 26, skill_durationBase = 9.1, curse_aoeRadiusInc = 2, CurseEffect_effective_physicalTakenInc = 20, }, - [3] = { skill_manaCostBase = 27, skill_durationBase = 9.2, curse_aoeRadiusInc = 4, CurseEffect_effective_physicalTakenInc = 21, }, - [4] = { skill_manaCostBase = 29, skill_durationBase = 9.3, curse_aoeRadiusInc = 6, CurseEffect_effective_physicalTakenInc = 21, }, - [5] = { skill_manaCostBase = 30, skill_durationBase = 9.4, curse_aoeRadiusInc = 8, CurseEffect_effective_physicalTakenInc = 22, }, - [6] = { skill_manaCostBase = 32, skill_durationBase = 9.5, curse_aoeRadiusInc = 10, CurseEffect_effective_physicalTakenInc = 22, }, - [7] = { skill_manaCostBase = 34, skill_durationBase = 9.6, curse_aoeRadiusInc = 12, CurseEffect_effective_physicalTakenInc = 23, }, - [8] = { skill_manaCostBase = 35, skill_durationBase = 9.7, curse_aoeRadiusInc = 14, CurseEffect_effective_physicalTakenInc = 23, }, - [9] = { skill_manaCostBase = 37, skill_durationBase = 9.8, curse_aoeRadiusInc = 16, CurseEffect_effective_physicalTakenInc = 24, }, - [10] = { skill_manaCostBase = 38, skill_durationBase = 9.9, curse_aoeRadiusInc = 18, CurseEffect_effective_physicalTakenInc = 24, }, - [11] = { skill_manaCostBase = 39, skill_durationBase = 10, curse_aoeRadiusInc = 20, CurseEffect_effective_physicalTakenInc = 25, }, - [12] = { skill_manaCostBase = 40, skill_durationBase = 10.1, curse_aoeRadiusInc = 22, CurseEffect_effective_physicalTakenInc = 25, }, - [13] = { skill_manaCostBase = 42, skill_durationBase = 10.2, curse_aoeRadiusInc = 24, CurseEffect_effective_physicalTakenInc = 26, }, - [14] = { skill_manaCostBase = 43, skill_durationBase = 10.3, curse_aoeRadiusInc = 26, CurseEffect_effective_physicalTakenInc = 26, }, - [15] = { skill_manaCostBase = 44, skill_durationBase = 10.4, curse_aoeRadiusInc = 28, CurseEffect_effective_physicalTakenInc = 27, }, - [16] = { skill_manaCostBase = 45, skill_durationBase = 10.5, curse_aoeRadiusInc = 30, CurseEffect_effective_physicalTakenInc = 27, }, - [17] = { skill_manaCostBase = 46, skill_durationBase = 10.6, curse_aoeRadiusInc = 32, CurseEffect_effective_physicalTakenInc = 28, }, - [18] = { skill_manaCostBase = 47, skill_durationBase = 10.7, curse_aoeRadiusInc = 34, CurseEffect_effective_physicalTakenInc = 28, }, - [19] = { skill_manaCostBase = 48, skill_durationBase = 10.8, curse_aoeRadiusInc = 36, CurseEffect_effective_physicalTakenInc = 29, }, - [20] = { skill_manaCostBase = 50, skill_durationBase = 10.9, curse_aoeRadiusInc = 38, CurseEffect_effective_physicalTakenInc = 29, }, - [21] = { skill_manaCostBase = 51, skill_durationBase = 11, curse_aoeRadiusInc = 40, CurseEffect_effective_physicalTakenInc = 30, }, - [22] = { skill_manaCostBase = 52, skill_durationBase = 11.1, curse_aoeRadiusInc = 42, CurseEffect_effective_physicalTakenInc = 30, }, - [23] = { skill_manaCostBase = 53, skill_durationBase = 11.2, curse_aoeRadiusInc = 44, CurseEffect_effective_physicalTakenInc = 31, }, - [24] = { skill_manaCostBase = 54, skill_durationBase = 11.3, curse_aoeRadiusInc = 46, CurseEffect_effective_physicalTakenInc = 31, }, - [25] = { skill_manaCostBase = 56, skill_durationBase = 11.4, curse_aoeRadiusInc = 48, CurseEffect_effective_physicalTakenInc = 32, }, - [26] = { skill_manaCostBase = 57, skill_durationBase = 11.5, curse_aoeRadiusInc = 50, CurseEffect_effective_physicalTakenInc = 32, }, - [27] = { skill_manaCostBase = 58, skill_durationBase = 11.6, curse_aoeRadiusInc = 52, CurseEffect_effective_physicalTakenInc = 33, }, - [28] = { skill_manaCostBase = 59, skill_durationBase = 11.7, curse_aoeRadiusInc = 54, CurseEffect_effective_physicalTakenInc = 33, }, - [29] = { skill_manaCostBase = 60, skill_durationBase = 11.8, curse_aoeRadiusInc = 56, CurseEffect_effective_physicalTakenInc = 34, }, - [30] = { skill_manaCostBase = 61, skill_durationBase = 11.9, curse_aoeRadiusInc = 58, CurseEffect_effective_physicalTakenInc = 34, }, - } + [1] = { 24, 9, 0, 20, }, + [2] = { 26, 9.1, 2, 20, }, + [3] = { 27, 9.2, 4, 21, }, + [4] = { 29, 9.3, 6, 21, }, + [5] = { 30, 9.4, 8, 22, }, + [6] = { 32, 9.5, 10, 22, }, + [7] = { 34, 9.6, 12, 23, }, + [8] = { 35, 9.7, 14, 23, }, + [9] = { 37, 9.8, 16, 24, }, + [10] = { 38, 9.9, 18, 24, }, + [11] = { 39, 10, 20, 25, }, + [12] = { 40, 10.1, 22, 25, }, + [13] = { 42, 10.2, 24, 26, }, + [14] = { 43, 10.3, 26, 26, }, + [15] = { 44, 10.4, 28, 27, }, + [16] = { 45, 10.5, 30, 27, }, + [17] = { 46, 10.6, 32, 28, }, + [18] = { 47, 10.7, 34, 28, }, + [19] = { 48, 10.8, 36, 29, }, + [20] = { 50, 10.9, 38, 29, }, + [21] = { 51, 11, 40, 30, }, + [22] = { 52, 11.1, 42, 30, }, + [23] = { 53, 11.2, 44, 31, }, + [24] = { 54, 11.3, 46, 31, }, + [25] = { 56, 11.4, 48, 32, }, + [26] = { 57, 11.5, 50, 32, }, + [27] = { 58, 11.6, 52, 33, }, + [28] = { 59, 11.7, 54, 33, }, + [29] = { 60, 11.8, 56, 34, }, + [30] = { 61, 11.9, 58, 34, }, + }, } gems["Wither"] = { intelligence = true, + active_skill = true, + spell = true, + area = true, + duration = true, + chaos = true, unsupported = true, } gems["Wrath"] = { - intelligence = true, aura = true, + intelligence = true, + active_skill = true, spell = true, - aoe = true, + area = true, lightning = true, - base = { - skill_castTime = 1.2, - skill_manaReservedPercent = 50, + color = 3, + baseFlags = { + spell = true, + aura = true, + area = true, + lightning = true, }, - quality = { - aura_aoeRadiusInc = 1, + skillTypes = { [2] = true, [11] = true, [5] = true, [15] = true, [27] = true, [16] = true, [18] = true, [44] = true, [35] = true, }, + baseMods = { + skill("castTime", 1.2), + skill("manaCost", 50), + --"base_deal_no_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 1), --"base_skill_area_of_effect_+%" = 1 + }, + levelMods = { + [1] = mod("LightningMin", "BASE", nil, ModFlag.Attack, 0, { type = "GlobalEffect", effectType = "Aura" }), --"attack_minimum_added_lightning_damage" + [2] = mod("LightningMax", "BASE", nil, ModFlag.Attack, 0, { type = "GlobalEffect", effectType = "Aura" }), --"attack_maximum_added_lightning_damage" + [3] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" + [4] = mod("LightningDamage", "MORE", nil, ModFlag.Spell, 0, { type = "GlobalEffect", effectType = "Aura" }), --"wrath_aura_spell_lightning_damage_+%_final" }, levels = { - [1] = { aura_aoeRadiusInc = 0, AuraEffect_attack_lightningMin = 2, AuraEffect_attack_lightningMax = 37, AuraEffect_spell_lightningMore = 1.15, }, - [2] = { aura_aoeRadiusInc = 3, AuraEffect_attack_lightningMin = 3, AuraEffect_attack_lightningMax = 43, AuraEffect_spell_lightningMore = 1.15, }, - [3] = { aura_aoeRadiusInc = 6, AuraEffect_attack_lightningMin = 3, AuraEffect_attack_lightningMax = 50, AuraEffect_spell_lightningMore = 1.15, }, - [4] = { aura_aoeRadiusInc = 9, AuraEffect_attack_lightningMin = 4, AuraEffect_attack_lightningMax = 57, AuraEffect_spell_lightningMore = 1.16, }, - [5] = { aura_aoeRadiusInc = 12, AuraEffect_attack_lightningMin = 4, AuraEffect_attack_lightningMax = 66, AuraEffect_spell_lightningMore = 1.16, }, - [6] = { aura_aoeRadiusInc = 15, AuraEffect_attack_lightningMin = 5, AuraEffect_attack_lightningMax = 75, AuraEffect_spell_lightningMore = 1.16, }, - [7] = { aura_aoeRadiusInc = 18, AuraEffect_attack_lightningMin = 5, AuraEffect_attack_lightningMax = 85, AuraEffect_spell_lightningMore = 1.17, }, - [8] = { aura_aoeRadiusInc = 21, AuraEffect_attack_lightningMin = 6, AuraEffect_attack_lightningMax = 97, AuraEffect_spell_lightningMore = 1.17, }, - [9] = { aura_aoeRadiusInc = 23, AuraEffect_attack_lightningMin = 7, AuraEffect_attack_lightningMax = 109, AuraEffect_spell_lightningMore = 1.17, }, - [10] = { aura_aoeRadiusInc = 25, AuraEffect_attack_lightningMin = 7, AuraEffect_attack_lightningMax = 118, AuraEffect_spell_lightningMore = 1.18, }, - [11] = { aura_aoeRadiusInc = 27, AuraEffect_attack_lightningMin = 8, AuraEffect_attack_lightningMax = 128, AuraEffect_spell_lightningMore = 1.18, }, - [12] = { aura_aoeRadiusInc = 29, AuraEffect_attack_lightningMin = 9, AuraEffect_attack_lightningMax = 138, AuraEffect_spell_lightningMore = 1.18, }, - [13] = { aura_aoeRadiusInc = 31, AuraEffect_attack_lightningMin = 9, AuraEffect_attack_lightningMax = 149, AuraEffect_spell_lightningMore = 1.19, }, - [14] = { aura_aoeRadiusInc = 33, AuraEffect_attack_lightningMin = 10, AuraEffect_attack_lightningMax = 161, AuraEffect_spell_lightningMore = 1.19, }, - [15] = { aura_aoeRadiusInc = 35, AuraEffect_attack_lightningMin = 11, AuraEffect_attack_lightningMax = 173, AuraEffect_spell_lightningMore = 1.19, }, - [16] = { aura_aoeRadiusInc = 36, AuraEffect_attack_lightningMin = 12, AuraEffect_attack_lightningMax = 186, AuraEffect_spell_lightningMore = 1.2, }, - [17] = { aura_aoeRadiusInc = 37, AuraEffect_attack_lightningMin = 13, AuraEffect_attack_lightningMax = 200, AuraEffect_spell_lightningMore = 1.2, }, - [18] = { aura_aoeRadiusInc = 38, AuraEffect_attack_lightningMin = 13, AuraEffect_attack_lightningMax = 215, AuraEffect_spell_lightningMore = 1.2, }, - [19] = { aura_aoeRadiusInc = 39, AuraEffect_attack_lightningMin = 14, AuraEffect_attack_lightningMax = 231, AuraEffect_spell_lightningMore = 1.21, }, - [20] = { aura_aoeRadiusInc = 40, AuraEffect_attack_lightningMin = 16, AuraEffect_attack_lightningMax = 248, AuraEffect_spell_lightningMore = 1.21, }, - [21] = { aura_aoeRadiusInc = 41, AuraEffect_attack_lightningMin = 17, AuraEffect_attack_lightningMax = 267, AuraEffect_spell_lightningMore = 1.21, }, - [22] = { aura_aoeRadiusInc = 42, AuraEffect_attack_lightningMin = 18, AuraEffect_attack_lightningMax = 286, AuraEffect_spell_lightningMore = 1.22, }, - [23] = { aura_aoeRadiusInc = 43, AuraEffect_attack_lightningMin = 19, AuraEffect_attack_lightningMax = 306, AuraEffect_spell_lightningMore = 1.22, }, - [24] = { aura_aoeRadiusInc = 44, AuraEffect_attack_lightningMin = 20, AuraEffect_attack_lightningMax = 328, AuraEffect_spell_lightningMore = 1.22, }, - [25] = { aura_aoeRadiusInc = 45, AuraEffect_attack_lightningMin = 22, AuraEffect_attack_lightningMax = 351, AuraEffect_spell_lightningMore = 1.23, }, - [26] = { aura_aoeRadiusInc = 46, AuraEffect_attack_lightningMin = 23, AuraEffect_attack_lightningMax = 375, AuraEffect_spell_lightningMore = 1.23, }, - [27] = { aura_aoeRadiusInc = 47, AuraEffect_attack_lightningMin = 25, AuraEffect_attack_lightningMax = 401, AuraEffect_spell_lightningMore = 1.23, }, - [28] = { aura_aoeRadiusInc = 48, AuraEffect_attack_lightningMin = 27, AuraEffect_attack_lightningMax = 429, AuraEffect_spell_lightningMore = 1.24, }, - [29] = { aura_aoeRadiusInc = 49, AuraEffect_attack_lightningMin = 29, AuraEffect_attack_lightningMax = 458, AuraEffect_spell_lightningMore = 1.24, }, - [30] = { aura_aoeRadiusInc = 50, AuraEffect_attack_lightningMin = 31, AuraEffect_attack_lightningMax = 490, AuraEffect_spell_lightningMore = 1.24, }, - } + [1] = { 2, 37, 0, 15, }, + [2] = { 3, 43, 3, 15, }, + [3] = { 3, 50, 6, 15, }, + [4] = { 4, 57, 9, 16, }, + [5] = { 4, 66, 12, 16, }, + [6] = { 5, 75, 15, 16, }, + [7] = { 5, 85, 18, 17, }, + [8] = { 6, 97, 21, 17, }, + [9] = { 7, 109, 23, 17, }, + [10] = { 7, 118, 25, 18, }, + [11] = { 8, 128, 27, 18, }, + [12] = { 9, 138, 29, 18, }, + [13] = { 9, 149, 31, 19, }, + [14] = { 10, 161, 33, 19, }, + [15] = { 11, 173, 35, 19, }, + [16] = { 12, 186, 36, 20, }, + [17] = { 13, 200, 37, 20, }, + [18] = { 13, 215, 38, 20, }, + [19] = { 14, 231, 39, 21, }, + [20] = { 16, 248, 40, 21, }, + [21] = { 17, 267, 41, 21, }, + [22] = { 18, 286, 42, 22, }, + [23] = { 19, 306, 43, 22, }, + [24] = { 20, 328, 44, 22, }, + [25] = { 22, 351, 45, 23, }, + [26] = { 23, 375, 46, 23, }, + [27] = { 25, 401, 47, 23, }, + [28] = { 27, 429, 48, 24, }, + [29] = { 29, 458, 49, 24, }, + [30] = { 31, 490, 50, 24, }, + }, } diff --git a/Data/Gems/act_str.lua b/Data/Gems/act_str.lua index d2394a49..de862f11 100644 --- a/Data/Gems/act_str.lua +++ b/Data/Gems/act_str.lua @@ -3,398 +3,536 @@ -- Active Strength skills -- Skill gem data (c) Grinding Gear Games -- -local gems = ... +local gems, mod, flag, skill = ... gems["Abyssal Cry"] = { - strength = true, warcry = true, - aoe = true, + strength = true, + active_skill = true, + area = true, duration = true, chaos = true, - hit = true, - base = { - skill_castTime = 0.25, - skill_durationBase = 6, + color = 1, + baseFlags = { }, - quality = { - durationInc = 1, + skillTypes = { [11] = true, [12] = true, [50] = true, [10] = true, }, + baseMods = { + skill("castTime", 0.25), + --"abyssal_cry_%_max_life_as_chaos_on_death" = 8 + skill("duration", 6), --"base_skill_effect_duration" = 6000 + --"damage_cannot_be_reflected" = ? + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + --"display_skill_deals_secondary_damage" = ? + --"is_warcry" = ? + }, + qualityMods = { + mod("Duration", "INC", 1), --"skill_effect_duration_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + --[2] = "abyssal_cry_movement_velocity_+%_per_one_hundred_nearby_enemies" + [3] = mod("MovementSpeed", "INC", nil, 0, 0, nil), --"base_movement_velocity_+%" }, levels = { - [1] = { skill_manaCostBase = 26, }, - [2] = { skill_manaCostBase = 28, }, - [3] = { skill_manaCostBase = 30, }, - [4] = { skill_manaCostBase = 32, }, - [5] = { skill_manaCostBase = 34, }, - [6] = { skill_manaCostBase = 36, }, - [7] = { skill_manaCostBase = 38, }, - [8] = { skill_manaCostBase = 40, }, - [9] = { skill_manaCostBase = 43, }, - [10] = { skill_manaCostBase = 45, }, - [11] = { skill_manaCostBase = 48, }, - [12] = { skill_manaCostBase = 49, }, - [13] = { skill_manaCostBase = 50, }, - [14] = { skill_manaCostBase = 51, }, - [15] = { skill_manaCostBase = 52, }, - [16] = { skill_manaCostBase = 53, }, - [17] = { skill_manaCostBase = 54, }, - [18] = { skill_manaCostBase = 54, }, - [19] = { skill_manaCostBase = 55, }, - [20] = { skill_manaCostBase = 56, }, - [21] = { skill_manaCostBase = 57, }, - [22] = { skill_manaCostBase = 58, }, - [23] = { skill_manaCostBase = 58, }, - [24] = { skill_manaCostBase = 59, }, - [25] = { skill_manaCostBase = 60, }, - [26] = { skill_manaCostBase = 61, }, - [27] = { skill_manaCostBase = 62, }, - [28] = { skill_manaCostBase = 62, }, - [29] = { skill_manaCostBase = 63, }, - [30] = { skill_manaCostBase = 64, }, - } + [1] = { 26, -60, -20, }, + [2] = { 28, -62, -20, }, + [3] = { 30, -62, -21, }, + [4] = { 32, -64, -21, }, + [5] = { 34, -66, -21, }, + [6] = { 36, -66, -22, }, + [7] = { 38, -68, -22, }, + [8] = { 40, -70, -22, }, + [9] = { 43, -70, -23, }, + [10] = { 45, -72, -23, }, + [11] = { 48, -74, -23, }, + [12] = { 49, -74, -24, }, + [13] = { 50, -76, -24, }, + [14] = { 51, -78, -24, }, + [15] = { 52, -78, -25, }, + [16] = { 53, -80, -25, }, + [17] = { 54, -82, -25, }, + [18] = { 54, -82, -26, }, + [19] = { 55, -84, -26, }, + [20] = { 56, -86, -26, }, + [21] = { 57, -86, -27, }, + [22] = { 58, -88, -27, }, + [23] = { 58, -90, -27, }, + [24] = { 59, -90, -28, }, + [25] = { 60, -92, -28, }, + [26] = { 61, -94, -28, }, + [27] = { 62, -94, -29, }, + [28] = { 62, -96, -29, }, + [29] = { 63, -98, -29, }, + [30] = { 64, -98, -30, }, + }, } gems["Ancestral Protector"] = { - strength = true, - attack = true, - melee = true, totem = true, + strength = true, + active_skill = true, + attack = true, duration = true, - hit = true, - base = { - skill_manaCostBase = 8, - skill_durationBase = 12, - totemPlacementSpeedInc = 50, + melee = true, + color = 1, + baseFlags = { + attack = true, + melee = true, + totem = true, + duration = true, }, - quality = { - totem_damageInc = 1, + skillTypes = { [1] = true, [30] = true, [12] = true, [6] = true, [25] = true, [24] = true, [17] = true, [19] = true, }, + skillTotemId = 13, + baseMods = { + skill("castTime", 1), + skill("manaCost", 8), + --"base_totem_duration" = 12000 + --"base_totem_range" = 50 + --"melee_range_+" = 16 + --"ancestor_totem_parent_activiation_range" = 70 + mod("TotemPlacementSpeed", "INC", 50), --"summon_totem_cast_speed_+%" = 50 + --"base_skill_is_totemified" = ? + --"is_totem" = ? + }, + qualityMods = { + mod("Damage", "INC", 1, 0, KeywordFlag.Totem), --"totem_damage_+%" = 1 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), + [2] = skill("totemLevel", nil), --"base_active_skill_totem_level" + [3] = mod("Speed", "MORE", nil, ModFlag.Attack, 0, { type = "GlobalEffect", effectType = "Buff" }), --"melee_ancestor_totem_grant_owner_attack_speed_+%_final" }, levels = { - [1] = { attack_damageMore = 0.8, BuffEffect_attackSpeedMore = 1.1, }, - [2] = { attack_damageMore = 0.828, BuffEffect_attackSpeedMore = 1.11, }, - [3] = { attack_damageMore = 0.856, BuffEffect_attackSpeedMore = 1.11, }, - [4] = { attack_damageMore = 0.884, BuffEffect_attackSpeedMore = 1.12, }, - [5] = { attack_damageMore = 0.912, BuffEffect_attackSpeedMore = 1.12, }, - [6] = { attack_damageMore = 0.94, BuffEffect_attackSpeedMore = 1.13, }, - [7] = { attack_damageMore = 0.968, BuffEffect_attackSpeedMore = 1.13, }, - [8] = { attack_damageMore = 0.996, BuffEffect_attackSpeedMore = 1.14, }, - [9] = { attack_damageMore = 1.024, BuffEffect_attackSpeedMore = 1.14, }, - [10] = { attack_damageMore = 1.052, BuffEffect_attackSpeedMore = 1.15, }, - [11] = { attack_damageMore = 1.08, BuffEffect_attackSpeedMore = 1.15, }, - [12] = { attack_damageMore = 1.108, BuffEffect_attackSpeedMore = 1.16, }, - [13] = { attack_damageMore = 1.136, BuffEffect_attackSpeedMore = 1.16, }, - [14] = { attack_damageMore = 1.164, BuffEffect_attackSpeedMore = 1.17, }, - [15] = { attack_damageMore = 1.192, BuffEffect_attackSpeedMore = 1.17, }, - [16] = { attack_damageMore = 1.22, BuffEffect_attackSpeedMore = 1.18, }, - [17] = { attack_damageMore = 1.248, BuffEffect_attackSpeedMore = 1.18, }, - [18] = { attack_damageMore = 1.276, BuffEffect_attackSpeedMore = 1.19, }, - [19] = { attack_damageMore = 1.304, BuffEffect_attackSpeedMore = 1.19, }, - [20] = { attack_damageMore = 1.332, BuffEffect_attackSpeedMore = 1.2, }, - [21] = { attack_damageMore = 1.36, BuffEffect_attackSpeedMore = 1.2, }, - [22] = { attack_damageMore = 1.388, BuffEffect_attackSpeedMore = 1.21, }, - [23] = { attack_damageMore = 1.416, BuffEffect_attackSpeedMore = 1.21, }, - [24] = { attack_damageMore = 1.444, BuffEffect_attackSpeedMore = 1.22, }, - [25] = { attack_damageMore = 1.472, BuffEffect_attackSpeedMore = 1.22, }, - [26] = { attack_damageMore = 1.5, BuffEffect_attackSpeedMore = 1.23, }, - [27] = { attack_damageMore = 1.528, BuffEffect_attackSpeedMore = 1.23, }, - [28] = { attack_damageMore = 1.556, BuffEffect_attackSpeedMore = 1.24, }, - [29] = { attack_damageMore = 1.584, BuffEffect_attackSpeedMore = 1.24, }, - [30] = { attack_damageMore = 1.612, BuffEffect_attackSpeedMore = 1.25, }, - } + [1] = { -20, 4, 10, }, + [2] = { -17.2, 6, 11, }, + [3] = { -14.4, 9, 11, }, + [4] = { -11.6, 12, 12, }, + [5] = { -8.8, 16, 12, }, + [6] = { -6, 20, 13, }, + [7] = { -3.2, 24, 13, }, + [8] = { -0.4, 28, 14, }, + [9] = { 2.4, 32, 14, }, + [10] = { 5.2, 36, 15, }, + [11] = { 8, 40, 15, }, + [12] = { 10.8, 44, 16, }, + [13] = { 13.6, 48, 16, }, + [14] = { 16.4, 52, 17, }, + [15] = { 19.2, 55, 17, }, + [16] = { 22, 58, 18, }, + [17] = { 24.8, 61, 18, }, + [18] = { 27.6, 64, 19, }, + [19] = { 30.4, 67, 19, }, + [20] = { 33.2, 70, 20, }, + [21] = { 36, 72, 20, }, + [22] = { 38.8, 74, 21, }, + [23] = { 41.6, 76, 21, }, + [24] = { 44.4, 78, 22, }, + [25] = { 47.2, 80, 22, }, + [26] = { 50, 82, 23, }, + [27] = { 52.8, 84, 23, }, + [28] = { 55.6, 86, 24, }, + [29] = { 58.4, 88, 24, }, + [30] = { 61.2, 90, 25, }, + }, } gems["Ancestral Warchief"] = { - strength = true, - attack = true, - melee = true, totem = true, - aoe = true, + strength = true, + active_skill = true, + attack = true, duration = true, - hit = true, - base = { - skill_manaCostBase = 10, - skill_castTime = 1, - skill_durationBase = 12, - attackSpeedMore = 0.9, - totemPlacementSpeedInc = 50, + area = true, + melee = true, + color = 1, + baseFlags = { + attack = true, + melee = true, + totem = true, + duration = true, }, - quality = { - totem_damageInc = 1, + skillTypes = { [1] = true, [30] = true, [12] = true, [6] = true, [24] = true, [17] = true, [19] = true, [11] = true, }, + skillTotemId = 13, + baseMods = { + skill("castTime", 1), + skill("manaCost", 10), + --"base_totem_duration" = 12000 + --"base_totem_range" = 50 + --"ancestor_totem_parent_activiation_range" = 70 + mod("TotemPlacementSpeed", "INC", 50), --"summon_totem_cast_speed_+%" = 50 + --"totem_art_variation" = 2 + mod("Speed", "MORE", -10, ModFlag.Attack), --"active_skill_attack_speed_+%_final" = -10 + --"is_area_damage" = ? + --"base_skill_is_totemified" = ? + --"is_totem" = ? + }, + qualityMods = { + mod("Damage", "INC", 1, 0, KeywordFlag.Totem), --"totem_damage_+%" = 1 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), + [2] = skill("totemLevel", nil), --"base_active_skill_totem_level" + [3] = mod("Damage", "MORE", nil, ModFlag.Melee, 0, { type = "GlobalEffect", effectType = "Buff" }), --"slam_ancestor_totem_grant_owner_melee_damage_+%_final" }, levels = { - [1] = { attack_damageMore = 1.1, BuffEffect_melee_damageMore = 1.08, }, - [2] = { attack_damageMore = 1.112, BuffEffect_melee_damageMore = 1.08, }, - [3] = { attack_damageMore = 1.124, BuffEffect_melee_damageMore = 1.09, }, - [4] = { attack_damageMore = 1.136, BuffEffect_melee_damageMore = 1.1, }, - [5] = { attack_damageMore = 1.148, BuffEffect_melee_damageMore = 1.1, }, - [6] = { attack_damageMore = 1.16, BuffEffect_melee_damageMore = 1.1, }, - [7] = { attack_damageMore = 1.172, BuffEffect_melee_damageMore = 1.11, }, - [8] = { attack_damageMore = 1.184, BuffEffect_melee_damageMore = 1.12, }, - [9] = { attack_damageMore = 1.196, BuffEffect_melee_damageMore = 1.12, }, - [10] = { attack_damageMore = 1.208, BuffEffect_melee_damageMore = 1.12, }, - [11] = { attack_damageMore = 1.22, BuffEffect_melee_damageMore = 1.13, }, - [12] = { attack_damageMore = 1.232, BuffEffect_melee_damageMore = 1.14, }, - [13] = { attack_damageMore = 1.244, BuffEffect_melee_damageMore = 1.14, }, - [14] = { attack_damageMore = 1.256, BuffEffect_melee_damageMore = 1.14, }, - [15] = { attack_damageMore = 1.268, BuffEffect_melee_damageMore = 1.15, }, - [16] = { attack_damageMore = 1.28, BuffEffect_melee_damageMore = 1.16, }, - [17] = { attack_damageMore = 1.292, BuffEffect_melee_damageMore = 1.16, }, - [18] = { attack_damageMore = 1.304, BuffEffect_melee_damageMore = 1.16, }, - [19] = { attack_damageMore = 1.316, BuffEffect_melee_damageMore = 1.17, }, - [20] = { attack_damageMore = 1.328, BuffEffect_melee_damageMore = 1.18, }, - [21] = { attack_damageMore = 1.34, BuffEffect_melee_damageMore = 1.18, }, - [22] = { attack_damageMore = 1.352, BuffEffect_melee_damageMore = 1.18, }, - [23] = { attack_damageMore = 1.364, BuffEffect_melee_damageMore = 1.19, }, - [24] = { attack_damageMore = 1.376, BuffEffect_melee_damageMore = 1.2, }, - [25] = { attack_damageMore = 1.388, BuffEffect_melee_damageMore = 1.2, }, - [26] = { attack_damageMore = 1.4, BuffEffect_melee_damageMore = 1.2, }, - [27] = { attack_damageMore = 1.412, BuffEffect_melee_damageMore = 1.21, }, - [28] = { attack_damageMore = 1.424, BuffEffect_melee_damageMore = 1.22, }, - [29] = { attack_damageMore = 1.436, BuffEffect_melee_damageMore = 1.22, }, - [30] = { attack_damageMore = 1.448, BuffEffect_melee_damageMore = 1.22, }, - } + [1] = { 10, 28, 8, }, + [2] = { 11.2, 31, 8, }, + [3] = { 12.4, 34, 9, }, + [4] = { 13.6, 37, 10, }, + [5] = { 14.8, 40, 10, }, + [6] = { 16, 42, 10, }, + [7] = { 17.2, 44, 11, }, + [8] = { 18.4, 46, 12, }, + [9] = { 19.6, 48, 12, }, + [10] = { 20.8, 50, 12, }, + [11] = { 22, 52, 13, }, + [12] = { 23.2, 54, 14, }, + [13] = { 24.4, 56, 14, }, + [14] = { 25.6, 58, 14, }, + [15] = { 26.8, 60, 15, }, + [16] = { 28, 62, 16, }, + [17] = { 29.2, 64, 16, }, + [18] = { 30.4, 66, 16, }, + [19] = { 31.6, 68, 17, }, + [20] = { 32.8, 70, 18, }, + [21] = { 34, 72, 18, }, + [22] = { 35.2, 74, 18, }, + [23] = { 36.4, 76, 19, }, + [24] = { 37.6, 78, 20, }, + [25] = { 38.8, 80, 20, }, + [26] = { 40, 82, 20, }, + [27] = { 41.2, 84, 21, }, + [28] = { 42.4, 86, 22, }, + [29] = { 43.6, 88, 22, }, + [30] = { 44.8, 90, 22, }, + }, } gems["Anger"] = { - strength = true, aura = true, + strength = true, + active_skill = true, spell = true, - aoe = true, + area = true, fire = true, - base = { - skill_castTime = 1.2, - skill_manaReservedPercent = 50, + color = 1, + baseFlags = { + spell = true, + aura = true, + area = true, + fire = true, }, - quality = { - aura_aoeRadiusInc = 1, + skillTypes = { [2] = true, [11] = true, [5] = true, [15] = true, [27] = true, [16] = true, [18] = true, [44] = true, [33] = true, }, + baseMods = { + skill("castTime", 1.2), + skill("manaCost", 50), + --"base_deal_no_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 1), --"base_skill_area_of_effect_+%" = 1 + }, + levelMods = { + [1] = mod("FireMin", "BASE", nil, ModFlag.Attack, 0, { type = "GlobalEffect", effectType = "Aura" }), --"attack_minimum_added_fire_damage" + [2] = mod("FireMax", "BASE", nil, ModFlag.Attack, 0, { type = "GlobalEffect", effectType = "Aura" }), --"attack_maximum_added_fire_damage" + [3] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" + [4] = mod("FireMin", "BASE", nil, ModFlag.Spell, 0, { type = "GlobalEffect", effectType = "Aura" }), --"spell_minimum_added_fire_damage" + [5] = mod("FireMax", "BASE", nil, ModFlag.Spell, 0, { type = "GlobalEffect", effectType = "Aura" }), --"spell_maximum_added_fire_damage" }, levels = { - [1] = { AuraEffect_attack_fireMin = 12, AuraEffect_attack_fireMax = 21, aura_aoeRadiusInc = 0, AuraEffect_spell_fireMin = 10, AuraEffect_spell_fireMax = 16, }, - [2] = { AuraEffect_attack_fireMin = 14, AuraEffect_attack_fireMax = 24, aura_aoeRadiusInc = 3, AuraEffect_spell_fireMin = 12, AuraEffect_spell_fireMax = 19, }, - [3] = { AuraEffect_attack_fireMin = 17, AuraEffect_attack_fireMax = 28, aura_aoeRadiusInc = 6, AuraEffect_spell_fireMin = 14, AuraEffect_spell_fireMax = 22, }, - [4] = { AuraEffect_attack_fireMin = 19, AuraEffect_attack_fireMax = 32, aura_aoeRadiusInc = 9, AuraEffect_spell_fireMin = 16, AuraEffect_spell_fireMax = 26, }, - [5] = { AuraEffect_attack_fireMin = 22, AuraEffect_attack_fireMax = 37, aura_aoeRadiusInc = 12, AuraEffect_spell_fireMin = 18, AuraEffect_spell_fireMax = 29, }, - [6] = { AuraEffect_attack_fireMin = 25, AuraEffect_attack_fireMax = 42, aura_aoeRadiusInc = 15, AuraEffect_spell_fireMin = 21, AuraEffect_spell_fireMax = 33, }, - [7] = { AuraEffect_attack_fireMin = 28, AuraEffect_attack_fireMax = 47, aura_aoeRadiusInc = 18, AuraEffect_spell_fireMin = 24, AuraEffect_spell_fireMax = 38, }, - [8] = { AuraEffect_attack_fireMin = 32, AuraEffect_attack_fireMax = 54, aura_aoeRadiusInc = 21, AuraEffect_spell_fireMin = 27, AuraEffect_spell_fireMax = 43, }, - [9] = { AuraEffect_attack_fireMin = 36, AuraEffect_attack_fireMax = 61, aura_aoeRadiusInc = 23, AuraEffect_spell_fireMin = 30, AuraEffect_spell_fireMax = 48, }, - [10] = { AuraEffect_attack_fireMin = 39, AuraEffect_attack_fireMax = 66, aura_aoeRadiusInc = 25, AuraEffect_spell_fireMin = 33, AuraEffect_spell_fireMax = 53, }, - [11] = { AuraEffect_attack_fireMin = 43, AuraEffect_attack_fireMax = 71, aura_aoeRadiusInc = 27, AuraEffect_spell_fireMin = 35, AuraEffect_spell_fireMax = 57, }, - [12] = { AuraEffect_attack_fireMin = 46, AuraEffect_attack_fireMax = 77, aura_aoeRadiusInc = 29, AuraEffect_spell_fireMin = 38, AuraEffect_spell_fireMax = 61, }, - [13] = { AuraEffect_attack_fireMin = 50, AuraEffect_attack_fireMax = 83, aura_aoeRadiusInc = 31, AuraEffect_spell_fireMin = 41, AuraEffect_spell_fireMax = 66, }, - [14] = { AuraEffect_attack_fireMin = 54, AuraEffect_attack_fireMax = 89, aura_aoeRadiusInc = 33, AuraEffect_spell_fireMin = 45, AuraEffect_spell_fireMax = 71, }, - [15] = { AuraEffect_attack_fireMin = 58, AuraEffect_attack_fireMax = 96, aura_aoeRadiusInc = 35, AuraEffect_spell_fireMin = 48, AuraEffect_spell_fireMax = 77, }, - [16] = { AuraEffect_attack_fireMin = 62, AuraEffect_attack_fireMax = 104, aura_aoeRadiusInc = 36, AuraEffect_spell_fireMin = 52, AuraEffect_spell_fireMax = 83, }, - [17] = { AuraEffect_attack_fireMin = 67, AuraEffect_attack_fireMax = 111, aura_aoeRadiusInc = 37, AuraEffect_spell_fireMin = 56, AuraEffect_spell_fireMax = 89, }, - [18] = { AuraEffect_attack_fireMin = 72, AuraEffect_attack_fireMax = 120, aura_aoeRadiusInc = 38, AuraEffect_spell_fireMin = 60, AuraEffect_spell_fireMax = 96, }, - [19] = { AuraEffect_attack_fireMin = 77, AuraEffect_attack_fireMax = 129, aura_aoeRadiusInc = 39, AuraEffect_spell_fireMin = 64, AuraEffect_spell_fireMax = 103, }, - [20] = { AuraEffect_attack_fireMin = 83, AuraEffect_attack_fireMax = 138, aura_aoeRadiusInc = 40, AuraEffect_spell_fireMin = 69, AuraEffect_spell_fireMax = 110, }, - [21] = { AuraEffect_attack_fireMin = 89, AuraEffect_attack_fireMax = 148, aura_aoeRadiusInc = 41, AuraEffect_spell_fireMin = 74, AuraEffect_spell_fireMax = 118, }, - [22] = { AuraEffect_attack_fireMin = 95, AuraEffect_attack_fireMax = 159, aura_aoeRadiusInc = 42, AuraEffect_spell_fireMin = 79, AuraEffect_spell_fireMax = 127, }, - [23] = { AuraEffect_attack_fireMin = 102, AuraEffect_attack_fireMax = 170, aura_aoeRadiusInc = 43, AuraEffect_spell_fireMin = 85, AuraEffect_spell_fireMax = 136, }, - [24] = { AuraEffect_attack_fireMin = 109, AuraEffect_attack_fireMax = 182, aura_aoeRadiusInc = 44, AuraEffect_spell_fireMin = 91, AuraEffect_spell_fireMax = 146, }, - [25] = { AuraEffect_attack_fireMin = 117, AuraEffect_attack_fireMax = 195, aura_aoeRadiusInc = 45, AuraEffect_spell_fireMin = 97, AuraEffect_spell_fireMax = 156, }, - [26] = { AuraEffect_attack_fireMin = 125, AuraEffect_attack_fireMax = 209, aura_aoeRadiusInc = 46, AuraEffect_spell_fireMin = 104, AuraEffect_spell_fireMax = 167, }, - [27] = { AuraEffect_attack_fireMin = 134, AuraEffect_attack_fireMax = 223, aura_aoeRadiusInc = 47, AuraEffect_spell_fireMin = 112, AuraEffect_spell_fireMax = 178, }, - [28] = { AuraEffect_attack_fireMin = 143, AuraEffect_attack_fireMax = 238, aura_aoeRadiusInc = 48, AuraEffect_spell_fireMin = 119, AuraEffect_spell_fireMax = 191, }, - [29] = { AuraEffect_attack_fireMin = 153, AuraEffect_attack_fireMax = 255, aura_aoeRadiusInc = 49, AuraEffect_spell_fireMin = 127, AuraEffect_spell_fireMax = 204, }, - [30] = { AuraEffect_attack_fireMin = 163, AuraEffect_attack_fireMax = 272, aura_aoeRadiusInc = 50, AuraEffect_spell_fireMin = 136, AuraEffect_spell_fireMax = 218, }, - } + [1] = { 12, 21, 0, 10, 16, }, + [2] = { 14, 24, 3, 12, 19, }, + [3] = { 17, 28, 6, 14, 22, }, + [4] = { 19, 32, 9, 16, 26, }, + [5] = { 22, 37, 12, 18, 29, }, + [6] = { 25, 42, 15, 21, 33, }, + [7] = { 28, 47, 18, 24, 38, }, + [8] = { 32, 54, 21, 27, 43, }, + [9] = { 36, 61, 23, 30, 48, }, + [10] = { 39, 66, 25, 33, 53, }, + [11] = { 43, 71, 27, 35, 57, }, + [12] = { 46, 77, 29, 38, 61, }, + [13] = { 50, 83, 31, 41, 66, }, + [14] = { 54, 89, 33, 45, 71, }, + [15] = { 58, 96, 35, 48, 77, }, + [16] = { 62, 104, 36, 52, 83, }, + [17] = { 67, 111, 37, 56, 89, }, + [18] = { 72, 120, 38, 60, 96, }, + [19] = { 77, 129, 39, 64, 103, }, + [20] = { 83, 138, 40, 69, 110, }, + [21] = { 89, 148, 41, 74, 118, }, + [22] = { 95, 159, 42, 79, 127, }, + [23] = { 102, 170, 43, 85, 136, }, + [24] = { 109, 182, 44, 91, 146, }, + [25] = { 117, 195, 45, 97, 156, }, + [26] = { 125, 209, 46, 104, 167, }, + [27] = { 134, 223, 47, 112, 178, }, + [28] = { 143, 238, 48, 119, 191, }, + [29] = { 153, 255, 49, 127, 204, }, + [30] = { 163, 272, 50, 136, 218, }, + }, } gems["Animate Guardian"] = { strength = true, + active_skill = true, + spell = true, + minion = true, unsupported = true, } gems["Cleave"] = { strength = true, + active_skill = true, attack = true, + area = true, melee = true, - aoe = true, - hit = true, - base = { - skill_manaCostBase = 6, + color = 1, + baseFlags = { + attack = true, + melee = true, + area = true, }, - quality = { - attackSpeedInc = 0.5, + skillTypes = { [1] = true, [6] = true, [8] = true, [11] = true, [28] = true, [24] = true, }, + baseMods = { + skill("castTime", 1), + skill("manaCost", 6), + --"cleave_damage_+%_final_while_dual_wielding" = -40 + --"is_area_damage" = ? + --"skill_double_hits_when_dual_wielding" = ? + }, + qualityMods = { + mod("Speed", "INC", 0.5, ModFlag.Attack, 0, nil), --"attack_speed_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), + [2] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" }, levels = { - [1] = { attack_damageMore = 1.1, aoeRadiusInc = 0, }, - [2] = { attack_damageMore = 1.128, aoeRadiusInc = 1, }, - [3] = { attack_damageMore = 1.156, aoeRadiusInc = 2, }, - [4] = { attack_damageMore = 1.184, aoeRadiusInc = 3, }, - [5] = { attack_damageMore = 1.212, aoeRadiusInc = 4, }, - [6] = { attack_damageMore = 1.24, aoeRadiusInc = 5, }, - [7] = { attack_damageMore = 1.268, aoeRadiusInc = 6, }, - [8] = { attack_damageMore = 1.296, aoeRadiusInc = 7, }, - [9] = { attack_damageMore = 1.324, aoeRadiusInc = 8, }, - [10] = { attack_damageMore = 1.352, aoeRadiusInc = 9, }, - [11] = { attack_damageMore = 1.38, aoeRadiusInc = 10, }, - [12] = { attack_damageMore = 1.408, aoeRadiusInc = 11, }, - [13] = { attack_damageMore = 1.436, aoeRadiusInc = 12, }, - [14] = { attack_damageMore = 1.464, aoeRadiusInc = 13, }, - [15] = { attack_damageMore = 1.492, aoeRadiusInc = 14, }, - [16] = { attack_damageMore = 1.52, aoeRadiusInc = 15, }, - [17] = { attack_damageMore = 1.548, aoeRadiusInc = 16, }, - [18] = { attack_damageMore = 1.576, aoeRadiusInc = 17, }, - [19] = { attack_damageMore = 1.604, aoeRadiusInc = 18, }, - [20] = { attack_damageMore = 1.632, aoeRadiusInc = 19, }, - [21] = { attack_damageMore = 1.66, aoeRadiusInc = 20, }, - [22] = { attack_damageMore = 1.688, aoeRadiusInc = 21, }, - [23] = { attack_damageMore = 1.716, aoeRadiusInc = 22, }, - [24] = { attack_damageMore = 1.744, aoeRadiusInc = 23, }, - [25] = { attack_damageMore = 1.772, aoeRadiusInc = 24, }, - [26] = { attack_damageMore = 1.8, aoeRadiusInc = 25, }, - [27] = { attack_damageMore = 1.828, aoeRadiusInc = 26, }, - [28] = { attack_damageMore = 1.856, aoeRadiusInc = 27, }, - [29] = { attack_damageMore = 1.884, aoeRadiusInc = 28, }, - [30] = { attack_damageMore = 1.912, aoeRadiusInc = 29, }, - } + [1] = { 10, 0, }, + [2] = { 12.8, 1, }, + [3] = { 15.6, 2, }, + [4] = { 18.4, 3, }, + [5] = { 21.2, 4, }, + [6] = { 24, 5, }, + [7] = { 26.8, 6, }, + [8] = { 29.6, 7, }, + [9] = { 32.4, 8, }, + [10] = { 35.2, 9, }, + [11] = { 38, 10, }, + [12] = { 40.8, 11, }, + [13] = { 43.6, 12, }, + [14] = { 46.4, 13, }, + [15] = { 49.2, 14, }, + [16] = { 52, 15, }, + [17] = { 54.8, 16, }, + [18] = { 57.6, 17, }, + [19] = { 60.4, 18, }, + [20] = { 63.2, 19, }, + [21] = { 66, 20, }, + [22] = { 68.8, 21, }, + [23] = { 71.6, 22, }, + [24] = { 74.4, 23, }, + [25] = { 77.2, 24, }, + [26] = { 80, 25, }, + [27] = { 82.8, 26, }, + [28] = { 85.6, 27, }, + [29] = { 88.4, 28, }, + [30] = { 91.2, 29, }, + }, } gems["Decoy Totem"] = { - strength = true, - spell = true, totem = true, - aoe = true, + strength = true, + active_skill = true, + spell = true, duration = true, - base = { - skill_castTime = 1, - skill_durationBase = 8, + area = true, + color = 1, + baseFlags = { + spell = true, + totem = true, + area = true, + duration = true, }, - quality = { - totemLifeInc = 1, + skillTypes = { [2] = true, [17] = true, [12] = true, [19] = true, [11] = true, [30] = true, [26] = true, }, + skillTotemId = 6, + baseMods = { + skill("castTime", 1), + --"is_totem" = 1 + --"base_totem_duration" = 8000 + --"base_totem_range" = 60 + --"base_skill_is_totemified" = ? + --"base_deal_no_damage" = ? + }, + qualityMods = { + mod("TotemLife", "INC", 1), --"totem_life_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("totemLevel", nil), --"base_active_skill_totem_level" + [3] = mod("TotemLife", "INC", nil), --"totem_life_+%" }, levels = { - [1] = { skill_manaCostBase = 9, totemLifeInc = 0, }, - [2] = { skill_manaCostBase = 10, totemLifeInc = 2, }, - [3] = { skill_manaCostBase = 10, totemLifeInc = 4, }, - [4] = { skill_manaCostBase = 12, totemLifeInc = 6, }, - [5] = { skill_manaCostBase = 14, totemLifeInc = 8, }, - [6] = { skill_manaCostBase = 17, totemLifeInc = 10, }, - [7] = { skill_manaCostBase = 18, totemLifeInc = 12, }, - [8] = { skill_manaCostBase = 19, totemLifeInc = 14, }, - [9] = { skill_manaCostBase = 21, totemLifeInc = 16, }, - [10] = { skill_manaCostBase = 24, totemLifeInc = 18, }, - [11] = { skill_manaCostBase = 26, totemLifeInc = 20, }, - [12] = { skill_manaCostBase = 28, totemLifeInc = 22, }, - [13] = { skill_manaCostBase = 30, totemLifeInc = 24, }, - [14] = { skill_manaCostBase = 30, totemLifeInc = 26, }, - [15] = { skill_manaCostBase = 31, totemLifeInc = 28, }, - [16] = { skill_manaCostBase = 33, totemLifeInc = 30, }, - [17] = { skill_manaCostBase = 34, totemLifeInc = 32, }, - [18] = { skill_manaCostBase = 34, totemLifeInc = 34, }, - [19] = { skill_manaCostBase = 34, totemLifeInc = 36, }, - [20] = { skill_manaCostBase = 35, totemLifeInc = 38, }, - [21] = { skill_manaCostBase = 36, totemLifeInc = 40, }, - [22] = { skill_manaCostBase = 37, totemLifeInc = 42, }, - [23] = { skill_manaCostBase = 37, totemLifeInc = 44, }, - [24] = { skill_manaCostBase = 38, totemLifeInc = 46, }, - [25] = { skill_manaCostBase = 38, totemLifeInc = 48, }, - [26] = { skill_manaCostBase = 39, totemLifeInc = 50, }, - [27] = { skill_manaCostBase = 40, totemLifeInc = 52, }, - [28] = { skill_manaCostBase = 40, totemLifeInc = 54, }, - [29] = { skill_manaCostBase = 41, totemLifeInc = 56, }, - [30] = { skill_manaCostBase = 42, totemLifeInc = 58, }, - } + [1] = { 9, 4, 0, }, + [2] = { 10, 6, 2, }, + [3] = { 10, 9, 4, }, + [4] = { 12, 12, 6, }, + [5] = { 14, 15, 8, }, + [6] = { 17, 19, 10, }, + [7] = { 18, 23, 12, }, + [8] = { 19, 28, 14, }, + [9] = { 21, 33, 16, }, + [10] = { 24, 39, 18, }, + [11] = { 26, 43, 20, }, + [12] = { 28, 46, 22, }, + [13] = { 30, 49, 24, }, + [14] = { 30, 52, 26, }, + [15] = { 31, 55, 28, }, + [16] = { 33, 58, 30, }, + [17] = { 34, 61, 32, }, + [18] = { 34, 64, 34, }, + [19] = { 34, 66, 36, }, + [20] = { 35, 68, 38, }, + [21] = { 36, 70, 40, }, + [22] = { 37, 72, 42, }, + [23] = { 37, 74, 44, }, + [24] = { 38, 76, 46, }, + [25] = { 38, 78, 48, }, + [26] = { 39, 80, 50, }, + [27] = { 40, 82, 52, }, + [28] = { 40, 84, 54, }, + [29] = { 41, 86, 56, }, + [30] = { 42, 88, 58, }, + }, } gems["Determination"] = { - strength = true, aura = true, + strength = true, + active_skill = true, spell = true, - aoe = true, - base = { - skill_castTime = 1.2, - skill_manaReservedPercent = 50, + area = true, + color = 1, + baseFlags = { + spell = true, + aura = true, + area = true, }, - quality = { - aura_aoeRadiusInc = 1, + skillTypes = { [2] = true, [11] = true, [5] = true, [15] = true, [27] = true, [16] = true, [18] = true, [44] = true, }, + baseMods = { + skill("castTime", 1.2), + skill("manaCost", 50), + --"base_deal_no_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 1), --"base_skill_area_of_effect_+%" = 1 + }, + levelMods = { + [1] = mod("Armour", "MORE", nil, 0, 0, { type = "GlobalEffect", effectType = "Aura" }), --"determination_aura_armour_+%_final" + [2] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" }, levels = { - [1] = { AuraEffect_armourMore = 1.32, aura_aoeRadiusInc = 0, }, - [2] = { AuraEffect_armourMore = 1.33, aura_aoeRadiusInc = 3, }, - [3] = { AuraEffect_armourMore = 1.34, aura_aoeRadiusInc = 6, }, - [4] = { AuraEffect_armourMore = 1.35, aura_aoeRadiusInc = 9, }, - [5] = { AuraEffect_armourMore = 1.36, aura_aoeRadiusInc = 12, }, - [6] = { AuraEffect_armourMore = 1.37, aura_aoeRadiusInc = 15, }, - [7] = { AuraEffect_armourMore = 1.38, aura_aoeRadiusInc = 18, }, - [8] = { AuraEffect_armourMore = 1.39, aura_aoeRadiusInc = 21, }, - [9] = { AuraEffect_armourMore = 1.4, aura_aoeRadiusInc = 23, }, - [10] = { AuraEffect_armourMore = 1.41, aura_aoeRadiusInc = 25, }, - [11] = { AuraEffect_armourMore = 1.42, aura_aoeRadiusInc = 27, }, - [12] = { AuraEffect_armourMore = 1.43, aura_aoeRadiusInc = 29, }, - [13] = { AuraEffect_armourMore = 1.44, aura_aoeRadiusInc = 31, }, - [14] = { AuraEffect_armourMore = 1.45, aura_aoeRadiusInc = 33, }, - [15] = { AuraEffect_armourMore = 1.46, aura_aoeRadiusInc = 35, }, - [16] = { AuraEffect_armourMore = 1.47, aura_aoeRadiusInc = 36, }, - [17] = { AuraEffect_armourMore = 1.48, aura_aoeRadiusInc = 37, }, - [18] = { AuraEffect_armourMore = 1.49, aura_aoeRadiusInc = 38, }, - [19] = { AuraEffect_armourMore = 1.5, aura_aoeRadiusInc = 39, }, - [20] = { AuraEffect_armourMore = 1.51, aura_aoeRadiusInc = 40, }, - [21] = { AuraEffect_armourMore = 1.52, aura_aoeRadiusInc = 41, }, - [22] = { AuraEffect_armourMore = 1.53, aura_aoeRadiusInc = 42, }, - [23] = { AuraEffect_armourMore = 1.54, aura_aoeRadiusInc = 43, }, - [24] = { AuraEffect_armourMore = 1.55, aura_aoeRadiusInc = 44, }, - [25] = { AuraEffect_armourMore = 1.56, aura_aoeRadiusInc = 45, }, - [26] = { AuraEffect_armourMore = 1.57, aura_aoeRadiusInc = 46, }, - [27] = { AuraEffect_armourMore = 1.58, aura_aoeRadiusInc = 47, }, - [28] = { AuraEffect_armourMore = 1.59, aura_aoeRadiusInc = 48, }, - [29] = { AuraEffect_armourMore = 1.6, aura_aoeRadiusInc = 49, }, - [30] = { AuraEffect_armourMore = 1.61, aura_aoeRadiusInc = 50, }, - } + [1] = { 32, 0, }, + [2] = { 33, 3, }, + [3] = { 34, 6, }, + [4] = { 35, 9, }, + [5] = { 36, 12, }, + [6] = { 37, 15, }, + [7] = { 38, 18, }, + [8] = { 39, 21, }, + [9] = { 40, 23, }, + [10] = { 41, 25, }, + [11] = { 42, 27, }, + [12] = { 43, 29, }, + [13] = { 44, 31, }, + [14] = { 45, 33, }, + [15] = { 46, 35, }, + [16] = { 47, 36, }, + [17] = { 48, 37, }, + [18] = { 49, 38, }, + [19] = { 50, 39, }, + [20] = { 51, 40, }, + [21] = { 52, 41, }, + [22] = { 53, 42, }, + [23] = { 54, 43, }, + [24] = { 55, 44, }, + [25] = { 56, 45, }, + [26] = { 57, 46, }, + [27] = { 58, 47, }, + [28] = { 59, 48, }, + [29] = { 60, 49, }, + [30] = { 61, 50, }, + }, } gems["Devouring Totem"] = { + totem = true, strength = true, + active_skill = true, + spell = true, + duration = true, unsupported = true, } gems["Dominating Blow"] = { strength = true, + active_skill = true, attack = true, - melee = true, minion = true, duration = true, - hit = true, - base = { - skill_durationBase = 20, - minion_damageMore = 0.65, + melee = true, + color = 1, + baseFlags = { + attack = true, + melee = true, + duration = true, }, - quality = { - minion_damageInc = 0.5, + skillTypes = { [1] = true, [6] = true, [9] = true, [12] = true, [21] = true, [25] = true, [28] = true, [24] = true, }, + baseMods = { + skill("castTime", 1), + skill("duration", 20), --"base_skill_effect_duration" = 20000 + --"active_skill_minion_damage_+%_final" = -35 + --"is_dominated" = ? + }, + qualityMods = { + mod("Damage", "INC", 0.5, 0, 0, nil), --"damage_+%" = 0.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { skill_manaCostBase = 12, attack_damageMore = 1.25, }, - [2] = { skill_manaCostBase = 12, attack_damageMore = 1.271, }, - [3] = { skill_manaCostBase = 12, attack_damageMore = 1.292, }, - [4] = { skill_manaCostBase = 13, attack_damageMore = 1.313, }, - [5] = { skill_manaCostBase = 13, attack_damageMore = 1.334, }, - [6] = { skill_manaCostBase = 13, attack_damageMore = 1.355, }, - [7] = { skill_manaCostBase = 14, attack_damageMore = 1.376, }, - [8] = { skill_manaCostBase = 14, attack_damageMore = 1.397, }, - [9] = { skill_manaCostBase = 14, attack_damageMore = 1.418, }, - [10] = { skill_manaCostBase = 14, attack_damageMore = 1.439, }, - [11] = { skill_manaCostBase = 14, attack_damageMore = 1.46, }, - [12] = { skill_manaCostBase = 15, attack_damageMore = 1.481, }, - [13] = { skill_manaCostBase = 15, attack_damageMore = 1.502, }, - [14] = { skill_manaCostBase = 15, attack_damageMore = 1.523, }, - [15] = { skill_manaCostBase = 15, attack_damageMore = 1.544, }, - [16] = { skill_manaCostBase = 15, attack_damageMore = 1.565, }, - [17] = { skill_manaCostBase = 15, attack_damageMore = 1.586, }, - [18] = { skill_manaCostBase = 15, attack_damageMore = 1.607, }, - [19] = { skill_manaCostBase = 15, attack_damageMore = 1.628, }, - [20] = { skill_manaCostBase = 16, attack_damageMore = 1.649, }, - [21] = { skill_manaCostBase = 16, attack_damageMore = 1.67, }, - [22] = { skill_manaCostBase = 16, attack_damageMore = 1.691, }, - [23] = { skill_manaCostBase = 16, attack_damageMore = 1.712, }, - [24] = { skill_manaCostBase = 16, attack_damageMore = 1.733, }, - [25] = { skill_manaCostBase = 16, attack_damageMore = 1.754, }, - [26] = { skill_manaCostBase = 17, attack_damageMore = 1.775, }, - [27] = { skill_manaCostBase = 17, attack_damageMore = 1.796, }, - [28] = { skill_manaCostBase = 17, attack_damageMore = 1.817, }, - [29] = { skill_manaCostBase = 17, attack_damageMore = 1.838, }, - [30] = { skill_manaCostBase = 17, attack_damageMore = 1.859, }, - } + [1] = { 12, 25, }, + [2] = { 12, 27.1, }, + [3] = { 12, 29.2, }, + [4] = { 13, 31.3, }, + [5] = { 13, 33.4, }, + [6] = { 13, 35.5, }, + [7] = { 14, 37.6, }, + [8] = { 14, 39.7, }, + [9] = { 14, 41.8, }, + [10] = { 14, 43.9, }, + [11] = { 14, 46, }, + [12] = { 15, 48.1, }, + [13] = { 15, 50.2, }, + [14] = { 15, 52.3, }, + [15] = { 15, 54.4, }, + [16] = { 15, 56.5, }, + [17] = { 15, 58.6, }, + [18] = { 15, 60.7, }, + [19] = { 15, 62.8, }, + [20] = { 16, 64.9, }, + [21] = { 16, 67, }, + [22] = { 16, 69.1, }, + [23] = { 16, 71.2, }, + [24] = { 16, 73.3, }, + [25] = { 16, 75.4, }, + [26] = { 17, 77.5, }, + [27] = { 17, 79.6, }, + [28] = { 17, 81.7, }, + [29] = { 17, 83.8, }, + [30] = { 17, 85.9, }, + }, } gems["Earthquake"] = { strength = true, + active_skill = true, attack = true, - melee = true, - aoe = true, + area = true, duration = true, - hit = true, + melee = true, parts = { { name = "Initial impact", @@ -403,334 +541,562 @@ gems["Earthquake"] = { name = "Aftershock", }, }, - base = { - skill_manaCostBase = 10, - skill_durationBase = 1.5, - SkillPart2_attack_damageMore = 1.5, + color = 1, + baseFlags = { + attack = true, + melee = true, + area = true, + duration = true, }, - quality = { - physicalInc = 1, + skillTypes = { [1] = true, [6] = true, [11] = true, [24] = true, [7] = true, [10] = true, [28] = true, [12] = true, }, + baseMods = { + skill("castTime", 1), + skill("manaCost", 10), + skill("duration", 1.5), --"base_skill_effect_duration" = 1500 + mod("Damage", "MORE", 50, ModFlag.Attack, 0, { type = "SkillPart", skillPart = 2 }), --"quake_slam_fully_charged_explosion_damage_+%_final" = 50 + --"is_area_damage" = ? + }, + qualityMods = { + mod("PhysicalDamage", "INC", 1), --"physical_damage_+%" = 1 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { attack_damageMore = 0.9, }, - [2] = { attack_damageMore = 0.91, }, - [3] = { attack_damageMore = 0.92, }, - [4] = { attack_damageMore = 0.93, }, - [5] = { attack_damageMore = 0.94, }, - [6] = { attack_damageMore = 0.95, }, - [7] = { attack_damageMore = 0.96, }, - [8] = { attack_damageMore = 0.97, }, - [9] = { attack_damageMore = 0.98, }, - [10] = { attack_damageMore = 0.99, }, - [11] = { attack_damageMore = 1, }, - [12] = { attack_damageMore = 1.01, }, - [13] = { attack_damageMore = 1.02, }, - [14] = { attack_damageMore = 1.03, }, - [15] = { attack_damageMore = 1.04, }, - [16] = { attack_damageMore = 1.05, }, - [17] = { attack_damageMore = 1.06, }, - [18] = { attack_damageMore = 1.07, }, - [19] = { attack_damageMore = 1.08, }, - [20] = { attack_damageMore = 1.09, }, - [21] = { attack_damageMore = 1.1, }, - [22] = { attack_damageMore = 1.11, }, - [23] = { attack_damageMore = 1.12, }, - [24] = { attack_damageMore = 1.13, }, - [25] = { attack_damageMore = 1.14, }, - [26] = { attack_damageMore = 1.15, }, - [27] = { attack_damageMore = 1.16, }, - [28] = { attack_damageMore = 1.17, }, - [29] = { attack_damageMore = 1.18, }, - [30] = { attack_damageMore = 1.19, }, - } + [1] = { -10, }, + [2] = { -9, }, + [3] = { -8, }, + [4] = { -7, }, + [5] = { -6, }, + [6] = { -5, }, + [7] = { -4, }, + [8] = { -3, }, + [9] = { -2, }, + [10] = { -1, }, + [11] = { nil, }, + [12] = { 1, }, + [13] = { 2, }, + [14] = { 3, }, + [15] = { 4, }, + [16] = { 5, }, + [17] = { 6, }, + [18] = { 7, }, + [19] = { 8, }, + [20] = { 9, }, + [21] = { 10, }, + [22] = { 11, }, + [23] = { 12, }, + [24] = { 13, }, + [25] = { 14, }, + [26] = { 15, }, + [27] = { 16, }, + [28] = { 17, }, + [29] = { 18, }, + [30] = { 19, }, + }, } gems["Enduring Cry"] = { - strength = true, warcry = true, - aoe = true, + strength = true, + active_skill = true, + area = true, duration = true, - base = { - skill_castTime = 0.25, - skill_durationBase = 0.75, + color = 1, + baseFlags = { + warcry = true, + area = true, + duration = true, }, - quality = { - aoeRadiusInc = 3, + skillTypes = { [5] = true, [11] = true, [12] = true, }, + baseMods = { + skill("castTime", 0.25), + skill("duration", 0.75), --"base_skill_effect_duration" = 750 + --"is_warcry" = ? + --"base_deal_no_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 3), --"base_skill_area_of_effect_+%" = 3 + }, + levelMods = { + [1] = skill("manaCost", nil), + --[2] = "endurance_charges_granted_per_one_hundred_nearby_enemies_during_endurance_warcry" + [3] = mod("LifeRegen", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"base_life_regeneration_rate_per_minute" }, levels = { - [1] = { skill_manaCostBase = 17, BuffEffect_lifeRegenBase = 48, }, - [2] = { skill_manaCostBase = 17, BuffEffect_lifeRegenBase = 62, }, - [3] = { skill_manaCostBase = 17, BuffEffect_lifeRegenBase = 76, }, - [4] = { skill_manaCostBase = 17, BuffEffect_lifeRegenBase = 94, }, - [5] = { skill_manaCostBase = 18, BuffEffect_lifeRegenBase = 108, }, - [6] = { skill_manaCostBase = 18, BuffEffect_lifeRegenBase = 122, }, - [7] = { skill_manaCostBase = 18, BuffEffect_lifeRegenBase = 140, }, - [8] = { skill_manaCostBase = 19, BuffEffect_lifeRegenBase = 158, }, - [9] = { skill_manaCostBase = 19, BuffEffect_lifeRegenBase = 176, }, - [10] = { skill_manaCostBase = 19, BuffEffect_lifeRegenBase = 196, }, - [11] = { skill_manaCostBase = 20, BuffEffect_lifeRegenBase = 216, }, - [12] = { skill_manaCostBase = 20, BuffEffect_lifeRegenBase = 238, }, - [13] = { skill_manaCostBase = 20, BuffEffect_lifeRegenBase = 262, }, - [14] = { skill_manaCostBase = 20, BuffEffect_lifeRegenBase = 286, }, - [15] = { skill_manaCostBase = 20, BuffEffect_lifeRegenBase = 302, }, - [16] = { skill_manaCostBase = 21, BuffEffect_lifeRegenBase = 320, }, - [17] = { skill_manaCostBase = 21, BuffEffect_lifeRegenBase = 338, }, - [18] = { skill_manaCostBase = 21, BuffEffect_lifeRegenBase = 356, }, - [19] = { skill_manaCostBase = 21, BuffEffect_lifeRegenBase = 374, }, - [20] = { skill_manaCostBase = 21, BuffEffect_lifeRegenBase = 394, }, - [21] = { skill_manaCostBase = 22, BuffEffect_lifeRegenBase = 414, }, - [22] = { skill_manaCostBase = 22, BuffEffect_lifeRegenBase = 434, }, - [23] = { skill_manaCostBase = 22, BuffEffect_lifeRegenBase = 454, }, - [24] = { skill_manaCostBase = 22, BuffEffect_lifeRegenBase = 476, }, - [25] = { skill_manaCostBase = 22, BuffEffect_lifeRegenBase = 498, }, - [26] = { skill_manaCostBase = 23, BuffEffect_lifeRegenBase = 520, }, - [27] = { skill_manaCostBase = 23, BuffEffect_lifeRegenBase = 544, }, - [28] = { skill_manaCostBase = 23, BuffEffect_lifeRegenBase = 566, }, - [29] = { skill_manaCostBase = 23, BuffEffect_lifeRegenBase = 590, }, - [30] = { skill_manaCostBase = 23, BuffEffect_lifeRegenBase = 614, }, - } + [1] = { 17, 8, 48, }, + [2] = { 17, 10, 62, }, + [3] = { 17, 12, 76, }, + [4] = { 17, 14, 94, }, + [5] = { 18, 16, 108, }, + [6] = { 18, 18, 122, }, + [7] = { 18, 20, 140, }, + [8] = { 19, 22, 158, }, + [9] = { 19, 24, 176, }, + [10] = { 19, 26, 196, }, + [11] = { 20, 27, 216, }, + [12] = { 20, 28, 238, }, + [13] = { 20, 29, 262, }, + [14] = { 20, 30, 286, }, + [15] = { 20, 31, 302, }, + [16] = { 21, 32, 320, }, + [17] = { 21, 33, 338, }, + [18] = { 21, 34, 356, }, + [19] = { 21, 35, 374, }, + [20] = { 21, 36, 394, }, + [21] = { 22, 37, 414, }, + [22] = { 22, 38, 434, }, + [23] = { 22, 39, 454, }, + [24] = { 22, 40, 476, }, + [25] = { 22, 41, 498, }, + [26] = { 23, 42, 520, }, + [27] = { 23, 43, 544, }, + [28] = { 23, 44, 566, }, + [29] = { 23, 45, 590, }, + [30] = { 23, 46, 614, }, + }, } gems["Flame Totem"] = { - strength = true, - spell = true, - totem = true, projectile = true, + totem = true, + strength = true, + active_skill = true, + spell = true, duration = true, fire = true, - hit = true, - base = { - skill_castTime = 0.25, - skill_damageEffectiveness = 0.25, - skill_critChanceBase = 5, - skill_durationBase = 8, + color = 1, + baseFlags = { + spell = true, + totem = true, + projectile = true, + duration = true, + fire = true, }, - quality = { - totemLifeInc = 1, + skillTypes = { [2] = true, [3] = true, [10] = true, [12] = true, [17] = true, [19] = true, [30] = true, [33] = true, }, + skillTotemId = 8, + baseMods = { + skill("castTime", 0.25), + skill("damageEffectiveness", 0.25), + skill("critChance", 5), + --"base_totem_duration" = 8000 + --"base_totem_range" = 100 + --"is_totem" = ? + --"base_skill_is_totemified" = ? + --"base_is_projectile" = ? + mod("PierceChance", "BASE", 100), --"always_pierce" = ? + }, + qualityMods = { + mod("TotemLife", "INC", 1), --"totem_life_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("totemLevel", nil), --"base_active_skill_totem_level" + [3] = skill("FireMin", nil), --"spell_minimum_base_fire_damage" + [4] = skill("FireMax", nil), --"spell_maximum_base_fire_damage" + [5] = mod("ProjectileCount", "BASE", nil), --"number_of_additional_projectiles" }, levels = { - [1] = { skill_manaCostBase = 12, skill_fireMin = 1, skill_fireMax = 2, projectileCount = 0, }, - [2] = { skill_manaCostBase = 14, skill_fireMin = 1, skill_fireMax = 3, projectileCount = 0, }, - [3] = { skill_manaCostBase = 16, skill_fireMin = 2, skill_fireMax = 4, projectileCount = 0, }, - [4] = { skill_manaCostBase = 17, skill_fireMin = 3, skill_fireMax = 5, projectileCount = 0, }, - [5] = { skill_manaCostBase = 19, skill_fireMin = 4, skill_fireMax = 7, projectileCount = 1, }, - [6] = { skill_manaCostBase = 21, skill_fireMin = 6, skill_fireMax = 10, projectileCount = 1, }, - [7] = { skill_manaCostBase = 23, skill_fireMin = 9, skill_fireMax = 13, projectileCount = 1, }, - [8] = { skill_manaCostBase = 24, skill_fireMin = 11, skill_fireMax = 17, projectileCount = 1, }, - [9] = { skill_manaCostBase = 26, skill_fireMin = 14, skill_fireMax = 22, projectileCount = 2, }, - [10] = { skill_manaCostBase = 29, skill_fireMin = 18, skill_fireMax = 28, projectileCount = 2, }, - [11] = { skill_manaCostBase = 31, skill_fireMin = 24, skill_fireMax = 35, projectileCount = 2, }, - [12] = { skill_manaCostBase = 32, skill_fireMin = 30, skill_fireMax = 45, projectileCount = 2, }, - [13] = { skill_manaCostBase = 33, skill_fireMin = 37, skill_fireMax = 56, projectileCount = 2, }, - [14] = { skill_manaCostBase = 34, skill_fireMin = 47, skill_fireMax = 70, projectileCount = 2, }, - [15] = { skill_manaCostBase = 36, skill_fireMin = 55, skill_fireMax = 83, projectileCount = 2, }, - [16] = { skill_manaCostBase = 37, skill_fireMin = 65, skill_fireMax = 97, projectileCount = 2, }, - [17] = { skill_manaCostBase = 39, skill_fireMin = 76, skill_fireMax = 114, projectileCount = 2, }, - [18] = { skill_manaCostBase = 40, skill_fireMin = 89, skill_fireMax = 134, projectileCount = 2, }, - [19] = { skill_manaCostBase = 41, skill_fireMin = 105, skill_fireMax = 157, projectileCount = 2, }, - [20] = { skill_manaCostBase = 42, skill_fireMin = 122, skill_fireMax = 183, projectileCount = 2, }, - [21] = { skill_manaCostBase = 43, skill_fireMin = 136, skill_fireMax = 203, projectileCount = 2, }, - [22] = { skill_manaCostBase = 44, skill_fireMin = 150, skill_fireMax = 225, projectileCount = 2, }, - [23] = { skill_manaCostBase = 45, skill_fireMin = 166, skill_fireMax = 249, projectileCount = 2, }, - [24] = { skill_manaCostBase = 46, skill_fireMin = 184, skill_fireMax = 276, projectileCount = 2, }, - [25] = { skill_manaCostBase = 47, skill_fireMin = 204, skill_fireMax = 305, projectileCount = 2, }, - [26] = { skill_manaCostBase = 48, skill_fireMin = 225, skill_fireMax = 338, projectileCount = 2, }, - [27] = { skill_manaCostBase = 49, skill_fireMin = 249, skill_fireMax = 373, projectileCount = 2, }, - [28] = { skill_manaCostBase = 50, skill_fireMin = 275, skill_fireMax = 412, projectileCount = 2, }, - [29] = { skill_manaCostBase = 51, skill_fireMin = 303, skill_fireMax = 455, projectileCount = 2, }, - [30] = { skill_manaCostBase = 52, skill_fireMin = 335, skill_fireMax = 502, projectileCount = 2, }, - } + [1] = { 12, 4, 1, 2, 0, }, + [2] = { 14, 6, 1, 3, 0, }, + [3] = { 16, 9, 2, 4, 0, }, + [4] = { 17, 12, 3, 5, 0, }, + [5] = { 19, 16, 4, 7, 1, }, + [6] = { 21, 20, 6, 10, 1, }, + [7] = { 23, 24, 9, 13, 1, }, + [8] = { 24, 28, 11, 17, 1, }, + [9] = { 26, 32, 14, 22, 2, }, + [10] = { 29, 36, 18, 28, 2, }, + [11] = { 31, 40, 24, 35, 2, }, + [12] = { 32, 44, 30, 45, 2, }, + [13] = { 33, 48, 37, 56, 2, }, + [14] = { 34, 52, 47, 70, 2, }, + [15] = { 36, 55, 55, 83, 2, }, + [16] = { 37, 58, 65, 97, 2, }, + [17] = { 39, 61, 76, 114, 2, }, + [18] = { 40, 64, 89, 134, 2, }, + [19] = { 41, 67, 105, 157, 2, }, + [20] = { 42, 70, 122, 183, 2, }, + [21] = { 43, 72, 136, 203, 2, }, + [22] = { 44, 74, 150, 225, 2, }, + [23] = { 45, 76, 166, 249, 2, }, + [24] = { 46, 78, 184, 276, 2, }, + [25] = { 47, 80, 204, 305, 2, }, + [26] = { 48, 82, 225, 338, 2, }, + [27] = { 49, 84, 249, 373, 2, }, + [28] = { 50, 86, 275, 412, 2, }, + [29] = { 51, 88, 303, 455, 2, }, + [30] = { 52, 90, 335, 502, 2, }, + }, } gems["Glacial Hammer"] = { strength = true, + active_skill = true, attack = true, melee = true, cold = true, - hit = true, -- This is a buff - base = { - skill_manaCostBase = 5, - skill_physicalConvertTocold = 50, + color = 1, + baseFlags = { + attack = true, + melee = true, + cold = true, }, - quality = { - chill_durationInc = 2, - freeze_durationInc = 1, + skillTypes = { [1] = true, [6] = true, [25] = true, [28] = true, [24] = true, [34] = true, }, + baseMods = { + skill("castTime", 1), + skill("manaCost", 5), + skill("PhysicalDamageConvertToCold", 50), --"skill_physical_damage_%_to_convert_to_cold" = 50 + mod("EnemyFreezeChance", "BASE", 25), --"base_chance_to_freeze_%" = 25 + mod("EnemyChillDuration", "INC", 35), --"chill_duration_+%" = 35 + }, + qualityMods = { + mod("EnemyChillDuration", "INC", 2), --"chill_duration_+%" = 2 + mod("EnemyFreezeDuration", "INC", 1), --"freeze_duration_+%" = 1 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { attack_damageMore = 1.4, }, - [2] = { attack_damageMore = 1.422, }, - [3] = { attack_damageMore = 1.444, }, - [4] = { attack_damageMore = 1.466, }, - [5] = { attack_damageMore = 1.488, }, - [6] = { attack_damageMore = 1.51, }, - [7] = { attack_damageMore = 1.532, }, - [8] = { attack_damageMore = 1.554, }, - [9] = { attack_damageMore = 1.576, }, - [10] = { attack_damageMore = 1.598, }, - [11] = { attack_damageMore = 1.62, }, - [12] = { attack_damageMore = 1.642, }, - [13] = { attack_damageMore = 1.664, }, - [14] = { attack_damageMore = 1.686, }, - [15] = { attack_damageMore = 1.708, }, - [16] = { attack_damageMore = 1.73, }, - [17] = { attack_damageMore = 1.752, }, - [18] = { attack_damageMore = 1.774, }, - [19] = { attack_damageMore = 1.796, }, - [20] = { attack_damageMore = 1.818, }, - [21] = { attack_damageMore = 1.84, }, - [22] = { attack_damageMore = 1.862, }, - [23] = { attack_damageMore = 1.884, }, - [24] = { attack_damageMore = 1.906, }, - [25] = { attack_damageMore = 1.928, }, - [26] = { attack_damageMore = 1.95, }, - [27] = { attack_damageMore = 1.972, }, - [28] = { attack_damageMore = 1.994, }, - [29] = { attack_damageMore = 2.016, }, - [30] = { attack_damageMore = 2.038, }, - } + [1] = { 40, }, + [2] = { 42.2, }, + [3] = { 44.4, }, + [4] = { 46.6, }, + [5] = { 48.8, }, + [6] = { 51, }, + [7] = { 53.2, }, + [8] = { 55.4, }, + [9] = { 57.6, }, + [10] = { 59.8, }, + [11] = { 62, }, + [12] = { 64.2, }, + [13] = { 66.4, }, + [14] = { 68.6, }, + [15] = { 70.8, }, + [16] = { 73, }, + [17] = { 75.2, }, + [18] = { 77.4, }, + [19] = { 79.6, }, + [20] = { 81.8, }, + [21] = { 84, }, + [22] = { 86.2, }, + [23] = { 88.4, }, + [24] = { 90.6, }, + [25] = { 92.8, }, + [26] = { 95, }, + [27] = { 97.2, }, + [28] = { 99.4, }, + [29] = { 101.6, }, + [30] = { 103.8, }, + }, +} +gems["Vaal Glacial Hammer"] = { + strength = true, + active_skill = true, + vaal = true, + attack = true, + melee = true, + duration = true, + area = true, + cold = true, + color = 1, + baseFlags = { + attack = true, + melee = true, + area = true, + duration = true, + cold = true, + vaal = true, + }, + skillTypes = { [1] = true, [6] = true, [25] = true, [28] = true, [24] = true, [12] = true, [11] = true, [43] = true, [34] = true, }, + baseMods = { + skill("castTime", 1), + skill("PhysicalDamageConvertToCold", 50), --"skill_physical_damage_%_to_convert_to_cold" = 50 + mod("EnemyFreezeChance", "BASE", 25), --"base_chance_to_freeze_%" = 25 + mod("EnemyChillDuration", "INC", 35), --"chill_duration_+%" = 35 + }, + qualityMods = { + mod("EnemyChillDuration", "INC", 2), --"chill_duration_+%" = 2 + mod("EnemyFreezeDuration", "INC", 1), --"freeze_duration_+%" = 1 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), + [2] = skill("duration", nil), --"base_skill_effect_duration" + }, + levels = { + [1] = { 50, 3.4, }, + [2] = { 51.8, 3.45, }, + [3] = { 53.6, 3.5, }, + [4] = { 55.4, 3.55, }, + [5] = { 57.2, 3.6, }, + [6] = { 59, 3.65, }, + [7] = { 60.8, 3.7, }, + [8] = { 62.6, 3.75, }, + [9] = { 64.4, 3.8, }, + [10] = { 66.2, 3.85, }, + [11] = { 68, 3.9, }, + [12] = { 69.8, 3.95, }, + [13] = { 71.6, 4, }, + [14] = { 73.4, 4.05, }, + [15] = { 75.2, 4.1, }, + [16] = { 77, 4.15, }, + [17] = { 78.8, 4.2, }, + [18] = { 80.6, 4.25, }, + [19] = { 82.4, 4.3, }, + [20] = { 84.2, 4.35, }, + [21] = { 86, 4.4, }, + [22] = { 87.8, 4.45, }, + [23] = { 89.6, 4.5, }, + [24] = { 91.4, 4.55, }, + [25] = { 93.2, 4.6, }, + [26] = { 95, 4.65, }, + [27] = { 96.8, 4.7, }, + [28] = { 98.6, 4.75, }, + [29] = { 100.4, 4.8, }, + [30] = { 102.2, 4.85, }, + }, } gems["Ground Slam"] = { strength = true, + active_skill = true, attack = true, + area = true, melee = true, - aoe = true, - hit = true, - base = { - skill_manaCostBase = 6, - stunEnemyThresholdInc = -25, + color = 1, + baseFlags = { + attack = true, + melee = true, + area = true, }, - quality = { - stunEnemyDurationInc = 1.5, + skillTypes = { [1] = true, [6] = true, [7] = true, [11] = true, [28] = true, [24] = true, }, + baseMods = { + skill("castTime", 1), + skill("manaCost", 6), + mod("EnemyStunThreshold", "INC", -25), --"base_stun_threshold_reduction_+%" = 25 + --"is_area_damage" = ? + }, + qualityMods = { + mod("EnemyStunDuration", "INC", 1.5), --"base_stun_duration_+%" = 1.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), + [2] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" }, levels = { - [1] = { attack_damageMore = 0.9, aoeRadiusInc = 0, }, - [2] = { attack_damageMore = 0.916, aoeRadiusInc = 1, }, - [3] = { attack_damageMore = 0.932, aoeRadiusInc = 2, }, - [4] = { attack_damageMore = 0.948, aoeRadiusInc = 3, }, - [5] = { attack_damageMore = 0.964, aoeRadiusInc = 4, }, - [6] = { attack_damageMore = 0.98, aoeRadiusInc = 5, }, - [7] = { attack_damageMore = 0.996, aoeRadiusInc = 6, }, - [8] = { attack_damageMore = 1.012, aoeRadiusInc = 7, }, - [9] = { attack_damageMore = 1.028, aoeRadiusInc = 8, }, - [10] = { attack_damageMore = 1.044, aoeRadiusInc = 9, }, - [11] = { attack_damageMore = 1.06, aoeRadiusInc = 10, }, - [12] = { attack_damageMore = 1.076, aoeRadiusInc = 11, }, - [13] = { attack_damageMore = 1.092, aoeRadiusInc = 12, }, - [14] = { attack_damageMore = 1.108, aoeRadiusInc = 13, }, - [15] = { attack_damageMore = 1.124, aoeRadiusInc = 14, }, - [16] = { attack_damageMore = 1.14, aoeRadiusInc = 15, }, - [17] = { attack_damageMore = 1.156, aoeRadiusInc = 16, }, - [18] = { attack_damageMore = 1.172, aoeRadiusInc = 17, }, - [19] = { attack_damageMore = 1.188, aoeRadiusInc = 18, }, - [20] = { attack_damageMore = 1.204, aoeRadiusInc = 19, }, - [21] = { attack_damageMore = 1.22, aoeRadiusInc = 20, }, - [22] = { attack_damageMore = 1.236, aoeRadiusInc = 21, }, - [23] = { attack_damageMore = 1.252, aoeRadiusInc = 22, }, - [24] = { attack_damageMore = 1.268, aoeRadiusInc = 23, }, - [25] = { attack_damageMore = 1.284, aoeRadiusInc = 24, }, - [26] = { attack_damageMore = 1.3, aoeRadiusInc = 25, }, - [27] = { attack_damageMore = 1.316, aoeRadiusInc = 26, }, - [28] = { attack_damageMore = 1.332, aoeRadiusInc = 27, }, - [29] = { attack_damageMore = 1.348, aoeRadiusInc = 28, }, - [30] = { attack_damageMore = 1.364, aoeRadiusInc = 29, }, - } + [1] = { -10, 0, }, + [2] = { -8.4, 1, }, + [3] = { -6.8, 2, }, + [4] = { -5.2, 3, }, + [5] = { -3.6, 4, }, + [6] = { -2, 5, }, + [7] = { -0.4, 6, }, + [8] = { 1.2, 7, }, + [9] = { 2.8, 8, }, + [10] = { 4.4, 9, }, + [11] = { 6, 10, }, + [12] = { 7.6, 11, }, + [13] = { 9.2, 12, }, + [14] = { 10.8, 13, }, + [15] = { 12.4, 14, }, + [16] = { 14, 15, }, + [17] = { 15.6, 16, }, + [18] = { 17.2, 17, }, + [19] = { 18.8, 18, }, + [20] = { 20.4, 19, }, + [21] = { 22, 20, }, + [22] = { 23.6, 21, }, + [23] = { 25.2, 22, }, + [24] = { 26.8, 23, }, + [25] = { 28.4, 24, }, + [26] = { 30, 25, }, + [27] = { 31.6, 26, }, + [28] = { 33.2, 27, }, + [29] = { 34.8, 28, }, + [30] = { 36.4, 29, }, + }, +} +gems["Vaal Ground Slam"] = { + strength = true, + active_skill = true, + vaal = true, + attack = true, + area = true, + melee = true, + color = 1, + baseFlags = { + attack = true, + melee = true, + area = true, + vaal = true, + }, + skillTypes = { [1] = true, [6] = true, [7] = true, [11] = true, [28] = true, [24] = true, [43] = true, }, + baseMods = { + skill("castTime", 1), + --"knockback_distance_+%" = 100 + --"animation_effect_variation" = -1 + mod("AreaRadius", "INC", 20), --"base_skill_area_of_effect_+%" = 20 + --"always_stun" = ? + --"global_knockback" = ? + --"is_area_damage" = ? + skill("cannotBeEvaded", true), --"global_always_hit" = ? + }, + qualityMods = { + mod("EnemyStunDuration", "INC", 1.5), --"base_stun_duration_+%" = 1.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), + }, + levels = { + [1] = { 60, }, + [2] = { 62, }, + [3] = { 64, }, + [4] = { 66, }, + [5] = { 68, }, + [6] = { 70, }, + [7] = { 72, }, + [8] = { 74, }, + [9] = { 76, }, + [10] = { 78, }, + [11] = { 80, }, + [12] = { 82, }, + [13] = { 84, }, + [14] = { 86, }, + [15] = { 88, }, + [16] = { 90, }, + [17] = { 92, }, + [18] = { 94, }, + [19] = { 96, }, + [20] = { 98, }, + [21] = { 100, }, + [22] = { 102, }, + [23] = { 104, }, + [24] = { 106, }, + [25] = { 108, }, + [26] = { 110, }, + [27] = { 112, }, + [28] = { 114, }, + [29] = { 116, }, + [30] = { 118, }, + }, } gems["Heavy Strike"] = { strength = true, + active_skill = true, attack = true, melee = true, - hit = true, - base = { - skill_manaCostBase = 5, - stunEnemyThresholdInc = -25, + color = 1, + baseFlags = { + attack = true, + melee = true, }, - quality = { - stunEnemyDurationInc = 1, + skillTypes = { [1] = true, [6] = true, [25] = true, [28] = true, [24] = true, }, + baseMods = { + skill("castTime", 1), + skill("manaCost", 5), + --"global_knockback" = 1 + mod("EnemyStunThreshold", "INC", -25), --"base_stun_threshold_reduction_+%" = 25 + }, + qualityMods = { + mod("EnemyStunDuration", "INC", 1), --"base_stun_duration_+%" = 1 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { attack_damageMore = 1.5, }, - [2] = { attack_damageMore = 1.523, }, - [3] = { attack_damageMore = 1.546, }, - [4] = { attack_damageMore = 1.569, }, - [5] = { attack_damageMore = 1.592, }, - [6] = { attack_damageMore = 1.615, }, - [7] = { attack_damageMore = 1.638, }, - [8] = { attack_damageMore = 1.661, }, - [9] = { attack_damageMore = 1.684, }, - [10] = { attack_damageMore = 1.707, }, - [11] = { attack_damageMore = 1.73, }, - [12] = { attack_damageMore = 1.753, }, - [13] = { attack_damageMore = 1.776, }, - [14] = { attack_damageMore = 1.799, }, - [15] = { attack_damageMore = 1.822, }, - [16] = { attack_damageMore = 1.845, }, - [17] = { attack_damageMore = 1.868, }, - [18] = { attack_damageMore = 1.891, }, - [19] = { attack_damageMore = 1.914, }, - [20] = { attack_damageMore = 1.937, }, - [21] = { attack_damageMore = 1.96, }, - [22] = { attack_damageMore = 1.983, }, - [23] = { attack_damageMore = 2.006, }, - [24] = { attack_damageMore = 2.029, }, - [25] = { attack_damageMore = 2.052, }, - [26] = { attack_damageMore = 2.075, }, - [27] = { attack_damageMore = 2.098, }, - [28] = { attack_damageMore = 2.121, }, - [29] = { attack_damageMore = 2.144, }, - [30] = { attack_damageMore = 2.167, }, - } + [1] = { 50, }, + [2] = { 52.3, }, + [3] = { 54.6, }, + [4] = { 56.9, }, + [5] = { 59.2, }, + [6] = { 61.5, }, + [7] = { 63.8, }, + [8] = { 66.1, }, + [9] = { 68.4, }, + [10] = { 70.7, }, + [11] = { 73, }, + [12] = { 75.3, }, + [13] = { 77.6, }, + [14] = { 79.9, }, + [15] = { 82.2, }, + [16] = { 84.5, }, + [17] = { 86.8, }, + [18] = { 89.1, }, + [19] = { 91.4, }, + [20] = { 93.7, }, + [21] = { 96, }, + [22] = { 98.3, }, + [23] = { 100.6, }, + [24] = { 102.9, }, + [25] = { 105.2, }, + [26] = { 107.5, }, + [27] = { 109.8, }, + [28] = { 112.1, }, + [29] = { 114.4, }, + [30] = { 116.7, }, + }, } gems["Herald of Ash"] = { strength = true, + active_skill = true, spell = true, - aoe = true, + area = true, fire = true, - hit = true, - base = { - skill_castTime = 1, - skill_manaReservedPercent = 25, - BuffEffect_physicalGainAsfire = 15, + color = 1, + baseFlags = { + spell = true, + area = true, + fire = true, }, - quality = { - BuffEffect_fireInc = 0.75, + skillTypes = { [2] = true, [5] = true, [15] = true, [16] = true, [29] = true, [11] = true, [40] = true, [20] = true, [33] = true, }, + baseMods = { + skill("castTime", 1), + skill("manaCost", 25), + mod("PhysicalDamageGainAsFire", "BASE", 15, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"physical_damage_%_to_add_as_fire" = 15 + --"is_area_damage" = ? + }, + qualityMods = { + mod("FireDamage", "INC", 0.75, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"herald_of_ash_fire_damage_+%" = 0.75 + }, + levelMods = { + --[1] = "herald_of_ash_%_overkill_dealt_as_ignite" }, levels = { - [1] = { }, - [2] = { }, - [3] = { }, - [4] = { }, - [5] = { }, - [6] = { }, - [7] = { }, - [8] = { }, - [9] = { }, - [10] = { }, - [11] = { }, - [12] = { }, - [13] = { }, - [14] = { }, - [15] = { }, - [16] = { }, - [17] = { }, - [18] = { }, - [19] = { }, - [20] = { }, - [21] = { }, - [22] = { }, - [23] = { }, - [24] = { }, - [25] = { }, - [26] = { }, - [27] = { }, - [28] = { }, - [29] = { }, - [30] = { }, - } + [1] = { 80, }, + [2] = { 83, }, + [3] = { 86, }, + [4] = { 89, }, + [5] = { 92, }, + [6] = { 95, }, + [7] = { 98, }, + [8] = { 101, }, + [9] = { 104, }, + [10] = { 107, }, + [11] = { 110, }, + [12] = { 113, }, + [13] = { 116, }, + [14] = { 119, }, + [15] = { 122, }, + [16] = { 125, }, + [17] = { 128, }, + [18] = { 131, }, + [19] = { 134, }, + [20] = { 137, }, + [21] = { 140, }, + [22] = { 143, }, + [23] = { 146, }, + [24] = { 149, }, + [25] = { 152, }, + [26] = { 155, }, + [27] = { 158, }, + [28] = { 161, }, + [29] = { 164, }, + [30] = { 167, }, + }, } gems["Ice Crash"] = { strength = true, + active_skill = true, attack = true, - melee = true, - aoe = true, + area = true, cold = true, - hit = true, + melee = true, parts = { { name = "First Hit", @@ -742,793 +1108,1179 @@ gems["Ice Crash"] = { name = "Third Hit", }, }, - base = { - skill_manaCostBase = 8, - skill_physicalConvertTocold = 50, - attackSpeedMore = 0.8, - SkillPart2_attack_damageMore = 0.85, - SkillPart3_attack_damageMore = 0.7, + color = 1, + baseFlags = { + attack = true, + melee = true, + area = true, + cold = true, }, - quality = { - coldInc = 1, + skillTypes = { [1] = true, [6] = true, [11] = true, [24] = true, [7] = true, [34] = true, }, + baseMods = { + skill("castTime", 1), + skill("manaCost", 8), + mod("PhysicalDamageConvertToCold", "BASE", 50, 0, 0, nil), --"base_physical_damage_%_to_convert_to_cold" = 50 + mod("Speed", "MORE", -20, ModFlag.Attack), --"active_skill_attack_speed_+%_final" = -20 + mod("Damage", "MORE", -15, ModFlag.Attack, 0, { type = "SkillPart", skillPart = 2 }), --"ice_crash_second_hit_damage_+%_final" = -15 + mod("Damage", "MORE", -30, ModFlag.Attack, 0, { type = "SkillPart", skillPart = 3 }), --"ice_crash_third_hit_damage_+%_final" = -30 + --"is_area_damage" = ? + }, + qualityMods = { + mod("ColdDamage", "INC", 1), --"cold_damage_+%" = 1 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { attack_damageMore = 1.5, }, - [2] = { attack_damageMore = 1.518, }, - [3] = { attack_damageMore = 1.536, }, - [4] = { attack_damageMore = 1.554, }, - [5] = { attack_damageMore = 1.572, }, - [6] = { attack_damageMore = 1.59, }, - [7] = { attack_damageMore = 1.608, }, - [8] = { attack_damageMore = 1.626, }, - [9] = { attack_damageMore = 1.644, }, - [10] = { attack_damageMore = 1.662, }, - [11] = { attack_damageMore = 1.68, }, - [12] = { attack_damageMore = 1.698, }, - [13] = { attack_damageMore = 1.716, }, - [14] = { attack_damageMore = 1.734, }, - [15] = { attack_damageMore = 1.752, }, - [16] = { attack_damageMore = 1.77, }, - [17] = { attack_damageMore = 1.788, }, - [18] = { attack_damageMore = 1.806, }, - [19] = { attack_damageMore = 1.824, }, - [20] = { attack_damageMore = 1.842, }, - [21] = { attack_damageMore = 1.86, }, - [22] = { attack_damageMore = 1.878, }, - [23] = { attack_damageMore = 1.896, }, - [24] = { attack_damageMore = 1.914, }, - [25] = { attack_damageMore = 1.932, }, - [26] = { attack_damageMore = 1.95, }, - [27] = { attack_damageMore = 1.968, }, - [28] = { attack_damageMore = 1.986, }, - [29] = { attack_damageMore = 2.004, }, - [30] = { attack_damageMore = 2.022, }, - } + [1] = { 50, }, + [2] = { 51.8, }, + [3] = { 53.6, }, + [4] = { 55.4, }, + [5] = { 57.2, }, + [6] = { 59, }, + [7] = { 60.8, }, + [8] = { 62.6, }, + [9] = { 64.4, }, + [10] = { 66.2, }, + [11] = { 68, }, + [12] = { 69.8, }, + [13] = { 71.6, }, + [14] = { 73.4, }, + [15] = { 75.2, }, + [16] = { 77, }, + [17] = { 78.8, }, + [18] = { 80.6, }, + [19] = { 82.4, }, + [20] = { 84.2, }, + [21] = { 86, }, + [22] = { 87.8, }, + [23] = { 89.6, }, + [24] = { 91.4, }, + [25] = { 93.2, }, + [26] = { 95, }, + [27] = { 96.8, }, + [28] = { 98.6, }, + [29] = { 100.4, }, + [30] = { 102.2, }, + }, } gems["Immortal Call"] = { strength = true, + active_skill = true, spell = true, duration = true, - base = { - skill_castTime = 0.85, - skill_durationBase = 0.4, + color = 1, + baseFlags = { + spell = true, + duration = true, }, - quality = { - castSpeedInc = 2, + skillTypes = { [2] = true, [5] = true, [12] = true, [18] = true, [36] = true, }, + baseMods = { + skill("castTime", 0.85), + skill("duration", 0.4), --"base_skill_effect_duration" = 400 + --"base_deal_no_damage" = ? + }, + qualityMods = { + mod("Speed", "INC", 2, ModFlag.Spell), --"base_cast_speed_+%" = 2 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = mod("Duration", "INC", nil, 0, 0, { type = "Multiplier", var = "EnduranceCharge" }), --"buff_effect_duration_+%_per_endurance_charge" }, levels = { - [1] = { skill_manaCostBase = 21, PerEndurance_durationInc = 100, }, - [2] = { skill_manaCostBase = 22, PerEndurance_durationInc = 103, }, - [3] = { skill_manaCostBase = 23, PerEndurance_durationInc = 106, }, - [4] = { skill_manaCostBase = 24, PerEndurance_durationInc = 109, }, - [5] = { skill_manaCostBase = 25, PerEndurance_durationInc = 112, }, - [6] = { skill_manaCostBase = 25, PerEndurance_durationInc = 115, }, - [7] = { skill_manaCostBase = 26, PerEndurance_durationInc = 118, }, - [8] = { skill_manaCostBase = 27, PerEndurance_durationInc = 121, }, - [9] = { skill_manaCostBase = 28, PerEndurance_durationInc = 124, }, - [10] = { skill_manaCostBase = 29, PerEndurance_durationInc = 127, }, - [11] = { skill_manaCostBase = 30, PerEndurance_durationInc = 130, }, - [12] = { skill_manaCostBase = 31, PerEndurance_durationInc = 133, }, - [13] = { skill_manaCostBase = 31, PerEndurance_durationInc = 136, }, - [14] = { skill_manaCostBase = 32, PerEndurance_durationInc = 139, }, - [15] = { skill_manaCostBase = 33, PerEndurance_durationInc = 142, }, - [16] = { skill_manaCostBase = 34, PerEndurance_durationInc = 145, }, - [17] = { skill_manaCostBase = 35, PerEndurance_durationInc = 148, }, - [18] = { skill_manaCostBase = 36, PerEndurance_durationInc = 151, }, - [19] = { skill_manaCostBase = 36, PerEndurance_durationInc = 154, }, - [20] = { skill_manaCostBase = 36, PerEndurance_durationInc = 157, }, - [21] = { skill_manaCostBase = 37, PerEndurance_durationInc = 160, }, - [22] = { skill_manaCostBase = 38, PerEndurance_durationInc = 163, }, - [23] = { skill_manaCostBase = 39, PerEndurance_durationInc = 166, }, - [24] = { skill_manaCostBase = 40, PerEndurance_durationInc = 169, }, - [25] = { skill_manaCostBase = 41, PerEndurance_durationInc = 172, }, - [26] = { skill_manaCostBase = 41, PerEndurance_durationInc = 175, }, - [27] = { skill_manaCostBase = 42, PerEndurance_durationInc = 178, }, - [28] = { skill_manaCostBase = 43, PerEndurance_durationInc = 181, }, - [29] = { skill_manaCostBase = 44, PerEndurance_durationInc = 184, }, - [30] = { skill_manaCostBase = 45, PerEndurance_durationInc = 187, }, - } + [1] = { 21, 100, }, + [2] = { 22, 103, }, + [3] = { 23, 106, }, + [4] = { 24, 109, }, + [5] = { 25, 112, }, + [6] = { 25, 115, }, + [7] = { 26, 118, }, + [8] = { 27, 121, }, + [9] = { 28, 124, }, + [10] = { 29, 127, }, + [11] = { 30, 130, }, + [12] = { 31, 133, }, + [13] = { 31, 136, }, + [14] = { 32, 139, }, + [15] = { 33, 142, }, + [16] = { 34, 145, }, + [17] = { 35, 148, }, + [18] = { 36, 151, }, + [19] = { 36, 154, }, + [20] = { 36, 157, }, + [21] = { 37, 160, }, + [22] = { 38, 163, }, + [23] = { 39, 166, }, + [24] = { 40, 169, }, + [25] = { 41, 172, }, + [26] = { 41, 175, }, + [27] = { 42, 178, }, + [28] = { 43, 181, }, + [29] = { 44, 184, }, + [30] = { 45, 187, }, + }, +} +gems["Vaal Immortal Call"] = { + strength = true, + active_skill = true, + vaal = true, + spell = true, + duration = true, + color = 1, + baseFlags = { + spell = true, + duration = true, + vaal = true, + }, + skillTypes = { [2] = true, [5] = true, [12] = true, [18] = true, [43] = true, }, + baseMods = { + skill("castTime", 0.85), + skill("duration", 0.4), --"base_skill_effect_duration" = 400 + --"immortal_call_prevent_all_damage" = ? + --"base_deal_no_damage" = ? + }, + qualityMods = { + mod("Speed", "INC", 2, ModFlag.Spell), --"base_cast_speed_+%" = 2 + }, + levelMods = { + [1] = mod("Duration", "INC", nil, 0, 0, { type = "Multiplier", var = "EnduranceCharge" }), --"buff_effect_duration_+%_per_endurance_charge" + }, + levels = { + [1] = { 100, }, + [2] = { 103, }, + [3] = { 106, }, + [4] = { 109, }, + [5] = { 112, }, + [6] = { 115, }, + [7] = { 118, }, + [8] = { 121, }, + [9] = { 124, }, + [10] = { 127, }, + [11] = { 130, }, + [12] = { 133, }, + [13] = { 136, }, + [14] = { 139, }, + [15] = { 142, }, + [16] = { 145, }, + [17] = { 148, }, + [18] = { 151, }, + [19] = { 154, }, + [20] = { 157, }, + [21] = { 160, }, + [22] = { 163, }, + [23] = { 166, }, + [24] = { 169, }, + [25] = { 172, }, + [26] = { 175, }, + [27] = { 178, }, + [28] = { 181, }, + [29] = { 184, }, + [30] = { 187, }, + }, } gems["Infernal Blow"] = { strength = true, + active_skill = true, attack = true, + area = true, melee = true, - aoe = true, fire = true, - hit = true, - base = { - skill_manaCostBase = 6, - skill_physicalConvertTofire = 50, + color = 1, + baseFlags = { + attack = true, + melee = true, + area = true, + fire = true, }, - quality = { - aoeRadiusInc = 0.5, + skillTypes = { [1] = true, [6] = true, [11] = true, [25] = true, [28] = true, [24] = true, [33] = true, }, + baseMods = { + skill("castTime", 1), + skill("manaCost", 6), + skill("critChance", 5), + skill("PhysicalDamageConvertToFire", 50), --"skill_physical_damage_%_to_convert_to_fire" = 50 + skill("duration", 0.5), --"base_skill_effect_duration" = 500 + --"corpse_explosion_monster_life_%" = 10 + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { attack_damageMore = 1.3, }, - [2] = { attack_damageMore = 1.316, }, - [3] = { attack_damageMore = 1.332, }, - [4] = { attack_damageMore = 1.348, }, - [5] = { attack_damageMore = 1.364, }, - [6] = { attack_damageMore = 1.38, }, - [7] = { attack_damageMore = 1.396, }, - [8] = { attack_damageMore = 1.412, }, - [9] = { attack_damageMore = 1.428, }, - [10] = { attack_damageMore = 1.444, }, - [11] = { attack_damageMore = 1.46, }, - [12] = { attack_damageMore = 1.476, }, - [13] = { attack_damageMore = 1.492, }, - [14] = { attack_damageMore = 1.508, }, - [15] = { attack_damageMore = 1.524, }, - [16] = { attack_damageMore = 1.54, }, - [17] = { attack_damageMore = 1.556, }, - [18] = { attack_damageMore = 1.572, }, - [19] = { attack_damageMore = 1.588, }, - [20] = { attack_damageMore = 1.604, }, - [21] = { attack_damageMore = 1.62, }, - [22] = { attack_damageMore = 1.636, }, - [23] = { attack_damageMore = 1.652, }, - [24] = { attack_damageMore = 1.668, }, - [25] = { attack_damageMore = 1.684, }, - [26] = { attack_damageMore = 1.7, }, - [27] = { attack_damageMore = 1.716, }, - [28] = { attack_damageMore = 1.732, }, - [29] = { attack_damageMore = 1.748, }, - [30] = { attack_damageMore = 1.764, }, - } + [1] = { 30, }, + [2] = { 31.6, }, + [3] = { 33.2, }, + [4] = { 34.8, }, + [5] = { 36.4, }, + [6] = { 38, }, + [7] = { 39.6, }, + [8] = { 41.2, }, + [9] = { 42.8, }, + [10] = { 44.4, }, + [11] = { 46, }, + [12] = { 47.6, }, + [13] = { 49.2, }, + [14] = { 50.8, }, + [15] = { 52.4, }, + [16] = { 54, }, + [17] = { 55.6, }, + [18] = { 57.2, }, + [19] = { 58.8, }, + [20] = { 60.4, }, + [21] = { 62, }, + [22] = { 63.6, }, + [23] = { 65.2, }, + [24] = { 66.8, }, + [25] = { 68.4, }, + [26] = { 70, }, + [27] = { 71.6, }, + [28] = { 73.2, }, + [29] = { 74.8, }, + [30] = { 76.4, }, + }, } gems["Leap Slam"] = { strength = true, + active_skill = true, attack = true, - melee = true, - aoe = true, + area = true, movement = true, - hit = true, - base = { - skill_attackTime = 1.4, - skill_manaCostBase = 15, + melee = true, + color = 1, + baseFlags = { + attack = true, + melee = true, + area = true, + movement = true, }, - quality = { + skillTypes = { [1] = true, [6] = true, [7] = true, [11] = true, [24] = true, [38] = true, }, + baseMods = { + skill("castTime", 1.4), + skill("manaCost", 15), + --"base_global_chance_to_knockback_%" = 20 + --"is_area_damage" = ? + skill("castTimeOverridesAttackTime", true), --"cast_time_overrides_attack_duration" = ? + }, + qualityMods = { + --"base_global_chance_to_knockback_%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { attack_damageMore = 1, }, - [2] = { attack_damageMore = 1.012, }, - [3] = { attack_damageMore = 1.024, }, - [4] = { attack_damageMore = 1.036, }, - [5] = { attack_damageMore = 1.048, }, - [6] = { attack_damageMore = 1.06, }, - [7] = { attack_damageMore = 1.072, }, - [8] = { attack_damageMore = 1.084, }, - [9] = { attack_damageMore = 1.096, }, - [10] = { attack_damageMore = 1.108, }, - [11] = { attack_damageMore = 1.12, }, - [12] = { attack_damageMore = 1.132, }, - [13] = { attack_damageMore = 1.144, }, - [14] = { attack_damageMore = 1.156, }, - [15] = { attack_damageMore = 1.168, }, - [16] = { attack_damageMore = 1.18, }, - [17] = { attack_damageMore = 1.192, }, - [18] = { attack_damageMore = 1.204, }, - [19] = { attack_damageMore = 1.216, }, - [20] = { attack_damageMore = 1.228, }, - [21] = { attack_damageMore = 1.24, }, - [22] = { attack_damageMore = 1.252, }, - [23] = { attack_damageMore = 1.264, }, - [24] = { attack_damageMore = 1.276, }, - [25] = { attack_damageMore = 1.288, }, - [26] = { attack_damageMore = 1.3, }, - [27] = { attack_damageMore = 1.312, }, - [28] = { attack_damageMore = 1.324, }, - [29] = { attack_damageMore = 1.336, }, - [30] = { attack_damageMore = 1.348, }, - } + [1] = { nil, }, + [2] = { 1.2, }, + [3] = { 2.4, }, + [4] = { 3.6, }, + [5] = { 4.8, }, + [6] = { 6, }, + [7] = { 7.2, }, + [8] = { 8.4, }, + [9] = { 9.6, }, + [10] = { 10.8, }, + [11] = { 12, }, + [12] = { 13.2, }, + [13] = { 14.4, }, + [14] = { 15.6, }, + [15] = { 16.8, }, + [16] = { 18, }, + [17] = { 19.2, }, + [18] = { 20.4, }, + [19] = { 21.6, }, + [20] = { 22.8, }, + [21] = { 24, }, + [22] = { 25.2, }, + [23] = { 26.4, }, + [24] = { 27.6, }, + [25] = { 28.8, }, + [26] = { 30, }, + [27] = { 31.2, }, + [28] = { 32.4, }, + [29] = { 33.6, }, + [30] = { 34.8, }, + }, } gems["Molten Shell"] = { strength = true, + active_skill = true, spell = true, - aoe = true, + area = true, duration = true, fire = true, - showAverage = true, - hit = true, - base = { - skill_castTime = 0.5, - skill_damageEffectiveness = 2, - skill_critChanceBase = 5, - skill_durationBase = 10, + color = 1, + baseFlags = { + spell = true, + area = true, + duration = true, + fire = true, }, - quality = { - igniteChance = 1, + skillTypes = { [2] = true, [10] = true, [11] = true, [12] = true, [18] = true, [31] = true, [36] = true, [26] = true, [33] = true, }, + baseMods = { + skill("castTime", 0.5), + skill("damageEffectiveness", 2), + skill("critChance", 5), + mod("ElementalResist", "BASE", 0, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"base_resist_all_elements_%" = 0 + --"is_area_damage" = 1 + skill("duration", 10), --"base_skill_effect_duration" = 10000 + --"skill_override_pvp_scaling_time_ms" = 1200 + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + }, + qualityMods = { + mod("EnemyIgniteChance", "BASE", 1), --"base_chance_to_ignite_%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("FireMin", nil), --"spell_minimum_base_fire_damage" + [3] = skill("FireMax", nil), --"spell_maximum_base_fire_damage" + --[4] = "fire_shield_damage_threshold" + [5] = mod("Armour", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"base_physical_damage_reduction_rating" }, levels = { - [1] = { skill_manaCostBase = 8, skill_fireMin = 14, skill_fireMax = 20, BuffEffect_armourBase = 17, }, - [2] = { skill_manaCostBase = 9, skill_fireMin = 17, skill_fireMax = 26, BuffEffect_armourBase = 20, }, - [3] = { skill_manaCostBase = 9, skill_fireMin = 24, skill_fireMax = 35, BuffEffect_armourBase = 26, }, - [4] = { skill_manaCostBase = 10, skill_fireMin = 32, skill_fireMax = 47, BuffEffect_armourBase = 33, }, - [5] = { skill_manaCostBase = 11, skill_fireMin = 45, skill_fireMax = 68, BuffEffect_armourBase = 44, }, - [6] = { skill_manaCostBase = 12, skill_fireMin = 64, skill_fireMax = 96, BuffEffect_armourBase = 58, }, - [7] = { skill_manaCostBase = 13, skill_fireMin = 88, skill_fireMax = 132, BuffEffect_armourBase = 75, }, - [8] = { skill_manaCostBase = 14, skill_fireMin = 120, skill_fireMax = 180, BuffEffect_armourBase = 97, }, - [9] = { skill_manaCostBase = 16, skill_fireMin = 161, skill_fireMax = 241, BuffEffect_armourBase = 123, }, - [10] = { skill_manaCostBase = 17, skill_fireMin = 214, skill_fireMax = 321, BuffEffect_armourBase = 156, }, - [11] = { skill_manaCostBase = 19, skill_fireMin = 283, skill_fireMax = 425, BuffEffect_armourBase = 196, }, - [12] = { skill_manaCostBase = 20, skill_fireMin = 372, skill_fireMax = 558, BuffEffect_armourBase = 245, }, - [13] = { skill_manaCostBase = 22, skill_fireMin = 486, skill_fireMax = 729, BuffEffect_armourBase = 304, }, - [14] = { skill_manaCostBase = 23, skill_fireMin = 631, skill_fireMax = 947, BuffEffect_armourBase = 376, }, - [15] = { skill_manaCostBase = 25, skill_fireMin = 766, skill_fireMax = 1149, BuffEffect_armourBase = 440, }, - [16] = { skill_manaCostBase = 25, skill_fireMin = 928, skill_fireMax = 1392, BuffEffect_armourBase = 515, }, - [17] = { skill_manaCostBase = 26, skill_fireMin = 1122, skill_fireMax = 1683, BuffEffect_armourBase = 600, }, - [18] = { skill_manaCostBase = 27, skill_fireMin = 1354, skill_fireMax = 2031, BuffEffect_armourBase = 698, }, - [19] = { skill_manaCostBase = 27, skill_fireMin = 1631, skill_fireMax = 2447, BuffEffect_armourBase = 812, }, - [20] = { skill_manaCostBase = 28, skill_fireMin = 1962, skill_fireMax = 2943, BuffEffect_armourBase = 943, }, - [21] = { skill_manaCostBase = 29, skill_fireMin = 2217, skill_fireMax = 3326, BuffEffect_armourBase = 1040, }, - [22] = { skill_manaCostBase = 29, skill_fireMin = 2504, skill_fireMax = 3756, BuffEffect_armourBase = 1148, }, - [23] = { skill_manaCostBase = 29, skill_fireMin = 2827, skill_fireMax = 4240, BuffEffect_armourBase = 1265, }, - [24] = { skill_manaCostBase = 30, skill_fireMin = 3189, skill_fireMax = 4784, BuffEffect_armourBase = 1394, }, - [25] = { skill_manaCostBase = 30, skill_fireMin = 3596, skill_fireMax = 5394, BuffEffect_armourBase = 1536, }, - [26] = { skill_manaCostBase = 31, skill_fireMin = 4053, skill_fireMax = 6080, BuffEffect_armourBase = 1691, }, - [27] = { skill_manaCostBase = 31, skill_fireMin = 4566, skill_fireMax = 6849, BuffEffect_armourBase = 1861, }, - [28] = { skill_manaCostBase = 31, skill_fireMin = 5141, skill_fireMax = 7712, BuffEffect_armourBase = 2047, }, - [29] = { skill_manaCostBase = 32, skill_fireMin = 5787, skill_fireMax = 8680, BuffEffect_armourBase = 2251, }, - [30] = { skill_manaCostBase = 32, skill_fireMin = 6510, skill_fireMax = 9766, BuffEffect_armourBase = 2474, }, - } + [1] = { 8, 14, 20, 26, 17, }, + [2] = { 9, 17, 26, 32, 20, }, + [3] = { 9, 24, 35, 41, 26, }, + [4] = { 10, 32, 47, 52, 33, }, + [5] = { 11, 45, 68, 70, 44, }, + [6] = { 12, 64, 96, 93, 58, }, + [7] = { 13, 88, 132, 120, 75, }, + [8] = { 14, 120, 180, 155, 97, }, + [9] = { 16, 161, 241, 197, 123, }, + [10] = { 17, 214, 321, 250, 156, }, + [11] = { 19, 283, 425, 313, 196, }, + [12] = { 20, 372, 558, 391, 245, }, + [13] = { 22, 486, 729, 487, 304, }, + [14] = { 23, 631, 947, 602, 376, }, + [15] = { 25, 766, 1149, 705, 440, }, + [16] = { 25, 928, 1392, 823, 515, }, + [17] = { 26, 1122, 1683, 960, 600, }, + [18] = { 27, 1354, 2031, 1118, 698, }, + [19] = { 27, 1631, 2447, 1299, 812, }, + [20] = { 28, 1962, 2943, 1508, 943, }, + [21] = { 29, 2217, 3326, 1664, 1040, }, + [22] = { 29, 2504, 3756, 1836, 1148, }, + [23] = { 29, 2827, 4240, 2024, 1265, }, + [24] = { 30, 3189, 4784, 2231, 1394, }, + [25] = { 30, 3596, 5394, 2457, 1536, }, + [26] = { 31, 4053, 6080, 2705, 1691, }, + [27] = { 31, 4566, 6849, 2977, 1861, }, + [28] = { 31, 5141, 7712, 3275, 2047, }, + [29] = { 32, 5787, 8680, 3601, 2251, }, + [30] = { 32, 6510, 9766, 3958, 2474, }, + }, +} +gems["Vaal Molten Shell"] = { + strength = true, + active_skill = true, + vaal = true, + spell = true, + area = true, + duration = true, + fire = true, + color = 1, + baseFlags = { + spell = true, + area = true, + duration = true, + fire = true, + vaal = true, + }, + skillTypes = { [2] = true, [10] = true, [11] = true, [12] = true, [18] = true, [31] = true, [26] = true, [43] = true, [33] = true, }, + baseMods = { + skill("castTime", 0.5), + skill("damageEffectiveness", 2), + skill("critChance", 5), + mod("ElementalResist", "BASE", 0, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"base_resist_all_elements_%" = 0 + --"is_area_damage" = 1 + skill("duration", 5), --"base_skill_effect_duration" = 5000 + --"skill_override_pvp_scaling_time_ms" = 1400 + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + --"molten_shell_explode_each_hit" = ? + }, + qualityMods = { + mod("EnemyIgniteChance", "BASE", 1), --"base_chance_to_ignite_%" = 1 + }, + levelMods = { + [1] = skill("FireMin", nil), --"spell_minimum_base_fire_damage" + [2] = skill("FireMax", nil), --"spell_maximum_base_fire_damage" + [3] = mod("Armour", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"base_physical_damage_reduction_rating" + }, + levels = { + [1] = { 9, 14, 17, }, + [2] = { 11, 17, 20, }, + [3] = { 15, 23, 26, }, + [4] = { 20, 30, 33, }, + [5] = { 27, 41, 44, }, + [6] = { 37, 56, 58, }, + [7] = { 49, 74, 75, }, + [8] = { 64, 96, 97, }, + [9] = { 83, 124, 123, }, + [10] = { 106, 159, 156, }, + [11] = { 135, 202, 196, }, + [12] = { 170, 256, 245, }, + [13] = { 214, 321, 304, }, + [14] = { 267, 401, 376, }, + [15] = { 315, 472, 440, }, + [16] = { 370, 556, 515, }, + [17] = { 435, 652, 600, }, + [18] = { 509, 764, 698, }, + [19] = { 596, 893, 812, }, + [20] = { 696, 1043, 943, }, + [21] = { 771, 1156, 1040, }, + [22] = { 854, 1280, 1148, }, + [23] = { 945, 1417, 1265, }, + [24] = { 1045, 1568, 1394, }, + [25] = { 1155, 1733, 1536, }, + [26] = { 1277, 1915, 1691, }, + [27] = { 1410, 2115, 1861, }, + [28] = { 1557, 2335, 2047, }, + [29] = { 1718, 2577, 2251, }, + [30] = { 1895, 2843, 2474, }, + }, } gems["Molten Strike"] = { - strength = true, - attack = true, - melee = true, projectile = true, - aoe = true, + strength = true, + active_skill = true, + attack = true, + area = true, + melee = true, fire = true, - hit = true, parts = { { name = "Melee Hit", melee = true, projectile = false, - aoe = false, + area = false, }, { name = "Magma Balls", melee = false, projectile = true, - aoe = true, + area = true, }, }, - base = { - skill_manaCostBase = 6, - skill_physicalConvertTofire = 60, - projectileCount = 2, - projectile_damageMore = 0.6, + color = 1, + baseFlags = { + attack = true, + melee = true, + projectile = true, + area = true, + fire = true, }, - quality = { - fireInc = 1, + skillTypes = { [1] = true, [3] = true, [6] = true, [11] = true, [24] = true, [25] = true, [28] = true, [33] = true, [48] = true, }, + baseMods = { + skill("castTime", 1), + skill("manaCost", 6), + skill("PhysicalDamageConvertToFire", 60), --"skill_physical_damage_%_to_convert_to_fire" = 60 + mod("ProjectileCount", "BASE", 2), --"number_of_additional_projectiles" = 2 + mod("Damage", "MORE", -40, ModFlag.Projectile), --"active_skill_projectile_damage_+%_final" = -40 + --"show_number_of_projectiles" = ? + }, + qualityMods = { + mod("FireDamage", "INC", 1), --"fire_damage_+%" = 1 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { attack_damageMore = 1.2, }, - [2] = { attack_damageMore = 1.214, }, - [3] = { attack_damageMore = 1.228, }, - [4] = { attack_damageMore = 1.242, }, - [5] = { attack_damageMore = 1.256, }, - [6] = { attack_damageMore = 1.27, }, - [7] = { attack_damageMore = 1.284, }, - [8] = { attack_damageMore = 1.298, }, - [9] = { attack_damageMore = 1.312, }, - [10] = { attack_damageMore = 1.326, }, - [11] = { attack_damageMore = 1.34, }, - [12] = { attack_damageMore = 1.354, }, - [13] = { attack_damageMore = 1.368, }, - [14] = { attack_damageMore = 1.382, }, - [15] = { attack_damageMore = 1.396, }, - [16] = { attack_damageMore = 1.41, }, - [17] = { attack_damageMore = 1.424, }, - [18] = { attack_damageMore = 1.438, }, - [19] = { attack_damageMore = 1.452, }, - [20] = { attack_damageMore = 1.466, }, - [21] = { attack_damageMore = 1.48, }, - [22] = { attack_damageMore = 1.494, }, - [23] = { attack_damageMore = 1.508, }, - [24] = { attack_damageMore = 1.522, }, - [25] = { attack_damageMore = 1.536, }, - [26] = { attack_damageMore = 1.55, }, - [27] = { attack_damageMore = 1.564, }, - [28] = { attack_damageMore = 1.578, }, - [29] = { attack_damageMore = 1.592, }, - [30] = { attack_damageMore = 1.606, }, - } + [1] = { 20, }, + [2] = { 21.4, }, + [3] = { 22.8, }, + [4] = { 24.2, }, + [5] = { 25.6, }, + [6] = { 27, }, + [7] = { 28.4, }, + [8] = { 29.8, }, + [9] = { 31.2, }, + [10] = { 32.6, }, + [11] = { 34, }, + [12] = { 35.4, }, + [13] = { 36.8, }, + [14] = { 38.2, }, + [15] = { 39.6, }, + [16] = { 41, }, + [17] = { 42.4, }, + [18] = { 43.8, }, + [19] = { 45.2, }, + [20] = { 46.6, }, + [21] = { 48, }, + [22] = { 49.4, }, + [23] = { 50.8, }, + [24] = { 52.2, }, + [25] = { 53.6, }, + [26] = { 55, }, + [27] = { 56.4, }, + [28] = { 57.8, }, + [29] = { 59.2, }, + [30] = { 60.6, }, + }, } gems["Punishment"] = { + curse = true, strength = true, + active_skill = true, + spell = true, + area = true, + duration = true, unsupported = true, } gems["Purity of Fire"] = { - strength = true, aura = true, + strength = true, + active_skill = true, spell = true, - aoe = true, + area = true, fire = true, - base = { - skill_castTime = 1.2, - skill_manaReservedPercent = 35, + color = 1, + baseFlags = { + spell = true, + aura = true, + area = true, + fire = true, }, - quality = { - aura_aoeRadiusInc = 1, + skillTypes = { [2] = true, [11] = true, [5] = true, [15] = true, [27] = true, [16] = true, [18] = true, [44] = true, [33] = true, }, + baseMods = { + skill("castTime", 1.2), + skill("manaCost", 35), + --"base_deal_no_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 1), --"base_skill_area_of_effect_+%" = 1 + }, + levelMods = { + [1] = mod("FireResist", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Aura" }), --"base_fire_damage_resistance_%" + [2] = mod("FireResistMax", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Aura" }), --"base_maximum_fire_damage_resistance_%" + [3] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" }, levels = { - [1] = { aura_aoeRadiusInc = 0, AuraEffect_fireResist = 22, AuraEffect_fireResistMax = 0, }, - [2] = { aura_aoeRadiusInc = 3, AuraEffect_fireResist = 23, AuraEffect_fireResistMax = 0, }, - [3] = { aura_aoeRadiusInc = 6, AuraEffect_fireResist = 24, AuraEffect_fireResistMax = 0, }, - [4] = { aura_aoeRadiusInc = 9, AuraEffect_fireResist = 25, AuraEffect_fireResistMax = 0, }, - [5] = { aura_aoeRadiusInc = 12, AuraEffect_fireResist = 26, AuraEffect_fireResistMax = 1, }, - [6] = { aura_aoeRadiusInc = 15, AuraEffect_fireResist = 27, AuraEffect_fireResistMax = 1, }, - [7] = { aura_aoeRadiusInc = 18, AuraEffect_fireResist = 28, AuraEffect_fireResistMax = 1, }, - [8] = { aura_aoeRadiusInc = 21, AuraEffect_fireResist = 29, AuraEffect_fireResistMax = 1, }, - [9] = { aura_aoeRadiusInc = 23, AuraEffect_fireResist = 30, AuraEffect_fireResistMax = 1, }, - [10] = { aura_aoeRadiusInc = 25, AuraEffect_fireResist = 31, AuraEffect_fireResistMax = 1, }, - [11] = { aura_aoeRadiusInc = 27, AuraEffect_fireResist = 32, AuraEffect_fireResistMax = 2, }, - [12] = { aura_aoeRadiusInc = 29, AuraEffect_fireResist = 33, AuraEffect_fireResistMax = 2, }, - [13] = { aura_aoeRadiusInc = 31, AuraEffect_fireResist = 34, AuraEffect_fireResistMax = 2, }, - [14] = { aura_aoeRadiusInc = 33, AuraEffect_fireResist = 35, AuraEffect_fireResistMax = 2, }, - [15] = { aura_aoeRadiusInc = 35, AuraEffect_fireResist = 36, AuraEffect_fireResistMax = 2, }, - [16] = { aura_aoeRadiusInc = 36, AuraEffect_fireResist = 37, AuraEffect_fireResistMax = 2, }, - [17] = { aura_aoeRadiusInc = 37, AuraEffect_fireResist = 38, AuraEffect_fireResistMax = 3, }, - [18] = { aura_aoeRadiusInc = 38, AuraEffect_fireResist = 39, AuraEffect_fireResistMax = 3, }, - [19] = { aura_aoeRadiusInc = 39, AuraEffect_fireResist = 40, AuraEffect_fireResistMax = 3, }, - [20] = { aura_aoeRadiusInc = 40, AuraEffect_fireResist = 41, AuraEffect_fireResistMax = 4, }, - [21] = { aura_aoeRadiusInc = 41, AuraEffect_fireResist = 42, AuraEffect_fireResistMax = 4, }, - [22] = { aura_aoeRadiusInc = 42, AuraEffect_fireResist = 43, AuraEffect_fireResistMax = 4, }, - [23] = { aura_aoeRadiusInc = 43, AuraEffect_fireResist = 44, AuraEffect_fireResistMax = 5, }, - [24] = { aura_aoeRadiusInc = 44, AuraEffect_fireResist = 45, AuraEffect_fireResistMax = 5, }, - [25] = { aura_aoeRadiusInc = 45, AuraEffect_fireResist = 46, AuraEffect_fireResistMax = 5, }, - [26] = { aura_aoeRadiusInc = 46, AuraEffect_fireResist = 47, AuraEffect_fireResistMax = 5, }, - [27] = { aura_aoeRadiusInc = 47, AuraEffect_fireResist = 48, AuraEffect_fireResistMax = 5, }, - [28] = { aura_aoeRadiusInc = 48, AuraEffect_fireResist = 49, AuraEffect_fireResistMax = 5, }, - [29] = { aura_aoeRadiusInc = 49, AuraEffect_fireResist = 50, AuraEffect_fireResistMax = 5, }, - [30] = { aura_aoeRadiusInc = 50, AuraEffect_fireResist = 51, AuraEffect_fireResistMax = 5, }, - } + [1] = { 22, 0, 0, }, + [2] = { 23, 0, 3, }, + [3] = { 24, 0, 6, }, + [4] = { 25, 0, 9, }, + [5] = { 26, 1, 12, }, + [6] = { 27, 1, 15, }, + [7] = { 28, 1, 18, }, + [8] = { 29, 1, 21, }, + [9] = { 30, 1, 23, }, + [10] = { 31, 1, 25, }, + [11] = { 32, 2, 27, }, + [12] = { 33, 2, 29, }, + [13] = { 34, 2, 31, }, + [14] = { 35, 2, 33, }, + [15] = { 36, 2, 35, }, + [16] = { 37, 2, 36, }, + [17] = { 38, 3, 37, }, + [18] = { 39, 3, 38, }, + [19] = { 40, 3, 39, }, + [20] = { 41, 4, 40, }, + [21] = { 42, 4, 41, }, + [22] = { 43, 4, 42, }, + [23] = { 44, 5, 43, }, + [24] = { 45, 5, 44, }, + [25] = { 46, 5, 45, }, + [26] = { 47, 5, 46, }, + [27] = { 48, 5, 47, }, + [28] = { 49, 5, 48, }, + [29] = { 50, 5, 49, }, + [30] = { 51, 5, 50, }, + }, } gems["Rallying Cry"] = { - strength = true, warcry = true, - aoe = true, + strength = true, + active_skill = true, + area = true, duration = true, - base = { - skill_castTime = 0.25, - skill_durationBase = 8, + color = 1, + baseFlags = { + warcry = true, + area = true, + duration = true, }, - quality = { - durationInc = 1.5, + skillTypes = { [5] = true, [11] = true, [12] = true, }, + baseMods = { + skill("castTime", 0.25), + skill("duration", 8), --"base_skill_effect_duration" = 8000 + --"base_deal_no_damage" = ? + --"is_warcry" = ? + }, + qualityMods = { + mod("Duration", "INC", 1.5), --"skill_effect_duration_+%" = 1.5 + }, + levelMods = { + [1] = skill("manaCost", nil), + --[2] = "inspiring_cry_damage_+%_per_one_hundred_nearby_enemies" + [3] = mod("Damage", "INC", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"damage_+%" + [4] = mod("ManaRegen", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"base_mana_regeneration_rate_per_minute" }, levels = { - [1] = { skill_manaCostBase = 8, BuffEffect_damageInc = 10, BuffEffect_manaRegenBase = 1.8, }, - [2] = { skill_manaCostBase = 10, BuffEffect_damageInc = 10, BuffEffect_manaRegenBase = 2.4, }, - [3] = { skill_manaCostBase = 12, BuffEffect_damageInc = 11, BuffEffect_manaRegenBase = 3.1, }, - [4] = { skill_manaCostBase = 13, BuffEffect_damageInc = 11, BuffEffect_manaRegenBase = 3.8, }, - [5] = { skill_manaCostBase = 14, BuffEffect_damageInc = 11, BuffEffect_manaRegenBase = 4.4, }, - [6] = { skill_manaCostBase = 15, BuffEffect_damageInc = 12, BuffEffect_manaRegenBase = 5.1, }, - [7] = { skill_manaCostBase = 16, BuffEffect_damageInc = 12, BuffEffect_manaRegenBase = 5.8, }, - [8] = { skill_manaCostBase = 17, BuffEffect_damageInc = 12, BuffEffect_manaRegenBase = 6.5, }, - [9] = { skill_manaCostBase = 18, BuffEffect_damageInc = 13, BuffEffect_manaRegenBase = 7.1, }, - [10] = { skill_manaCostBase = 20, BuffEffect_damageInc = 13, BuffEffect_manaRegenBase = 7.8, }, - [11] = { skill_manaCostBase = 21, BuffEffect_damageInc = 13, BuffEffect_manaRegenBase = 8.5, }, - [12] = { skill_manaCostBase = 22, BuffEffect_damageInc = 14, BuffEffect_manaRegenBase = 9.2, }, - [13] = { skill_manaCostBase = 24, BuffEffect_damageInc = 14, BuffEffect_manaRegenBase = 9.9, }, - [14] = { skill_manaCostBase = 25, BuffEffect_damageInc = 14, BuffEffect_manaRegenBase = 10.6, }, - [15] = { skill_manaCostBase = 26, BuffEffect_damageInc = 15, BuffEffect_manaRegenBase = 11.3, }, - [16] = { skill_manaCostBase = 26, BuffEffect_damageInc = 15, BuffEffect_manaRegenBase = 12, }, - [17] = { skill_manaCostBase = 26, BuffEffect_damageInc = 15, BuffEffect_manaRegenBase = 12.7, }, - [18] = { skill_manaCostBase = 26, BuffEffect_damageInc = 16, BuffEffect_manaRegenBase = 13.4, }, - [19] = { skill_manaCostBase = 27, BuffEffect_damageInc = 16, BuffEffect_manaRegenBase = 14.1, }, - [20] = { skill_manaCostBase = 27, BuffEffect_damageInc = 16, BuffEffect_manaRegenBase = 14.8, }, - [21] = { skill_manaCostBase = 28, BuffEffect_damageInc = 17, BuffEffect_manaRegenBase = 15.5, }, - [22] = { skill_manaCostBase = 28, BuffEffect_damageInc = 17, BuffEffect_manaRegenBase = 16.2, }, - [23] = { skill_manaCostBase = 29, BuffEffect_damageInc = 17, BuffEffect_manaRegenBase = 16.9, }, - [24] = { skill_manaCostBase = 29, BuffEffect_damageInc = 18, BuffEffect_manaRegenBase = 17.7, }, - [25] = { skill_manaCostBase = 30, BuffEffect_damageInc = 18, BuffEffect_manaRegenBase = 18.4, }, - [26] = { skill_manaCostBase = 30, BuffEffect_damageInc = 18, BuffEffect_manaRegenBase = 19.1, }, - [27] = { skill_manaCostBase = 30, BuffEffect_damageInc = 19, BuffEffect_manaRegenBase = 19.8, }, - [28] = { skill_manaCostBase = 30, BuffEffect_damageInc = 19, BuffEffect_manaRegenBase = 20.5, }, - [29] = { skill_manaCostBase = 31, BuffEffect_damageInc = 19, BuffEffect_manaRegenBase = 21.3, }, - [30] = { skill_manaCostBase = 31, BuffEffect_damageInc = 20, BuffEffect_manaRegenBase = 22, }, - } + [1] = { 8, 140, 10, 1.8, }, + [2] = { 10, 142, 10, 2.4, }, + [3] = { 12, 144, 11, 3.1, }, + [4] = { 13, 146, 11, 3.8, }, + [5] = { 14, 148, 11, 4.4, }, + [6] = { 15, 150, 12, 5.1, }, + [7] = { 16, 152, 12, 5.8, }, + [8] = { 17, 154, 12, 6.5, }, + [9] = { 18, 156, 13, 7.1, }, + [10] = { 20, 158, 13, 7.8, }, + [11] = { 21, 160, 13, 8.5, }, + [12] = { 22, 162, 14, 9.2, }, + [13] = { 24, 164, 14, 9.9, }, + [14] = { 25, 166, 14, 10.6, }, + [15] = { 26, 168, 15, 11.3, }, + [16] = { 26, 170, 15, 12, }, + [17] = { 26, 172, 15, 12.7, }, + [18] = { 26, 174, 16, 13.4, }, + [19] = { 27, 176, 16, 14.1, }, + [20] = { 27, 178, 16, 14.8, }, + [21] = { 28, 180, 17, 15.5, }, + [22] = { 28, 182, 17, 16.2, }, + [23] = { 29, 184, 17, 16.9, }, + [24] = { 29, 186, 18, 17.7, }, + [25] = { 30, 188, 18, 18.4, }, + [26] = { 30, 190, 18, 19.1, }, + [27] = { 30, 192, 19, 19.8, }, + [28] = { 30, 194, 19, 20.5, }, + [29] = { 31, 196, 19, 21.3, }, + [30] = { 31, 198, 20, 22, }, + }, } gems["Reckoning"] = { - strength = true, trigger = true, + strength = true, + active_skill = true, attack = true, + area = true, melee = true, - aoe = true, - hit = true, - showAverage = true, - base = { + color = 1, + baseFlags = { + attack = true, + area = true, + melee = true, }, - quality = { - aoeRadiusInc = 0.5, + skillTypes = { [1] = true, [7] = true, [13] = true, [24] = true, [11] = true, [47] = true, [57] = true, }, + baseMods = { + skill("castTime", 1), + --"melee_counterattack_trigger_on_block_%" = 100 + --"shield_counterattack_aoe_range" = 35 + --"attack_unusable_if_triggerable" = ? + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + --"is_area_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { attack_damageMore = 0.7, }, - [2] = { attack_damageMore = 0.72, }, - [3] = { attack_damageMore = 0.74, }, - [4] = { attack_damageMore = 0.76, }, - [5] = { attack_damageMore = 0.78, }, - [6] = { attack_damageMore = 0.8, }, - [7] = { attack_damageMore = 0.82, }, - [8] = { attack_damageMore = 0.84, }, - [9] = { attack_damageMore = 0.86, }, - [10] = { attack_damageMore = 0.88, }, - [11] = { attack_damageMore = 0.9, }, - [12] = { attack_damageMore = 0.92, }, - [13] = { attack_damageMore = 0.94, }, - [14] = { attack_damageMore = 0.96, }, - [15] = { attack_damageMore = 0.98, }, - [16] = { attack_damageMore = 1, }, - [17] = { attack_damageMore = 1.02, }, - [18] = { attack_damageMore = 1.04, }, - [19] = { attack_damageMore = 1.06, }, - [20] = { attack_damageMore = 1.08, }, - [21] = { attack_damageMore = 1.1, }, - [22] = { attack_damageMore = 1.12, }, - [23] = { attack_damageMore = 1.14, }, - [24] = { attack_damageMore = 1.16, }, - [25] = { attack_damageMore = 1.18, }, - [26] = { attack_damageMore = 1.2, }, - [27] = { attack_damageMore = 1.22, }, - [28] = { attack_damageMore = 1.24, }, - [29] = { attack_damageMore = 1.26, }, - [30] = { attack_damageMore = 1.28, }, - } + [1] = { -30, }, + [2] = { -28, }, + [3] = { -26, }, + [4] = { -24, }, + [5] = { -22, }, + [6] = { -20, }, + [7] = { -18, }, + [8] = { -16, }, + [9] = { -14, }, + [10] = { -12, }, + [11] = { -10, }, + [12] = { -8, }, + [13] = { -6, }, + [14] = { -4, }, + [15] = { -2, }, + [16] = { nil, }, + [17] = { 2, }, + [18] = { 4, }, + [19] = { 6, }, + [20] = { 8, }, + [21] = { 10, }, + [22] = { 12, }, + [23] = { 14, }, + [24] = { 16, }, + [25] = { 18, }, + [26] = { 20, }, + [27] = { 22, }, + [28] = { 24, }, + [29] = { 26, }, + [30] = { 28, }, + }, } gems["Rejuvenation Totem"] = { - strength = true, - aura = true, - spell = true, totem = true, - aoe = true, + aura = true, + strength = true, + active_skill = true, + spell = true, + area = true, duration = true, - base = { - skill_castTime = 0.6, - skill_durationBase = 8, + color = 1, + baseFlags = { + spell = true, + aura = true, + totem = true, + area = true, + duration = true, }, - quality = { - aura_aoeRadiusInc = 3, + skillTypes = { [2] = true, [5] = true, [11] = true, [12] = true, [15] = true, [27] = true, [17] = true, [19] = true, [30] = true, [44] = true, }, + skillTotemId = 4, + baseMods = { + skill("castTime", 0.6), + --"is_totem" = 1 + --"base_totem_duration" = 8000 + --"base_totem_range" = 10 + --"base_skill_is_totemified" = ? + --"base_deal_no_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 3, 0, KeywordFlag.Aura), --"base_aura_area_of_effect_+%" = 3 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = mod("LifeRegen", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Aura" }), --"base_life_regeneration_rate_per_minute" + [3] = skill("totemLevel", nil), --"base_active_skill_totem_level" }, levels = { - [1] = { skill_manaCostBase = 13, AuraEffect_lifeRegenBase = 6.3, }, - [2] = { skill_manaCostBase = 14, AuraEffect_lifeRegenBase = 8.7, }, - [3] = { skill_manaCostBase = 15, AuraEffect_lifeRegenBase = 12.4, }, - [4] = { skill_manaCostBase = 16, AuraEffect_lifeRegenBase = 16, }, - [5] = { skill_manaCostBase = 17, AuraEffect_lifeRegenBase = 21, }, - [6] = { skill_manaCostBase = 18, AuraEffect_lifeRegenBase = 26.3, }, - [7] = { skill_manaCostBase = 19, AuraEffect_lifeRegenBase = 32.2, }, - [8] = { skill_manaCostBase = 20, AuraEffect_lifeRegenBase = 39.4, }, - [9] = { skill_manaCostBase = 22, AuraEffect_lifeRegenBase = 46.1, }, - [10] = { skill_manaCostBase = 24, AuraEffect_lifeRegenBase = 53.7, }, - [11] = { skill_manaCostBase = 26, AuraEffect_lifeRegenBase = 61.8, }, - [12] = { skill_manaCostBase = 27, AuraEffect_lifeRegenBase = 72.8, }, - [13] = { skill_manaCostBase = 28, AuraEffect_lifeRegenBase = 82.7, }, - [14] = { skill_manaCostBase = 29, AuraEffect_lifeRegenBase = 92.7, }, - [15] = { skill_manaCostBase = 30, AuraEffect_lifeRegenBase = 102.8, }, - [16] = { skill_manaCostBase = 30, AuraEffect_lifeRegenBase = 114, }, - [17] = { skill_manaCostBase = 31, AuraEffect_lifeRegenBase = 123, }, - [18] = { skill_manaCostBase = 31, AuraEffect_lifeRegenBase = 135.6, }, - [19] = { skill_manaCostBase = 32, AuraEffect_lifeRegenBase = 149, }, - [20] = { skill_manaCostBase = 32, AuraEffect_lifeRegenBase = 162.2, }, - [21] = { skill_manaCostBase = 33, AuraEffect_lifeRegenBase = 168.6, }, - [22] = { skill_manaCostBase = 34, AuraEffect_lifeRegenBase = 177, }, - [23] = { skill_manaCostBase = 34, AuraEffect_lifeRegenBase = 182.1, }, - [24] = { skill_manaCostBase = 35, AuraEffect_lifeRegenBase = 191.2, }, - [25] = { skill_manaCostBase = 36, AuraEffect_lifeRegenBase = 200.7, }, - [26] = { skill_manaCostBase = 37, AuraEffect_lifeRegenBase = 206, }, - [27] = { skill_manaCostBase = 38, AuraEffect_lifeRegenBase = 217.4, }, - [28] = { skill_manaCostBase = 38, AuraEffect_lifeRegenBase = 227.9, }, - [29] = { skill_manaCostBase = 39, AuraEffect_lifeRegenBase = 241.2, }, - [30] = { skill_manaCostBase = 40, AuraEffect_lifeRegenBase = 243.7, }, - } + [1] = { 13, 6.35, 4, }, + [2] = { 14, 8.6833333333333, 6, }, + [3] = { 15, 12.366666666667, 9, }, + [4] = { 16, 16, 12, }, + [5] = { 17, 21.033333333333, 16, }, + [6] = { 18, 26.3, 20, }, + [7] = { 19, 32.25, 24, }, + [8] = { 20, 39.366666666667, 28, }, + [9] = { 22, 46.116666666667, 32, }, + [10] = { 24, 53.7, 36, }, + [11] = { 26, 61.816666666667, 40, }, + [12] = { 27, 72.8, 44, }, + [13] = { 28, 82.716666666667, 48, }, + [14] = { 29, 92.666666666667, 52, }, + [15] = { 30, 102.85, 55, }, + [16] = { 30, 113.98333333333, 58, }, + [17] = { 31, 122.95, 61, }, + [18] = { 31, 135.6, 64, }, + [19] = { 32, 149.03333333333, 67, }, + [20] = { 32, 162.2, 70, }, + [21] = { 33, 168.61666666667, 72, }, + [22] = { 34, 177.03333333333, 74, }, + [23] = { 34, 182.1, 76, }, + [24] = { 35, 191.2, 78, }, + [25] = { 36, 200.66666666667, 80, }, + [26] = { 37, 206.03333333333, 82, }, + [27] = { 38, 217.43333333333, 84, }, + [28] = { 38, 227.95, 86, }, + [29] = { 39, 241.21666666667, 88, }, + [30] = { 40, 243.65, 90, }, + }, } gems["Searing Bond"] = { - strength = true, - spell = true, totem = true, + strength = true, + active_skill = true, + spell = true, duration = true, fire = true, - damage = true, - base = { - skill_castTime = 1, - skill_durationBase = 8, + color = 1, + baseFlags = { + spell = true, + totem = true, + duration = true, + fire = true, }, - quality = { - totemLifeInc = 1, + skillTypes = { [2] = true, [40] = true, [12] = true, [17] = true, [19] = true, [27] = true, [29] = true, [30] = true, [36] = true, [33] = true, }, + skillTotemId = 9, + baseMods = { + skill("castTime", 1), + --"base_totem_duration" = 8000 + --"base_totem_range" = 100 + mod("ActiveTotemLimit", "BASE", 1), --"number_of_additional_totems_allowed" = 1 + --"is_totem" = ? + --"base_skill_is_totemified" = ? + }, + qualityMods = { + mod("TotemLife", "INC", 1), --"totem_life_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("totemLevel", nil), --"base_active_skill_totem_level" + [3] = skill("FireDot", nil), --"base_fire_damage_to_deal_per_minute" }, levels = { - [1] = { skill_manaCostBase = 18, skill_fireDotBase = 23.6, }, - [2] = { skill_manaCostBase = 19, skill_fireDotBase = 31.4, }, - [3] = { skill_manaCostBase = 20, skill_fireDotBase = 44.8, }, - [4] = { skill_manaCostBase = 21, skill_fireDotBase = 62.8, }, - [5] = { skill_manaCostBase = 23, skill_fireDotBase = 86.8, }, - [6] = { skill_manaCostBase = 25, skill_fireDotBase = 118.4, }, - [7] = { skill_manaCostBase = 27, skill_fireDotBase = 160.1, }, - [8] = { skill_manaCostBase = 29, skill_fireDotBase = 199.6, }, - [9] = { skill_manaCostBase = 31, skill_fireDotBase = 247.9, }, - [10] = { skill_manaCostBase = 33, skill_fireDotBase = 306.8, }, - [11] = { skill_manaCostBase = 35, skill_fireDotBase = 378.5, }, - [12] = { skill_manaCostBase = 37, skill_fireDotBase = 465.6, }, - [13] = { skill_manaCostBase = 39, skill_fireDotBase = 571.5, }, - [14] = { skill_manaCostBase = 40, skill_fireDotBase = 699.7, }, - [15] = { skill_manaCostBase = 42, skill_fireDotBase = 854.9, }, - [16] = { skill_manaCostBase = 44, skill_fireDotBase = 1042.6, }, - [17] = { skill_manaCostBase = 46, skill_fireDotBase = 1189, }, - [18] = { skill_manaCostBase = 48, skill_fireDotBase = 1354.8, }, - [19] = { skill_manaCostBase = 50, skill_fireDotBase = 1542.8, }, - [20] = { skill_manaCostBase = 51, skill_fireDotBase = 1755.6, }, - [21] = { skill_manaCostBase = 53, skill_fireDotBase = 1996.6, }, - [22] = { skill_manaCostBase = 53, skill_fireDotBase = 2269.3, }, - [23] = { skill_manaCostBase = 54, skill_fireDotBase = 2577.7, }, - [24] = { skill_manaCostBase = 56, skill_fireDotBase = 2926.5, }, - [25] = { skill_manaCostBase = 58, skill_fireDotBase = 3320.8, }, - [26] = { skill_manaCostBase = 59, skill_fireDotBase = 3766.2, }, - [27] = { skill_manaCostBase = 59, skill_fireDotBase = 4269.5, }, - [28] = { skill_manaCostBase = 61, skill_fireDotBase = 4837.7, }, - [29] = { skill_manaCostBase = 62, skill_fireDotBase = 5479.2, }, - [30] = { skill_manaCostBase = 64, skill_fireDotBase = 6203.2, }, - } + [1] = { 18, 12, 23.583333333333, }, + [2] = { 19, 15, 31.35, }, + [3] = { 20, 19, 44.816666666667, }, + [4] = { 21, 23, 62.833333333333, }, + [5] = { 23, 27, 86.783333333333, }, + [6] = { 25, 31, 118.43333333333, }, + [7] = { 27, 35, 160.06666666667, }, + [8] = { 29, 38, 199.58333333333, }, + [9] = { 31, 41, 247.88333333333, }, + [10] = { 33, 44, 306.76666666667, }, + [11] = { 35, 47, 378.48333333333, }, + [12] = { 37, 50, 465.65, }, + [13] = { 39, 53, 571.45, }, + [14] = { 40, 56, 699.7, }, + [15] = { 42, 59, 854.93333333333, }, + [16] = { 44, 62, 1042.6166666667, }, + [17] = { 46, 64, 1188.95, }, + [18] = { 48, 66, 1354.8333333333, }, + [19] = { 50, 68, 1542.7666666667, }, + [20] = { 51, 70, 1755.6333333333, }, + [21] = { 53, 72, 1996.5833333333, }, + [22] = { 53, 74, 2269.2666666667, }, + [23] = { 54, 76, 2577.7166666667, }, + [24] = { 56, 78, 2926.5, }, + [25] = { 58, 80, 3320.75, }, + [26] = { 59, 82, 3766.2333333333, }, + [27] = { 59, 84, 4269.4666666667, }, + [28] = { 61, 86, 4837.7333333333, }, + [29] = { 62, 88, 5479.2333333333, }, + [30] = { 64, 90, 6203.2333333333, }, + }, } gems["Shield Charge"] = { strength = true, + active_skill = true, attack = true, - melee = true, - aoe = true, + area = true, movement = true, - hit = true, - base = { - skill_manaCostBase = 8, - attack_damageMore = 0.5, - movementSpeedInc = 75, + melee = true, + color = 1, + baseFlags = { + attack = true, + melee = true, + area = true, + movement = true, }, - quality = { - damageInc = 1, + skillTypes = { [1] = true, [7] = true, [13] = true, [24] = true, [11] = true, [38] = true, }, + baseMods = { + skill("castTime", 1), + skill("manaCost", 8), + --"shield_charge_scaling_stun_threshold_reduction_+%_at_maximum_range" = 50 + mod("MovementSpeed", "INC", 75, 0, 0, nil), --"base_movement_velocity_+%" = 75 + --"shield_charge_damage_+%_maximum" = 200 + mod("Damage", "MORE", -50, ModFlag.Hit), --"active_skill_damage_+%_final" = -50 + --"ignores_proximity_shield" = ? + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + --"is_area_damage" = ? + }, + qualityMods = { + mod("Damage", "INC", 1, 0, 0, nil), --"damage_+%" = 1 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { attack_damageMore = 1, }, - [2] = { attack_damageMore = 1.012, }, - [3] = { attack_damageMore = 1.024, }, - [4] = { attack_damageMore = 1.036, }, - [5] = { attack_damageMore = 1.048, }, - [6] = { attack_damageMore = 1.06, }, - [7] = { attack_damageMore = 1.072, }, - [8] = { attack_damageMore = 1.084, }, - [9] = { attack_damageMore = 1.096, }, - [10] = { attack_damageMore = 1.108, }, - [11] = { attack_damageMore = 1.12, }, - [12] = { attack_damageMore = 1.132, }, - [13] = { attack_damageMore = 1.144, }, - [14] = { attack_damageMore = 1.156, }, - [15] = { attack_damageMore = 1.168, }, - [16] = { attack_damageMore = 1.18, }, - [17] = { attack_damageMore = 1.192, }, - [18] = { attack_damageMore = 1.204, }, - [19] = { attack_damageMore = 1.216, }, - [20] = { attack_damageMore = 1.228, }, - [21] = { attack_damageMore = 1.24, }, - [22] = { attack_damageMore = 1.252, }, - [23] = { attack_damageMore = 1.264, }, - [24] = { attack_damageMore = 1.276, }, - [25] = { attack_damageMore = 1.288, }, - [26] = { attack_damageMore = 1.3, }, - [27] = { attack_damageMore = 1.312, }, - [28] = { attack_damageMore = 1.324, }, - [29] = { attack_damageMore = 1.336, }, - [30] = { attack_damageMore = 1.348, }, - } + [1] = { nil, }, + [2] = { 1.2, }, + [3] = { 2.4, }, + [4] = { 3.6, }, + [5] = { 4.8, }, + [6] = { 6, }, + [7] = { 7.2, }, + [8] = { 8.4, }, + [9] = { 9.6, }, + [10] = { 10.8, }, + [11] = { 12, }, + [12] = { 13.2, }, + [13] = { 14.4, }, + [14] = { 15.6, }, + [15] = { 16.8, }, + [16] = { 18, }, + [17] = { 19.2, }, + [18] = { 20.4, }, + [19] = { 21.6, }, + [20] = { 22.8, }, + [21] = { 24, }, + [22] = { 25.2, }, + [23] = { 26.4, }, + [24] = { 27.6, }, + [25] = { 28.8, }, + [26] = { 30, }, + [27] = { 31.2, }, + [28] = { 32.4, }, + [29] = { 33.6, }, + [30] = { 34.8, }, + }, } -gems["Shockwave Totem"] = { - strength = true, - spell = true, +gems["Shockwave Totem"] = { totem = true, - aoe = true, + strength = true, + active_skill = true, + spell = true, + area = true, duration = true, - hit = true, - base = { - skill_castTime = 0.6, - skill_damageEffectiveness = 0.6, - skill_critChanceBase = 5, - skill_durationBase = 8, + color = 1, + baseFlags = { + spell = true, + totem = true, + area = true, + duration = true, }, - quality = { - totemLifeInc = 1, + skillTypes = { [2] = true, [10] = true, [11] = true, [12] = true, [17] = true, [19] = true, [30] = true, [26] = true, }, + skillTotemId = 5, + baseMods = { + skill("castTime", 0.6), + skill("damageEffectiveness", 0.6), + skill("critChance", 5), + --"base_totem_duration" = 8000 + --"base_totem_range" = 100 + --"base_global_chance_to_knockback_%" = 25 + --"is_totem" = ? + --"is_area_damage" = ? + --"base_skill_is_totemified" = ? + }, + qualityMods = { + mod("TotemLife", "INC", 1), --"totem_life_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + [2] = skill("PhysicalMin", nil), --"spell_minimum_base_physical_damage" + [3] = skill("PhysicalMax", nil), --"spell_maximum_base_physical_damage" + [4] = skill("totemLevel", nil), --"base_active_skill_totem_level" }, levels = { - [1] = { skill_manaCostBase = 24, skill_physicalMin = 23, skill_physicalMax = 46, }, - [2] = { skill_manaCostBase = 26, skill_physicalMin = 28, skill_physicalMax = 51, }, - [3] = { skill_manaCostBase = 28, skill_physicalMin = 33, skill_physicalMax = 62, }, - [4] = { skill_manaCostBase = 31, skill_physicalMin = 40, skill_physicalMax = 74, }, - [5] = { skill_manaCostBase = 33, skill_physicalMin = 47, skill_physicalMax = 88, }, - [6] = { skill_manaCostBase = 34, skill_physicalMin = 53, skill_physicalMax = 98, }, - [7] = { skill_manaCostBase = 36, skill_physicalMin = 59, skill_physicalMax = 110, }, - [8] = { skill_manaCostBase = 39, skill_physicalMin = 66, skill_physicalMax = 123, }, - [9] = { skill_manaCostBase = 43, skill_physicalMin = 74, skill_physicalMax = 137, }, - [10] = { skill_manaCostBase = 46, skill_physicalMin = 82, skill_physicalMax = 153, }, - [11] = { skill_manaCostBase = 49, skill_physicalMin = 92, skill_physicalMax = 170, }, - [12] = { skill_manaCostBase = 51, skill_physicalMin = 102, skill_physicalMax = 189, }, - [13] = { skill_manaCostBase = 53, skill_physicalMin = 113, skill_physicalMax = 210, }, - [14] = { skill_manaCostBase = 53, skill_physicalMin = 126, skill_physicalMax = 233, }, - [15] = { skill_manaCostBase = 55, skill_physicalMin = 139, skill_physicalMax = 259, }, - [16] = { skill_manaCostBase = 55, skill_physicalMin = 154, skill_physicalMax = 287, }, - [17] = { skill_manaCostBase = 57, skill_physicalMin = 171, skill_physicalMax = 318, }, - [18] = { skill_manaCostBase = 57, skill_physicalMin = 189, skill_physicalMax = 351, }, - [19] = { skill_manaCostBase = 58, skill_physicalMin = 209, skill_physicalMax = 389, }, - [20] = { skill_manaCostBase = 58, skill_physicalMin = 231, skill_physicalMax = 429, }, - [21] = { skill_manaCostBase = 59, skill_physicalMin = 255, skill_physicalMax = 474, }, - [22] = { skill_manaCostBase = 60, skill_physicalMin = 282, skill_physicalMax = 524, }, - [23] = { skill_manaCostBase = 61, skill_physicalMin = 311, skill_physicalMax = 578, }, - [24] = { skill_manaCostBase = 62, skill_physicalMin = 343, skill_physicalMax = 637, }, - [25] = { skill_manaCostBase = 62, skill_physicalMin = 378, skill_physicalMax = 702, }, - [26] = { skill_manaCostBase = 63, skill_physicalMin = 416, skill_physicalMax = 773, }, - [27] = { skill_manaCostBase = 64, skill_physicalMin = 458, skill_physicalMax = 851, }, - [28] = { skill_manaCostBase = 65, skill_physicalMin = 504, skill_physicalMax = 936, }, - [29] = { skill_manaCostBase = 66, skill_physicalMin = 555, skill_physicalMax = 1030, }, - [30] = { skill_manaCostBase = 66, skill_physicalMin = 610, skill_physicalMax = 1132, }, - } + [1] = { 24, 23, 46, 28, }, + [2] = { 26, 28, 51, 31, }, + [3] = { 28, 33, 62, 34, }, + [4] = { 31, 40, 74, 37, }, + [5] = { 33, 47, 88, 40, }, + [6] = { 34, 53, 98, 42, }, + [7] = { 36, 59, 110, 44, }, + [8] = { 39, 66, 123, 46, }, + [9] = { 43, 74, 137, 48, }, + [10] = { 46, 82, 153, 50, }, + [11] = { 49, 92, 170, 52, }, + [12] = { 51, 102, 189, 54, }, + [13] = { 53, 113, 210, 56, }, + [14] = { 53, 126, 233, 58, }, + [15] = { 55, 139, 259, 60, }, + [16] = { 55, 154, 287, 62, }, + [17] = { 57, 171, 318, 64, }, + [18] = { 57, 189, 351, 66, }, + [19] = { 58, 209, 389, 68, }, + [20] = { 58, 231, 429, 70, }, + [21] = { 59, 255, 474, 72, }, + [22] = { 60, 282, 524, 74, }, + [23] = { 61, 311, 578, 76, }, + [24] = { 62, 343, 637, 78, }, + [25] = { 62, 378, 702, 80, }, + [26] = { 63, 416, 773, 82, }, + [27] = { 64, 458, 851, 84, }, + [28] = { 65, 504, 936, 86, }, + [29] = { 66, 555, 1030, 88, }, + [30] = { 66, 610, 1132, 90, }, + }, } gems["Static Strike"] = { strength = true, + active_skill = true, attack = true, melee = true, - aoe = true, + area = true, duration = true, lightning = true, - hit = true, parts = { { name = "Melee hit", - aoe = false, + area = false, }, { name = "Explosion", - aoe = true, + area = true, }, }, - base = { - skill_manaCostBase = 6, - skill_durationBase = 0.75, - skill_physicalConvertTolightning = 60, - SkillPart2_damageMore = 0.6, + color = 1, + baseFlags = { + melee = true, + area = true, + duration = true, + lightning = true, }, - quality = { - aoeRadiusInc = 0.5, + skillTypes = { [1] = true, [6] = true, [25] = true, [28] = true, [24] = true, [11] = true, [12] = true, [35] = true, }, + baseMods = { + skill("castTime", 1), + skill("manaCost", 6), + skill("PhysicalDamageConvertToLightning", 60), --"skill_physical_damage_%_to_convert_to_lightning" = 60 + skill("duration", 0.75), --"base_skill_effect_duration" = 750 + mod("Damage", "MORE", -40, ModFlag.Attack, 0, { type = "SkillPart", skillPart = 2 }), --"static_strike_explosion_damage_+%_final" = -40 + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), + [2] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" }, levels = { - [1] = { attack_damageMore = 1.1, }, - [2] = { attack_damageMore = 1.126, }, - [3] = { attack_damageMore = 1.152, }, - [4] = { attack_damageMore = 1.178, }, - [5] = { attack_damageMore = 1.204, }, - [6] = { attack_damageMore = 1.23, }, - [7] = { attack_damageMore = 1.256, }, - [8] = { attack_damageMore = 1.282, }, - [9] = { attack_damageMore = 1.308, }, - [10] = { attack_damageMore = 1.334, }, - [11] = { attack_damageMore = 1.36, }, - [12] = { attack_damageMore = 1.386, }, - [13] = { attack_damageMore = 1.412, }, - [14] = { attack_damageMore = 1.438, }, - [15] = { attack_damageMore = 1.464, }, - [16] = { attack_damageMore = 1.49, }, - [17] = { attack_damageMore = 1.516, }, - [18] = { attack_damageMore = 1.542, }, - [19] = { attack_damageMore = 1.568, }, - [20] = { attack_damageMore = 1.594, }, - [21] = { attack_damageMore = 1.62, }, - [22] = { attack_damageMore = 1.646, }, - [23] = { attack_damageMore = 1.672, }, - [24] = { attack_damageMore = 1.698, }, - [25] = { attack_damageMore = 1.724, }, - [26] = { attack_damageMore = 1.75, }, - [27] = { attack_damageMore = 1.776, }, - [28] = { attack_damageMore = 1.802, }, - [29] = { attack_damageMore = 1.828, }, - [30] = { attack_damageMore = 1.854, }, - } + [1] = { 10, 0, }, + [2] = { 12.6, 1, }, + [3] = { 15.2, 2, }, + [4] = { 17.8, 3, }, + [5] = { 20.4, 4, }, + [6] = { 23, 5, }, + [7] = { 25.6, 6, }, + [8] = { 28.2, 7, }, + [9] = { 30.8, 8, }, + [10] = { 33.4, 9, }, + [11] = { 36, 10, }, + [12] = { 38.6, 11, }, + [13] = { 41.2, 12, }, + [14] = { 43.8, 13, }, + [15] = { 46.4, 14, }, + [16] = { 49, 15, }, + [17] = { 51.6, 16, }, + [18] = { 54.2, 17, }, + [19] = { 56.8, 18, }, + [20] = { 59.4, 19, }, + [21] = { 62, 20, }, + [22] = { 64.6, 21, }, + [23] = { 67.2, 22, }, + [24] = { 69.8, 23, }, + [25] = { 72.4, 24, }, + [26] = { 75, 25, }, + [27] = { 77.6, 26, }, + [28] = { 80.2, 27, }, + [29] = { 82.8, 28, }, + [30] = { 85.4, 29, }, + }, } gems["Summon Flame Golem"] = { - strength = true, - spell = true, - minion = true, golem = true, + strength = true, + active_skill = true, fire = true, - hit = true, - base = { - skill_castTime = 1, - BuffEffect_Cond_HaveFireGolem = true, + minion = true, + spell = true, + color = 1, + baseFlags = { + spell = true, + minion = true, + golem = true, + fire = true, }, - quality = { - minionLifeInc = 1, - minion_damageInc = 1, + skillTypes = { [36] = true, [33] = true, [19] = true, [9] = true, [21] = true, [26] = true, [2] = true, [18] = true, [17] = true, [49] = true, }, + baseMods = { + skill("castTime", 1), + --"base_number_of_golems_allowed" = 1 + --"display_minion_monster_type" = 7 + mod("Misc", "LIST", { type = "Condition", var = "HaveFireGolem" }, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), + }, + qualityMods = { + mod("MinionLife", "INC", 1), --"minion_maximum_life_+%" = 1 + mod("Damage", "INC", 1, 0, KeywordFlag.Minion), --"minion_damage_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + --[2] = "base_actor_scale_+%" + [3] = mod("Damage", "INC", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"fire_golem_grants_damage_+%" + [4] = mod("MinionLife", "INC", nil), --"minion_maximum_life_+%" + --[5] = "display_minion_monster_level" }, levels = { - [1] = { skill_manaCostBase = 30, minionLifeInc = 30, BuffEffect_damageInc = 15, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 15, }, - [2] = { skill_manaCostBase = 32, minionLifeInc = 32, BuffEffect_damageInc = 15, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 15, }, - [3] = { skill_manaCostBase = 34, minionLifeInc = 34, BuffEffect_damageInc = 16, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 16, }, - [4] = { skill_manaCostBase = 36, minionLifeInc = 36, BuffEffect_damageInc = 16, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 16, }, - [5] = { skill_manaCostBase = 38, minionLifeInc = 38, BuffEffect_damageInc = 16, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 16, }, - [6] = { skill_manaCostBase = 40, minionLifeInc = 40, BuffEffect_damageInc = 16, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 16, }, - [7] = { skill_manaCostBase = 42, minionLifeInc = 42, BuffEffect_damageInc = 17, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 17, }, - [8] = { skill_manaCostBase = 44, minionLifeInc = 44, BuffEffect_damageInc = 17, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 17, }, - [9] = { skill_manaCostBase = 44, minionLifeInc = 46, BuffEffect_damageInc = 17, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 17, }, - [10] = { skill_manaCostBase = 46, minionLifeInc = 48, BuffEffect_damageInc = 17, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 17, }, - [11] = { skill_manaCostBase = 48, minionLifeInc = 50, BuffEffect_damageInc = 18, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 18, }, - [12] = { skill_manaCostBase = 48, minionLifeInc = 52, BuffEffect_damageInc = 18, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 18, }, - [13] = { skill_manaCostBase = 50, minionLifeInc = 54, BuffEffect_damageInc = 18, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 18, }, - [14] = { skill_manaCostBase = 50, minionLifeInc = 56, BuffEffect_damageInc = 18, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 18, }, - [15] = { skill_manaCostBase = 52, minionLifeInc = 58, BuffEffect_damageInc = 19, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 19, }, - [16] = { skill_manaCostBase = 52, minionLifeInc = 60, BuffEffect_damageInc = 19, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 19, }, - [17] = { skill_manaCostBase = 52, minionLifeInc = 62, BuffEffect_damageInc = 19, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 19, }, - [18] = { skill_manaCostBase = 52, minionLifeInc = 64, BuffEffect_damageInc = 19, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 19, }, - [19] = { skill_manaCostBase = 54, minionLifeInc = 66, BuffEffect_damageInc = 20, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 20, }, - [20] = { skill_manaCostBase = 54, minionLifeInc = 68, BuffEffect_damageInc = 20, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 20, }, - [21] = { skill_manaCostBase = 56, minionLifeInc = 70, BuffEffect_damageInc = 20, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 20, }, - [22] = { skill_manaCostBase = 56, minionLifeInc = 72, BuffEffect_damageInc = 20, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 20, }, - [23] = { skill_manaCostBase = 58, minionLifeInc = 74, BuffEffect_damageInc = 21, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 21, }, - [24] = { skill_manaCostBase = 58, minionLifeInc = 76, BuffEffect_damageInc = 21, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 21, }, - [25] = { skill_manaCostBase = 60, minionLifeInc = 78, BuffEffect_damageInc = 21, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 21, }, - [26] = { skill_manaCostBase = 60, minionLifeInc = 80, BuffEffect_damageInc = 21, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 21, }, - [27] = { skill_manaCostBase = 60, minionLifeInc = 82, BuffEffect_damageInc = 22, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 22, }, - [28] = { skill_manaCostBase = 60, minionLifeInc = 84, BuffEffect_damageInc = 22, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 22, }, - [29] = { skill_manaCostBase = 62, minionLifeInc = 86, BuffEffect_damageInc = 22, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 22, }, - [30] = { skill_manaCostBase = 62, minionLifeInc = 88, BuffEffect_damageInc = 22, BuffEffect_CondMod_LiegeOfThePrimordial_damageInc = 22, }, - } + [1] = { 30, 0, 15, 30, 34, }, + [2] = { 32, 1, 15, 32, 36, }, + [3] = { 34, 1, 16, 34, 38, }, + [4] = { 36, 2, 16, 36, 40, }, + [5] = { 38, 2, 16, 38, 42, }, + [6] = { 40, 3, 16, 40, 44, }, + [7] = { 42, 3, 17, 42, 46, }, + [8] = { 44, 4, 17, 44, 48, }, + [9] = { 44, 4, 17, 46, 50, }, + [10] = { 46, 5, 17, 48, 52, }, + [11] = { 48, 5, 18, 50, 54, }, + [12] = { 48, 6, 18, 52, 56, }, + [13] = { 50, 6, 18, 54, 58, }, + [14] = { 50, 7, 18, 56, 60, }, + [15] = { 52, 7, 19, 58, 62, }, + [16] = { 52, 8, 19, 60, 64, }, + [17] = { 52, 8, 19, 62, 66, }, + [18] = { 52, 9, 19, 64, 68, }, + [19] = { 54, 9, 20, 66, 69, }, + [20] = { 54, 10, 20, 68, 70, }, + [21] = { 56, 10, 20, 70, 72, }, + [22] = { 56, 11, 20, 72, 74, }, + [23] = { 58, 11, 21, 74, 76, }, + [24] = { 58, 12, 21, 76, 78, }, + [25] = { 60, 12, 21, 78, 80, }, + [26] = { 60, 13, 21, 80, 82, }, + [27] = { 60, 13, 22, 82, 84, }, + [28] = { 60, 14, 22, 84, 86, }, + [29] = { 62, 14, 22, 86, 88, }, + [30] = { 62, 15, 22, 88, 90, }, + }, } gems["Summon Stone Golem"] = { - strength = true, - spell = true, - minion = true, golem = true, - hit = true, - base = { - skill_castTime = 1, - BuffEffect_Cond_HavePhysicalGolem = true, + strength = true, + active_skill = true, + minion = true, + spell = true, + color = 1, + baseFlags = { + spell = true, + minion = true, + golem = true, }, - quality = { - minionLifeInc = 1, - minion_damageInc = 1, + skillTypes = { [36] = true, [19] = true, [9] = true, [21] = true, [26] = true, [2] = true, [18] = true, [17] = true, [49] = true, }, + baseMods = { + skill("castTime", 1), + --"base_number_of_golems_allowed" = 1 + --"display_minion_monster_type" = 10 + mod("Misc", "LIST", { type = "Condition", var = "HavePhysicalGolem" }, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), + }, + qualityMods = { + mod("MinionLife", "INC", 1), --"minion_maximum_life_+%" = 1 + mod("Damage", "INC", 1, 0, KeywordFlag.Minion), --"minion_damage_+%" = 1 + }, + levelMods = { + [1] = skill("manaCost", nil), + --[2] = "base_actor_scale_+%" + [3] = mod("MinionLife", "INC", nil), --"minion_maximum_life_+%" + [4] = mod("LifeRegen", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"stone_golem_grants_base_life_regeneration_rate_per_minute" + --[5] = "display_minion_monster_level" }, levels = { - [1] = { skill_manaCostBase = 30, minionLifeInc = 30, BuffEffect_lifeRegenBase = 33, }, - [2] = { skill_manaCostBase = 32, minionLifeInc = 32, BuffEffect_lifeRegenBase = 36, }, - [3] = { skill_manaCostBase = 34, minionLifeInc = 34, BuffEffect_lifeRegenBase = 39, }, - [4] = { skill_manaCostBase = 36, minionLifeInc = 36, BuffEffect_lifeRegenBase = 42, }, - [5] = { skill_manaCostBase = 38, minionLifeInc = 38, BuffEffect_lifeRegenBase = 45, }, - [6] = { skill_manaCostBase = 40, minionLifeInc = 40, BuffEffect_lifeRegenBase = 49, }, - [7] = { skill_manaCostBase = 42, minionLifeInc = 42, BuffEffect_lifeRegenBase = 52, }, - [8] = { skill_manaCostBase = 44, minionLifeInc = 44, BuffEffect_lifeRegenBase = 56, }, - [9] = { skill_manaCostBase = 44, minionLifeInc = 46, BuffEffect_lifeRegenBase = 60, }, - [10] = { skill_manaCostBase = 46, minionLifeInc = 48, BuffEffect_lifeRegenBase = 64, }, - [11] = { skill_manaCostBase = 48, minionLifeInc = 50, BuffEffect_lifeRegenBase = 68, }, - [12] = { skill_manaCostBase = 48, minionLifeInc = 52, BuffEffect_lifeRegenBase = 72, }, - [13] = { skill_manaCostBase = 50, minionLifeInc = 54, BuffEffect_lifeRegenBase = 76, }, - [14] = { skill_manaCostBase = 50, minionLifeInc = 56, BuffEffect_lifeRegenBase = 81, }, - [15] = { skill_manaCostBase = 52, minionLifeInc = 58, BuffEffect_lifeRegenBase = 85, }, - [16] = { skill_manaCostBase = 52, minionLifeInc = 60, BuffEffect_lifeRegenBase = 90, }, - [17] = { skill_manaCostBase = 52, minionLifeInc = 62, BuffEffect_lifeRegenBase = 95, }, - [18] = { skill_manaCostBase = 52, minionLifeInc = 64, BuffEffect_lifeRegenBase = 100, }, - [19] = { skill_manaCostBase = 54, minionLifeInc = 66, BuffEffect_lifeRegenBase = 103, }, - [20] = { skill_manaCostBase = 54, minionLifeInc = 68, BuffEffect_lifeRegenBase = 105, }, - [21] = { skill_manaCostBase = 56, minionLifeInc = 70, BuffEffect_lifeRegenBase = 110, }, - [22] = { skill_manaCostBase = 56, minionLifeInc = 72, BuffEffect_lifeRegenBase = 116, }, - [23] = { skill_manaCostBase = 58, minionLifeInc = 74, BuffEffect_lifeRegenBase = 121, }, - [24] = { skill_manaCostBase = 58, minionLifeInc = 76, BuffEffect_lifeRegenBase = 127, }, - [25] = { skill_manaCostBase = 60, minionLifeInc = 78, BuffEffect_lifeRegenBase = 133, }, - [26] = { skill_manaCostBase = 60, minionLifeInc = 80, BuffEffect_lifeRegenBase = 139, }, - [27] = { skill_manaCostBase = 60, minionLifeInc = 82, BuffEffect_lifeRegenBase = 145, }, - [28] = { skill_manaCostBase = 60, minionLifeInc = 84, BuffEffect_lifeRegenBase = 151, }, - [29] = { skill_manaCostBase = 62, minionLifeInc = 86, BuffEffect_lifeRegenBase = 157, }, - [30] = { skill_manaCostBase = 62, minionLifeInc = 88, BuffEffect_lifeRegenBase = 164, }, - } + [1] = { 30, 0, 30, 33, 34, }, + [2] = { 32, 1, 32, 36, 36, }, + [3] = { 34, 1, 34, 39, 38, }, + [4] = { 36, 2, 36, 42, 40, }, + [5] = { 38, 2, 38, 45, 42, }, + [6] = { 40, 3, 40, 49, 44, }, + [7] = { 42, 3, 42, 52, 46, }, + [8] = { 44, 4, 44, 56, 48, }, + [9] = { 44, 4, 46, 60, 50, }, + [10] = { 46, 5, 48, 64, 52, }, + [11] = { 48, 5, 50, 68, 54, }, + [12] = { 48, 6, 52, 72, 56, }, + [13] = { 50, 6, 54, 76, 58, }, + [14] = { 50, 7, 56, 81, 60, }, + [15] = { 52, 7, 58, 85, 62, }, + [16] = { 52, 8, 60, 90, 64, }, + [17] = { 52, 8, 62, 95, 66, }, + [18] = { 52, 9, 64, 100, 68, }, + [19] = { 54, 9, 66, 103, 69, }, + [20] = { 54, 10, 68, 105, 70, }, + [21] = { 56, 10, 70, 110, 72, }, + [22] = { 56, 11, 72, 116, 74, }, + [23] = { 58, 11, 74, 121, 76, }, + [24] = { 58, 12, 76, 127, 78, }, + [25] = { 60, 12, 78, 133, 80, }, + [26] = { 60, 13, 80, 139, 82, }, + [27] = { 60, 13, 82, 145, 84, }, + [28] = { 60, 14, 84, 151, 86, }, + [29] = { 62, 14, 86, 157, 88, }, + [30] = { 62, 15, 88, 164, 90, }, + }, } gems["Sunder"] = { strength = true, + active_skill = true, attack = true, + area = true, melee = true, - aoe = true, - hit = true, parts = { { name = "Primary wave", @@ -1537,272 +2289,356 @@ gems["Sunder"] = { name = "Shockwaves", }, }, - base = { - skill_manaCostBase = 8, - attackSpeedMore = 0.85, - SkillPart2_attack_damageMore = 0.7, + color = 1, + baseFlags = { + attack = true, + melee = true, + area = true, }, - quality = { - aoeRadiusInc = 0.5, + skillTypes = { [1] = true, [6] = true, [7] = true, [11] = true, [28] = true, [24] = true, }, + baseMods = { + skill("castTime", 1), + skill("manaCost", 8), + mod("Damage", "MORE", -30, ModFlag.Attack, 0, { type = "SkillPart", skillPart = 2 }), --"shockwave_slam_explosion_damage_+%_final" = -30 + mod("Speed", "MORE", -15, ModFlag.Attack), --"active_skill_attack_speed_+%_final" = -15 + --"is_area_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { attack_damageMore = 1, }, - [2] = { attack_damageMore = 1.016, }, - [3] = { attack_damageMore = 1.032, }, - [4] = { attack_damageMore = 1.048, }, - [5] = { attack_damageMore = 1.064, }, - [6] = { attack_damageMore = 1.08, }, - [7] = { attack_damageMore = 1.096, }, - [8] = { attack_damageMore = 1.112, }, - [9] = { attack_damageMore = 1.128, }, - [10] = { attack_damageMore = 1.144, }, - [11] = { attack_damageMore = 1.16, }, - [12] = { attack_damageMore = 1.176, }, - [13] = { attack_damageMore = 1.192, }, - [14] = { attack_damageMore = 1.208, }, - [15] = { attack_damageMore = 1.224, }, - [16] = { attack_damageMore = 1.24, }, - [17] = { attack_damageMore = 1.256, }, - [18] = { attack_damageMore = 1.272, }, - [19] = { attack_damageMore = 1.288, }, - [20] = { attack_damageMore = 1.304, }, - [21] = { attack_damageMore = 1.32, }, - [22] = { attack_damageMore = 1.336, }, - [23] = { attack_damageMore = 1.352, }, - [24] = { attack_damageMore = 1.368, }, - [25] = { attack_damageMore = 1.384, }, - [26] = { attack_damageMore = 1.4, }, - [27] = { attack_damageMore = 1.416, }, - [28] = { attack_damageMore = 1.432, }, - [29] = { attack_damageMore = 1.448, }, - [30] = { attack_damageMore = 1.464, }, - } + [1] = { nil, }, + [2] = { 1.6, }, + [3] = { 3.2, }, + [4] = { 4.8, }, + [5] = { 6.4, }, + [6] = { 8, }, + [7] = { 9.6, }, + [8] = { 11.2, }, + [9] = { 12.8, }, + [10] = { 14.4, }, + [11] = { 16, }, + [12] = { 17.6, }, + [13] = { 19.2, }, + [14] = { 20.8, }, + [15] = { 22.4, }, + [16] = { 24, }, + [17] = { 25.6, }, + [18] = { 27.2, }, + [19] = { 28.8, }, + [20] = { 30.4, }, + [21] = { 32, }, + [22] = { 33.6, }, + [23] = { 35.2, }, + [24] = { 36.8, }, + [25] = { 38.4, }, + [26] = { 40, }, + [27] = { 41.6, }, + [28] = { 43.2, }, + [29] = { 44.8, }, + [30] = { 46.4, }, + }, } gems["Sweep"] = { strength = true, + active_skill = true, attack = true, + area = true, melee = true, - aoe = true, - hit = true, - base = { - skill_manaCostBase = 8, - attackSpeedMore = 0.9, + color = 1, + baseFlags = { + attack = true, + melee = true, + area = true, }, - quality = { - aoeRadiusInc = 0.5, + skillTypes = { [1] = true, [11] = true, [28] = true, [24] = true, }, + baseMods = { + skill("castTime", 1.15), + skill("manaCost", 8), + mod("Speed", "MORE", -10, ModFlag.Attack), --"active_skill_attack_speed_+%_final" = -10 + --"is_area_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + --[1] = "base_global_chance_to_knockback_%" + [2] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { attack_damageMore = 1, }, - [2] = { attack_damageMore = 1.02, }, - [3] = { attack_damageMore = 1.04, }, - [4] = { attack_damageMore = 1.06, }, - [5] = { attack_damageMore = 1.08, }, - [6] = { attack_damageMore = 1.1, }, - [7] = { attack_damageMore = 1.12, }, - [8] = { attack_damageMore = 1.14, }, - [9] = { attack_damageMore = 1.16, }, - [10] = { attack_damageMore = 1.18, }, - [11] = { attack_damageMore = 1.2, }, - [12] = { attack_damageMore = 1.22, }, - [13] = { attack_damageMore = 1.24, }, - [14] = { attack_damageMore = 1.26, }, - [15] = { attack_damageMore = 1.28, }, - [16] = { attack_damageMore = 1.3, }, - [17] = { attack_damageMore = 1.32, }, - [18] = { attack_damageMore = 1.34, }, - [19] = { attack_damageMore = 1.36, }, - [20] = { attack_damageMore = 1.38, }, - [21] = { attack_damageMore = 1.4, }, - [22] = { attack_damageMore = 1.42, }, - [23] = { attack_damageMore = 1.44, }, - [24] = { attack_damageMore = 1.46, }, - [25] = { attack_damageMore = 1.48, }, - [26] = { attack_damageMore = 1.5, }, - [27] = { attack_damageMore = 1.52, }, - [28] = { attack_damageMore = 1.54, }, - [29] = { attack_damageMore = 1.56, }, - [30] = { attack_damageMore = 1.58, }, - } + [1] = { 30, nil, }, + [2] = { 30, 2, }, + [3] = { 31, 4, }, + [4] = { 31, 6, }, + [5] = { 32, 8, }, + [6] = { 32, 10, }, + [7] = { 33, 12, }, + [8] = { 33, 14, }, + [9] = { 34, 16, }, + [10] = { 34, 18, }, + [11] = { 35, 20, }, + [12] = { 35, 22, }, + [13] = { 36, 24, }, + [14] = { 36, 26, }, + [15] = { 37, 28, }, + [16] = { 37, 30, }, + [17] = { 38, 32, }, + [18] = { 38, 34, }, + [19] = { 39, 36, }, + [20] = { 39, 38, }, + [21] = { 40, 40, }, + [22] = { 40, 42, }, + [23] = { 41, 44, }, + [24] = { 41, 46, }, + [25] = { 42, 48, }, + [26] = { 42, 50, }, + [27] = { 43, 52, }, + [28] = { 43, 54, }, + [29] = { 44, 56, }, + [30] = { 44, 58, }, + }, } gems["Vengeance"] = { - strength = true, trigger = true, + strength = true, + active_skill = true, attack = true, + area = true, melee = true, - aoe = true, - hit = true, - showAverage = true, - base = { + color = 1, + baseFlags = { + attack = true, + melee = true, + area = true, }, - quality = { + skillTypes = { [1] = true, [11] = true, [24] = true, [47] = true, [6] = true, [57] = true, }, + baseMods = { + skill("castTime", 1), + --"melee_counterattack_trigger_on_hit_%" = 30 + --"attack_unusable_if_triggerable" = ? + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + --"is_area_damage" = ? + }, + qualityMods = { + --"melee_counterattack_trigger_on_hit_%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { attack_damageMore = 0.75, }, - [2] = { attack_damageMore = 0.77, }, - [3] = { attack_damageMore = 0.79, }, - [4] = { attack_damageMore = 0.81, }, - [5] = { attack_damageMore = 0.83, }, - [6] = { attack_damageMore = 0.85, }, - [7] = { attack_damageMore = 0.87, }, - [8] = { attack_damageMore = 0.89, }, - [9] = { attack_damageMore = 0.91, }, - [10] = { attack_damageMore = 0.93, }, - [11] = { attack_damageMore = 0.95, }, - [12] = { attack_damageMore = 0.97, }, - [13] = { attack_damageMore = 0.99, }, - [14] = { attack_damageMore = 1.01, }, - [15] = { attack_damageMore = 1.03, }, - [16] = { attack_damageMore = 1.05, }, - [17] = { attack_damageMore = 1.07, }, - [18] = { attack_damageMore = 1.09, }, - [19] = { attack_damageMore = 1.11, }, - [20] = { attack_damageMore = 1.13, }, - [21] = { attack_damageMore = 1.15, }, - [22] = { attack_damageMore = 1.17, }, - [23] = { attack_damageMore = 1.19, }, - [24] = { attack_damageMore = 1.21, }, - [25] = { attack_damageMore = 1.23, }, - [26] = { attack_damageMore = 1.25, }, - [27] = { attack_damageMore = 1.27, }, - [28] = { attack_damageMore = 1.29, }, - [29] = { attack_damageMore = 1.31, }, - [30] = { attack_damageMore = 1.33, }, - } + [1] = { -25, }, + [2] = { -23, }, + [3] = { -21, }, + [4] = { -19, }, + [5] = { -17, }, + [6] = { -15, }, + [7] = { -13, }, + [8] = { -11, }, + [9] = { -9, }, + [10] = { -7, }, + [11] = { -5, }, + [12] = { -3, }, + [13] = { -1, }, + [14] = { 1, }, + [15] = { 3, }, + [16] = { 5, }, + [17] = { 7, }, + [18] = { 9, }, + [19] = { 11, }, + [20] = { 13, }, + [21] = { 15, }, + [22] = { 17, }, + [23] = { 19, }, + [24] = { 21, }, + [25] = { 23, }, + [26] = { 25, }, + [27] = { 27, }, + [28] = { 29, }, + [29] = { 31, }, + [30] = { 33, }, + }, } gems["Vigilant Strike"] = { - strength = true, attack = true, + strength = true, + active_skill = true, melee = true, - hit = true, - base = { - skill_manaCostBase = 6, - skill_cannotBeEvaded = true, - CondBuff_Fortify = true, + color = 1, + baseFlags = { + attack = true, + melee = true, }, - quality = { - fortifyDurationInc = 1, + skillTypes = { [1] = true, [5] = true, [24] = true, [6] = true, [28] = true, [25] = true, [53] = true, }, + baseMods = { + skill("castTime", 1), + skill("manaCost", 6), + mod("Misc", "LIST", { type = "Condition", var = "Fortify" }, 0, 0, { type = "Condition", var = "Combat" }), --"chance_to_fortify_on_melee_hit_+%" = 100 + mod("FortifyDuration", "INC", 50), --"fortify_duration_+%" = 50 + skill("cannotBeEvaded", true), --"global_always_hit" = ? + }, + qualityMods = { + mod("FortifyDuration", "INC", 1), --"fortify_duration_+%" = 1 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Attack), }, levels = { - [1] = { attack_damageMore = 1.65, }, - [2] = { attack_damageMore = 1.67, }, - [3] = { attack_damageMore = 1.69, }, - [4] = { attack_damageMore = 1.71, }, - [5] = { attack_damageMore = 1.73, }, - [6] = { attack_damageMore = 1.75, }, - [7] = { attack_damageMore = 1.77, }, - [8] = { attack_damageMore = 1.79, }, - [9] = { attack_damageMore = 1.81, }, - [10] = { attack_damageMore = 1.83, }, - [11] = { attack_damageMore = 1.85, }, - [12] = { attack_damageMore = 1.87, }, - [13] = { attack_damageMore = 1.89, }, - [14] = { attack_damageMore = 1.91, }, - [15] = { attack_damageMore = 1.93, }, - [16] = { attack_damageMore = 1.95, }, - [17] = { attack_damageMore = 1.97, }, - [18] = { attack_damageMore = 1.99, }, - [19] = { attack_damageMore = 2.01, }, - [20] = { attack_damageMore = 2.03, }, - [21] = { attack_damageMore = 2.05, }, - [22] = { attack_damageMore = 2.07, }, - [23] = { attack_damageMore = 2.09, }, - [24] = { attack_damageMore = 2.11, }, - [25] = { attack_damageMore = 2.13, }, - [26] = { attack_damageMore = 2.15, }, - [27] = { attack_damageMore = 2.17, }, - [28] = { attack_damageMore = 2.19, }, - [29] = { attack_damageMore = 2.21, }, - [30] = { attack_damageMore = 2.23, }, - } + [1] = { 65, }, + [2] = { 67, }, + [3] = { 69, }, + [4] = { 71, }, + [5] = { 73, }, + [6] = { 75, }, + [7] = { 77, }, + [8] = { 79, }, + [9] = { 81, }, + [10] = { 83, }, + [11] = { 85, }, + [12] = { 87, }, + [13] = { 89, }, + [14] = { 91, }, + [15] = { 93, }, + [16] = { 95, }, + [17] = { 97, }, + [18] = { 99, }, + [19] = { 101, }, + [20] = { 103, }, + [21] = { 105, }, + [22] = { 107, }, + [23] = { 109, }, + [24] = { 111, }, + [25] = { 113, }, + [26] = { 115, }, + [27] = { 117, }, + [28] = { 119, }, + [29] = { 121, }, + [30] = { 123, }, + }, } gems["Vitality"] = { - strength = true, aura = true, + strength = true, + active_skill = true, spell = true, - aoe = true, - base = { - skill_castTime = 1.2, - skill_manaReservedPercent = 35, + area = true, + color = 1, + baseFlags = { + spell = true, + aura = true, + area = true, }, - quality = { - aura_aoeRadiusInc = 1, + skillTypes = { [2] = true, [11] = true, [5] = true, [15] = true, [27] = true, [16] = true, [18] = true, [44] = true, }, + baseMods = { + skill("castTime", 1.2), + skill("manaCost", 35), + --"base_deal_no_damage" = ? + }, + qualityMods = { + mod("AreaRadius", "INC", 1), --"base_skill_area_of_effect_+%" = 1 + }, + levelMods = { + [1] = mod("LifeRegenPercent", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Aura" }), --"life_regeneration_rate_per_minute_%" + [2] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" }, levels = { - [1] = { AuraEffect_lifeRegenPercent = 0.7, aura_aoeRadiusInc = 0, }, - [2] = { AuraEffect_lifeRegenPercent = 0.75, aura_aoeRadiusInc = 3, }, - [3] = { AuraEffect_lifeRegenPercent = 0.8, aura_aoeRadiusInc = 6, }, - [4] = { AuraEffect_lifeRegenPercent = 0.85, aura_aoeRadiusInc = 9, }, - [5] = { AuraEffect_lifeRegenPercent = 0.9, aura_aoeRadiusInc = 12, }, - [6] = { AuraEffect_lifeRegenPercent = 0.95, aura_aoeRadiusInc = 15, }, - [7] = { AuraEffect_lifeRegenPercent = 1, aura_aoeRadiusInc = 18, }, - [8] = { AuraEffect_lifeRegenPercent = 1.05, aura_aoeRadiusInc = 21, }, - [9] = { AuraEffect_lifeRegenPercent = 1.1, aura_aoeRadiusInc = 23, }, - [10] = { AuraEffect_lifeRegenPercent = 1.15, aura_aoeRadiusInc = 25, }, - [11] = { AuraEffect_lifeRegenPercent = 1.2, aura_aoeRadiusInc = 27, }, - [12] = { AuraEffect_lifeRegenPercent = 1.25, aura_aoeRadiusInc = 29, }, - [13] = { AuraEffect_lifeRegenPercent = 1.3, aura_aoeRadiusInc = 31, }, - [14] = { AuraEffect_lifeRegenPercent = 1.35, aura_aoeRadiusInc = 33, }, - [15] = { AuraEffect_lifeRegenPercent = 1.4, aura_aoeRadiusInc = 35, }, - [16] = { AuraEffect_lifeRegenPercent = 1.45, aura_aoeRadiusInc = 36, }, - [17] = { AuraEffect_lifeRegenPercent = 1.5, aura_aoeRadiusInc = 37, }, - [18] = { AuraEffect_lifeRegenPercent = 1.55, aura_aoeRadiusInc = 38, }, - [19] = { AuraEffect_lifeRegenPercent = 1.6, aura_aoeRadiusInc = 39, }, - [20] = { AuraEffect_lifeRegenPercent = 1.65, aura_aoeRadiusInc = 40, }, - [21] = { AuraEffect_lifeRegenPercent = 1.7, aura_aoeRadiusInc = 41, }, - [22] = { AuraEffect_lifeRegenPercent = 1.75, aura_aoeRadiusInc = 42, }, - [23] = { AuraEffect_lifeRegenPercent = 1.8, aura_aoeRadiusInc = 43, }, - [24] = { AuraEffect_lifeRegenPercent = 1.85, aura_aoeRadiusInc = 44, }, - [25] = { AuraEffect_lifeRegenPercent = 1.9, aura_aoeRadiusInc = 45, }, - [26] = { AuraEffect_lifeRegenPercent = 1.95, aura_aoeRadiusInc = 46, }, - [27] = { AuraEffect_lifeRegenPercent = 2, aura_aoeRadiusInc = 47, }, - [28] = { AuraEffect_lifeRegenPercent = 2.05, aura_aoeRadiusInc = 48, }, - [29] = { AuraEffect_lifeRegenPercent = 2.1, aura_aoeRadiusInc = 49, }, - [30] = { AuraEffect_lifeRegenPercent = 2.15, aura_aoeRadiusInc = 50, }, - } + [1] = { 0.7, 0, }, + [2] = { 0.75, 3, }, + [3] = { 0.8, 6, }, + [4] = { 0.85, 9, }, + [5] = { 0.9, 12, }, + [6] = { 0.95, 15, }, + [7] = { 1, 18, }, + [8] = { 1.05, 21, }, + [9] = { 1.1, 23, }, + [10] = { 1.15, 25, }, + [11] = { 1.2, 27, }, + [12] = { 1.25, 29, }, + [13] = { 1.3, 31, }, + [14] = { 1.35, 33, }, + [15] = { 1.4, 35, }, + [16] = { 1.45, 36, }, + [17] = { 1.5, 37, }, + [18] = { 1.55, 38, }, + [19] = { 1.6, 39, }, + [20] = { 1.65, 40, }, + [21] = { 1.7, 41, }, + [22] = { 1.75, 42, }, + [23] = { 1.8, 43, }, + [24] = { 1.85, 44, }, + [25] = { 1.9, 45, }, + [26] = { 1.95, 46, }, + [27] = { 2, 47, }, + [28] = { 2.05, 48, }, + [29] = { 2.1, 49, }, + [30] = { 2.15, 50, }, + }, } gems["Warlord's Mark"] = { - strength = true, curse = true, + strength = true, + active_skill = true, spell = true, - aoe = true, + area = true, duration = true, - debuff = true, - base = { - skill_castTime = 0.5, + color = 1, + baseFlags = { + spell = true, + curse = true, + area = true, + duration = true, }, - quality = { + skillTypes = { [2] = true, [11] = true, [12] = true, [17] = true, [18] = true, [19] = true, [26] = true, [32] = true, [36] = true, }, + baseMods = { + skill("castTime", 0.5), + --"chance_to_be_stunned_%" = 10 + --"life_leech_on_any_damage_when_hit_permyriad" = 200 + --"mana_leech_on_any_damage_when_hit_permyriad" = 200 + --"base_deal_no_damage" = ? + skill("debuff", true), + }, + qualityMods = { + --"chance_to_grant_endurance_charge_on_death_%" = 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("StunRecovery", "INC", nil, 0, 0, { type = "GlobalEffect", effectType = "Curse" }), --"base_stun_recovery_+%" + --[5] = "chance_to_grant_endurance_charge_on_death_%" }, levels = { - [1] = { skill_manaCostBase = 24, skill_durationBase = 6, curse_aoeRadiusInc = 0, }, - [2] = { skill_manaCostBase = 26, skill_durationBase = 6.2, curse_aoeRadiusInc = 2, }, - [3] = { skill_manaCostBase = 27, skill_durationBase = 6.4, curse_aoeRadiusInc = 4, }, - [4] = { skill_manaCostBase = 29, skill_durationBase = 6.6, curse_aoeRadiusInc = 6, }, - [5] = { skill_manaCostBase = 30, skill_durationBase = 6.8, curse_aoeRadiusInc = 8, }, - [6] = { skill_manaCostBase = 32, skill_durationBase = 7, curse_aoeRadiusInc = 10, }, - [7] = { skill_manaCostBase = 34, skill_durationBase = 7.2, curse_aoeRadiusInc = 12, }, - [8] = { skill_manaCostBase = 35, skill_durationBase = 7.4, curse_aoeRadiusInc = 14, }, - [9] = { skill_manaCostBase = 37, skill_durationBase = 7.6, curse_aoeRadiusInc = 16, }, - [10] = { skill_manaCostBase = 38, skill_durationBase = 7.8, curse_aoeRadiusInc = 18, }, - [11] = { skill_manaCostBase = 39, skill_durationBase = 8, curse_aoeRadiusInc = 20, }, - [12] = { skill_manaCostBase = 40, skill_durationBase = 8.2, curse_aoeRadiusInc = 22, }, - [13] = { skill_manaCostBase = 42, skill_durationBase = 8.4, curse_aoeRadiusInc = 24, }, - [14] = { skill_manaCostBase = 43, skill_durationBase = 8.6, curse_aoeRadiusInc = 26, }, - [15] = { skill_manaCostBase = 44, skill_durationBase = 8.8, curse_aoeRadiusInc = 28, }, - [16] = { skill_manaCostBase = 45, skill_durationBase = 9, curse_aoeRadiusInc = 30, }, - [17] = { skill_manaCostBase = 46, skill_durationBase = 9.2, curse_aoeRadiusInc = 32, }, - [18] = { skill_manaCostBase = 47, skill_durationBase = 9.4, curse_aoeRadiusInc = 34, }, - [19] = { skill_manaCostBase = 48, skill_durationBase = 9.6, curse_aoeRadiusInc = 36, }, - [20] = { skill_manaCostBase = 50, skill_durationBase = 9.8, curse_aoeRadiusInc = 38, }, - [21] = { skill_manaCostBase = 51, skill_durationBase = 10, curse_aoeRadiusInc = 40, }, - [22] = { skill_manaCostBase = 52, skill_durationBase = 10.2, curse_aoeRadiusInc = 42, }, - [23] = { skill_manaCostBase = 53, skill_durationBase = 10.4, curse_aoeRadiusInc = 44, }, - [24] = { skill_manaCostBase = 54, skill_durationBase = 10.6, curse_aoeRadiusInc = 46, }, - [25] = { skill_manaCostBase = 56, skill_durationBase = 10.8, curse_aoeRadiusInc = 48, }, - [26] = { skill_manaCostBase = 57, skill_durationBase = 11, curse_aoeRadiusInc = 50, }, - [27] = { skill_manaCostBase = 58, skill_durationBase = 11.2, curse_aoeRadiusInc = 52, }, - [28] = { skill_manaCostBase = 59, skill_durationBase = 11.4, curse_aoeRadiusInc = 54, }, - [29] = { skill_manaCostBase = 60, skill_durationBase = 11.6, curse_aoeRadiusInc = 56, }, - [30] = { skill_manaCostBase = 61, skill_durationBase = 11.8, curse_aoeRadiusInc = 58, }, - } + [1] = { 24, 6, 0, -21, 21, }, + [2] = { 26, 6.2, 2, -21, 21, }, + [3] = { 27, 6.4, 4, -22, 22, }, + [4] = { 29, 6.6, 6, -22, 22, }, + [5] = { 30, 6.8, 8, -23, 23, }, + [6] = { 32, 7, 10, -23, 23, }, + [7] = { 34, 7.2, 12, -24, 24, }, + [8] = { 35, 7.4, 14, -24, 24, }, + [9] = { 37, 7.6, 16, -25, 25, }, + [10] = { 38, 7.8, 18, -25, 25, }, + [11] = { 39, 8, 20, -26, 26, }, + [12] = { 40, 8.2, 22, -26, 26, }, + [13] = { 42, 8.4, 24, -27, 27, }, + [14] = { 43, 8.6, 26, -27, 27, }, + [15] = { 44, 8.8, 28, -28, 28, }, + [16] = { 45, 9, 30, -28, 28, }, + [17] = { 46, 9.2, 32, -29, 29, }, + [18] = { 47, 9.4, 34, -29, 29, }, + [19] = { 48, 9.6, 36, -30, 30, }, + [20] = { 50, 9.8, 38, -30, 30, }, + [21] = { 51, 10, 40, -31, 31, }, + [22] = { 52, 10.2, 42, -31, 31, }, + [23] = { 53, 10.4, 44, -32, 32, }, + [24] = { 54, 10.6, 46, -32, 32, }, + [25] = { 56, 10.8, 48, -33, 33, }, + [26] = { 57, 11, 50, -33, 33, }, + [27] = { 58, 11.2, 52, -34, 34, }, + [28] = { 59, 11.4, 54, -34, 34, }, + [29] = { 60, 11.6, 56, -35, 35, }, + [30] = { 61, 11.8, 58, -35, 35, }, + }, } - diff --git a/Data/Gems/other.lua b/Data/Gems/other.lua index 5d564fa0..11558486 100644 --- a/Data/Gems/other.lua +++ b/Data/Gems/other.lua @@ -1,30 +1,49 @@ -- Path of Building -- --- Other active skills +-- Active Strength skills -- Skill gem data (c) Grinding Gear Games -- -local gems = ... +local gems, mod, flag, skill = ... gems["_default"] = { - attack = true, - melee = true, - bow = true, - hit = true, - base = { + hidden = true, + color = 4, + baseFlags = { + attack = true, + melee = true, + projectile = true, }, - quality = { + skillTypes = { [1] = true, [48] = true, [6] = true, [3] = true, [25] = true, [28] = true, [24] = true, }, + baseMods = { + skill("castTime", 1), + --"skill_can_fire_arrows" = 1 + --"skill_can_fire_wand_projectiles" = 1 + }, + qualityMods = { + }, + levelMods = { }, levels = { - [1] = { } + [1] = { }, }, } gems["Detonate Mines"] = { + low_max_level = true, + active_skill = true, spell = true, - base = { - skill_castTime = 0.2, + color = 4, + baseFlags = { + spell = true, }, - quality = { - castSpeedInc = 5, + skillTypes = { [2] = true, [17] = true, [18] = true, [36] = true, }, + baseMods = { + skill("castTime", 0.2), + --"base_deal_no_damage" = ? + }, + qualityMods = { + mod("Speed", "INC", 5, ModFlag.Spell), --"base_cast_speed_+%" = 5 + }, + levelMods = { }, levels = { [1] = { }, @@ -37,15 +56,25 @@ gems["Detonate Mines"] = { [8] = { }, [9] = { }, [10] = { }, - } + }, } gems["Portal"] = { + low_max_level = true, + active_skill = true, spell = true, - base = { - skill_castTime = 2.5, + color = 4, + baseFlags = { + spell = true, }, - quality = { - castSpeedInc = 3, + skillTypes = { [2] = true, [17] = true, [18] = true, [19] = true, [36] = true, [27] = true, }, + baseMods = { + skill("castTime", 2.5), + --"base_deal_no_damage" = ? + }, + qualityMods = { + mod("Speed", "INC", 3, ModFlag.Spell), --"base_cast_speed_+%" = 3 + }, + levelMods = { }, levels = { [1] = { }, @@ -58,1286 +87,88 @@ gems["Portal"] = { [8] = { }, [9] = { }, [10] = { }, - } -} -gems["Vaal Arc"] = { - intelligence = true, - spell = true, - lightning = true, - vaal = true, - hit = true, - showAverage = true, - base = { - skill_castTime = 0.8, - skill_damageEffectiveness = 0.8, - skill_critChanceBase = 5, - shockChance = 100, - chainCount = 40, }, - quality = { - shock_durationInc = 1.5, +} +gems["Gluttony of Elements"] = { + hidden = true, + color = 4, + baseFlags = { + spell = true, + aura = true, + area = true, + duration = true, + vaal = true, + }, + skillTypes = { [2] = true, [5] = true, [11] = true, [12] = true, [18] = true, [43] = true, [44] = true, }, + baseMods = { + skill("castTime", 1), + skill("duration", 6), --"base_skill_effect_duration" = 6000 + --"base_elemental_damage_heals" = ? + }, + qualityMods = { + }, + levelMods = { }, levels = { - [1] = { skill_lightningMin = 2, skill_lightningMax = 35, }, - [2] = { skill_lightningMin = 2, skill_lightningMax = 44, }, - [3] = { skill_lightningMin = 3, skill_lightningMax = 59, }, - [4] = { skill_lightningMin = 4, skill_lightningMax = 77, }, - [5] = { skill_lightningMin = 5, skill_lightningMax = 99, }, - [6] = { skill_lightningMin = 7, skill_lightningMax = 125, }, - [7] = { skill_lightningMin = 8, skill_lightningMax = 158, }, - [8] = { skill_lightningMin = 10, skill_lightningMax = 187, }, - [9] = { skill_lightningMin = 12, skill_lightningMax = 220, }, - [10] = { skill_lightningMin = 14, skill_lightningMax = 259, }, - [11] = { skill_lightningMin = 16, skill_lightningMax = 303, }, - [12] = { skill_lightningMin = 19, skill_lightningMax = 353, }, - [13] = { skill_lightningMin = 22, skill_lightningMax = 411, }, - [14] = { skill_lightningMin = 25, skill_lightningMax = 478, }, - [15] = { skill_lightningMin = 29, skill_lightningMax = 554, }, - [16] = { skill_lightningMin = 34, skill_lightningMax = 641, }, - [17] = { skill_lightningMin = 37, skill_lightningMax = 706, }, - [18] = { skill_lightningMin = 41, skill_lightningMax = 777, }, - [19] = { skill_lightningMin = 45, skill_lightningMax = 854, }, - [20] = { skill_lightningMin = 49, skill_lightningMax = 938, }, - [21] = { skill_lightningMin = 54, skill_lightningMax = 1030, }, - [22] = { skill_lightningMin = 60, skill_lightningMax = 1131, }, - [23] = { skill_lightningMin = 65, skill_lightningMax = 1240, }, - [24] = { skill_lightningMin = 72, skill_lightningMax = 1359, }, - [25] = { skill_lightningMin = 78, skill_lightningMax = 1489, }, - [26] = { skill_lightningMin = 86, skill_lightningMax = 1631, }, - [27] = { skill_lightningMin = 94, skill_lightningMax = 1785, }, - [28] = { skill_lightningMin = 103, skill_lightningMax = 1953, }, - [29] = { skill_lightningMin = 112, skill_lightningMax = 2136, }, - [30] = { skill_lightningMin = 123, skill_lightningMax = 2335, }, - } -} -gems["Vaal Burning Arrow"] = { - dexterity = true, - attack = true, - bow = true, - aoe = true, - fire = true, - vaal = true, - hit = true, - showAverage = true, - base = { - igniteChance = 20, - physicalConvertTofire = 50, + [20] = { }, }, - quality = { - ignite_durationInc = 3, +} +gems["Icestorm"] = { + hidden = true, + color = 3, + baseFlags = { + spell = true, + area = true, + duration = true, + cold = true, + }, + skillTypes = { [2] = true, [10] = true, [11] = true, [12] = true, [17] = true, [18] = true, [19] = true, [26] = true, [36] = true, [34] = true, [60] = true, }, + baseMods = { + skill("castTime", 1), + skill("manaCost", 22), + skill("damageEffectiveness", 0.3), + skill("critChance", 5), + skill("ColdMin", 1, { type = "PerStat", stat = "Int", div = 10 }), --"spell_minimum_base_cold_damage_+_per_10_intelligence" = 1 + skill("ColdMax", 3, { type = "PerStat", stat = "Int", div = 10 }), --"spell_maximum_base_cold_damage_+_per_10_intelligence" = 3 + skill("duration", 1.5), --"base_skill_effect_duration" = 1500 + --"fire_storm_fireball_delay_ms" = 100 + --"skill_override_pvp_scaling_time_ms" = 450 + --"firestorm_drop_ground_ice_duration_ms" = 500 + --"skill_art_variation" = 4 + --"skill_effect_duration_per_100_int" = 150 + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + --"is_area_damage" = ? + skill("duration", 0.15, { type = "PerStat", stat = "Int", div = 100, base = 1.5 }), + }, + qualityMods = { + }, + levelMods = { }, levels = { - [1] = { attack_damageMore = 1.6, dot_fireInc = 10, }, - [2] = { attack_damageMore = 1.62, dot_fireInc = 11, }, - [3] = { attack_damageMore = 1.64, dot_fireInc = 12, }, - [4] = { attack_damageMore = 1.66, dot_fireInc = 13, }, - [5] = { attack_damageMore = 1.68, dot_fireInc = 14, }, - [6] = { attack_damageMore = 1.7, dot_fireInc = 15, }, - [7] = { attack_damageMore = 1.72, dot_fireInc = 16, }, - [8] = { attack_damageMore = 1.74, dot_fireInc = 17, }, - [9] = { attack_damageMore = 1.76, dot_fireInc = 18, }, - [10] = { attack_damageMore = 1.78, dot_fireInc = 19, }, - [11] = { attack_damageMore = 1.8, dot_fireInc = 20, }, - [12] = { attack_damageMore = 1.82, dot_fireInc = 21, }, - [13] = { attack_damageMore = 1.84, dot_fireInc = 22, }, - [14] = { attack_damageMore = 1.86, dot_fireInc = 23, }, - [15] = { attack_damageMore = 1.88, dot_fireInc = 24, }, - [16] = { attack_damageMore = 1.9, dot_fireInc = 25, }, - [17] = { attack_damageMore = 1.92, dot_fireInc = 26, }, - [18] = { attack_damageMore = 1.94, dot_fireInc = 27, }, - [19] = { attack_damageMore = 1.96, dot_fireInc = 28, }, - [20] = { attack_damageMore = 1.98, dot_fireInc = 29, }, - [21] = { attack_damageMore = 2, dot_fireInc = 30, }, - [22] = { attack_damageMore = 2.02, dot_fireInc = 31, }, - [23] = { attack_damageMore = 2.04, dot_fireInc = 32, }, - [24] = { attack_damageMore = 2.06, dot_fireInc = 33, }, - [25] = { attack_damageMore = 2.08, dot_fireInc = 34, }, - [26] = { attack_damageMore = 2.1, dot_fireInc = 35, }, - [27] = { attack_damageMore = 2.12, dot_fireInc = 36, }, - [28] = { attack_damageMore = 2.14, dot_fireInc = 37, }, - [29] = { attack_damageMore = 2.16, dot_fireInc = 38, }, - [30] = { attack_damageMore = 2.18, dot_fireInc = 39, }, - } -} -gems["Vaal Clarity"] = { - intelligence = true, - aura = true, - spell = true, - aoe = true, - duration = true, - vaal = true, - base = { - skill_castTime = 0.6, - BuffEffect_manaCostMore = 0, + [1] = { }, }, - quality = { - aura_aoeRadiusInc = 1, +} +gems["Illusory Warp"] = { + hidden = true, + color = 4, + baseFlags = { + spell = true, + area = true, + duration = true, + movement = true, + cold = true, + }, + skillTypes = { [2] = true, [38] = true, [12] = true, [34] = true, [11] = true, }, + baseMods = { + skill("castTime", 0.6), + skill("manaCost", 20), + skill("duration", 5), --"base_skill_effect_duration" = 5000 + }, + qualityMods = { + }, + levelMods = { }, levels = { - [1] = { aura_aoeRadiusInc = 0, skill_durationBase = 8, }, - [2] = { aura_aoeRadiusInc = 3, skill_durationBase = 8.1, }, - [3] = { aura_aoeRadiusInc = 6, skill_durationBase = 8.2, }, - [4] = { aura_aoeRadiusInc = 9, skill_durationBase = 8.3, }, - [5] = { aura_aoeRadiusInc = 12, skill_durationBase = 8.4, }, - [6] = { aura_aoeRadiusInc = 15, skill_durationBase = 8.5, }, - [7] = { aura_aoeRadiusInc = 18, skill_durationBase = 8.6, }, - [8] = { aura_aoeRadiusInc = 21, skill_durationBase = 8.7, }, - [9] = { aura_aoeRadiusInc = 23, skill_durationBase = 8.8, }, - [10] = { aura_aoeRadiusInc = 25, skill_durationBase = 8.9, }, - [11] = { aura_aoeRadiusInc = 27, skill_durationBase = 9, }, - [12] = { aura_aoeRadiusInc = 29, skill_durationBase = 9.1, }, - [13] = { aura_aoeRadiusInc = 31, skill_durationBase = 9.2, }, - [14] = { aura_aoeRadiusInc = 33, skill_durationBase = 9.3, }, - [15] = { aura_aoeRadiusInc = 35, skill_durationBase = 9.4, }, - [16] = { aura_aoeRadiusInc = 36, skill_durationBase = 9.5, }, - [17] = { aura_aoeRadiusInc = 37, skill_durationBase = 9.6, }, - [18] = { aura_aoeRadiusInc = 38, skill_durationBase = 9.7, }, - [19] = { aura_aoeRadiusInc = 39, skill_durationBase = 9.8, }, - [20] = { aura_aoeRadiusInc = 40, skill_durationBase = 9.9, }, - [21] = { aura_aoeRadiusInc = 41, skill_durationBase = 10, }, - [22] = { aura_aoeRadiusInc = 42, skill_durationBase = 10.1, }, - [23] = { aura_aoeRadiusInc = 43, skill_durationBase = 10.2, }, - [24] = { aura_aoeRadiusInc = 44, skill_durationBase = 10.3, }, - [25] = { aura_aoeRadiusInc = 45, skill_durationBase = 10.4, }, - [26] = { aura_aoeRadiusInc = 46, skill_durationBase = 10.5, }, - [27] = { aura_aoeRadiusInc = 47, skill_durationBase = 10.6, }, - [28] = { aura_aoeRadiusInc = 48, skill_durationBase = 10.7, }, - [29] = { aura_aoeRadiusInc = 49, skill_durationBase = 10.8, }, - [30] = { aura_aoeRadiusInc = 50, skill_durationBase = 10.9, }, - } + [20] = { }, + }, } -gems["Vaal Cold Snap"] = { - intelligence = true, - spell = true, - aoe = true, - duration = true, - cold = true, - vaal = true, - hit = true, - showAverage = true, - base = { - skill_castTime = 0.85, - skill_damageEffectiveness = 1.4, - skill_critChanceBase = 5, - skill_durationBase = 10, - }, - quality = { - aoeRadiusInc = 0.5, - }, - levels = { - [1] = { skill_coldMin = 11, skill_coldMax = 17, }, - [2] = { skill_coldMin = 14, skill_coldMax = 21, }, - [3] = { skill_coldMin = 18, skill_coldMax = 28, }, - [4] = { skill_coldMin = 24, skill_coldMax = 35, }, - [5] = { skill_coldMin = 32, skill_coldMax = 48, }, - [6] = { skill_coldMin = 42, skill_coldMax = 63, }, - [7] = { skill_coldMin = 55, skill_coldMax = 82, }, - [8] = { skill_coldMin = 70, skill_coldMax = 105, }, - [9] = { skill_coldMin = 88, skill_coldMax = 132, }, - [10] = { skill_coldMin = 111, skill_coldMax = 166, }, - [11] = { skill_coldMin = 137, skill_coldMax = 206, }, - [12] = { skill_coldMin = 170, skill_coldMax = 255, }, - [13] = { skill_coldMin = 208, skill_coldMax = 313, }, - [14] = { skill_coldMin = 255, skill_coldMax = 382, }, - [15] = { skill_coldMin = 295, skill_coldMax = 443, }, - [16] = { skill_coldMin = 342, skill_coldMax = 512, }, - [17] = { skill_coldMin = 394, skill_coldMax = 591, }, - [18] = { skill_coldMin = 454, skill_coldMax = 682, }, - [19] = { skill_coldMin = 523, skill_coldMax = 784, }, - [20] = { skill_coldMin = 600, skill_coldMax = 901, }, - [21] = { skill_coldMin = 658, skill_coldMax = 987, }, - [22] = { skill_coldMin = 721, skill_coldMax = 1081, }, - [23] = { skill_coldMin = 789, skill_coldMax = 1184, }, - [24] = { skill_coldMin = 863, skill_coldMax = 1295, }, - [25] = { skill_coldMin = 944, skill_coldMax = 1416, }, - [26] = { skill_coldMin = 1032, skill_coldMax = 1548, }, - [27] = { skill_coldMin = 1127, skill_coldMax = 1691, }, - [28] = { skill_coldMin = 1231, skill_coldMax = 1846, }, - [29] = { skill_coldMin = 1343, skill_coldMax = 2015, }, - [30] = { skill_coldMin = 1466, skill_coldMax = 2199, }, - } -} -gems["Vaal Cyclone"] = { - dexterity = true, - attack = true, - melee = true, - aoe = true, - duration = true, - vaal = true, - hit = true, - base = { - skill_durationBase = 5, - aoeRadiusInc = 50, - attackSpeedMore = 2, - }, - quality = { - aoeRadiusInc = 0.5, - }, - levels = { - [1] = { attack_damageMore = 0.5, }, - [2] = { attack_damageMore = 0.506, }, - [3] = { attack_damageMore = 0.512, }, - [4] = { attack_damageMore = 0.518, }, - [5] = { attack_damageMore = 0.524, }, - [6] = { attack_damageMore = 0.53, }, - [7] = { attack_damageMore = 0.536, }, - [8] = { attack_damageMore = 0.542, }, - [9] = { attack_damageMore = 0.548, }, - [10] = { attack_damageMore = 0.554, }, - [11] = { attack_damageMore = 0.56, }, - [12] = { attack_damageMore = 0.566, }, - [13] = { attack_damageMore = 0.572, }, - [14] = { attack_damageMore = 0.578, }, - [15] = { attack_damageMore = 0.584, }, - [16] = { attack_damageMore = 0.59, }, - [17] = { attack_damageMore = 0.596, }, - [18] = { attack_damageMore = 0.602, }, - [19] = { attack_damageMore = 0.608, }, - [20] = { attack_damageMore = 0.614, }, - [21] = { attack_damageMore = 0.62, }, - [22] = { attack_damageMore = 0.626, }, - [23] = { attack_damageMore = 0.632, }, - [24] = { attack_damageMore = 0.638, }, - [25] = { attack_damageMore = 0.644, }, - [26] = { attack_damageMore = 0.65, }, - [27] = { attack_damageMore = 0.656, }, - [28] = { attack_damageMore = 0.662, }, - [29] = { attack_damageMore = 0.668, }, - [30] = { attack_damageMore = 0.674, }, - } -} -gems["Vaal Discipline"] = { - intelligence = true, - aura = true, - spell = true, - aoe = true, - duration = true, - vaal = true, - base = { - skill_castTime = 0.6, - skill_durationBase = 3, - }, - quality = { - aura_aoeRadiusInc = 1, - }, - levels = { - [1] = { aura_aoeRadiusInc = 0, AuraEffect_energyShieldBase = 181, }, - [2] = { aura_aoeRadiusInc = 3, AuraEffect_energyShieldBase = 210, }, - [3] = { aura_aoeRadiusInc = 6, AuraEffect_energyShieldBase = 233, }, - [4] = { aura_aoeRadiusInc = 9, AuraEffect_energyShieldBase = 268, }, - [5] = { aura_aoeRadiusInc = 12, AuraEffect_energyShieldBase = 301, }, - [6] = { aura_aoeRadiusInc = 15, AuraEffect_energyShieldBase = 334, }, - [7] = { aura_aoeRadiusInc = 18, AuraEffect_energyShieldBase = 376, }, - [8] = { aura_aoeRadiusInc = 21, AuraEffect_energyShieldBase = 418, }, - [9] = { aura_aoeRadiusInc = 23, AuraEffect_energyShieldBase = 463, }, - [10] = { aura_aoeRadiusInc = 25, AuraEffect_energyShieldBase = 496, }, - [11] = { aura_aoeRadiusInc = 27, AuraEffect_energyShieldBase = 519, }, - [12] = { aura_aoeRadiusInc = 29, AuraEffect_energyShieldBase = 562, }, - [13] = { aura_aoeRadiusInc = 31, AuraEffect_energyShieldBase = 602, }, - [14] = { aura_aoeRadiusInc = 33, AuraEffect_energyShieldBase = 638, }, - [15] = { aura_aoeRadiusInc = 35, AuraEffect_energyShieldBase = 680, }, - [16] = { aura_aoeRadiusInc = 36, AuraEffect_energyShieldBase = 716, }, - [17] = { aura_aoeRadiusInc = 37, AuraEffect_energyShieldBase = 759, }, - [18] = { aura_aoeRadiusInc = 38, AuraEffect_energyShieldBase = 807, }, - [19] = { aura_aoeRadiusInc = 39, AuraEffect_energyShieldBase = 842, }, - [20] = { aura_aoeRadiusInc = 40, AuraEffect_energyShieldBase = 908, }, - [21] = { aura_aoeRadiusInc = 41, AuraEffect_energyShieldBase = 944, }, - [22] = { aura_aoeRadiusInc = 42, AuraEffect_energyShieldBase = 991, }, - [23] = { aura_aoeRadiusInc = 43, AuraEffect_energyShieldBase = 1019, }, - [24] = { aura_aoeRadiusInc = 44, AuraEffect_energyShieldBase = 1070, }, - [25] = { aura_aoeRadiusInc = 45, AuraEffect_energyShieldBase = 1123, }, - [26] = { aura_aoeRadiusInc = 46, AuraEffect_energyShieldBase = 1153, }, - [27] = { aura_aoeRadiusInc = 47, AuraEffect_energyShieldBase = 1217, }, - [28] = { aura_aoeRadiusInc = 48, AuraEffect_energyShieldBase = 1276, }, - [29] = { aura_aoeRadiusInc = 49, AuraEffect_energyShieldBase = 1350, }, - [30] = { aura_aoeRadiusInc = 50, AuraEffect_energyShieldBase = 1364, }, - } -} -gems["Vaal Detonate Dead"] = { - dexterity = true, - unsupported = true, -} -gems["Vaal Double Strike"] = { - dexterity = true, - attack = true, - melee = true, - duration = true, - vaal = true, - hit = true, - base = { - }, - quality = { - attackSpeedInc = 0.5, - }, - levels = { - [1] = { attack_damageMore = 0.7, skill_durationBase = 3.6, }, - [2] = { attack_damageMore = 0.708, skill_durationBase = 3.7, }, - [3] = { attack_damageMore = 0.716, skill_durationBase = 3.8, }, - [4] = { attack_damageMore = 0.724, skill_durationBase = 3.9, }, - [5] = { attack_damageMore = 0.732, skill_durationBase = 4, }, - [6] = { attack_damageMore = 0.74, skill_durationBase = 4.1, }, - [7] = { attack_damageMore = 0.748, skill_durationBase = 4.2, }, - [8] = { attack_damageMore = 0.756, skill_durationBase = 4.3, }, - [9] = { attack_damageMore = 0.764, skill_durationBase = 4.4, }, - [10] = { attack_damageMore = 0.772, skill_durationBase = 4.5, }, - [11] = { attack_damageMore = 0.78, skill_durationBase = 4.6, }, - [12] = { attack_damageMore = 0.788, skill_durationBase = 4.7, }, - [13] = { attack_damageMore = 0.796, skill_durationBase = 4.8, }, - [14] = { attack_damageMore = 0.804, skill_durationBase = 4.9, }, - [15] = { attack_damageMore = 0.812, skill_durationBase = 5, }, - [16] = { attack_damageMore = 0.82, skill_durationBase = 5.1, }, - [17] = { attack_damageMore = 0.828, skill_durationBase = 5.2, }, - [18] = { attack_damageMore = 0.836, skill_durationBase = 5.3, }, - [19] = { attack_damageMore = 0.844, skill_durationBase = 5.4, }, - [20] = { attack_damageMore = 0.852, skill_durationBase = 5.5, }, - [21] = { attack_damageMore = 0.86, skill_durationBase = 5.6, }, - [22] = { attack_damageMore = 0.868, skill_durationBase = 5.7, }, - [23] = { attack_damageMore = 0.876, skill_durationBase = 5.8, }, - [24] = { attack_damageMore = 0.884, skill_durationBase = 5.9, }, - [25] = { attack_damageMore = 0.892, skill_durationBase = 6, }, - [26] = { attack_damageMore = 0.9, skill_durationBase = 6.1, }, - [27] = { attack_damageMore = 0.908, skill_durationBase = 6.2, }, - [28] = { attack_damageMore = 0.916, skill_durationBase = 6.3, }, - [29] = { attack_damageMore = 0.924, skill_durationBase = 6.4, }, - [30] = { attack_damageMore = 0.932, skill_durationBase = 6.5, }, - } -} -gems["Vaal Fireball"] = { - intelligence = true, - spell = true, - projectile = true, - aoe = true, - fire = true, - vaal = true, - hit = true, - showAverage = true, - base = { - skill_castTime = 0.85, - skill_damageEffectiveness = 1.25, - skill_critChanceBase = 6, - aoeRadiusInc = 50, - }, - quality = { - igniteChance = 1.5, - }, - levels = { - [1] = { skill_fireMin = 8, skill_fireMax = 11, }, - [2] = { skill_fireMin = 9, skill_fireMax = 13, }, - [3] = { skill_fireMin = 11, skill_fireMax = 16, }, - [4] = { skill_fireMin = 14, skill_fireMax = 22, }, - [5] = { skill_fireMin = 20, skill_fireMax = 30, }, - [6] = { skill_fireMin = 30, skill_fireMax = 45, }, - [7] = { skill_fireMin = 39, skill_fireMax = 59, }, - [8] = { skill_fireMin = 51, skill_fireMax = 76, }, - [9] = { skill_fireMin = 65, skill_fireMax = 98, }, - [10] = { skill_fireMin = 82, skill_fireMax = 124, }, - [11] = { skill_fireMin = 103, skill_fireMax = 155, }, - [12] = { skill_fireMin = 128, skill_fireMax = 192, }, - [13] = { skill_fireMin = 158, skill_fireMax = 238, }, - [14] = { skill_fireMin = 195, skill_fireMax = 292, }, - [15] = { skill_fireMin = 238, skill_fireMax = 357, }, - [16] = { skill_fireMin = 289, skill_fireMax = 434, }, - [17] = { skill_fireMin = 351, skill_fireMax = 526, }, - [18] = { skill_fireMin = 424, skill_fireMax = 636, }, - [19] = { skill_fireMin = 488, skill_fireMax = 732, }, - [20] = { skill_fireMin = 560, skill_fireMax = 841, }, - [21] = { skill_fireMin = 614, skill_fireMax = 921, }, - [22] = { skill_fireMin = 673, skill_fireMax = 1009, }, - [23] = { skill_fireMin = 736, skill_fireMax = 1105, }, - [24] = { skill_fireMin = 806, skill_fireMax = 1209, }, - [25] = { skill_fireMin = 881, skill_fireMax = 1322, }, - [26] = { skill_fireMin = 963, skill_fireMax = 1445, }, - [27] = { skill_fireMin = 1052, skill_fireMax = 1578, }, - [28] = { skill_fireMin = 1149, skill_fireMax = 1723, }, - [29] = { skill_fireMin = 1254, skill_fireMax = 1881, }, - [30] = { skill_fireMin = 1368, skill_fireMax = 2052, }, - } -} -gems["Vaal Flameblast"] = { - intelligence = true, - spell = true, - aoe = true, - fire = true, - vaal = true, - hit = true, - showAverage = true, - base = { - skill_castTime = 1, - skill_damageEffectiveness = 0.6, - skill_critChanceBase = 5, - spell_damageMore = 12, - }, - quality = { - damageInc = 1, - }, - levels = { - [1] = { skill_fireMin = 39, skill_fireMax = 58, }, - [2] = { skill_fireMin = 46, skill_fireMax = 68, }, - [3] = { skill_fireMin = 53, skill_fireMax = 80, }, - [4] = { skill_fireMin = 62, skill_fireMax = 93, }, - [5] = { skill_fireMin = 71, skill_fireMax = 107, }, - [6] = { skill_fireMin = 78, skill_fireMax = 117, }, - [7] = { skill_fireMin = 86, skill_fireMax = 129, }, - [8] = { skill_fireMin = 94, skill_fireMax = 141, }, - [9] = { skill_fireMin = 103, skill_fireMax = 154, }, - [10] = { skill_fireMin = 113, skill_fireMax = 169, }, - [11] = { skill_fireMin = 123, skill_fireMax = 184, }, - [12] = { skill_fireMin = 134, skill_fireMax = 201, }, - [13] = { skill_fireMin = 146, skill_fireMax = 219, }, - [14] = { skill_fireMin = 159, skill_fireMax = 238, }, - [15] = { skill_fireMin = 173, skill_fireMax = 259, }, - [16] = { skill_fireMin = 188, skill_fireMax = 282, }, - [17] = { skill_fireMin = 204, skill_fireMax = 306, }, - [18] = { skill_fireMin = 221, skill_fireMax = 332, }, - [19] = { skill_fireMin = 240, skill_fireMax = 360, }, - [20] = { skill_fireMin = 260, skill_fireMax = 390, }, - [21] = { skill_fireMin = 281, skill_fireMax = 422, }, - [22] = { skill_fireMin = 305, skill_fireMax = 457, }, - [23] = { skill_fireMin = 329, skill_fireMax = 494, }, - [24] = { skill_fireMin = 356, skill_fireMax = 534, }, - [25] = { skill_fireMin = 385, skill_fireMax = 577, }, - [26] = { skill_fireMin = 416, skill_fireMax = 623, }, - [27] = { skill_fireMin = 449, skill_fireMax = 673, }, - [28] = { skill_fireMin = 484, skill_fireMax = 726, }, - [29] = { skill_fireMin = 522, skill_fireMax = 783, }, - [30] = { skill_fireMin = 563, skill_fireMax = 844, }, - } -} -gems["Vaal Glacial Hammer"] = { - strength = true, - attack = true, - melee = true, - aoe = true, - duration = true, - cold = true, - vaal = true, - hit = true, - showAverage = true, - base = { - physicalConvertTocold = 50, - chill_durationInc = 35, - }, - quality = { - chill_durationInc = 2, - freeze_durationInc = 1, - }, - levels = { - [1] = { attack_damageMore = 1.5, skill_durationBase = 3.4, }, - [2] = { attack_damageMore = 1.518, skill_durationBase = 3.45 }, - [3] = { attack_damageMore = 1.536, skill_durationBase = 3.5, }, - [4] = { attack_damageMore = 1.554, skill_durationBase = 3.55, }, - [5] = { attack_damageMore = 1.572, skill_durationBase = 3.6, }, - [6] = { attack_damageMore = 1.59, skill_durationBase = 3.65, }, - [7] = { attack_damageMore = 1.608, skill_durationBase = 3.7, }, - [8] = { attack_damageMore = 1.626, skill_durationBase = 3.75, }, - [9] = { attack_damageMore = 1.644, skill_durationBase = 3.8, }, - [10] = { attack_damageMore = 1.662, skill_durationBase = 3.85, }, - [11] = { attack_damageMore = 1.68, skill_durationBase = 3.9, }, - [12] = { attack_damageMore = 1.698, skill_durationBase = 3.95, }, - [13] = { attack_damageMore = 1.716, skill_durationBase = 4, }, - [14] = { attack_damageMore = 1.734, skill_durationBase = 4.05, }, - [15] = { attack_damageMore = 1.752, skill_durationBase = 4.1, }, - [16] = { attack_damageMore = 1.77, skill_durationBase = 4.15, }, - [17] = { attack_damageMore = 1.788, skill_durationBase = 4.2, }, - [18] = { attack_damageMore = 1.806, skill_durationBase = 4.25, }, - [19] = { attack_damageMore = 1.824, skill_durationBase = 4.3, }, - [20] = { attack_damageMore = 1.842, skill_durationBase = 4.35, }, - [21] = { attack_damageMore = 1.86, skill_durationBase = 4.4, }, - [22] = { attack_damageMore = 1.878, skill_durationBase = 4.45, }, - [23] = { attack_damageMore = 1.896, skill_durationBase = 4.5, }, - [24] = { attack_damageMore = 1.914, skill_durationBase = 4.55, }, - [25] = { attack_damageMore = 1.932, skill_durationBase = 4.6, }, - [26] = { attack_damageMore = 1.95, skill_durationBase = 4.65, }, - [27] = { attack_damageMore = 1.968, skill_durationBase = 4.7, }, - [28] = { attack_damageMore = 1.986, skill_durationBase = 4.75, }, - [29] = { attack_damageMore = 2.004, skill_durationBase = 4.8, }, - [30] = { attack_damageMore = 2.022, skill_durationBase = 4.85, }, - } -} -gems["Vaal Grace"] = { - dexterity = true, - aura = true, - spell = true, - aoe = true, - duration = true, - vaal = true, - base = { - skill_castTime = 0.6, - skill_durationBase = 6, - }, - quality = { - aura_aoeRadiusInc = 1, - }, - levels = { - [1] = { aura_aoeRadiusInc = 0, AuraEffect_dodgeAttack = 24, AuraEffect_dodgeSpell = 24, }, - [2] = { aura_aoeRadiusInc = 3, AuraEffect_dodgeAttack = 25, AuraEffect_dodgeSpell = 25, }, - [3] = { aura_aoeRadiusInc = 6, AuraEffect_dodgeAttack = 25, AuraEffect_dodgeSpell = 25, }, - [4] = { aura_aoeRadiusInc = 9, AuraEffect_dodgeAttack = 26, AuraEffect_dodgeSpell = 26, }, - [5] = { aura_aoeRadiusInc = 12, AuraEffect_dodgeAttack = 26, AuraEffect_dodgeSpell = 26, }, - [6] = { aura_aoeRadiusInc = 15, AuraEffect_dodgeAttack = 27, AuraEffect_dodgeSpell = 27, }, - [7] = { aura_aoeRadiusInc = 18, AuraEffect_dodgeAttack = 27, AuraEffect_dodgeSpell = 27, }, - [8] = { aura_aoeRadiusInc = 21, AuraEffect_dodgeAttack = 28, AuraEffect_dodgeSpell = 28, }, - [9] = { aura_aoeRadiusInc = 23, AuraEffect_dodgeAttack = 28, AuraEffect_dodgeSpell = 28, }, - [10] = { aura_aoeRadiusInc = 25, AuraEffect_dodgeAttack = 29, AuraEffect_dodgeSpell = 29, }, - [11] = { aura_aoeRadiusInc = 27, AuraEffect_dodgeAttack = 29, AuraEffect_dodgeSpell = 29, }, - [12] = { aura_aoeRadiusInc = 29, AuraEffect_dodgeAttack = 30, AuraEffect_dodgeSpell = 30, }, - [13] = { aura_aoeRadiusInc = 31, AuraEffect_dodgeAttack = 30, AuraEffect_dodgeSpell = 30, }, - [14] = { aura_aoeRadiusInc = 33, AuraEffect_dodgeAttack = 31, AuraEffect_dodgeSpell = 31, }, - [15] = { aura_aoeRadiusInc = 35, AuraEffect_dodgeAttack = 31, AuraEffect_dodgeSpell = 31, }, - [16] = { aura_aoeRadiusInc = 36, AuraEffect_dodgeAttack = 32, AuraEffect_dodgeSpell = 32, }, - [17] = { aura_aoeRadiusInc = 37, AuraEffect_dodgeAttack = 32, AuraEffect_dodgeSpell = 32, }, - [18] = { aura_aoeRadiusInc = 38, AuraEffect_dodgeAttack = 33, AuraEffect_dodgeSpell = 33, }, - [19] = { aura_aoeRadiusInc = 39, AuraEffect_dodgeAttack = 33, AuraEffect_dodgeSpell = 33, }, - [20] = { aura_aoeRadiusInc = 40, AuraEffect_dodgeAttack = 34, AuraEffect_dodgeSpell = 34, }, - [21] = { aura_aoeRadiusInc = 41, AuraEffect_dodgeAttack = 34, AuraEffect_dodgeSpell = 34, }, - [22] = { aura_aoeRadiusInc = 42, AuraEffect_dodgeAttack = 35, AuraEffect_dodgeSpell = 35, }, - [23] = { aura_aoeRadiusInc = 43, AuraEffect_dodgeAttack = 35, AuraEffect_dodgeSpell = 35, }, - [24] = { aura_aoeRadiusInc = 44, AuraEffect_dodgeAttack = 36, AuraEffect_dodgeSpell = 36, }, - [25] = { aura_aoeRadiusInc = 45, AuraEffect_dodgeAttack = 36, AuraEffect_dodgeSpell = 36, }, - [26] = { aura_aoeRadiusInc = 46, AuraEffect_dodgeAttack = 37, AuraEffect_dodgeSpell = 37, }, - [27] = { aura_aoeRadiusInc = 47, AuraEffect_dodgeAttack = 37, AuraEffect_dodgeSpell = 37, }, - [28] = { aura_aoeRadiusInc = 48, AuraEffect_dodgeAttack = 38, AuraEffect_dodgeSpell = 38, }, - [29] = { aura_aoeRadiusInc = 49, AuraEffect_dodgeAttack = 38, AuraEffect_dodgeSpell = 38, }, - [30] = { aura_aoeRadiusInc = 50, AuraEffect_dodgeAttack = 39, AuraEffect_dodgeSpell = 39, }, - } -} -gems["Vaal Ground Slam"] = { - strength = true, - attack = true, - melee = true, - aoe = true, - vaal = true, - hit = true, - showAverage = true, - base = { - aoeRadiusInc = 20, - }, - quality = { - stunEnemyDurationInc = 1.5, - }, - levels = { - [1] = { attack_damageMore = 1.6, }, - [2] = { attack_damageMore = 1.62, }, - [3] = { attack_damageMore = 1.64, }, - [4] = { attack_damageMore = 1.66, }, - [5] = { attack_damageMore = 1.68, }, - [6] = { attack_damageMore = 1.7, }, - [7] = { attack_damageMore = 1.72, }, - [8] = { attack_damageMore = 1.74, }, - [9] = { attack_damageMore = 1.76, }, - [10] = { attack_damageMore = 1.78, }, - [11] = { attack_damageMore = 1.8, }, - [12] = { attack_damageMore = 1.82, }, - [13] = { attack_damageMore = 1.84, }, - [14] = { attack_damageMore = 1.86, }, - [15] = { attack_damageMore = 1.88, }, - [16] = { attack_damageMore = 1.9, }, - [17] = { attack_damageMore = 1.92, }, - [18] = { attack_damageMore = 1.94, }, - [19] = { attack_damageMore = 1.96, }, - [20] = { attack_damageMore = 1.98, }, - [21] = { attack_damageMore = 2, }, - [22] = { attack_damageMore = 2.02, }, - [23] = { attack_damageMore = 2.04, }, - [24] = { attack_damageMore = 2.06, }, - [25] = { attack_damageMore = 2.08, }, - [26] = { attack_damageMore = 2.1, }, - [27] = { attack_damageMore = 2.12, }, - [28] = { attack_damageMore = 2.14, }, - [29] = { attack_damageMore = 2.16, }, - [30] = { attack_damageMore = 2.18, }, - } -} -gems["Vaal Haste"] = { - dexterity = true, - aura = true, - spell = true, - aoe = true, - duration = true, - vaal = true, - base = { - skill_castTime = 0.6, - skill_durationBase = 6, - }, - quality = { - aura_aoeRadiusInc = 1, - }, - levels = { - [1] = { aura_aoeRadiusInc = 0, AuraEffect_attackSpeedInc = 30, AuraEffect_castSpeedInc = 29, AuraEffect_movementSpeedInc = 14, }, - [2] = { aura_aoeRadiusInc = 3, AuraEffect_attackSpeedInc = 30, AuraEffect_castSpeedInc = 30, AuraEffect_movementSpeedInc = 14, }, - [3] = { aura_aoeRadiusInc = 6, AuraEffect_attackSpeedInc = 30, AuraEffect_castSpeedInc = 30, AuraEffect_movementSpeedInc = 15, }, - [4] = { aura_aoeRadiusInc = 9, AuraEffect_attackSpeedInc = 31, AuraEffect_castSpeedInc = 30, AuraEffect_movementSpeedInc = 15, }, - [5] = { aura_aoeRadiusInc = 12, AuraEffect_attackSpeedInc = 31, AuraEffect_castSpeedInc = 31, AuraEffect_movementSpeedInc = 15, }, - [6] = { aura_aoeRadiusInc = 15, AuraEffect_attackSpeedInc = 31, AuraEffect_castSpeedInc = 31, AuraEffect_movementSpeedInc = 16, }, - [7] = { aura_aoeRadiusInc = 18, AuraEffect_attackSpeedInc = 32, AuraEffect_castSpeedInc = 31, AuraEffect_movementSpeedInc = 16, }, - [8] = { aura_aoeRadiusInc = 21, AuraEffect_attackSpeedInc = 32, AuraEffect_castSpeedInc = 32, AuraEffect_movementSpeedInc = 16, }, - [9] = { aura_aoeRadiusInc = 23, AuraEffect_attackSpeedInc = 32, AuraEffect_castSpeedInc = 32, AuraEffect_movementSpeedInc = 17, }, - [10] = { aura_aoeRadiusInc = 25, AuraEffect_attackSpeedInc = 33, AuraEffect_castSpeedInc = 32, AuraEffect_movementSpeedInc = 17, }, - [11] = { aura_aoeRadiusInc = 27, AuraEffect_attackSpeedInc = 33, AuraEffect_castSpeedInc = 33, AuraEffect_movementSpeedInc = 17, }, - [12] = { aura_aoeRadiusInc = 29, AuraEffect_attackSpeedInc = 33, AuraEffect_castSpeedInc = 33, AuraEffect_movementSpeedInc = 18, }, - [13] = { aura_aoeRadiusInc = 31, AuraEffect_attackSpeedInc = 34, AuraEffect_castSpeedInc = 33, AuraEffect_movementSpeedInc = 18, }, - [14] = { aura_aoeRadiusInc = 33, AuraEffect_attackSpeedInc = 34, AuraEffect_castSpeedInc = 34, AuraEffect_movementSpeedInc = 18, }, - [15] = { aura_aoeRadiusInc = 35, AuraEffect_attackSpeedInc = 34, AuraEffect_castSpeedInc = 34, AuraEffect_movementSpeedInc = 19, }, - [16] = { aura_aoeRadiusInc = 36, AuraEffect_attackSpeedInc = 35, AuraEffect_castSpeedInc = 34, AuraEffect_movementSpeedInc = 19, }, - [17] = { aura_aoeRadiusInc = 37, AuraEffect_attackSpeedInc = 35, AuraEffect_castSpeedInc = 35, AuraEffect_movementSpeedInc = 19, }, - [18] = { aura_aoeRadiusInc = 38, AuraEffect_attackSpeedInc = 35, AuraEffect_castSpeedInc = 35, AuraEffect_movementSpeedInc = 20, }, - [19] = { aura_aoeRadiusInc = 39, AuraEffect_attackSpeedInc = 36, AuraEffect_castSpeedInc = 35, AuraEffect_movementSpeedInc = 20, }, - [20] = { aura_aoeRadiusInc = 40, AuraEffect_attackSpeedInc = 36, AuraEffect_castSpeedInc = 36, AuraEffect_movementSpeedInc = 20, }, - [21] = { aura_aoeRadiusInc = 41, AuraEffect_attackSpeedInc = 36, AuraEffect_castSpeedInc = 36, AuraEffect_movementSpeedInc = 21, }, - [22] = { aura_aoeRadiusInc = 42, AuraEffect_attackSpeedInc = 37, AuraEffect_castSpeedInc = 36, AuraEffect_movementSpeedInc = 21, }, - [23] = { aura_aoeRadiusInc = 43, AuraEffect_attackSpeedInc = 37, AuraEffect_castSpeedInc = 37, AuraEffect_movementSpeedInc = 21, }, - [24] = { aura_aoeRadiusInc = 44, AuraEffect_attackSpeedInc = 37, AuraEffect_castSpeedInc = 37, AuraEffect_movementSpeedInc = 22, }, - [25] = { aura_aoeRadiusInc = 45, AuraEffect_attackSpeedInc = 38, AuraEffect_castSpeedInc = 37, AuraEffect_movementSpeedInc = 22, }, - [26] = { aura_aoeRadiusInc = 46, AuraEffect_attackSpeedInc = 38, AuraEffect_castSpeedInc = 38, AuraEffect_movementSpeedInc = 22, }, - [27] = { aura_aoeRadiusInc = 47, AuraEffect_attackSpeedInc = 38, AuraEffect_castSpeedInc = 38, AuraEffect_movementSpeedInc = 23, }, - [28] = { aura_aoeRadiusInc = 48, AuraEffect_attackSpeedInc = 39, AuraEffect_castSpeedInc = 38, AuraEffect_movementSpeedInc = 23, }, - [29] = { aura_aoeRadiusInc = 49, AuraEffect_attackSpeedInc = 39, AuraEffect_castSpeedInc = 39, AuraEffect_movementSpeedInc = 23, }, - [30] = { aura_aoeRadiusInc = 50, AuraEffect_attackSpeedInc = 39, AuraEffect_castSpeedInc = 39, AuraEffect_movementSpeedInc = 24, }, - } -} -gems["Vaal Ice Nova"] = { - intelligence = true, - spell = true, - aoe = true, - cold = true, - vaal = true, - hit = true, - showAverage = true, - base = { - skill_castTime = 0.8, - skill_damageEffectiveness = 0.7, - skill_critChanceBase = 6, - }, - quality = { - aoeRadiusInc = 0.5, - }, - levels = { - [1] = { skill_coldMin = 11, skill_coldMax = 17, }, - [2] = { skill_coldMin = 14, skill_coldMax = 22, }, - [3] = { skill_coldMin = 18, skill_coldMax = 29, }, - [4] = { skill_coldMin = 24, skill_coldMax = 37, }, - [5] = { skill_coldMin = 31, skill_coldMax = 48, }, - [6] = { skill_coldMin = 39, skill_coldMax = 61, }, - [7] = { skill_coldMin = 49, skill_coldMax = 76, }, - [8] = { skill_coldMin = 57, skill_coldMax = 89, }, - [9] = { skill_coldMin = 67, skill_coldMax = 105, }, - [10] = { skill_coldMin = 78, skill_coldMax = 123, }, - [11] = { skill_coldMin = 91, skill_coldMax = 143, }, - [12] = { skill_coldMin = 106, skill_coldMax = 166, }, - [13] = { skill_coldMin = 123, skill_coldMax = 193, }, - [14] = { skill_coldMin = 143, skill_coldMax = 223, }, - [15] = { skill_coldMin = 164, skill_coldMax = 257, }, - [16] = { skill_coldMin = 189, skill_coldMax = 296, }, - [17] = { skill_coldMin = 208, skill_coldMax = 325, }, - [18] = { skill_coldMin = 228, skill_coldMax = 357, }, - [19] = { skill_coldMin = 250, skill_coldMax = 391, }, - [20] = { skill_coldMin = 274, skill_coldMax = 428, }, - [21] = { skill_coldMin = 300, skill_coldMax = 469, }, - [22] = { skill_coldMin = 328, skill_coldMax = 513, }, - [23] = { skill_coldMin = 359, skill_coldMax = 561, }, - [24] = { skill_coldMin = 393, skill_coldMax = 613, }, - [25] = { skill_coldMin = 429, skill_coldMax = 670, }, - [26] = { skill_coldMin = 468, skill_coldMax = 732, }, - [27] = { skill_coldMin = 511, skill_coldMax = 799, }, - [28] = { skill_coldMin = 558, skill_coldMax = 871, }, - [29] = { skill_coldMin = 608, skill_coldMax = 950, }, - [30] = { skill_coldMin = 663, skill_coldMax = 1035, }, - } -} -gems["Vaal Immortal Call"] = { - strength = true, - spell = true, - duration = true, - vaal = true, - base = { - skill_castTime = 0.85, - skill_durationBase = 0.4, - }, - quality = { - castSpeedInc = 2, - }, - levels = { - [1] = { PerEndurance_durationInc = 100, }, - [2] = { PerEndurance_durationInc = 103, }, - [3] = { PerEndurance_durationInc = 106, }, - [4] = { PerEndurance_durationInc = 109, }, - [5] = { PerEndurance_durationInc = 112, }, - [6] = { PerEndurance_durationInc = 115, }, - [7] = { PerEndurance_durationInc = 118, }, - [8] = { PerEndurance_durationInc = 121, }, - [9] = { PerEndurance_durationInc = 124, }, - [10] = { PerEndurance_durationInc = 127, }, - [11] = { PerEndurance_durationInc = 130, }, - [12] = { PerEndurance_durationInc = 133, }, - [13] = { PerEndurance_durationInc = 136, }, - [14] = { PerEndurance_durationInc = 139, }, - [15] = { PerEndurance_durationInc = 142, }, - [16] = { PerEndurance_durationInc = 145, }, - [17] = { PerEndurance_durationInc = 148, }, - [18] = { PerEndurance_durationInc = 151, }, - [19] = { PerEndurance_durationInc = 154, }, - [20] = { PerEndurance_durationInc = 157, }, - [21] = { PerEndurance_durationInc = 160, }, - [22] = { PerEndurance_durationInc = 163, }, - [23] = { PerEndurance_durationInc = 166, }, - [24] = { PerEndurance_durationInc = 169, }, - [25] = { PerEndurance_durationInc = 172, }, - [26] = { PerEndurance_durationInc = 175, }, - [27] = { PerEndurance_durationInc = 178, }, - [28] = { PerEndurance_durationInc = 181, }, - [29] = { PerEndurance_durationInc = 184, }, - [30] = { PerEndurance_durationInc = 187, }, - } -} -gems["Vaal Lightning Strike"] = { - dexterity = true, - attack = true, - melee = true, - duration = true, - lightning = true, - vaal = true, - hit = true, - showAverage = true, - parts = { - { - name = "Strike", - }, - { - name = "Beams", - damageMore = 0.5, - }, - }, - base = { - physicalConvertTolightning = 50, - }, - quality = { - durationInc = 1, - }, - levels = { - [1] = { attack_damageMore = 1, skill_durationBase = 5, }, - [2] = { attack_damageMore = 1.012, skill_durationBase = 5.2, }, - [3] = { attack_damageMore = 1.024, skill_durationBase = 5.4, }, - [4] = { attack_damageMore = 1.036, skill_durationBase = 5.6, }, - [5] = { attack_damageMore = 1.048, skill_durationBase = 5.8, }, - [6] = { attack_damageMore = 1.06, skill_durationBase = 6, }, - [7] = { attack_damageMore = 1.072, skill_durationBase = 6.2, }, - [8] = { attack_damageMore = 1.084, skill_durationBase = 6.4, }, - [9] = { attack_damageMore = 1.096, skill_durationBase = 6.6, }, - [10] = { attack_damageMore = 1.108, skill_durationBase = 6.8, }, - [11] = { attack_damageMore = 1.12, skill_durationBase = 7, }, - [12] = { attack_damageMore = 1.132, skill_durationBase = 7.2, }, - [13] = { attack_damageMore = 1.144, skill_durationBase = 7.4, }, - [14] = { attack_damageMore = 1.156, skill_durationBase = 7.6, }, - [15] = { attack_damageMore = 1.168, skill_durationBase = 7.8, }, - [16] = { attack_damageMore = 1.18, skill_durationBase = 8, }, - [17] = { attack_damageMore = 1.192, skill_durationBase = 8.2, }, - [18] = { attack_damageMore = 1.204, skill_durationBase = 8.4, }, - [19] = { attack_damageMore = 1.216, skill_durationBase = 8.6, }, - [20] = { attack_damageMore = 1.228, skill_durationBase = 8.8, }, - [21] = { attack_damageMore = 1.24, skill_durationBase = 9, }, - [22] = { attack_damageMore = 1.252, skill_durationBase = 9.2, }, - [23] = { attack_damageMore = 1.264, skill_durationBase = 9.4, }, - [24] = { attack_damageMore = 1.276, skill_durationBase = 9.6, }, - [25] = { attack_damageMore = 1.288, skill_durationBase = 9.8, }, - [26] = { attack_damageMore = 1.3, skill_durationBase = 10, }, - [27] = { attack_damageMore = 1.312, skill_durationBase = 10.2, }, - [28] = { attack_damageMore = 1.324, skill_durationBase = 10.4, }, - [29] = { attack_damageMore = 1.336, skill_durationBase = 10.6, }, - [30] = { attack_damageMore = 1.348, skill_durationBase = 10.8, }, - } -} -gems["Vaal Lightning Trap"] = { - intelligence = true, - spell = true, - trap = true, - projectile = true, - duration = true, - lightning = true, - vaal = true, - hit = true, - showAverage = true, - base = { - skill_castTime = 1, - skill_damageEffectiveness = 0.9, - skill_critChanceBase = 5, - skill_durationBase = 4, - pierceChance = 100, - }, - quality = { - trapThrowingSpeedInc = 0.5, - }, - levels = { - [1] = { skill_lightningMin = 3, skill_lightningMax = 62, }, - [2] = { skill_lightningMin = 4, skill_lightningMax = 77, }, - [3] = { skill_lightningMin = 5, skill_lightningMax = 98, }, - [4] = { skill_lightningMin = 7, skill_lightningMax = 124, }, - [5] = { skill_lightningMin = 8, skill_lightningMax = 153, }, - [6] = { skill_lightningMin = 10, skill_lightningMax = 188, }, - [7] = { skill_lightningMin = 12, skill_lightningMax = 228, }, - [8] = { skill_lightningMin = 14, skill_lightningMax = 263, }, - [9] = { skill_lightningMin = 16, skill_lightningMax = 301, }, - [10] = { skill_lightningMin = 18, skill_lightningMax = 344, }, - [11] = { skill_lightningMin = 21, skill_lightningMax = 391, }, - [12] = { skill_lightningMin = 23, skill_lightningMax = 444, }, - [13] = { skill_lightningMin = 26, skill_lightningMax = 503, }, - [14] = { skill_lightningMin = 30, skill_lightningMax = 568, }, - [15] = { skill_lightningMin = 34, skill_lightningMax = 640, }, - [16] = { skill_lightningMin = 38, skill_lightningMax = 720, }, - [17] = { skill_lightningMin = 41, skill_lightningMax = 779, }, - [18] = { skill_lightningMin = 44, skill_lightningMax = 841, }, - [19] = { skill_lightningMin = 48, skill_lightningMax = 907, }, - [20] = { skill_lightningMin = 52, skill_lightningMax = 979, }, - [21] = { skill_lightningMin = 56, skill_lightningMax = 1055, }, - [22] = { skill_lightningMin = 60, skill_lightningMax = 1136, }, - [23] = { skill_lightningMin = 64, skill_lightningMax = 1223, }, - [24] = { skill_lightningMin = 69, skill_lightningMax = 1316, }, - [25] = { skill_lightningMin = 74, skill_lightningMax = 1415, }, - [26] = { skill_lightningMin = 80, skill_lightningMax = 1521, }, - [27] = { skill_lightningMin = 86, skill_lightningMax = 1634, }, - [28] = { skill_lightningMin = 92, skill_lightningMax = 1755, }, - [29] = { skill_lightningMin = 99, skill_lightningMax = 1884, }, - [30] = { skill_lightningMin = 106, skill_lightningMax = 2021, }, - } -} -gems["Vaal Lightning Warp"] = { - intelligence = true, - spell = true, - aoe = true, - duration = true, - lightning = true, - vaal = true, - hit = true, - showAverage = true, - base = { - skill_castTime = 1, - skill_damageEffectiveness = 0.5, - skill_critChanceBase = 5, - }, - quality = { - castSpeedInc = 1, - }, - levels = { - [1] = { skill_lightningMin = 1, skill_lightningMax = 18, durationInc = -0, }, - [2] = { skill_lightningMin = 1, skill_lightningMax = 24, durationInc = -2, }, - [3] = { skill_lightningMin = 2, skill_lightningMax = 32, durationInc = -4, }, - [4] = { skill_lightningMin = 2, skill_lightningMax = 42, durationInc = -6, }, - [5] = { skill_lightningMin = 3, skill_lightningMax = 54, durationInc = -8, }, - [6] = { skill_lightningMin = 4, skill_lightningMax = 70, durationInc = -10, }, - [7] = { skill_lightningMin = 5, skill_lightningMax = 88, durationInc = -12, }, - [8] = { skill_lightningMin = 5, skill_lightningMax = 104, durationInc = -14, }, - [9] = { skill_lightningMin = 6, skill_lightningMax = 123, durationInc = -16, }, - [10] = { skill_lightningMin = 8, skill_lightningMax = 145, durationInc = -18, }, - [11] = { skill_lightningMin = 9, skill_lightningMax = 170, durationInc = -20, }, - [12] = { skill_lightningMin = 10, skill_lightningMax = 199, durationInc = -22, }, - [13] = { skill_lightningMin = 12, skill_lightningMax = 232, durationInc = -24, }, - [14] = { skill_lightningMin = 14, skill_lightningMax = 270, durationInc = -26, }, - [15] = { skill_lightningMin = 17, skill_lightningMax = 314, durationInc = -28, }, - [16] = { skill_lightningMin = 19, skill_lightningMax = 364, durationInc = -30, }, - [17] = { skill_lightningMin = 22, skill_lightningMax = 420, durationInc = -32, }, - [18] = { skill_lightningMin = 26, skill_lightningMax = 485, durationInc = -34, }, - [19] = { skill_lightningMin = 28, skill_lightningMax = 534, durationInc = -36, }, - [20] = { skill_lightningMin = 31, skill_lightningMax = 586, durationInc = -38, }, - [21] = { skill_lightningMin = 34, skill_lightningMax = 644, durationInc = -40, }, - [22] = { skill_lightningMin = 37, skill_lightningMax = 707, durationInc = -42, }, - [23] = { skill_lightningMin = 41, skill_lightningMax = 775, durationInc = -44, }, - [24] = { skill_lightningMin = 45, skill_lightningMax = 850, durationInc = -46, }, - [25] = { skill_lightningMin = 49, skill_lightningMax = 931, durationInc = -48, }, - [26] = { skill_lightningMin = 54, skill_lightningMax = 1019, durationInc = -50, }, - [27] = { skill_lightningMin = 59, skill_lightningMax = 1116, durationInc = -52, }, - [28] = { skill_lightningMin = 64, skill_lightningMax = 1221, durationInc = -54, }, - [29] = { skill_lightningMin = 70, skill_lightningMax = 1335, durationInc = -56, }, - [30] = { skill_lightningMin = 77, skill_lightningMax = 1459, durationInc = -58, }, - } -} -gems["Vaal Molten Shell"] = { - strength = true, - spell = true, - aoe = true, - duration = true, - fire = true, - vaal = true, - hit = true, - showAverage = true, - base = { - skill_castTime = 0.5, - skill_damageEffectiveness = 2, - skill_critChanceBase = 5, - skill_durationBase = 5, - }, - quality = { - igniteChance = 1, - }, - levels = { - [1] = { skill_fireMin = 9, skill_fireMax = 14, BuffEffect_armourBase = 17, }, - [2] = { skill_fireMin = 11, skill_fireMax = 17, BuffEffect_armourBase = 20, }, - [3] = { skill_fireMin = 15, skill_fireMax = 23, BuffEffect_armourBase = 26, }, - [4] = { skill_fireMin = 20, skill_fireMax = 30, BuffEffect_armourBase = 33, }, - [5] = { skill_fireMin = 27, skill_fireMax = 41, BuffEffect_armourBase = 44, }, - [6] = { skill_fireMin = 37, skill_fireMax = 56, BuffEffect_armourBase = 58, }, - [7] = { skill_fireMin = 49, skill_fireMax = 74, BuffEffect_armourBase = 75, }, - [8] = { skill_fireMin = 64, skill_fireMax = 96, BuffEffect_armourBase = 97, }, - [9] = { skill_fireMin = 83, skill_fireMax = 124, BuffEffect_armourBase = 123, }, - [10] = { skill_fireMin = 106, skill_fireMax = 159, BuffEffect_armourBase = 156, }, - [11] = { skill_fireMin = 135, skill_fireMax = 202, BuffEffect_armourBase = 196, }, - [12] = { skill_fireMin = 170, skill_fireMax = 256, BuffEffect_armourBase = 245, }, - [13] = { skill_fireMin = 214, skill_fireMax = 321, BuffEffect_armourBase = 304, }, - [14] = { skill_fireMin = 267, skill_fireMax = 401, BuffEffect_armourBase = 376, }, - [15] = { skill_fireMin = 315, skill_fireMax = 472, BuffEffect_armourBase = 440, }, - [16] = { skill_fireMin = 370, skill_fireMax = 556, BuffEffect_armourBase = 515, }, - [17] = { skill_fireMin = 435, skill_fireMax = 652, BuffEffect_armourBase = 600, }, - [18] = { skill_fireMin = 509, skill_fireMax = 764, BuffEffect_armourBase = 698, }, - [19] = { skill_fireMin = 596, skill_fireMax = 893, BuffEffect_armourBase = 812, }, - [20] = { skill_fireMin = 696, skill_fireMax = 1043, BuffEffect_armourBase = 943, }, - [21] = { skill_fireMin = 771, skill_fireMax = 1156, BuffEffect_armourBase = 1040, }, - [22] = { skill_fireMin = 854, skill_fireMax = 1280, BuffEffect_armourBase = 1148, }, - [23] = { skill_fireMin = 945, skill_fireMax = 1417, BuffEffect_armourBase = 1265, }, - [24] = { skill_fireMin = 1045, skill_fireMax = 1568, BuffEffect_armourBase = 1394, }, - [25] = { skill_fireMin = 1155, skill_fireMax = 1733, BuffEffect_armourBase = 1536, }, - [26] = { skill_fireMin = 1277, skill_fireMax = 1915, BuffEffect_armourBase = 1691, }, - [27] = { skill_fireMin = 1410, skill_fireMax = 2115, BuffEffect_armourBase = 1861, }, - [28] = { skill_fireMin = 1557, skill_fireMax = 2335, BuffEffect_armourBase = 2047, }, - [29] = { skill_fireMin = 1718, skill_fireMax = 2577, BuffEffect_armourBase = 2251, }, - [30] = { skill_fireMin = 1895, skill_fireMax = 2843, BuffEffect_armourBase = 2474, }, - } -} -gems["Vaal Power Siphon"] = { - intelligence = true, - attack = true, - projectile = true, - vaal = true, - hit = true, - showAverage = true, - base = { - }, - quality = { - damageInc = 1, - }, - levels = { - [1] = { attack_damageMore = 1.25, }, - [2] = { attack_damageMore = 1.266, }, - [3] = { attack_damageMore = 1.282, }, - [4] = { attack_damageMore = 1.298, }, - [5] = { attack_damageMore = 1.314, }, - [6] = { attack_damageMore = 1.33, }, - [7] = { attack_damageMore = 1.346, }, - [8] = { attack_damageMore = 1.362, }, - [9] = { attack_damageMore = 1.378, }, - [10] = { attack_damageMore = 1.394, }, - [11] = { attack_damageMore = 1.41, }, - [12] = { attack_damageMore = 1.426, }, - [13] = { attack_damageMore = 1.442, }, - [14] = { attack_damageMore = 1.458, }, - [15] = { attack_damageMore = 1.474, }, - [16] = { attack_damageMore = 1.49, }, - [17] = { attack_damageMore = 1.506, }, - [18] = { attack_damageMore = 1.522, }, - [19] = { attack_damageMore = 1.538, }, - [20] = { attack_damageMore = 1.554, }, - [21] = { attack_damageMore = 1.57, }, - [22] = { attack_damageMore = 1.586, }, - [23] = { attack_damageMore = 1.602, }, - [24] = { attack_damageMore = 1.618, }, - [25] = { attack_damageMore = 1.634, }, - [26] = { attack_damageMore = 1.65, }, - [27] = { attack_damageMore = 1.666, }, - [28] = { attack_damageMore = 1.682, }, - [29] = { attack_damageMore = 1.698, }, - [30] = { attack_damageMore = 1.714, }, - } -} -gems["Vaal Rain of Arrows"] = { - dexterity = true, - attack = true, - bow = true, - aoe = true, - duration = true, - vaal = true, - hit = true, - showAverage = true, - base = { - }, - quality = { - aoeRadiusInc = 0.5, - }, - levels = { - [1] = { attack_damageMore = 1.4, skill_durationBase = 3.4, aoeRadiusInc = 0, }, - [2] = { attack_damageMore = 1.415, skill_durationBase = 3.45, aoeRadiusInc = 1, }, - [3] = { attack_damageMore = 1.43, skill_durationBase = 3.5, aoeRadiusInc = 2, }, - [4] = { attack_damageMore = 1.445, skill_durationBase = 3.55, aoeRadiusInc = 3, }, - [5] = { attack_damageMore = 1.46, skill_durationBase = 3.6, aoeRadiusInc = 4, }, - [6] = { attack_damageMore = 1.475, skill_durationBase = 3.65, aoeRadiusInc = 5, }, - [7] = { attack_damageMore = 1.49, skill_durationBase = 3.7, aoeRadiusInc = 6, }, - [8] = { attack_damageMore = 1.505, skill_durationBase = 3.75, aoeRadiusInc = 7, }, - [9] = { attack_damageMore = 1.52, skill_durationBase = 3.8, aoeRadiusInc = 8, }, - [10] = { attack_damageMore = 1.535, skill_durationBase = 3.85, aoeRadiusInc = 9, }, - [11] = { attack_damageMore = 1.55, skill_durationBase = 3.9, aoeRadiusInc = 10, }, - [12] = { attack_damageMore = 1.565, skill_durationBase = 3.95, aoeRadiusInc = 11, }, - [13] = { attack_damageMore = 1.58, skill_durationBase = 4, aoeRadiusInc = 12, }, - [14] = { attack_damageMore = 1.595, skill_durationBase = 4.05, aoeRadiusInc = 13, }, - [15] = { attack_damageMore = 1.61, skill_durationBase = 4.1, aoeRadiusInc = 14, }, - [16] = { attack_damageMore = 1.625, skill_durationBase = 4.15, aoeRadiusInc = 15, }, - [17] = { attack_damageMore = 1.64, skill_durationBase = 4.2, aoeRadiusInc = 16, }, - [18] = { attack_damageMore = 1.655, skill_durationBase = 4.25, aoeRadiusInc = 17, }, - [19] = { attack_damageMore = 1.67, skill_durationBase = 4.3, aoeRadiusInc = 18, }, - [20] = { attack_damageMore = 1.685, skill_durationBase = 4.35, aoeRadiusInc = 19, }, - [21] = { attack_damageMore = 1.7, skill_durationBase = 4.4, aoeRadiusInc = 20, }, - [22] = { attack_damageMore = 1.715, skill_durationBase = 4.45, aoeRadiusInc = 21, }, - [23] = { attack_damageMore = 1.73, skill_durationBase = 4.5, aoeRadiusInc = 22, }, - [24] = { attack_damageMore = 1.745, skill_durationBase = 4.55, aoeRadiusInc = 23, }, - [25] = { attack_damageMore = 1.76, skill_durationBase = 4.6, aoeRadiusInc = 24, }, - [26] = { attack_damageMore = 1.775, skill_durationBase = 4.65, aoeRadiusInc = 25, }, - [27] = { attack_damageMore = 1.79, skill_durationBase = 4.7, aoeRadiusInc = 26, }, - [28] = { attack_damageMore = 1.805, skill_durationBase = 4.75, aoeRadiusInc = 27, }, - [29] = { attack_damageMore = 1.82, skill_durationBase = 4.8, aoeRadiusInc = 28, }, - [30] = { attack_damageMore = 1.835, skill_durationBase = 4.85, aoeRadiusInc = 29, }, - } -} -gems["Vaal Reave"] = { - dexterity = true, - attack = true, - melee = true, - aoe = true, - vaal = true, - hit = true, - base = { - attackSpeedMore = 2.5, - }, - quality = { - attackSpeedInc = 0.5, - }, - levels = { - [1] = { attack_damageMore = 1, }, - [2] = { attack_damageMore = 1.012, }, - [3] = { attack_damageMore = 1.024, }, - [4] = { attack_damageMore = 1.036, }, - [5] = { attack_damageMore = 1.048, }, - [6] = { attack_damageMore = 1.06, }, - [7] = { attack_damageMore = 1.072, }, - [8] = { attack_damageMore = 1.084, }, - [9] = { attack_damageMore = 1.096, }, - [10] = { attack_damageMore = 1.108, }, - [11] = { attack_damageMore = 1.12, }, - [12] = { attack_damageMore = 1.132, }, - [13] = { attack_damageMore = 1.144, }, - [14] = { attack_damageMore = 1.156, }, - [15] = { attack_damageMore = 1.168, }, - [16] = { attack_damageMore = 1.18, }, - [17] = { attack_damageMore = 1.192, }, - [18] = { attack_damageMore = 1.204, }, - [19] = { attack_damageMore = 1.216, }, - [20] = { attack_damageMore = 1.228, }, - [21] = { attack_damageMore = 1.24, }, - [22] = { attack_damageMore = 1.252, }, - [23] = { attack_damageMore = 1.264, }, - [24] = { attack_damageMore = 1.276, }, - [25] = { attack_damageMore = 1.288, }, - [26] = { attack_damageMore = 1.3, }, - [27] = { attack_damageMore = 1.312, }, - [28] = { attack_damageMore = 1.324, }, - [29] = { attack_damageMore = 1.336, }, - [30] = { attack_damageMore = 1.348, }, - } -} -gems["Vaal Righteous Fire"] = { - intelligence = true, - spell = true, - aoe = true, - fire = true, - vaal = true, - hit = true, - showAverage = true, - setupFunc = function(mergeMod, output) - mergeMod("skill_fireMin", output.total_energyShield + output.total_life - 1) - mergeMod("skill_fireMax", output.total_energyShield + output.total_life - 1) - end, - base = { - skill_castTime = 1, - skill_critChanceBase = 5, - }, - quality = { - spell_damageInc = 1, - }, - levels = { - [1] = { spell_damageMore = 1.2, }, - [2] = { spell_damageMore = 1.21, }, - [3] = { spell_damageMore = 1.22, }, - [4] = { spell_damageMore = 1.23, }, - [5] = { spell_damageMore = 1.24, }, - [6] = { spell_damageMore = 1.25, }, - [7] = { spell_damageMore = 1.26, }, - [8] = { spell_damageMore = 1.27, }, - [9] = { spell_damageMore = 1.28, }, - [10] = { spell_damageMore = 1.29, }, - [11] = { spell_damageMore = 1.3, }, - [12] = { spell_damageMore = 1.31, }, - [13] = { spell_damageMore = 1.32, }, - [14] = { spell_damageMore = 1.33, }, - [15] = { spell_damageMore = 1.34, }, - [16] = { spell_damageMore = 1.35, }, - [17] = { spell_damageMore = 1.36, }, - [18] = { spell_damageMore = 1.37, }, - [19] = { spell_damageMore = 1.38, }, - [20] = { spell_damageMore = 1.39, }, - [21] = { spell_damageMore = 1.4, }, - [22] = { spell_damageMore = 1.41, }, - [23] = { spell_damageMore = 1.42, }, - [24] = { spell_damageMore = 1.43, }, - [25] = { spell_damageMore = 1.44, }, - [26] = { spell_damageMore = 1.45, }, - [27] = { spell_damageMore = 1.46, }, - [28] = { spell_damageMore = 1.47, }, - [29] = { spell_damageMore = 1.48, }, - [30] = { spell_damageMore = 1.49, }, - } -} -gems["Vaal Spark"] = { - intelligence = true, - spell = true, - projectile = true, - duration = true, - lightning = true, - vaal = true, - hit = true, - showAverage = true, - base = { - skill_castTime = 0.65, - skill_damageEffectiveness = 0.4, - skill_critChanceBase = 5, - skill_durationBase = 2, - }, - quality = { - projectileSpeedInc = 1, - }, - levels = { - [1] = { skill_lightningMin = 1, skill_lightningMax = 11, }, - [2] = { skill_lightningMin = 1, skill_lightningMax = 12, }, - [3] = { skill_lightningMin = 1, skill_lightningMax = 15, }, - [4] = { skill_lightningMin = 1, skill_lightningMax = 19, }, - [5] = { skill_lightningMin = 1, skill_lightningMax = 27, }, - [6] = { skill_lightningMin = 2, skill_lightningMax = 37, }, - [7] = { skill_lightningMin = 3, skill_lightningMax = 48, }, - [8] = { skill_lightningMin = 3, skill_lightningMax = 60, }, - [9] = { skill_lightningMin = 4, skill_lightningMax = 74, }, - [10] = { skill_lightningMin = 5, skill_lightningMax = 91, }, - [11] = { skill_lightningMin = 6, skill_lightningMax = 110, }, - [12] = { skill_lightningMin = 7, skill_lightningMax = 133, }, - [13] = { skill_lightningMin = 8, skill_lightningMax = 159, }, - [14] = { skill_lightningMin = 10, skill_lightningMax = 188, }, - [15] = { skill_lightningMin = 12, skill_lightningMax = 223, }, - [16] = { skill_lightningMin = 14, skill_lightningMax = 263, }, - [17] = { skill_lightningMin = 16, skill_lightningMax = 308, }, - [18] = { skill_lightningMin = 19, skill_lightningMax = 361, }, - [19] = { skill_lightningMin = 21, skill_lightningMax = 405, }, - [20] = { skill_lightningMin = 24, skill_lightningMax = 454, }, - [21] = { skill_lightningMin = 26, skill_lightningMax = 489, }, - [22] = { skill_lightningMin = 28, skill_lightningMax = 527, }, - [23] = { skill_lightningMin = 30, skill_lightningMax = 568, }, - [24] = { skill_lightningMin = 32, skill_lightningMax = 611, }, - [25] = { skill_lightningMin = 35, skill_lightningMax = 658, }, - [26] = { skill_lightningMin = 37, skill_lightningMax = 707, }, - [27] = { skill_lightningMin = 40, skill_lightningMax = 760, }, - [28] = { skill_lightningMin = 43, skill_lightningMax = 816, }, - [29] = { skill_lightningMin = 46, skill_lightningMax = 877, }, - [30] = { skill_lightningMin = 50, skill_lightningMax = 941, }, - } -} -gems["Vaal Spectral Throw"] = { - dexterity = true, - attack = true, - projectile = true, - vaal = true, - hit = true, - showAverage = true, - base = { - }, - quality = { - attackSpeedInc = 0.5, - }, - levels = { - [1] = { attack_damageMore = 0.7, }, - [2] = { attack_damageMore = 0.718, }, - [3] = { attack_damageMore = 0.736, }, - [4] = { attack_damageMore = 0.754, }, - [5] = { attack_damageMore = 0.772, }, - [6] = { attack_damageMore = 0.79, }, - [7] = { attack_damageMore = 0.808, }, - [8] = { attack_damageMore = 0.826, }, - [9] = { attack_damageMore = 0.844, }, - [10] = { attack_damageMore = 0.862, }, - [11] = { attack_damageMore = 0.88, }, - [12] = { attack_damageMore = 0.898, }, - [13] = { attack_damageMore = 0.916, }, - [14] = { attack_damageMore = 0.934, }, - [15] = { attack_damageMore = 0.952, }, - [16] = { attack_damageMore = 0.97, }, - [17] = { attack_damageMore = 0.988, }, - [18] = { attack_damageMore = 1.006, }, - [19] = { attack_damageMore = 1.024, }, - [20] = { attack_damageMore = 1.042, }, - [21] = { attack_damageMore = 1.06, }, - [22] = { attack_damageMore = 1.078, }, - [23] = { attack_damageMore = 1.096, }, - [24] = { attack_damageMore = 1.114, }, - [25] = { attack_damageMore = 1.132, }, - [26] = { attack_damageMore = 1.15, }, - [27] = { attack_damageMore = 1.168, }, - [28] = { attack_damageMore = 1.186, }, - [29] = { attack_damageMore = 1.204, }, - [30] = { attack_damageMore = 1.222, }, - } -} -gems["Vaal Storm Call"] = { - intelligence = true, - spell = true, - aoe = true, - duration = true, - lightning = true, - vaal = true, - hit = true, - showAverage = true, - base = { - skill_castTime = 0.5, - skill_damageEffectiveness = 0.8, - skill_critChanceBase = 6, - skill_durationBase = 3, - }, - quality = { - aoeRadiusInc = 0.5, - }, - levels = { - [1] = { skill_lightningMin = 13, skill_lightningMax = 25, }, - [2] = { skill_lightningMin = 17, skill_lightningMax = 31, }, - [3] = { skill_lightningMin = 22, skill_lightningMax = 41, }, - [4] = { skill_lightningMin = 29, skill_lightningMax = 53, }, - [5] = { skill_lightningMin = 36, skill_lightningMax = 67, }, - [6] = { skill_lightningMin = 46, skill_lightningMax = 85, }, - [7] = { skill_lightningMin = 57, skill_lightningMax = 105, }, - [8] = { skill_lightningMin = 67, skill_lightningMax = 124, }, - [9] = { skill_lightningMin = 78, skill_lightningMax = 144, }, - [10] = { skill_lightningMin = 90, skill_lightningMax = 168, }, - [11] = { skill_lightningMin = 105, skill_lightningMax = 194, }, - [12] = { skill_lightningMin = 121, skill_lightningMax = 225, }, - [13] = { skill_lightningMin = 140, skill_lightningMax = 259, }, - [14] = { skill_lightningMin = 161, skill_lightningMax = 298, }, - [15] = { skill_lightningMin = 184, skill_lightningMax = 343, }, - [16] = { skill_lightningMin = 211, skill_lightningMax = 393, }, - [17] = { skill_lightningMin = 231, skill_lightningMax = 429, }, - [18] = { skill_lightningMin = 253, skill_lightningMax = 470, }, - [19] = { skill_lightningMin = 276, skill_lightningMax = 513, }, - [20] = { skill_lightningMin = 302, skill_lightningMax = 560, }, - [21] = { skill_lightningMin = 329, skill_lightningMax = 611, }, - [22] = { skill_lightningMin = 359, skill_lightningMax = 666, }, - [23] = { skill_lightningMin = 391, skill_lightningMax = 726, }, - [24] = { skill_lightningMin = 426, skill_lightningMax = 791, }, - [25] = { skill_lightningMin = 464, skill_lightningMax = 861, }, - [26] = { skill_lightningMin = 504, skill_lightningMax = 937, }, - [27] = { skill_lightningMin = 549, skill_lightningMax = 1019, }, - [28] = { skill_lightningMin = 596, skill_lightningMax = 1108, }, - [29] = { skill_lightningMin = 648, skill_lightningMax = 1204, }, - [30] = { skill_lightningMin = 704, skill_lightningMax = 1307, }, - } -} -gems["Vaal Summon Skeletons"] = { - intelligence = true, - unsupported = true, -} \ No newline at end of file diff --git a/Data/Gems/sup_dex.lua b/Data/Gems/sup_dex.lua index c52266b0..fcfa81e9 100644 --- a/Data/Gems/sup_dex.lua +++ b/Data/Gems/sup_dex.lua @@ -1,144 +1,169 @@ -- Path of Building -- --- Dexterity support gems +-- Active Strength skills -- Skill gem data (c) Grinding Gear Games -- -local gems = ... +local gems, mod, flag, skill = ... gems["Added Cold Damage"] = { + cold = true, dexterity = true, support = true, - cold = true, - require = "hit", - base = { - manaCostMore = 1.3, + color = 2, + requireSkillTypes = { 1, 10, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 30), }, - quality = { - coldInc = 0.5, + qualityMods = { + mod("ColdDamage", "INC", 0.5), --"cold_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("ColdMin", "BASE", nil), --"global_minimum_added_cold_damage" + [2] = mod("ColdMax", "BASE", nil), --"global_maximum_added_cold_damage" }, levels = { - [1] = { coldMin = 4, coldMax = 6, }, - [2] = { coldMin = 5, coldMax = 7, }, - [3] = { coldMin = 6, coldMax = 9, }, - [4] = { coldMin = 8, coldMax = 11, }, - [5] = { coldMin = 10, coldMax = 15, }, - [6] = { coldMin = 13, coldMax = 19, }, - [7] = { coldMin = 16, coldMax = 24, }, - [8] = { coldMin = 20, coldMax = 31, }, - [9] = { coldMin = 25, coldMax = 38, }, - [10] = { coldMin = 30, coldMax = 45, }, - [11] = { coldMin = 35, coldMax = 52, }, - [12] = { coldMin = 40, coldMax = 61, }, - [13] = { coldMin = 47, coldMax = 70, }, - [14] = { coldMin = 54, coldMax = 81, }, - [15] = { coldMin = 63, coldMax = 94, }, - [16] = { coldMin = 72, coldMax = 108, }, - [17] = { coldMin = 83, coldMax = 125, }, - [18] = { coldMin = 95, coldMax = 143, }, - [19] = { coldMin = 109, coldMax = 164, }, - [20] = { coldMin = 125, coldMax = 188, }, - [21] = { coldMin = 137, coldMax = 205, }, - [22] = { coldMin = 149, coldMax = 224, }, - [23] = { coldMin = 163, coldMax = 245, }, - [24] = { coldMin = 178, coldMax = 267, }, - [25] = { coldMin = 194, coldMax = 291, }, - [26] = { coldMin = 212, coldMax = 318, }, - [27] = { coldMin = 231, coldMax = 346, }, - [28] = { coldMin = 251, coldMax = 377, }, - [29] = { coldMin = 274, coldMax = 411, }, - [30] = { coldMin = 298, coldMax = 447, }, - } + [1] = { 4, 6, }, + [2] = { 5, 7, }, + [3] = { 6, 9, }, + [4] = { 8, 11, }, + [5] = { 10, 15, }, + [6] = { 13, 19, }, + [7] = { 16, 24, }, + [8] = { 20, 31, }, + [9] = { 25, 38, }, + [10] = { 30, 45, }, + [11] = { 35, 52, }, + [12] = { 40, 61, }, + [13] = { 47, 70, }, + [14] = { 54, 81, }, + [15] = { 63, 94, }, + [16] = { 72, 108, }, + [17] = { 83, 125, }, + [18] = { 95, 143, }, + [19] = { 109, 164, }, + [20] = { 125, 188, }, + [21] = { 137, 205, }, + [22] = { 149, 224, }, + [23] = { 163, 245, }, + [24] = { 178, 267, }, + [25] = { 194, 291, }, + [26] = { 212, 318, }, + [27] = { 231, 346, }, + [28] = { 251, 377, }, + [29] = { 274, 411, }, + [30] = { 298, 447, }, + }, } gems["Additional Accuracy"] = { + attack = true, dexterity = true, support = true, - attack = true, - require = "attack", - base = { + color = 2, + requireSkillTypes = { 1, 56, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { }, - quality = { - accuracyInc = 1, + qualityMods = { + mod("Accuracy", "INC", 1), --"accuracy_rating_+%" = 1 + }, + levelMods = { + [1] = mod("Accuracy", "BASE", nil), --"accuracy_rating" }, levels = { - [1] = { accuracyBase = 74, }, - [2] = { accuracyBase = 100, }, - [3] = { accuracyBase = 127, }, - [4] = { accuracyBase = 157, }, - [5] = { accuracyBase = 190, }, - [6] = { accuracyBase = 230, }, - [7] = { accuracyBase = 290, }, - [8] = { accuracyBase = 350, }, - [9] = { accuracyBase = 400, }, - [10] = { accuracyBase = 453, }, - [11] = { accuracyBase = 528, }, - [12] = { accuracyBase = 586, }, - [13] = { accuracyBase = 645, }, - [14] = { accuracyBase = 707, }, - [15] = { accuracyBase = 772, }, - [16] = { accuracyBase = 840, }, - [17] = { accuracyBase = 887, }, - [18] = { accuracyBase = 934, }, - [19] = { accuracyBase = 983, }, - [20] = { accuracyBase = 1034, }, - [21] = { accuracyBase = 1085, }, - [22] = { accuracyBase = 1138, }, - [23] = { accuracyBase = 1191, }, - [24] = { accuracyBase = 1246, }, - [25] = { accuracyBase = 1301, }, - [26] = { accuracyBase = 1358, }, - [27] = { accuracyBase = 1415, }, - [28] = { accuracyBase = 1474, }, - [29] = { accuracyBase = 1533, }, - [30] = { accuracyBase = 1594, }, - } + [1] = { 74, }, + [2] = { 100, }, + [3] = { 127, }, + [4] = { 157, }, + [5] = { 190, }, + [6] = { 230, }, + [7] = { 290, }, + [8] = { 350, }, + [9] = { 400, }, + [10] = { 453, }, + [11] = { 528, }, + [12] = { 586, }, + [13] = { 645, }, + [14] = { 707, }, + [15] = { 772, }, + [16] = { 840, }, + [17] = { 887, }, + [18] = { 934, }, + [19] = { 983, }, + [20] = { 1034, }, + [21] = { 1085, }, + [22] = { 1138, }, + [23] = { 1191, }, + [24] = { 1246, }, + [25] = { 1301, }, + [26] = { 1358, }, + [27] = { 1415, }, + [28] = { 1474, }, + [29] = { 1533, }, + [30] = { 1594, }, + }, } gems["Blind"] = { dexterity = true, support = true, - require = "hit", - base = { + color = 2, + requireSkillTypes = { 10, 1, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + --"global_chance_to_blind_on_hit_%" = 10 }, - quality = { + qualityMods = { + --"blind_duration_+%" = 1 + }, + levelMods = { + --[1] = "blind_duration_+%" }, levels = { - [1] = { }, - [2] = { }, - [3] = { }, - [4] = { }, - [5] = { }, - [6] = { }, - [7] = { }, - [8] = { }, - [9] = { }, - [10] = { }, - [11] = { }, - [12] = { }, - [13] = { }, - [14] = { }, - [15] = { }, - [16] = { }, - [17] = { }, - [18] = { }, - [19] = { }, - [20] = { }, - [21] = { }, - [22] = { }, - [23] = { }, - [24] = { }, - [25] = { }, - [26] = { }, - [27] = { }, - [28] = { }, - [29] = { }, - [30] = { }, - } + [1] = { 0, }, + [2] = { 2, }, + [3] = { 4, }, + [4] = { 6, }, + [5] = { 8, }, + [6] = { 10, }, + [7] = { 12, }, + [8] = { 14, }, + [9] = { 16, }, + [10] = { 18, }, + [11] = { 20, }, + [12] = { 22, }, + [13] = { 24, }, + [14] = { 26, }, + [15] = { 28, }, + [16] = { 30, }, + [17] = { 32, }, + [18] = { 34, }, + [19] = { 36, }, + [20] = { 38, }, + [21] = { 40, }, + [22] = { 42, }, + [23] = { 44, }, + [24] = { 46, }, + [25] = { 48, }, + [26] = { 50, }, + [27] = { 52, }, + [28] = { 54, }, + [29] = { 56, }, + [30] = { 58, }, + }, } gems["Block Chance Reduction"] = { dexterity = true, + support = true, unsupported = true, } -gems["Cast on Critical Strike"] = { +gems["Cast On Critical Strike"] = { dexterity = true, + support = true, + spell = true, + trigger = true, unsupported = true, } gems["Cast on Death"] = { @@ -146,1136 +171,1323 @@ gems["Cast on Death"] = { support = true, spell = true, trigger = true, - require = "spell", - base = { + color = 2, + requireSkillTypes = { 36, }, + addSkillTypes = { 42, }, + excludeSkillTypes = { 9, 37, 41, 30, 44, }, + baseMods = { + --"cast_on_death_%" = 100 + --"spell_uncastable_if_triggerable" = ? + --"spell_only_castable_on_death" = ? + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? }, - quality = { - aoeRadiusInc = 3, + qualityMods = { + mod("AreaRadius", "INC", 3), --"area_of_effect_+%_while_dead" = 3 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil), --"cast_on_death_damage_+%_final_while_dead" }, levels = { - [1] = { damageMore = 1, }, - [2] = { damageMore = 1.16, }, - [3] = { damageMore = 1.32, }, - [4] = { damageMore = 1.48, }, - [5] = { damageMore = 1.64, }, - [6] = { damageMore = 1.8, }, - [7] = { damageMore = 1.96, }, - [8] = { damageMore = 2.12, }, - [9] = { damageMore = 2.28, }, - [10] = { damageMore = 2.44, }, - [11] = { damageMore = 2.6, }, - [12] = { damageMore = 2.76, }, - [13] = { damageMore = 2.92, }, - [14] = { damageMore = 3.08, }, - [15] = { damageMore = 3.24, }, - [16] = { damageMore = 3.4, }, - [17] = { damageMore = 3.56, }, - [18] = { damageMore = 3.72, }, - [19] = { damageMore = 3.88, }, - [20] = { damageMore = 4.04, }, - [21] = { damageMore = 4.2, }, - [22] = { damageMore = 4.36, }, - [23] = { damageMore = 4.52, }, - [24] = { damageMore = 4.68, }, - [25] = { damageMore = 4.84, }, - [26] = { damageMore = 5, }, - [27] = { damageMore = 5.16, }, - [28] = { damageMore = 5.32, }, - [29] = { damageMore = 5.48, }, - [30] = { damageMore = 5.64, }, - } + [1] = { 0, }, + [2] = { 16, }, + [3] = { 32, }, + [4] = { 48, }, + [5] = { 64, }, + [6] = { 80, }, + [7] = { 96, }, + [8] = { 112, }, + [9] = { 128, }, + [10] = { 144, }, + [11] = { 160, }, + [12] = { 176, }, + [13] = { 192, }, + [14] = { 208, }, + [15] = { 224, }, + [16] = { 240, }, + [17] = { 256, }, + [18] = { 272, }, + [19] = { 288, }, + [20] = { 304, }, + [21] = { 320, }, + [22] = { 336, }, + [23] = { 352, }, + [24] = { 368, }, + [25] = { 384, }, + [26] = { 400, }, + [27] = { 416, }, + [28] = { 432, }, + [29] = { 448, }, + [30] = { 464, }, + }, } gems["Chain"] = { dexterity = true, support = true, - projectile = true, chaining = true, - require = "projectile or chaining", - base = { - manaCostMore = 1.5, - chainCount = 2, + projectile = true, + color = 2, + requireSkillTypes = { 23, 3, 54, 56, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 50), + mod("ChainCount", "BASE", 2), --"number_of_additional_projectiles_in_chain" = 2 }, - quality = { - projectileSpeedInc = 1, + qualityMods = { + mod("ProjectileSpeed", "INC", 1), --"base_projectile_speed_+%" = 1 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil), --"support_chain_damage_+%_final" }, levels = { - [1] = { damageMore = 0.5, }, - [2] = { damageMore = 0.51, }, - [3] = { damageMore = 0.52, }, - [4] = { damageMore = 0.53, }, - [5] = { damageMore = 0.54, }, - [6] = { damageMore = 0.55, }, - [7] = { damageMore = 0.56, }, - [8] = { damageMore = 0.57, }, - [9] = { damageMore = 0.58, }, - [10] = { damageMore = 0.59, }, - [11] = { damageMore = 0.6, }, - [12] = { damageMore = 0.61, }, - [13] = { damageMore = 0.62, }, - [14] = { damageMore = 0.63, }, - [15] = { damageMore = 0.64, }, - [16] = { damageMore = 0.65, }, - [17] = { damageMore = 0.66, }, - [18] = { damageMore = 0.67, }, - [19] = { damageMore = 0.68, }, - [20] = { damageMore = 0.69, }, - [21] = { damageMore = 0.7, }, - [22] = { damageMore = 0.71, }, - [23] = { damageMore = 0.72, }, - [24] = { damageMore = 0.73, }, - [25] = { damageMore = 0.74, }, - [26] = { damageMore = 0.75, }, - [27] = { damageMore = 0.76, }, - [28] = { damageMore = 0.77, }, - [29] = { damageMore = 0.78, }, - [30] = { damageMore = 0.79, }, - } + [1] = { -50, }, + [2] = { -49, }, + [3] = { -48, }, + [4] = { -47, }, + [5] = { -46, }, + [6] = { -45, }, + [7] = { -44, }, + [8] = { -43, }, + [9] = { -42, }, + [10] = { -41, }, + [11] = { -40, }, + [12] = { -39, }, + [13] = { -38, }, + [14] = { -37, }, + [15] = { -36, }, + [16] = { -35, }, + [17] = { -34, }, + [18] = { -33, }, + [19] = { -32, }, + [20] = { -31, }, + [21] = { -30, }, + [22] = { -29, }, + [23] = { -28, }, + [24] = { -27, }, + [25] = { -26, }, + [26] = { -25, }, + [27] = { -24, }, + [28] = { -23, }, + [29] = { -22, }, + [30] = { -21, }, + }, } gems["Chance to Flee"] = { dexterity = true, support = true, - require = "hit", - base = { + color = 2, + requireSkillTypes = { 1, 10, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { }, - quality = { + qualityMods = { + --"global_hit_causes_monster_flee_%" = 1 + }, + levelMods = { + --[1] = "global_hit_causes_monster_flee_%" }, levels = { - [1] = { }, - [2] = { }, - [3] = { }, - [4] = { }, - [5] = { }, - [6] = { }, - [7] = { }, - [8] = { }, - [9] = { }, - [10] = { }, - [11] = { }, - [12] = { }, - [13] = { }, - [14] = { }, - [15] = { }, - [16] = { }, - [17] = { }, - [18] = { }, - [19] = { }, - [20] = { }, - [21] = { }, - [22] = { }, - [23] = { }, - [24] = { }, - [25] = { }, - [26] = { }, - [27] = { }, - [28] = { }, - [29] = { }, - [30] = { }, - } + [1] = { 25, }, + [2] = { 26, }, + [3] = { 27, }, + [4] = { 28, }, + [5] = { 29, }, + [6] = { 30, }, + [7] = { 31, }, + [8] = { 32, }, + [9] = { 33, }, + [10] = { 34, }, + [11] = { 35, }, + [12] = { 36, }, + [13] = { 37, }, + [14] = { 38, }, + [15] = { 39, }, + [16] = { 40, }, + [17] = { 41, }, + [18] = { 42, }, + [19] = { 43, }, + [20] = { 44, }, + [21] = { 45, }, + [22] = { 46, }, + [23] = { 47, }, + [24] = { 48, }, + [25] = { 49, }, + [26] = { 50, }, + [27] = { 51, }, + [28] = { 52, }, + [29] = { 53, }, + [30] = { 54, }, + }, } gems["Cluster Traps"] = { + trap = true, dexterity = true, support = true, - trap = true, - require = "trap", - base = { - manaCostMore = 1.5, - activeTrapLimit = 5, + color = 2, + requireSkillTypes = { 37, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 50), + --"number_of_additional_traps_to_throw" = 3 + mod("ActiveTrapLimit", "BASE", 5), --"number_of_additional_traps_allowed" = 5 + --"throw_traps_in_circle_radius" = 20 }, - quality = { - trap_damageInc = 0.5, + qualityMods = { + mod("Damage", "INC", 0.5, 0, KeywordFlag.Trap), --"trap_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil), --"support_clustertrap_damage_+%_final" }, levels = { - [1] = { damageMore = 0.45, }, - [2] = { damageMore = 0.46, }, - [3] = { damageMore = 0.47, }, - [4] = { damageMore = 0.48, }, - [5] = { damageMore = 0.49, }, - [6] = { damageMore = 0.5, }, - [7] = { damageMore = 0.51, }, - [8] = { damageMore = 0.52, }, - [9] = { damageMore = 0.53, }, - [10] = { damageMore = 0.54, }, - [11] = { damageMore = 0.55, }, - [12] = { damageMore = 0.56, }, - [13] = { damageMore = 0.57, }, - [14] = { damageMore = 0.58, }, - [15] = { damageMore = 0.59, }, - [16] = { damageMore = 0.6, }, - [17] = { damageMore = 0.61, }, - [18] = { damageMore = 0.62, }, - [19] = { damageMore = 0.63, }, - [20] = { damageMore = 0.64, }, - [21] = { damageMore = 0.65, }, - [22] = { damageMore = 0.66, }, - [23] = { damageMore = 0.67, }, - [24] = { damageMore = 0.68, }, - [25] = { damageMore = 0.69, }, - [26] = { damageMore = 0.7, }, - [27] = { damageMore = 0.71, }, - [28] = { damageMore = 0.72, }, - [29] = { damageMore = 0.73, }, - [30] = { damageMore = 0.74, }, - } + [1] = { -55, }, + [2] = { -54, }, + [3] = { -53, }, + [4] = { -52, }, + [5] = { -51, }, + [6] = { -50, }, + [7] = { -49, }, + [8] = { -48, }, + [9] = { -47, }, + [10] = { -46, }, + [11] = { -45, }, + [12] = { -44, }, + [13] = { -43, }, + [14] = { -42, }, + [15] = { -41, }, + [16] = { -40, }, + [17] = { -39, }, + [18] = { -38, }, + [19] = { -37, }, + [20] = { -36, }, + [21] = { -35, }, + [22] = { -34, }, + [23] = { -33, }, + [24] = { -32, }, + [25] = { -31, }, + [26] = { -30, }, + [27] = { -29, }, + [28] = { -28, }, + [29] = { -27, }, + [30] = { -26, }, + }, } gems["Cold Penetration"] = { + cold = true, dexterity = true, support = true, - cold = true, - require = "hit", - base = { - manaCostMore = 1.4, + color = 2, + requireSkillTypes = { 10, 1, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 40), }, - quality = { - coldInc = 0.5, + qualityMods = { + mod("ColdDamage", "INC", 0.5), --"cold_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("ColdPenetration", "BASE", nil), --"base_reduce_enemy_cold_resistance_%" }, levels = { - [1] = { coldPen = 18, }, - [2] = { coldPen = 19, }, - [3] = { coldPen = 20, }, - [4] = { coldPen = 21, }, - [5] = { coldPen = 22, }, - [6] = { coldPen = 23, }, - [7] = { coldPen = 24, }, - [8] = { coldPen = 25, }, - [9] = { coldPen = 26, }, - [10] = { coldPen = 27, }, - [11] = { coldPen = 28, }, - [12] = { coldPen = 29, }, - [13] = { coldPen = 30, }, - [14] = { coldPen = 31, }, - [15] = { coldPen = 32, }, - [16] = { coldPen = 33, }, - [17] = { coldPen = 34, }, - [18] = { coldPen = 35, }, - [19] = { coldPen = 36, }, - [20] = { coldPen = 37, }, - [21] = { coldPen = 38, }, - [22] = { coldPen = 39, }, - [23] = { coldPen = 40, }, - [24] = { coldPen = 41, }, - [25] = { coldPen = 42, }, - [26] = { coldPen = 43, }, - [27] = { coldPen = 44, }, - [28] = { coldPen = 45, }, - [29] = { coldPen = 46, }, - [30] = { coldPen = 47, }, - } + [1] = { 18, }, + [2] = { 19, }, + [3] = { 20, }, + [4] = { 21, }, + [5] = { 22, }, + [6] = { 23, }, + [7] = { 24, }, + [8] = { 25, }, + [9] = { 26, }, + [10] = { 27, }, + [11] = { 28, }, + [12] = { 29, }, + [13] = { 30, }, + [14] = { 31, }, + [15] = { 32, }, + [16] = { 33, }, + [17] = { 34, }, + [18] = { 35, }, + [19] = { 36, }, + [20] = { 37, }, + [21] = { 38, }, + [22] = { 39, }, + [23] = { 40, }, + [24] = { 41, }, + [25] = { 42, }, + [26] = { 43, }, + [27] = { 44, }, + [28] = { 45, }, + [29] = { 46, }, + [30] = { 47, }, + }, } gems["Culling Strike"] = { dexterity = true, support = true, - require = "hit", - base = { - manaCostMore = 1.1, + color = 2, + requireSkillTypes = { 10, 1, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 10), + --"kill_enemy_on_hit_if_under_10%_life" = 1 + mod("Speed", "INC", 0, ModFlag.Attack, 0, nil), --"attack_speed_+%" = 0 + mod("Speed", "INC", 0, ModFlag.Spell), --"base_cast_speed_+%" = 0 }, - quality = { - speedInc = 0.5, + qualityMods = { + mod("Speed", "INC", 0.5, ModFlag.Attack, 0, nil), --"attack_speed_+%" = 0.5 + mod("Speed", "INC", 0.5, ModFlag.Spell), --"base_cast_speed_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "INC", nil, 0, 0, nil), --"damage_+%" }, levels = { - [1] = { damageInc = 0, }, - [2] = { damageInc = 2, }, - [3] = { damageInc = 4, }, - [4] = { damageInc = 6, }, - [5] = { damageInc = 8, }, - [6] = { damageInc = 10, }, - [7] = { damageInc = 12, }, - [8] = { damageInc = 14, }, - [9] = { damageInc = 16, }, - [10] = { damageInc = 18, }, - [11] = { damageInc = 20, }, - [12] = { damageInc = 22, }, - [13] = { damageInc = 24, }, - [14] = { damageInc = 26, }, - [15] = { damageInc = 28, }, - [16] = { damageInc = 30, }, - [17] = { damageInc = 32, }, - [18] = { damageInc = 34, }, - [19] = { damageInc = 36, }, - [20] = { damageInc = 38, }, - [21] = { damageInc = 40, }, - [22] = { damageInc = 42, }, - [23] = { damageInc = 44, }, - [24] = { damageInc = 46, }, - [25] = { damageInc = 48, }, - [26] = { damageInc = 50, }, - [27] = { damageInc = 52, }, - [28] = { damageInc = 54, }, - [29] = { damageInc = 56, }, - [30] = { damageInc = 58, }, - } + [1] = { 0, }, + [2] = { 2, }, + [3] = { 4, }, + [4] = { 6, }, + [5] = { 8, }, + [6] = { 10, }, + [7] = { 12, }, + [8] = { 14, }, + [9] = { 16, }, + [10] = { 18, }, + [11] = { 20, }, + [12] = { 22, }, + [13] = { 24, }, + [14] = { 26, }, + [15] = { 28, }, + [16] = { 30, }, + [17] = { 32, }, + [18] = { 34, }, + [19] = { 36, }, + [20] = { 38, }, + [21] = { 40, }, + [22] = { 42, }, + [23] = { 44, }, + [24] = { 46, }, + [25] = { 48, }, + [26] = { 50, }, + [27] = { 52, }, + [28] = { 54, }, + [29] = { 56, }, + [30] = { 58, }, + }, } gems["Enhance"] = { + low_max_level = true, dexterity = true, support = true, - base = { - manaCostMore = 1.15, + color = 2, + requireSkillTypes = { }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 15), }, - quality = { + qualityMods = { + --"local_gem_experience_gain_+%" = 5 + }, + levelMods = { + [1] = mod("GemProperty", "LIST", { keyword = "active", key = "quality", value = nil }), --"supported_active_skill_gem_quality_%" }, levels = { - [1] = { gemQuality_active = 0, }, - [2] = { gemQuality_active = 8, }, - [3] = { gemQuality_active = 16, }, - [4] = { gemQuality_active = 24, }, - [5] = { gemQuality_active = 32, }, - [6] = { gemQuality_active = 40, }, - [7] = { gemQuality_active = 48, }, - [8] = { gemQuality_active = 56, }, - [9] = { gemQuality_active = 64, }, - [10] = { gemQuality_active = 72, }, - } + [1] = { 0, }, + [2] = { 8, }, + [3] = { 16, }, + [4] = { 24, }, + [5] = { 32, }, + [6] = { 40, }, + [7] = { 48, }, + [8] = { 56, }, + [9] = { 64, }, + [10] = { 72, }, + }, } gems["Faster Attacks"] = { + attack = true, dexterity = true, support = true, - attack = true, - require = "attack", - base = { - manaCostMore = 1.15, + color = 2, + requireSkillTypes = { 1, 56, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 15), }, - quality = { - attackSpeedInc = 0.5, + qualityMods = { + mod("Speed", "INC", 0.5, ModFlag.Attack, 0, nil), --"attack_speed_+%" = 0.5 + }, + levelMods = { + [1] = mod("Speed", "INC", nil, ModFlag.Attack, 0, nil), --"attack_speed_+%" }, levels = { - [1] = { attackSpeedInc = 25, }, - [2] = { attackSpeedInc = 26, }, - [3] = { attackSpeedInc = 27, }, - [4] = { attackSpeedInc = 28, }, - [5] = { attackSpeedInc = 29, }, - [6] = { attackSpeedInc = 30, }, - [7] = { attackSpeedInc = 31, }, - [8] = { attackSpeedInc = 32, }, - [9] = { attackSpeedInc = 33, }, - [10] = { attackSpeedInc = 34, }, - [11] = { attackSpeedInc = 35, }, - [12] = { attackSpeedInc = 36, }, - [13] = { attackSpeedInc = 37, }, - [14] = { attackSpeedInc = 38, }, - [15] = { attackSpeedInc = 39, }, - [16] = { attackSpeedInc = 40, }, - [17] = { attackSpeedInc = 41, }, - [18] = { attackSpeedInc = 42, }, - [19] = { attackSpeedInc = 43, }, - [20] = { attackSpeedInc = 44, }, - [21] = { attackSpeedInc = 45, }, - [22] = { attackSpeedInc = 46, }, - [23] = { attackSpeedInc = 47, }, - [24] = { attackSpeedInc = 48, }, - [25] = { attackSpeedInc = 49, }, - [26] = { attackSpeedInc = 50, }, - [27] = { attackSpeedInc = 51, }, - [28] = { attackSpeedInc = 52, }, - [29] = { attackSpeedInc = 53, }, - [30] = { attackSpeedInc = 54, }, - } + [1] = { 25, }, + [2] = { 26, }, + [3] = { 27, }, + [4] = { 28, }, + [5] = { 29, }, + [6] = { 30, }, + [7] = { 31, }, + [8] = { 32, }, + [9] = { 33, }, + [10] = { 34, }, + [11] = { 35, }, + [12] = { 36, }, + [13] = { 37, }, + [14] = { 38, }, + [15] = { 39, }, + [16] = { 40, }, + [17] = { 41, }, + [18] = { 42, }, + [19] = { 43, }, + [20] = { 44, }, + [21] = { 45, }, + [22] = { 46, }, + [23] = { 47, }, + [24] = { 48, }, + [25] = { 49, }, + [26] = { 50, }, + [27] = { 51, }, + [28] = { 52, }, + [29] = { 53, }, + [30] = { 54, }, + }, } gems["Faster Projectiles"] = { dexterity = true, support = true, projectile = true, - require = "projectile", - base = { - manaCostMore = 1.1, + color = 2, + requireSkillTypes = { 3, 14, 54, 56, }, + addSkillTypes = { }, + excludeSkillTypes = { 51, }, + baseMods = { + mod("ManaCost", "MORE", 10), }, - quality = { - speedInc = 0.5, + qualityMods = { + mod("Speed", "INC", 0.5, ModFlag.Attack, 0, nil), --"attack_speed_+%" = 0.5 + mod("Speed", "INC", 0.5, ModFlag.Spell), --"base_cast_speed_+%" = 0.5 + }, + levelMods = { + [1] = mod("ProjectileSpeed", "INC", nil), --"base_projectile_speed_+%" + [2] = mod("Damage", "INC", nil, ModFlag.Projectile), --"projectile_damage_+%" }, levels = { - [1] = { projectileSpeedInc = 50, projectile_damageInc = 20, }, - [2] = { projectileSpeedInc = 51, projectile_damageInc = 20, }, - [3] = { projectileSpeedInc = 52, projectile_damageInc = 21, }, - [4] = { projectileSpeedInc = 53, projectile_damageInc = 21, }, - [5] = { projectileSpeedInc = 54, projectile_damageInc = 22, }, - [6] = { projectileSpeedInc = 55, projectile_damageInc = 22, }, - [7] = { projectileSpeedInc = 56, projectile_damageInc = 23, }, - [8] = { projectileSpeedInc = 57, projectile_damageInc = 23, }, - [9] = { projectileSpeedInc = 58, projectile_damageInc = 24, }, - [10] = { projectileSpeedInc = 59, projectile_damageInc = 24, }, - [11] = { projectileSpeedInc = 60, projectile_damageInc = 25, }, - [12] = { projectileSpeedInc = 61, projectile_damageInc = 25, }, - [13] = { projectileSpeedInc = 62, projectile_damageInc = 26, }, - [14] = { projectileSpeedInc = 63, projectile_damageInc = 26, }, - [15] = { projectileSpeedInc = 64, projectile_damageInc = 27, }, - [16] = { projectileSpeedInc = 65, projectile_damageInc = 27, }, - [17] = { projectileSpeedInc = 66, projectile_damageInc = 28, }, - [18] = { projectileSpeedInc = 67, projectile_damageInc = 28, }, - [19] = { projectileSpeedInc = 68, projectile_damageInc = 29, }, - [20] = { projectileSpeedInc = 69, projectile_damageInc = 29, }, - [21] = { projectileSpeedInc = 70, projectile_damageInc = 30, }, - [22] = { projectileSpeedInc = 71, projectile_damageInc = 30, }, - [23] = { projectileSpeedInc = 72, projectile_damageInc = 31, }, - [24] = { projectileSpeedInc = 73, projectile_damageInc = 31, }, - [25] = { projectileSpeedInc = 74, projectile_damageInc = 32, }, - [26] = { projectileSpeedInc = 75, projectile_damageInc = 32, }, - [27] = { projectileSpeedInc = 76, projectile_damageInc = 33, }, - [28] = { projectileSpeedInc = 77, projectile_damageInc = 33, }, - [29] = { projectileSpeedInc = 78, projectile_damageInc = 34, }, - [30] = { projectileSpeedInc = 79, projectile_damageInc = 34, }, - } + [1] = { 50, 20, }, + [2] = { 51, 20, }, + [3] = { 52, 21, }, + [4] = { 53, 21, }, + [5] = { 54, 22, }, + [6] = { 55, 22, }, + [7] = { 56, 23, }, + [8] = { 57, 23, }, + [9] = { 58, 24, }, + [10] = { 59, 24, }, + [11] = { 60, 25, }, + [12] = { 61, 25, }, + [13] = { 62, 26, }, + [14] = { 63, 26, }, + [15] = { 64, 27, }, + [16] = { 65, 27, }, + [17] = { 66, 28, }, + [18] = { 67, 28, }, + [19] = { 68, 29, }, + [20] = { 69, 29, }, + [21] = { 70, 30, }, + [22] = { 71, 30, }, + [23] = { 72, 31, }, + [24] = { 73, 31, }, + [25] = { 74, 32, }, + [26] = { 75, 32, }, + [27] = { 76, 33, }, + [28] = { 77, 33, }, + [29] = { 78, 34, }, + [30] = { 79, 34, }, + }, } gems["Fork"] = { dexterity = true, support = true, projectile = true, - require = "projectile", - base = { - manaCostMore = 1.3, + color = 2, + requireSkillTypes = { 3, 54, 56, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 30), + --"projectiles_fork" = ? }, - quality = { - projectile_damageInc = 0.5, + qualityMods = { + mod("Damage", "INC", 0.5, ModFlag.Projectile), --"projectile_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Projectile), --"support_fork_projectile_damage_+%_final" }, levels = { - [1] = { projectile_damageMore = 0.7, }, - [2] = { projectile_damageMore = 0.71, }, - [3] = { projectile_damageMore = 0.72, }, - [4] = { projectile_damageMore = 0.73, }, - [5] = { projectile_damageMore = 0.74, }, - [6] = { projectile_damageMore = 0.75, }, - [7] = { projectile_damageMore = 0.76, }, - [8] = { projectile_damageMore = 0.77, }, - [9] = { projectile_damageMore = 0.78, }, - [10] = { projectile_damageMore = 0.79, }, - [11] = { projectile_damageMore = 0.8, }, - [12] = { projectile_damageMore = 0.81, }, - [13] = { projectile_damageMore = 0.82, }, - [14] = { projectile_damageMore = 0.83, }, - [15] = { projectile_damageMore = 0.84, }, - [16] = { projectile_damageMore = 0.85, }, - [17] = { projectile_damageMore = 0.86, }, - [18] = { projectile_damageMore = 0.87, }, - [19] = { projectile_damageMore = 0.88, }, - [20] = { projectile_damageMore = 0.89, }, - [21] = { projectile_damageMore = 0.9, }, - [22] = { projectile_damageMore = 0.91, }, - [23] = { projectile_damageMore = 0.92, }, - [24] = { projectile_damageMore = 0.93, }, - [25] = { projectile_damageMore = 0.94, }, - [26] = { projectile_damageMore = 0.95, }, - [27] = { projectile_damageMore = 0.96, }, - [28] = { projectile_damageMore = 0.97, }, - [29] = { projectile_damageMore = 0.98, }, - [30] = { projectile_damageMore = 0.99, }, - } + [1] = { -30, }, + [2] = { -29, }, + [3] = { -28, }, + [4] = { -27, }, + [5] = { -26, }, + [6] = { -25, }, + [7] = { -24, }, + [8] = { -23, }, + [9] = { -22, }, + [10] = { -21, }, + [11] = { -20, }, + [12] = { -19, }, + [13] = { -18, }, + [14] = { -17, }, + [15] = { -16, }, + [16] = { -15, }, + [17] = { -14, }, + [18] = { -13, }, + [19] = { -12, }, + [20] = { -11, }, + [21] = { -10, }, + [22] = { -9, }, + [23] = { -8, }, + [24] = { -7, }, + [25] = { -6, }, + [26] = { -5, }, + [27] = { -4, }, + [28] = { -3, }, + [29] = { -2, }, + [30] = { -1, }, + }, } gems["Greater Multiple Projectiles"] = { dexterity = true, support = true, projectile = true, - require = "projectile", - base = { - manaCostMore = 1.65, - projectileCount = 4, + color = 2, + requireSkillTypes = { 3, 54, 56, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 65), + mod("ProjectileCount", "BASE", 4), --"number_of_additional_projectiles" = 4 + mod("Damage", "INC", 0, ModFlag.Projectile), --"projectile_damage_+%" = 0 }, - quality = { - speedInc = 0.5, + qualityMods = { + mod("Speed", "INC", 0.5, ModFlag.Attack, 0, nil), --"attack_speed_+%" = 0.5 + mod("Speed", "INC", 0.5, ModFlag.Spell), --"base_cast_speed_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Projectile), --"support_multiple_projectile_damage_+%_final" }, levels = { - [1] = { projectile_damageMore = 0.65, }, - [2] = { projectile_damageMore = 0.65, }, - [3] = { projectile_damageMore = 0.66, }, - [4] = { projectile_damageMore = 0.66, }, - [5] = { projectile_damageMore = 0.67, }, - [6] = { projectile_damageMore = 0.67, }, - [7] = { projectile_damageMore = 0.68, }, - [8] = { projectile_damageMore = 0.68, }, - [9] = { projectile_damageMore = 0.69, }, - [10] = { projectile_damageMore = 0.69, }, - [11] = { projectile_damageMore = 0.7, }, - [12] = { projectile_damageMore = 0.7, }, - [13] = { projectile_damageMore = 0.71, }, - [14] = { projectile_damageMore = 0.71, }, - [15] = { projectile_damageMore = 0.72, }, - [16] = { projectile_damageMore = 0.72, }, - [17] = { projectile_damageMore = 0.73, }, - [18] = { projectile_damageMore = 0.73, }, - [19] = { projectile_damageMore = 0.74, }, - [20] = { projectile_damageMore = 0.74, }, - [21] = { projectile_damageMore = 0.75, }, - [22] = { projectile_damageMore = 0.75, }, - [23] = { projectile_damageMore = 0.76, }, - [24] = { projectile_damageMore = 0.76, }, - [25] = { projectile_damageMore = 0.77, }, - [26] = { projectile_damageMore = 0.77, }, - [27] = { projectile_damageMore = 0.78, }, - [28] = { projectile_damageMore = 0.78, }, - [29] = { projectile_damageMore = 0.79, }, - [30] = { projectile_damageMore = 0.79, }, - } + [1] = { -35, }, + [2] = { -35, }, + [3] = { -34, }, + [4] = { -34, }, + [5] = { -33, }, + [6] = { -33, }, + [7] = { -32, }, + [8] = { -32, }, + [9] = { -31, }, + [10] = { -31, }, + [11] = { -30, }, + [12] = { -30, }, + [13] = { -29, }, + [14] = { -29, }, + [15] = { -28, }, + [16] = { -28, }, + [17] = { -27, }, + [18] = { -27, }, + [19] = { -26, }, + [20] = { -26, }, + [21] = { -25, }, + [22] = { -25, }, + [23] = { -24, }, + [24] = { -24, }, + [25] = { -23, }, + [26] = { -23, }, + [27] = { -22, }, + [28] = { -22, }, + [29] = { -21, }, + [30] = { -21, }, + }, } gems["Hypothermia"] = { + cold = true, dexterity = true, support = true, - cold = true, - require = "hit", - base = { - manaCostMore = 1.2, - CondMod_EnemyChilled_freezeChance = 10, + color = 2, + requireSkillTypes = { 10, 1, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 20), + mod("EnemyFreezeChance", "BASE", 10, ModFlag.Hit, 0, { type = "Condition", var = "EnemyChilled" }), --"additional_chance_to_freeze_chilled_enemies_%" = 10 }, - quality = { - chill_durationInc = 1.5, + qualityMods = { + mod("EnemyChillDuration", "INC", 1.5), --"chill_duration_+%" = 1.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Hit, 0, { type = "Condition", var = "EnemyChilled" }), --"support_hypothermia_damage_+%_vs_chilled_enemies_final" }, levels = { - [1] = { CondMod_EnemyChilled_hit_damageMore = 1.2, }, - [2] = { CondMod_EnemyChilled_hit_damageMore = 1.21, }, - [3] = { CondMod_EnemyChilled_hit_damageMore = 1.22, }, - [4] = { CondMod_EnemyChilled_hit_damageMore = 1.23, }, - [5] = { CondMod_EnemyChilled_hit_damageMore = 1.24, }, - [6] = { CondMod_EnemyChilled_hit_damageMore = 1.25, }, - [7] = { CondMod_EnemyChilled_hit_damageMore = 1.26, }, - [8] = { CondMod_EnemyChilled_hit_damageMore = 1.27, }, - [9] = { CondMod_EnemyChilled_hit_damageMore = 1.28, }, - [10] = { CondMod_EnemyChilled_hit_damageMore = 1.29, }, - [11] = { CondMod_EnemyChilled_hit_damageMore = 1.3, }, - [12] = { CondMod_EnemyChilled_hit_damageMore = 1.31, }, - [13] = { CondMod_EnemyChilled_hit_damageMore = 1.32, }, - [14] = { CondMod_EnemyChilled_hit_damageMore = 1.33, }, - [15] = { CondMod_EnemyChilled_hit_damageMore = 1.34, }, - [16] = { CondMod_EnemyChilled_hit_damageMore = 1.35, }, - [17] = { CondMod_EnemyChilled_hit_damageMore = 1.36, }, - [18] = { CondMod_EnemyChilled_hit_damageMore = 1.37, }, - [19] = { CondMod_EnemyChilled_hit_damageMore = 1.38, }, - [20] = { CondMod_EnemyChilled_hit_damageMore = 1.39, }, - [21] = { CondMod_EnemyChilled_hit_damageMore = 1.4, }, - [22] = { CondMod_EnemyChilled_hit_damageMore = 1.41, }, - [23] = { CondMod_EnemyChilled_hit_damageMore = 1.42, }, - [24] = { CondMod_EnemyChilled_hit_damageMore = 1.43, }, - [25] = { CondMod_EnemyChilled_hit_damageMore = 1.44, }, - [26] = { CondMod_EnemyChilled_hit_damageMore = 1.45, }, - [27] = { CondMod_EnemyChilled_hit_damageMore = 1.46, }, - [28] = { CondMod_EnemyChilled_hit_damageMore = 1.47, }, - [29] = { CondMod_EnemyChilled_hit_damageMore = 1.48, }, - [30] = { CondMod_EnemyChilled_hit_damageMore = 1.49, }, - } + [1] = { 20, }, + [2] = { 21, }, + [3] = { 22, }, + [4] = { 23, }, + [5] = { 24, }, + [6] = { 25, }, + [7] = { 26, }, + [8] = { 27, }, + [9] = { 28, }, + [10] = { 29, }, + [11] = { 30, }, + [12] = { 31, }, + [13] = { 32, }, + [14] = { 33, }, + [15] = { 34, }, + [16] = { 35, }, + [17] = { 36, }, + [18] = { 37, }, + [19] = { 38, }, + [20] = { 39, }, + [21] = { 40, }, + [22] = { 41, }, + [23] = { 42, }, + [24] = { 43, }, + [25] = { 44, }, + [26] = { 45, }, + [27] = { 46, }, + [28] = { 47, }, + [29] = { 48, }, + [30] = { 49, }, + }, } gems["Ice Bite"] = { + cold = true, dexterity = true, support = true, - cold = true, - require = "hit", - base = { - manaCostMore = 1.1, - freezeChance = 15, + color = 2, + requireSkillTypes = { 10, 1, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 10), + mod("EnemyFreezeChance", "BASE", 15), --"base_chance_to_freeze_%" = 15 }, - quality = { - CondMod_EnemyFreeze_damageInc = 1, + qualityMods = { + mod("Damage", "INC", 1, ModFlag.Hit, 0, { type = "Condition", var = "EnemyFrozen" }), --"damage_+%_vs_frozen_enemies" = 1 + }, + levelMods = { + --[1] = "chance_to_gain_frenzy_charge_on_killing_frozen_enemy_%" }, levels = { - [1] = { }, - [2] = { }, - [3] = { }, - [4] = { }, - [5] = { }, - [6] = { }, - [7] = { }, - [8] = { }, - [9] = { }, - [10] = { }, - [11] = { }, - [12] = { }, - [13] = { }, - [14] = { }, - [15] = { }, - [16] = { }, - [17] = { }, - [18] = { }, - [19] = { }, - [20] = { }, - [21] = { }, - [22] = { }, - [23] = { }, - [24] = { }, - [25] = { }, - [26] = { }, - [27] = { }, - [28] = { }, - [29] = { }, - [30] = { }, - } + [1] = { 50, }, + [2] = { 51, }, + [3] = { 52, }, + [4] = { 53, }, + [5] = { 54, }, + [6] = { 55, }, + [7] = { 56, }, + [8] = { 57, }, + [9] = { 58, }, + [10] = { 59, }, + [11] = { 60, }, + [12] = { 61, }, + [13] = { 62, }, + [14] = { 63, }, + [15] = { 64, }, + [16] = { 65, }, + [17] = { 66, }, + [18] = { 67, }, + [19] = { 68, }, + [20] = { 69, }, + [21] = { 70, }, + [22] = { 71, }, + [23] = { 72, }, + [24] = { 73, }, + [25] = { 74, }, + [26] = { 75, }, + [27] = { 76, }, + [28] = { 77, }, + [29] = { 78, }, + [30] = { 79, }, + }, } gems["Lesser Multiple Projectiles"] = { dexterity = true, support = true, projectile = true, - require = "projectile", - base = { - manaCostMore = 1.4, - projectileCount = 2, + color = 2, + requireSkillTypes = { 3, 54, 56, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 40), + mod("ProjectileCount", "BASE", 2), --"number_of_additional_projectiles" = 2 + mod("Damage", "INC", 0, ModFlag.Projectile), --"projectile_damage_+%" = 0 }, - quality = { - speedInc = 0.5, + qualityMods = { + mod("Speed", "INC", 0.5, ModFlag.Attack, 0, nil), --"attack_speed_+%" = 0.5 + mod("Speed", "INC", 0.5, ModFlag.Spell), --"base_cast_speed_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Projectile), --"support_lesser_multiple_projectile_damage_+%_final" }, levels = { - [1] = { projectile_damageMore = 0.75, }, - [2] = { projectile_damageMore = 0.75, }, - [3] = { projectile_damageMore = 0.76, }, - [4] = { projectile_damageMore = 0.76, }, - [5] = { projectile_damageMore = 0.77, }, - [6] = { projectile_damageMore = 0.77, }, - [7] = { projectile_damageMore = 0.78, }, - [8] = { projectile_damageMore = 0.78, }, - [9] = { projectile_damageMore = 0.79, }, - [10] = { projectile_damageMore = 0.79, }, - [11] = { projectile_damageMore = 0.8, }, - [12] = { projectile_damageMore = 0.8, }, - [13] = { projectile_damageMore = 0.81, }, - [14] = { projectile_damageMore = 0.81, }, - [15] = { projectile_damageMore = 0.82, }, - [16] = { projectile_damageMore = 0.82, }, - [17] = { projectile_damageMore = 0.83, }, - [18] = { projectile_damageMore = 0.83, }, - [19] = { projectile_damageMore = 0.84, }, - [20] = { projectile_damageMore = 0.84, }, - [21] = { projectile_damageMore = 0.85, }, - [22] = { projectile_damageMore = 0.85, }, - [23] = { projectile_damageMore = 0.86, }, - [24] = { projectile_damageMore = 0.86, }, - [25] = { projectile_damageMore = 0.87, }, - [26] = { projectile_damageMore = 0.87, }, - [27] = { projectile_damageMore = 0.88, }, - [28] = { projectile_damageMore = 0.88, }, - [29] = { projectile_damageMore = 0.89, }, - [30] = { projectile_damageMore = 0.89, }, - } + [1] = { -25, }, + [2] = { -25, }, + [3] = { -24, }, + [4] = { -24, }, + [5] = { -23, }, + [6] = { -23, }, + [7] = { -22, }, + [8] = { -22, }, + [9] = { -21, }, + [10] = { -21, }, + [11] = { -20, }, + [12] = { -20, }, + [13] = { -19, }, + [14] = { -19, }, + [15] = { -18, }, + [16] = { -18, }, + [17] = { -17, }, + [18] = { -17, }, + [19] = { -16, }, + [20] = { -16, }, + [21] = { -15, }, + [22] = { -15, }, + [23] = { -14, }, + [24] = { -14, }, + [25] = { -13, }, + [26] = { -13, }, + [27] = { -12, }, + [28] = { -12, }, + [29] = { -11, }, + [30] = { -11, }, + }, } gems["Mana Leech"] = { dexterity = true, support = true, - require = "hit", - base = { + color = 2, + requireSkillTypes = { 10, 1, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + --"mana_leech_from_any_damage_permyriad" = 200 }, - quality = { + qualityMods = { + --"mana_leech_speed_+%" = 0.5 + }, + levelMods = { + --[1] = "mana_leech_speed_+%" }, levels = { - [1] = { }, - [2] = { }, - [3] = { }, - [4] = { }, - [5] = { }, - [6] = { }, - [7] = { }, - [8] = { }, - [9] = { }, - [10] = { }, - [11] = { }, - [12] = { }, - [13] = { }, - [14] = { }, - [15] = { }, - [16] = { }, - [17] = { }, - [18] = { }, - [19] = { }, - [20] = { }, - [21] = { }, - [22] = { }, - [23] = { }, - [24] = { }, - [25] = { }, - [26] = { }, - [27] = { }, - [28] = { }, - [29] = { }, - [30] = { }, - } + [1] = { 0, }, + [2] = { 2, }, + [3] = { 4, }, + [4] = { 6, }, + [5] = { 8, }, + [6] = { 10, }, + [7] = { 12, }, + [8] = { 14, }, + [9] = { 16, }, + [10] = { 18, }, + [11] = { 20, }, + [12] = { 22, }, + [13] = { 24, }, + [14] = { 26, }, + [15] = { 28, }, + [16] = { 30, }, + [17] = { 32, }, + [18] = { 34, }, + [19] = { 36, }, + [20] = { 38, }, + [21] = { 40, }, + [22] = { 42, }, + [23] = { 44, }, + [24] = { 46, }, + [25] = { 48, }, + [26] = { 50, }, + [27] = { 52, }, + [28] = { 54, }, + [29] = { 56, }, + [30] = { 58, }, + }, } gems["Multiple Traps"] = { dexterity = true, support = true, trap = true, - require = "trap", - base = { - manaCostMore = 1.6, - activeTrapLimit = 3, + color = 2, + requireSkillTypes = { 37, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 60), + --"number_of_additional_traps_to_throw" = 2 + mod("ActiveTrapLimit", "BASE", 3), --"number_of_additional_traps_allowed" = 3 }, - quality = { - trapTriggerRadiusInc = 1, + qualityMods = { + mod("TrapTriggerRadius", "INC", 1), --"trap_trigger_radius_+%" = 1 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil), --"support_multithrow_damage_+%_final" }, levels = { - [1] = { damageMore = 0.6, }, - [2] = { damageMore = 0.61, }, - [3] = { damageMore = 0.62, }, - [4] = { damageMore = 0.63, }, - [5] = { damageMore = 0.64, }, - [6] = { damageMore = 0.65, }, - [7] = { damageMore = 0.66, }, - [8] = { damageMore = 0.67, }, - [9] = { damageMore = 0.68, }, - [10] = { damageMore = 0.69, }, - [11] = { damageMore = 0.7, }, - [12] = { damageMore = 0.71, }, - [13] = { damageMore = 0.72, }, - [14] = { damageMore = 0.73, }, - [15] = { damageMore = 0.74, }, - [16] = { damageMore = 0.75, }, - [17] = { damageMore = 0.76, }, - [18] = { damageMore = 0.77, }, - [19] = { damageMore = 0.78, }, - [20] = { damageMore = 0.79, }, - [21] = { damageMore = 0.8, }, - [22] = { damageMore = 0.81, }, - [23] = { damageMore = 0.82, }, - [24] = { damageMore = 0.83, }, - [25] = { damageMore = 0.84, }, - [26] = { damageMore = 0.85, }, - [27] = { damageMore = 0.86, }, - [28] = { damageMore = 0.87, }, - [29] = { damageMore = 0.88, }, - [30] = { damageMore = 0.89, }, - } + [1] = { -40, }, + [2] = { -39, }, + [3] = { -38, }, + [4] = { -37, }, + [5] = { -36, }, + [6] = { -35, }, + [7] = { -34, }, + [8] = { -33, }, + [9] = { -32, }, + [10] = { -31, }, + [11] = { -30, }, + [12] = { -29, }, + [13] = { -28, }, + [14] = { -27, }, + [15] = { -26, }, + [16] = { -25, }, + [17] = { -24, }, + [18] = { -23, }, + [19] = { -22, }, + [20] = { -21, }, + [21] = { -20, }, + [22] = { -19, }, + [23] = { -18, }, + [24] = { -17, }, + [25] = { -16, }, + [26] = { -15, }, + [27] = { -14, }, + [28] = { -13, }, + [29] = { -12, }, + [30] = { -11, }, + }, } gems["Physical Projectile Attack Damage"] = { + projectile = true, dexterity = true, support = true, - attack = true, - projectile = true, - require = "attack and projectile", - base = { - manaCostMore = 1.2, - projectile_attackSpeedMore = 0.9, + color = 2, + requireSkillTypes = { 48, 56, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 20), + mod("Speed", "MORE", -10, bit.bor(ModFlag.Attack, ModFlag.Projectile)), --"support_projectile_attack_speed_+%_final" = -10 }, - quality = { - physicalInc = 0.5, + qualityMods = { + mod("PhysicalDamage", "INC", 0.5), --"physical_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("PhysicalDamage", "MORE", nil, bit.bor(ModFlag.Attack, ModFlag.Projectile)), --"support_projectile_attack_physical_damage_+%_final" }, levels = { - [1] = { projectileAttack_physicalMore = 1.3, }, - [2] = { projectileAttack_physicalMore = 1.31, }, - [3] = { projectileAttack_physicalMore = 1.32, }, - [4] = { projectileAttack_physicalMore = 1.33, }, - [5] = { projectileAttack_physicalMore = 1.34, }, - [6] = { projectileAttack_physicalMore = 1.35, }, - [7] = { projectileAttack_physicalMore = 1.36, }, - [8] = { projectileAttack_physicalMore = 1.37, }, - [9] = { projectileAttack_physicalMore = 1.38, }, - [10] = { projectileAttack_physicalMore = 1.39, }, - [11] = { projectileAttack_physicalMore = 1.4, }, - [12] = { projectileAttack_physicalMore = 1.41, }, - [13] = { projectileAttack_physicalMore = 1.42, }, - [14] = { projectileAttack_physicalMore = 1.43, }, - [15] = { projectileAttack_physicalMore = 1.44, }, - [16] = { projectileAttack_physicalMore = 1.45, }, - [17] = { projectileAttack_physicalMore = 1.46, }, - [18] = { projectileAttack_physicalMore = 1.47, }, - [19] = { projectileAttack_physicalMore = 1.48, }, - [20] = { projectileAttack_physicalMore = 1.49, }, - [21] = { projectileAttack_physicalMore = 1.5, }, - [22] = { projectileAttack_physicalMore = 1.51, }, - [23] = { projectileAttack_physicalMore = 1.52, }, - [24] = { projectileAttack_physicalMore = 1.53, }, - [25] = { projectileAttack_physicalMore = 1.54, }, - [26] = { projectileAttack_physicalMore = 1.55, }, - [27] = { projectileAttack_physicalMore = 1.56, }, - [28] = { projectileAttack_physicalMore = 1.57, }, - [29] = { projectileAttack_physicalMore = 1.58, }, - [30] = { projectileAttack_physicalMore = 1.59, }, - } + [1] = { 30, }, + [2] = { 31, }, + [3] = { 32, }, + [4] = { 33, }, + [5] = { 34, }, + [6] = { 35, }, + [7] = { 36, }, + [8] = { 37, }, + [9] = { 38, }, + [10] = { 39, }, + [11] = { 40, }, + [12] = { 41, }, + [13] = { 42, }, + [14] = { 43, }, + [15] = { 44, }, + [16] = { 45, }, + [17] = { 46, }, + [18] = { 47, }, + [19] = { 48, }, + [20] = { 49, }, + [21] = { 50, }, + [22] = { 51, }, + [23] = { 52, }, + [24] = { 53, }, + [25] = { 54, }, + [26] = { 55, }, + [27] = { 56, }, + [28] = { 57, }, + [29] = { 58, }, + [30] = { 59, }, + }, } gems["Pierce"] = { dexterity = true, support = true, projectile = true, - require = "projectile", - base = { - manaCostMore = 1.3, - pierceChance = 50, + color = 2, + requireSkillTypes = { 3, 54, 56, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 30), + mod("PierceChance", "BASE", 50), --"pierce_%" = 50 }, - quality = { - projectile_damageInc = 0.5, + qualityMods = { + mod("Damage", "INC", 0.5, ModFlag.Projectile), --"projectile_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Projectile), --"support_pierce_projectile_damage_+%_final" }, levels = { - [1] = { projectile_damageMore = 1.1, }, - [2] = { projectile_damageMore = 1.1, }, - [3] = { projectile_damageMore = 1.11, }, - [4] = { projectile_damageMore = 1.11, }, - [5] = { projectile_damageMore = 1.12, }, - [6] = { projectile_damageMore = 1.12, }, - [7] = { projectile_damageMore = 1.13, }, - [8] = { projectile_damageMore = 1.13, }, - [9] = { projectile_damageMore = 1.14, }, - [10] = { projectile_damageMore = 1.14, }, - [11] = { projectile_damageMore = 1.15, }, - [12] = { projectile_damageMore = 1.15, }, - [13] = { projectile_damageMore = 1.16, }, - [14] = { projectile_damageMore = 1.16, }, - [15] = { projectile_damageMore = 1.17, }, - [16] = { projectile_damageMore = 1.17, }, - [17] = { projectile_damageMore = 1.18, }, - [18] = { projectile_damageMore = 1.18, }, - [19] = { projectile_damageMore = 1.19, }, - [20] = { projectile_damageMore = 1.19, }, - [21] = { projectile_damageMore = 1.2, }, - [22] = { projectile_damageMore = 1.2, }, - [23] = { projectile_damageMore = 1.21, }, - [24] = { projectile_damageMore = 1.21, }, - [25] = { projectile_damageMore = 1.22, }, - [26] = { projectile_damageMore = 1.22, }, - [27] = { projectile_damageMore = 1.23, }, - [28] = { projectile_damageMore = 1.23, }, - [29] = { projectile_damageMore = 1.24, }, - [30] = { projectile_damageMore = 1.24, }, - } + [1] = { 10, }, + [2] = { 10, }, + [3] = { 11, }, + [4] = { 11, }, + [5] = { 12, }, + [6] = { 12, }, + [7] = { 13, }, + [8] = { 13, }, + [9] = { 14, }, + [10] = { 14, }, + [11] = { 15, }, + [12] = { 15, }, + [13] = { 16, }, + [14] = { 16, }, + [15] = { 17, }, + [16] = { 17, }, + [17] = { 18, }, + [18] = { 18, }, + [19] = { 19, }, + [20] = { 19, }, + [21] = { 20, }, + [22] = { 20, }, + [23] = { 21, }, + [24] = { 21, }, + [25] = { 22, }, + [26] = { 22, }, + [27] = { 23, }, + [28] = { 23, }, + [29] = { 24, }, + [30] = { 24, }, + }, } gems["Point Blank"] = { + projectile = true, + attack = true, dexterity = true, support = true, - attack = true, - projectile = true, - require = "attack and projectile", - base = { - manaCostMore = 1.2, + color = 2, + requireSkillTypes = { 48, 56, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 20), + --"keystone_point_blank" = 1 }, - quality = { - projectile_damageInc = 0.5, + qualityMods = { + mod("Damage", "INC", 0.5, ModFlag.Projectile), --"projectile_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "INC", nil, ModFlag.Projectile), --"projectile_damage_+%" }, levels = { - [1] = { projectile_damageInc = 0, }, - [2] = { projectile_damageInc = 2, }, - [3] = { projectile_damageInc = 4, }, - [4] = { projectile_damageInc = 6, }, - [5] = { projectile_damageInc = 8, }, - [6] = { projectile_damageInc = 10, }, - [7] = { projectile_damageInc = 12, }, - [8] = { projectile_damageInc = 14, }, - [9] = { projectile_damageInc = 16, }, - [10] = { projectile_damageInc = 18, }, - [11] = { projectile_damageInc = 20, }, - [12] = { projectile_damageInc = 22, }, - [13] = { projectile_damageInc = 24, }, - [14] = { projectile_damageInc = 26, }, - [15] = { projectile_damageInc = 28, }, - [16] = { projectile_damageInc = 30, }, - [17] = { projectile_damageInc = 32, }, - [18] = { projectile_damageInc = 34, }, - [19] = { projectile_damageInc = 36, }, - [20] = { projectile_damageInc = 38, }, - [21] = { projectile_damageInc = 40, }, - [22] = { projectile_damageInc = 42, }, - [23] = { projectile_damageInc = 44, }, - [24] = { projectile_damageInc = 46, }, - [25] = { projectile_damageInc = 48, }, - [26] = { projectile_damageInc = 50, }, - [27] = { projectile_damageInc = 52, }, - [28] = { projectile_damageInc = 54, }, - [29] = { projectile_damageInc = 56, }, - [30] = { projectile_damageInc = 58, }, - } + [1] = { 0, }, + [2] = { 2, }, + [3] = { 4, }, + [4] = { 6, }, + [5] = { 8, }, + [6] = { 10, }, + [7] = { 12, }, + [8] = { 14, }, + [9] = { 16, }, + [10] = { 18, }, + [11] = { 20, }, + [12] = { 22, }, + [13] = { 24, }, + [14] = { 26, }, + [15] = { 28, }, + [16] = { 30, }, + [17] = { 32, }, + [18] = { 34, }, + [19] = { 36, }, + [20] = { 38, }, + [21] = { 40, }, + [22] = { 42, }, + [23] = { 44, }, + [24] = { 46, }, + [25] = { 48, }, + [26] = { 50, }, + [27] = { 52, }, + [28] = { 54, }, + [29] = { 56, }, + [30] = { 58, }, + }, } gems["Poison"] = { + chaos = true, dexterity = true, support = true, - chaos = true, - require = "hit", - base = { - manaCostMore = 1.35, - poisonChance = 100, + color = 2, + requireSkillTypes = { 10, 1, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 35), + mod("PoisonChance", "BASE", 100), --"global_poison_on_hit" = ? }, - quality = { - poison_durationInc = 0.5 + qualityMods = { + mod("Duration", "INC", 0.5, 0, KeywordFlag.Poison), --"base_poison_duration_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "INC", nil, 0, KeywordFlag.Poison), --"base_poison_damage_+%" }, levels = { - [1] = { poison_damageInc = 0, }, - [2] = { poison_damageInc = 2, }, - [3] = { poison_damageInc = 4, }, - [4] = { poison_damageInc = 6, }, - [5] = { poison_damageInc = 8, }, - [6] = { poison_damageInc = 10, }, - [7] = { poison_damageInc = 12, }, - [8] = { poison_damageInc = 14, }, - [9] = { poison_damageInc = 16, }, - [10] = { poison_damageInc = 18, }, - [11] = { poison_damageInc = 20, }, - [12] = { poison_damageInc = 22, }, - [13] = { poison_damageInc = 24, }, - [14] = { poison_damageInc = 26, }, - [15] = { poison_damageInc = 28, }, - [16] = { poison_damageInc = 30, }, - [17] = { poison_damageInc = 32, }, - [18] = { poison_damageInc = 34, }, - [19] = { poison_damageInc = 36, }, - [20] = { poison_damageInc = 38, }, - [21] = { poison_damageInc = 40, }, - [22] = { poison_damageInc = 42, }, - [23] = { poison_damageInc = 44, }, - [24] = { poison_damageInc = 46, }, - [25] = { poison_damageInc = 48, }, - [26] = { poison_damageInc = 50, }, - [27] = { poison_damageInc = 52, }, - [28] = { poison_damageInc = 54, }, - [29] = { poison_damageInc = 56, }, - [30] = { poison_damageInc = 58, }, - } + [1] = { 0, }, + [2] = { 2, }, + [3] = { 4, }, + [4] = { 6, }, + [5] = { 8, }, + [6] = { 10, }, + [7] = { 12, }, + [8] = { 14, }, + [9] = { 16, }, + [10] = { 18, }, + [11] = { 20, }, + [12] = { 22, }, + [13] = { 24, }, + [14] = { 26, }, + [15] = { 28, }, + [16] = { 30, }, + [17] = { 32, }, + [18] = { 34, }, + [19] = { 36, }, + [20] = { 38, }, + [21] = { 40, }, + [22] = { 42, }, + [23] = { 44, }, + [24] = { 46, }, + [25] = { 48, }, + [26] = { 50, }, + [27] = { 52, }, + [28] = { 54, }, + [29] = { 56, }, + [30] = { 58, }, + }, } gems["Rapid Decay"] = { dexterity = true, support = true, duration = true, - require = "duration", - base = { - manaCostMore = 1.25, - durationInc = -15, + color = 2, + requireSkillTypes = { 12, 55, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 25), + mod("Duration", "INC", -15), --"skill_effect_duration_+%" = -15 }, - quality = { - dot_damageInc = 0.5, + qualityMods = { + mod("Damage", "INC", 0.5, ModFlag.Dot), --"damage_over_time_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Dot), --"support_rapid_decay_damage_over_time_+%_final" }, levels = { - [1] = { dot_damageMore = 1.2, }, - [2] = { dot_damageMore = 1.21, }, - [3] = { dot_damageMore = 1.22, }, - [4] = { dot_damageMore = 1.23, }, - [5] = { dot_damageMore = 1.24, }, - [6] = { dot_damageMore = 1.25, }, - [7] = { dot_damageMore = 1.26, }, - [8] = { dot_damageMore = 1.27, }, - [9] = { dot_damageMore = 1.28, }, - [10] = { dot_damageMore = 1.29, }, - [11] = { dot_damageMore = 1.3, }, - [12] = { dot_damageMore = 1.31, }, - [13] = { dot_damageMore = 1.32, }, - [14] = { dot_damageMore = 1.33, }, - [15] = { dot_damageMore = 1.34, }, - [16] = { dot_damageMore = 1.35, }, - [17] = { dot_damageMore = 1.36, }, - [18] = { dot_damageMore = 1.37, }, - [19] = { dot_damageMore = 1.38, }, - [20] = { dot_damageMore = 1.39, }, - [21] = { dot_damageMore = 1.4, }, - [22] = { dot_damageMore = 1.41, }, - [23] = { dot_damageMore = 1.42, }, - [24] = { dot_damageMore = 1.43, }, - [25] = { dot_damageMore = 1.44, }, - [26] = { dot_damageMore = 1.45, }, - [27] = { dot_damageMore = 1.46, }, - [28] = { dot_damageMore = 1.47, }, - [29] = { dot_damageMore = 1.48, }, - [30] = { dot_damageMore = 1.49, }, - } + [1] = { 20, }, + [2] = { 21, }, + [3] = { 22, }, + [4] = { 23, }, + [5] = { 24, }, + [6] = { 25, }, + [7] = { 26, }, + [8] = { 27, }, + [9] = { 28, }, + [10] = { 29, }, + [11] = { 30, }, + [12] = { 31, }, + [13] = { 32, }, + [14] = { 33, }, + [15] = { 34, }, + [16] = { 35, }, + [17] = { 36, }, + [18] = { 37, }, + [19] = { 38, }, + [20] = { 39, }, + [21] = { 40, }, + [22] = { 41, }, + [23] = { 42, }, + [24] = { 43, }, + [25] = { 44, }, + [26] = { 45, }, + [27] = { 46, }, + [28] = { 47, }, + [29] = { 48, }, + [30] = { 49, }, + }, } gems["Slower Projectiles"] = { dexterity = true, support = true, projectile = true, - require = "projectile", - base = { - manaCostMore = 1.4, + color = 2, + requireSkillTypes = { 3, 14, 54, 56, }, + addSkillTypes = { }, + excludeSkillTypes = { 51, }, + baseMods = { + mod("ManaCost", "MORE", 40), }, - quality = { - projectile_damageInc = 0.5, + qualityMods = { + mod("Damage", "INC", 0.5, ModFlag.Projectile), --"projectile_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("ProjectileSpeed", "MORE", nil), --"support_slower_projectiles_projectile_speed_+%_final" + [2] = mod("Damage", "MORE", nil, ModFlag.Projectile), --"support_slower_projectiles_damage_+%_final" }, levels = { - [1] = { projectileSpeedMore = 0.7, projectile_damageMore = 1.2, }, - [2] = { projectileSpeedMore = 0.69, projectile_damageMore = 1.2, }, - [3] = { projectileSpeedMore = 0.68, projectile_damageMore = 1.21, }, - [4] = { projectileSpeedMore = 0.67, projectile_damageMore = 1.21, }, - [5] = { projectileSpeedMore = 0.66, projectile_damageMore = 1.22, }, - [6] = { projectileSpeedMore = 0.65, projectile_damageMore = 1.22, }, - [7] = { projectileSpeedMore = 0.64, projectile_damageMore = 1.23, }, - [8] = { projectileSpeedMore = 0.63, projectile_damageMore = 1.23, }, - [9] = { projectileSpeedMore = 0.62, projectile_damageMore = 1.24, }, - [10] = { projectileSpeedMore = 0.61, projectile_damageMore = 1.24, }, - [11] = { projectileSpeedMore = 0.6, projectile_damageMore = 1.25, }, - [12] = { projectileSpeedMore = 0.59, projectile_damageMore = 1.25, }, - [13] = { projectileSpeedMore = 0.58, projectile_damageMore = 1.26, }, - [14] = { projectileSpeedMore = 0.57, projectile_damageMore = 1.26, }, - [15] = { projectileSpeedMore = 0.56, projectile_damageMore = 1.27, }, - [16] = { projectileSpeedMore = 0.55, projectile_damageMore = 1.27, }, - [17] = { projectileSpeedMore = 0.54, projectile_damageMore = 1.28, }, - [18] = { projectileSpeedMore = 0.53, projectile_damageMore = 1.28, }, - [19] = { projectileSpeedMore = 0.52, projectile_damageMore = 1.29, }, - [20] = { projectileSpeedMore = 0.51, projectile_damageMore = 1.29, }, - [21] = { projectileSpeedMore = 0.5, projectile_damageMore = 1.3, }, - [22] = { projectileSpeedMore = 0.49, projectile_damageMore = 1.3, }, - [23] = { projectileSpeedMore = 0.48, projectile_damageMore = 1.31, }, - [24] = { projectileSpeedMore = 0.47, projectile_damageMore = 1.31, }, - [25] = { projectileSpeedMore = 0.46, projectile_damageMore = 1.32, }, - [26] = { projectileSpeedMore = 0.45, projectile_damageMore = 1.32, }, - [27] = { projectileSpeedMore = 0.44, projectile_damageMore = 1.33, }, - [28] = { projectileSpeedMore = 0.43, projectile_damageMore = 1.33, }, - [29] = { projectileSpeedMore = 0.42, projectile_damageMore = 1.34, }, - [30] = { projectileSpeedMore = 0.41, projectile_damageMore = 1.34, }, - } + [1] = { -30, 20, }, + [2] = { -31, 20, }, + [3] = { -32, 21, }, + [4] = { -33, 21, }, + [5] = { -34, 22, }, + [6] = { -35, 22, }, + [7] = { -36, 23, }, + [8] = { -37, 23, }, + [9] = { -38, 24, }, + [10] = { -39, 24, }, + [11] = { -40, 25, }, + [12] = { -41, 25, }, + [13] = { -42, 26, }, + [14] = { -43, 26, }, + [15] = { -44, 27, }, + [16] = { -45, 27, }, + [17] = { -46, 28, }, + [18] = { -47, 28, }, + [19] = { -48, 29, }, + [20] = { -49, 29, }, + [21] = { -50, 30, }, + [22] = { -51, 30, }, + [23] = { -52, 31, }, + [24] = { -53, 31, }, + [25] = { -54, 32, }, + [26] = { -55, 32, }, + [27] = { -56, 33, }, + [28] = { -57, 33, }, + [29] = { -58, 34, }, + [30] = { -59, 34, }, + }, } gems["Trap"] = { dexterity = true, support = true, trap = true, - require = "spell or projectile", + duration = true, addFlags = { trap = true, duration = true, - showAverage = true, }, - base = { - manaCostMore = 1.4, - skill_trapCooldown = 4, + color = 2, + requireSkillTypes = { 17, }, + addSkillTypes = { 12, 37, }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 40), + --"is_trap" = 1 + --"base_trap_duration" = 16000 + --"trap_override_pvp_scaling_time_ms" = 900 + --"base_skill_is_trapped" = ? + --"disable_skill_if_melee_attack" = ? + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? + skill("trapCooldown", 4), }, - quality = { - trapThrowingSpeedInc = 0.5, + qualityMods = { + mod("TrapThrowingSpeed", "INC", 0.5), --"trap_throwing_speed_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Hit, KeywordFlag.Trap), --"support_trap_hit_damage_+%_final" }, levels = { - [1] = { trapHit_damageMore = 1.2, }, - [2] = { trapHit_damageMore = 1.21, }, - [3] = { trapHit_damageMore = 1.22, }, - [4] = { trapHit_damageMore = 1.23, }, - [5] = { trapHit_damageMore = 1.24, }, - [6] = { trapHit_damageMore = 1.25, }, - [7] = { trapHit_damageMore = 1.26, }, - [8] = { trapHit_damageMore = 1.27, }, - [9] = { trapHit_damageMore = 1.28, }, - [10] = { trapHit_damageMore = 1.29, }, - [11] = { trapHit_damageMore = 1.3, }, - [12] = { trapHit_damageMore = 1.31, }, - [13] = { trapHit_damageMore = 1.32, }, - [14] = { trapHit_damageMore = 1.33, }, - [15] = { trapHit_damageMore = 1.34, }, - [16] = { trapHit_damageMore = 1.35, }, - [17] = { trapHit_damageMore = 1.36, }, - [18] = { trapHit_damageMore = 1.37, }, - [19] = { trapHit_damageMore = 1.38, }, - [20] = { trapHit_damageMore = 1.39, }, - [21] = { trapHit_damageMore = 1.4, }, - [22] = { trapHit_damageMore = 1.41, }, - [23] = { trapHit_damageMore = 1.42, }, - [24] = { trapHit_damageMore = 1.43, }, - [25] = { trapHit_damageMore = 1.44, }, - [26] = { trapHit_damageMore = 1.45, }, - [27] = { trapHit_damageMore = 1.46, }, - [28] = { trapHit_damageMore = 1.47, }, - [29] = { trapHit_damageMore = 1.48, }, - [30] = { trapHit_damageMore = 1.49, }, - } + [1] = { 20, }, + [2] = { 21, }, + [3] = { 22, }, + [4] = { 23, }, + [5] = { 24, }, + [6] = { 25, }, + [7] = { 26, }, + [8] = { 27, }, + [9] = { 28, }, + [10] = { 29, }, + [11] = { 30, }, + [12] = { 31, }, + [13] = { 32, }, + [14] = { 33, }, + [15] = { 34, }, + [16] = { 35, }, + [17] = { 36, }, + [18] = { 37, }, + [19] = { 38, }, + [20] = { 39, }, + [21] = { 40, }, + [22] = { 41, }, + [23] = { 42, }, + [24] = { 43, }, + [25] = { 44, }, + [26] = { 45, }, + [27] = { 46, }, + [28] = { 47, }, + [29] = { 48, }, + [30] = { 49, }, + }, } gems["Trap Cooldown"] = { + trap = true, dexterity = true, support = true, - trap = true, - require = "trap", - base = { - manaCostMore = 1.1, + color = 2, + requireSkillTypes = { 37, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 10), }, - quality = { - trap_damageInc = 0.5, + qualityMods = { + mod("Damage", "INC", 0.5, 0, KeywordFlag.Trap), --"trap_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("TrapCooldownRecovery", "INC", nil), --"placing_traps_cooldown_recovery_+%" }, levels = { - [1] = { trapCooldownRecoveryInc = 30, }, - [2] = { trapCooldownRecoveryInc = 31, }, - [3] = { trapCooldownRecoveryInc = 32, }, - [4] = { trapCooldownRecoveryInc = 33, }, - [5] = { trapCooldownRecoveryInc = 34, }, - [6] = { trapCooldownRecoveryInc = 35, }, - [7] = { trapCooldownRecoveryInc = 36, }, - [8] = { trapCooldownRecoveryInc = 37, }, - [9] = { trapCooldownRecoveryInc = 38, }, - [10] = { trapCooldownRecoveryInc = 39, }, - [11] = { trapCooldownRecoveryInc = 40, }, - [12] = { trapCooldownRecoveryInc = 41, }, - [13] = { trapCooldownRecoveryInc = 42, }, - [14] = { trapCooldownRecoveryInc = 43, }, - [15] = { trapCooldownRecoveryInc = 44, }, - [16] = { trapCooldownRecoveryInc = 45, }, - [17] = { trapCooldownRecoveryInc = 46, }, - [18] = { trapCooldownRecoveryInc = 47, }, - [19] = { trapCooldownRecoveryInc = 48, }, - [20] = { trapCooldownRecoveryInc = 49, }, - [21] = { trapCooldownRecoveryInc = 50, }, - [22] = { trapCooldownRecoveryInc = 51, }, - [23] = { trapCooldownRecoveryInc = 52, }, - [24] = { trapCooldownRecoveryInc = 53, }, - [25] = { trapCooldownRecoveryInc = 54, }, - [26] = { trapCooldownRecoveryInc = 55, }, - [27] = { trapCooldownRecoveryInc = 56, }, - [28] = { trapCooldownRecoveryInc = 57, }, - [29] = { trapCooldownRecoveryInc = 58, }, - [30] = { trapCooldownRecoveryInc = 59, }, - } + [1] = { 30, }, + [2] = { 31, }, + [3] = { 32, }, + [4] = { 33, }, + [5] = { 34, }, + [6] = { 35, }, + [7] = { 36, }, + [8] = { 37, }, + [9] = { 38, }, + [10] = { 39, }, + [11] = { 40, }, + [12] = { 41, }, + [13] = { 42, }, + [14] = { 43, }, + [15] = { 44, }, + [16] = { 45, }, + [17] = { 46, }, + [18] = { 47, }, + [19] = { 48, }, + [20] = { 49, }, + [21] = { 50, }, + [22] = { 51, }, + [23] = { 52, }, + [24] = { 53, }, + [25] = { 54, }, + [26] = { 55, }, + [27] = { 56, }, + [28] = { 57, }, + [29] = { 58, }, + [30] = { 59, }, + }, } gems["Trap and Mine Damage"] = { dexterity = true, support = true, trap = true, mine = true, - require = "trap or mine", - base = { - manaCostMore = 1.3, - trapThrowingSpeedMore = 0.9, - mineLayingSpeedMore = 0.9, + color = 2, + requireSkillTypes = { 37, 41, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 30), + mod("TrapThrowingSpeed", "INC", -10), --"trap_throwing_speed_+%" = -10 + mod("MineLayingSpeed", "MORE", -10), --"mine_laying_speed_+%" = -10 }, - quality = { - damageInc = 0.5, + qualityMods = { + mod("Damage", "INC", 0.5, 0, 0, nil), --"damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, 0, bit.bor(KeywordFlag.Trap, KeywordFlag.Mine)), --"support_trap_and_mine_damage_+%_final" }, levels = { - [1] = { damageMore = 1.2, }, - [2] = { damageMore = 1.21, }, - [3] = { damageMore = 1.22, }, - [4] = { damageMore = 1.23, }, - [5] = { damageMore = 1.24, }, - [6] = { damageMore = 1.25, }, - [7] = { damageMore = 1.26, }, - [8] = { damageMore = 1.27, }, - [9] = { damageMore = 1.28, }, - [10] = { damageMore = 1.29, }, - [11] = { damageMore = 1.3, }, - [12] = { damageMore = 1.31, }, - [13] = { damageMore = 1.32, }, - [14] = { damageMore = 1.33, }, - [15] = { damageMore = 1.34, }, - [16] = { damageMore = 1.35, }, - [17] = { damageMore = 1.36, }, - [18] = { damageMore = 1.37, }, - [19] = { damageMore = 1.38, }, - [20] = { damageMore = 1.39, }, - [21] = { damageMore = 1.4, }, - [22] = { damageMore = 1.41, }, - [23] = { damageMore = 1.42, }, - [24] = { damageMore = 1.43, }, - [25] = { damageMore = 1.44, }, - [26] = { damageMore = 1.45, }, - [27] = { damageMore = 1.46, }, - [28] = { damageMore = 1.47, }, - [29] = { damageMore = 1.48, }, - [30] = { damageMore = 1.49, }, - } + [1] = { 20, }, + [2] = { 21, }, + [3] = { 22, }, + [4] = { 23, }, + [5] = { 24, }, + [6] = { 25, }, + [7] = { 26, }, + [8] = { 27, }, + [9] = { 28, }, + [10] = { 29, }, + [11] = { 30, }, + [12] = { 31, }, + [13] = { 32, }, + [14] = { 33, }, + [15] = { 34, }, + [16] = { 35, }, + [17] = { 36, }, + [18] = { 37, }, + [19] = { 38, }, + [20] = { 39, }, + [21] = { 40, }, + [22] = { 41, }, + [23] = { 42, }, + [24] = { 43, }, + [25] = { 44, }, + [26] = { 45, }, + [27] = { 46, }, + [28] = { 47, }, + [29] = { 48, }, + [30] = { 49, }, + }, } gems["Void Manipulation"] = { + chaos = true, dexterity = true, support = true, - chaos = true, - require = "damage", - base = { - manaCostMore = 1.2, - elementalInc = -25, + color = 2, + requireSkillTypes = { 10, 1, 40, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 20), + mod("ElementalDamage", "INC", -25), --"elemental_damage_+%" = -25 }, - quality = { - chaosInc = 0.5, + qualityMods = { + mod("ChaosDamage", "INC", 0.5), --"chaos_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("ChaosDamage", "MORE", nil), --"support_void_manipulation_chaos_damage_+%_final" }, levels = { - [1] = { chaosMore = 1.2, }, - [2] = { chaosMore = 1.21, }, - [3] = { chaosMore = 1.22, }, - [4] = { chaosMore = 1.23, }, - [5] = { chaosMore = 1.24, }, - [6] = { chaosMore = 1.25, }, - [7] = { chaosMore = 1.26, }, - [8] = { chaosMore = 1.27, }, - [9] = { chaosMore = 1.28, }, - [10] = { chaosMore = 1.29, }, - [11] = { chaosMore = 1.3, }, - [12] = { chaosMore = 1.31, }, - [13] = { chaosMore = 1.32, }, - [14] = { chaosMore = 1.33, }, - [15] = { chaosMore = 1.34, }, - [16] = { chaosMore = 1.35, }, - [17] = { chaosMore = 1.36, }, - [18] = { chaosMore = 1.37, }, - [19] = { chaosMore = 1.38, }, - [20] = { chaosMore = 1.39, }, - [21] = { chaosMore = 1.4, }, - [22] = { chaosMore = 1.41, }, - [23] = { chaosMore = 1.42, }, - [24] = { chaosMore = 1.43, }, - [25] = { chaosMore = 1.44, }, - [26] = { chaosMore = 1.45, }, - [27] = { chaosMore = 1.46, }, - [28] = { chaosMore = 1.47, }, - [29] = { chaosMore = 1.48, }, - [30] = { chaosMore = 1.49, }, - } -} \ No newline at end of file + [1] = { 20, }, + [2] = { 21, }, + [3] = { 22, }, + [4] = { 23, }, + [5] = { 24, }, + [6] = { 25, }, + [7] = { 26, }, + [8] = { 27, }, + [9] = { 28, }, + [10] = { 29, }, + [11] = { 30, }, + [12] = { 31, }, + [13] = { 32, }, + [14] = { 33, }, + [15] = { 34, }, + [16] = { 35, }, + [17] = { 36, }, + [18] = { 37, }, + [19] = { 38, }, + [20] = { 39, }, + [21] = { 40, }, + [22] = { 41, }, + [23] = { 42, }, + [24] = { 43, }, + [25] = { 44, }, + [26] = { 45, }, + [27] = { 46, }, + [28] = { 47, }, + [29] = { 48, }, + [30] = { 49, }, + }, +} diff --git a/Data/Gems/sup_int.lua b/Data/Gems/sup_int.lua index e78dee42..c4e829db 100644 --- a/Data/Gems/sup_int.lua +++ b/Data/Gems/sup_int.lua @@ -1,1028 +1,1197 @@ -- Path of Building -- --- Intelligence support gems +-- Active Strength skills -- Skill gem data (c) Grinding Gear Games -- -local gems = ... +local gems, mod, flag, skill = ... gems["Added Chaos Damage"] = { + chaos = true, intelligence = true, support = true, - chaos = true, - require = "hit", - base = { - manaCostMore = 1.3, + color = 3, + requireSkillTypes = { 10, 1, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 30), }, - quality = { - chaosInc = 0.5, + qualityMods = { + mod("ChaosDamage", "INC", 0.5), --"chaos_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("ChaosMin", "BASE", nil), --"global_minimum_added_chaos_damage" + [2] = mod("ChaosMax", "BASE", nil), --"global_maximum_added_chaos_damage" }, levels = { - [1] = { chaosMin = 18, chaosMax = 26, }, - [2] = { chaosMin = 21, chaosMax = 32, }, - [3] = { chaosMin = 24, chaosMax = 36, }, - [4] = { chaosMin = 27, chaosMax = 41, }, - [5] = { chaosMin = 31, chaosMax = 46, }, - [6] = { chaosMin = 35, chaosMax = 52, }, - [7] = { chaosMin = 39, chaosMax = 59, }, - [8] = { chaosMin = 44, chaosMax = 67, }, - [9] = { chaosMin = 50, chaosMax = 75, }, - [10] = { chaosMin = 56, chaosMax = 84, }, - [11] = { chaosMin = 63, chaosMax = 94, }, - [12] = { chaosMin = 71, chaosMax = 106, }, - [13] = { chaosMin = 79, chaosMax = 118, }, - [14] = { chaosMin = 88, chaosMax = 132, }, - [15] = { chaosMin = 99, chaosMax = 148, }, - [16] = { chaosMin = 110, chaosMax = 165, }, - [17] = { chaosMin = 123, chaosMax = 185, }, - [18] = { chaosMin = 137, chaosMax = 206, }, - [19] = { chaosMin = 153, chaosMax = 229, }, - [20] = { chaosMin = 170, chaosMax = 256, }, - [21] = { chaosMin = 190, chaosMax = 284, }, - [22] = { chaosMin = 211, chaosMax = 316, }, - [23] = { chaosMin = 234, chaosMax = 352, }, - [24] = { chaosMin = 260, chaosMax = 391, }, - [25] = { chaosMin = 289, chaosMax = 434, }, - [26] = { chaosMin = 321, chaosMax = 482, }, - [27] = { chaosMin = 356, chaosMax = 534, }, - [28] = { chaosMin = 395, chaosMax = 592, }, - [29] = { chaosMin = 438, chaosMax = 657, }, - [30] = { chaosMin = 485, chaosMax = 728, }, - } + [1] = { 18, 26, }, + [2] = { 21, 32, }, + [3] = { 24, 36, }, + [4] = { 27, 41, }, + [5] = { 31, 46, }, + [6] = { 35, 52, }, + [7] = { 39, 59, }, + [8] = { 44, 67, }, + [9] = { 50, 75, }, + [10] = { 56, 84, }, + [11] = { 63, 94, }, + [12] = { 71, 106, }, + [13] = { 79, 118, }, + [14] = { 88, 132, }, + [15] = { 99, 148, }, + [16] = { 110, 165, }, + [17] = { 123, 185, }, + [18] = { 137, 206, }, + [19] = { 153, 229, }, + [20] = { 170, 256, }, + [21] = { 190, 284, }, + [22] = { 211, 316, }, + [23] = { 234, 352, }, + [24] = { 260, 391, }, + [25] = { 289, 434, }, + [26] = { 321, 482, }, + [27] = { 356, 534, }, + [28] = { 395, 592, }, + [29] = { 438, 657, }, + [30] = { 485, 728, }, + }, } gems["Added Lightning Damage"] = { + lightning = true, intelligence = true, support = true, - lightning = true, - require = "hit", - base = { - manaCostMore = 1.3, + color = 3, + requireSkillTypes = { 1, 10, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 30), }, - quality = { - lightningInc = 0.5, + qualityMods = { + mod("LightningDamage", "INC", 0.5), --"lightning_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("LightningMin", "BASE", nil), --"global_minimum_added_lightning_damage" + [2] = mod("LightningMax", "BASE", nil), --"global_maximum_added_lightning_damage" }, levels = { - [1] = { lightningMin = 1, lightningMax = 8, }, - [2] = { lightningMin = 1, lightningMax = 9, }, - [3] = { lightningMin = 1, lightningMax = 12, }, - [4] = { lightningMin = 1, lightningMax = 16, }, - [5] = { lightningMin = 1, lightningMax = 22, }, - [6] = { lightningMin = 1, lightningMax = 28, }, - [7] = { lightningMin = 2, lightningMax = 36, }, - [8] = { lightningMin = 2, lightningMax = 47, }, - [9] = { lightningMin = 3, lightningMax = 59, }, - [10] = { lightningMin = 4, lightningMax = 70, }, - [11] = { lightningMin = 4, lightningMax = 83, }, - [12] = { lightningMin = 5, lightningMax = 98, }, - [13] = { lightningMin = 6, lightningMax = 116, }, - [14] = { lightningMin = 7, lightningMax = 136, }, - [15] = { lightningMin = 8, lightningMax = 159, }, - [16] = { lightningMin = 10, lightningMax = 186, }, - [17] = { lightningMin = 11, lightningMax = 218, }, - [18] = { lightningMin = 13, lightningMax = 253, }, - [19] = { lightningMin = 16, lightningMax = 295, }, - [20] = { lightningMin = 18, lightningMax = 342, }, - [21] = { lightningMin = 20, lightningMax = 378, }, - [22] = { lightningMin = 22, lightningMax = 417, }, - [23] = { lightningMin = 24, lightningMax = 459, }, - [24] = { lightningMin = 27, lightningMax = 506, }, - [25] = { lightningMin = 29, lightningMax = 557, }, - [26] = { lightningMin = 32, lightningMax = 614, }, - [27] = { lightningMin = 36, lightningMax = 675, }, - [28] = { lightningMin = 39, lightningMax = 743, }, - [29] = { lightningMin = 43, lightningMax = 816, }, - [30] = { lightningMin = 47, lightningMax = 897, }, - } + [1] = { 1, 8, }, + [2] = { 1, 9, }, + [3] = { 1, 12, }, + [4] = { 1, 16, }, + [5] = { 1, 22, }, + [6] = { 1, 28, }, + [7] = { 2, 36, }, + [8] = { 2, 47, }, + [9] = { 3, 59, }, + [10] = { 4, 70, }, + [11] = { 4, 83, }, + [12] = { 5, 98, }, + [13] = { 6, 116, }, + [14] = { 7, 136, }, + [15] = { 8, 159, }, + [16] = { 10, 186, }, + [17] = { 11, 218, }, + [18] = { 13, 253, }, + [19] = { 16, 295, }, + [20] = { 18, 342, }, + [21] = { 20, 378, }, + [22] = { 22, 417, }, + [23] = { 24, 459, }, + [24] = { 27, 506, }, + [25] = { 29, 557, }, + [26] = { 32, 614, }, + [27] = { 36, 675, }, + [28] = { 39, 743, }, + [29] = { 43, 816, }, + [30] = { 47, 897, }, + }, } gems["Blasphemy"] = { intelligence = true, support = true, curse = true, aura = true, - require = "curse", - base = { - skill_manaReservedPercent = 35, + color = 3, + requireSkillTypes = { 32, }, + addSkillTypes = { 15, 16, 31, 44, }, + excludeSkillTypes = { }, + baseMods = { + skill("manaCostOverride", 35), + --"curse_apply_as_aura" = ? }, - quality = { - curseEffectInc = 0.5, + qualityMods = { + mod("CurseEffect", "INC", 0.5), --"curse_effect_+%" = 0.5 + }, + levelMods = { + [1] = mod("AreaRadius", "INC", nil, 0, KeywordFlag.Curse), --"curse_area_of_effect_+%" }, levels = { - [1] = { curse_aoeRadiusInc = 0, }, - [2] = { curse_aoeRadiusInc = 2, }, - [3] = { curse_aoeRadiusInc = 4, }, - [4] = { curse_aoeRadiusInc = 6, }, - [5] = { curse_aoeRadiusInc = 8, }, - [6] = { curse_aoeRadiusInc = 10, }, - [7] = { curse_aoeRadiusInc = 12, }, - [8] = { curse_aoeRadiusInc = 14, }, - [9] = { curse_aoeRadiusInc = 16, }, - [10] = { curse_aoeRadiusInc = 18, }, - [11] = { curse_aoeRadiusInc = 20, }, - [12] = { curse_aoeRadiusInc = 22, }, - [13] = { curse_aoeRadiusInc = 24, }, - [14] = { curse_aoeRadiusInc = 26, }, - [15] = { curse_aoeRadiusInc = 28, }, - [16] = { curse_aoeRadiusInc = 30, }, - [17] = { curse_aoeRadiusInc = 32, }, - [18] = { curse_aoeRadiusInc = 34, }, - [19] = { curse_aoeRadiusInc = 36, }, - [20] = { curse_aoeRadiusInc = 38, }, - [21] = { curse_aoeRadiusInc = 40, }, - [22] = { curse_aoeRadiusInc = 42, }, - [23] = { curse_aoeRadiusInc = 44, }, - [24] = { curse_aoeRadiusInc = 46, }, - [25] = { curse_aoeRadiusInc = 48, }, - [26] = { curse_aoeRadiusInc = 50, }, - [27] = { curse_aoeRadiusInc = 52, }, - [28] = { curse_aoeRadiusInc = 54, }, - [29] = { curse_aoeRadiusInc = 56, }, - [30] = { curse_aoeRadiusInc = 58, }, - } + [1] = { 0, }, + [2] = { 2, }, + [3] = { 4, }, + [4] = { 6, }, + [5] = { 8, }, + [6] = { 10, }, + [7] = { 12, }, + [8] = { 14, }, + [9] = { 16, }, + [10] = { 18, }, + [11] = { 20, }, + [12] = { 22, }, + [13] = { 24, }, + [14] = { 26, }, + [15] = { 28, }, + [16] = { 30, }, + [17] = { 32, }, + [18] = { 34, }, + [19] = { 36, }, + [20] = { 38, }, + [21] = { 40, }, + [22] = { 42, }, + [23] = { 44, }, + [24] = { 46, }, + [25] = { 48, }, + [26] = { 50, }, + [27] = { 52, }, + [28] = { 54, }, + [29] = { 56, }, + [30] = { 58, }, + }, } gems["Cast when Stunned"] = { intelligence = true, support = true, spell = true, trigger = true, - require = "spell", - base = { + color = 3, + requireSkillTypes = { 36, }, + addSkillTypes = { 42, }, + excludeSkillTypes = { 37, 41, 30, 44, }, + baseMods = { + --"spell_uncastable_if_triggerable" = ? + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? }, - quality = { - damageInc = 0.5, + qualityMods = { + mod("Damage", "INC", 0.5, 0, 0, nil), --"damage_+%" = 0.5 + }, + levelMods = { + --[1] = "cast_on_stunned_%" }, levels = { - [1] = { }, - [2] = { }, - [3] = { }, - [4] = { }, - [5] = { }, - [6] = { }, - [7] = { }, - [8] = { }, - [9] = { }, - [10] = { }, - [11] = { }, - [12] = { }, - [13] = { }, - [14] = { }, - [15] = { }, - [16] = { }, - [17] = { }, - [18] = { }, - [19] = { }, - [20] = { }, - [21] = { }, - [22] = { }, - [23] = { }, - [24] = { }, - [25] = { }, - [26] = { }, - [27] = { }, - [28] = { }, - [29] = { }, - [30] = { }, - } + [1] = { 50, }, + [2] = { 51, }, + [3] = { 52, }, + [4] = { 53, }, + [5] = { 54, }, + [6] = { 55, }, + [7] = { 56, }, + [8] = { 57, }, + [9] = { 58, }, + [10] = { 59, }, + [11] = { 60, }, + [12] = { 61, }, + [13] = { 62, }, + [14] = { 63, }, + [15] = { 64, }, + [16] = { 65, }, + [17] = { 66, }, + [18] = { 67, }, + [19] = { 68, }, + [20] = { 69, }, + [21] = { 70, }, + [22] = { 71, }, + [23] = { 72, }, + [24] = { 73, }, + [25] = { 74, }, + [26] = { 75, }, + [27] = { 76, }, + [28] = { 77, }, + [29] = { 78, }, + [30] = { 79, }, + }, } gems["Chance to Ignite"] = { + fire = true, intelligence = true, support = true, - fire = true, - require = "hit", - base = { - manaCostMore = 1.1, + color = 3, + requireSkillTypes = { 10, 1, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 10), }, - quality = { - dot_fireInc = 0.5, + qualityMods = { + mod("FireDamage", "INC", 0.5, ModFlag.Dot), --"burn_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("EnemyIgniteChance", "BASE", nil), --"base_chance_to_ignite_%" }, levels = { - [1] = { igniteChance = 30, }, - [2] = { igniteChance = 31, }, - [3] = { igniteChance = 32, }, - [4] = { igniteChance = 33, }, - [5] = { igniteChance = 34, }, - [6] = { igniteChance = 35, }, - [7] = { igniteChance = 36, }, - [8] = { igniteChance = 37, }, - [9] = { igniteChance = 38, }, - [10] = { igniteChance = 39, }, - [11] = { igniteChance = 40, }, - [12] = { igniteChance = 41, }, - [13] = { igniteChance = 42, }, - [14] = { igniteChance = 43, }, - [15] = { igniteChance = 44, }, - [16] = { igniteChance = 45, }, - [17] = { igniteChance = 46, }, - [18] = { igniteChance = 47, }, - [19] = { igniteChance = 48, }, - [20] = { igniteChance = 49, }, - [21] = { igniteChance = 50, }, - [22] = { igniteChance = 51, }, - [23] = { igniteChance = 52, }, - [24] = { igniteChance = 53, }, - [25] = { igniteChance = 54, }, - [26] = { igniteChance = 55, }, - [27] = { igniteChance = 56, }, - [28] = { igniteChance = 57, }, - [29] = { igniteChance = 58, }, - [30] = { igniteChance = 59, }, - } + [1] = { 30, }, + [2] = { 31, }, + [3] = { 32, }, + [4] = { 33, }, + [5] = { 34, }, + [6] = { 35, }, + [7] = { 36, }, + [8] = { 37, }, + [9] = { 38, }, + [10] = { 39, }, + [11] = { 40, }, + [12] = { 41, }, + [13] = { 42, }, + [14] = { 43, }, + [15] = { 44, }, + [16] = { 45, }, + [17] = { 46, }, + [18] = { 47, }, + [19] = { 48, }, + [20] = { 49, }, + [21] = { 50, }, + [22] = { 51, }, + [23] = { 52, }, + [24] = { 53, }, + [25] = { 54, }, + [26] = { 55, }, + [27] = { 56, }, + [28] = { 57, }, + [29] = { 58, }, + [30] = { 59, }, + }, } gems["Concentrated Effect"] = { intelligence = true, support = true, - aoe = true, - require = "aoe", - base = { - manaCostMore = 1.4, - aoeRadiusMore = 0.75, + area = true, + color = 3, + requireSkillTypes = { 11, 21, 53, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 40), + mod("AreaRadius", "MORE", -25), --"support_concentrated_effect_skill_area_of_effect_+%_final" = -25 }, - quality = { - aoe_damageInc = 0.5, + qualityMods = { + mod("Damage", "INC", 0.5, ModFlag.Area), --"area_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Area), --"support_area_concentrate_area_damage_+%_final" }, levels = { - [1] = { aoe_damageMore = 1.4, }, - [2] = { aoe_damageMore = 1.41, }, - [3] = { aoe_damageMore = 1.42, }, - [4] = { aoe_damageMore = 1.43, }, - [5] = { aoe_damageMore = 1.44, }, - [6] = { aoe_damageMore = 1.45, }, - [7] = { aoe_damageMore = 1.46, }, - [8] = { aoe_damageMore = 1.47, }, - [9] = { aoe_damageMore = 1.48, }, - [10] = { aoe_damageMore = 1.49, }, - [11] = { aoe_damageMore = 1.5, }, - [12] = { aoe_damageMore = 1.51, }, - [13] = { aoe_damageMore = 1.52, }, - [14] = { aoe_damageMore = 1.53, }, - [15] = { aoe_damageMore = 1.54, }, - [16] = { aoe_damageMore = 1.55, }, - [17] = { aoe_damageMore = 1.56, }, - [18] = { aoe_damageMore = 1.57, }, - [19] = { aoe_damageMore = 1.58, }, - [20] = { aoe_damageMore = 1.59, }, - [21] = { aoe_damageMore = 1.6, }, - [22] = { aoe_damageMore = 1.61, }, - [23] = { aoe_damageMore = 1.62, }, - [24] = { aoe_damageMore = 1.63, }, - [25] = { aoe_damageMore = 1.64, }, - [26] = { aoe_damageMore = 1.65, }, - [27] = { aoe_damageMore = 1.66, }, - [28] = { aoe_damageMore = 1.67, }, - [29] = { aoe_damageMore = 1.68, }, - [30] = { aoe_damageMore = 1.69, }, - } + [1] = { 40, }, + [2] = { 41, }, + [3] = { 42, }, + [4] = { 43, }, + [5] = { 44, }, + [6] = { 45, }, + [7] = { 46, }, + [8] = { 47, }, + [9] = { 48, }, + [10] = { 49, }, + [11] = { 50, }, + [12] = { 51, }, + [13] = { 52, }, + [14] = { 53, }, + [15] = { 54, }, + [16] = { 55, }, + [17] = { 56, }, + [18] = { 57, }, + [19] = { 58, }, + [20] = { 59, }, + [21] = { 60, }, + [22] = { 61, }, + [23] = { 62, }, + [24] = { 63, }, + [25] = { 64, }, + [26] = { 65, }, + [27] = { 66, }, + [28] = { 67, }, + [29] = { 68, }, + [30] = { 69, }, + }, } gems["Controlled Destruction"] = { + spell = true, intelligence = true, support = true, - spell = true, - require = "spell and damage", - base = { - manaCostMore = 1.3, - critChanceInc = -100, + color = 3, + requireSkillTypes = { 10, 1, 59, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 30), + mod("CritChance", "INC", -100), --"critical_strike_chance_+%" = -100 }, - quality = { - spell_damageInc = 0.5, + qualityMods = { + mod("Damage", "INC", 0.5, ModFlag.Spell, 0, nil), --"spell_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Spell), --"support_controlled_destruction_spell_damage_+%_final" }, levels = { - [1] = { spell_damageMore = 1.25, }, - [2] = { spell_damageMore = 1.26, }, - [3] = { spell_damageMore = 1.27, }, - [4] = { spell_damageMore = 1.28, }, - [5] = { spell_damageMore = 1.29, }, - [6] = { spell_damageMore = 1.3, }, - [7] = { spell_damageMore = 1.31, }, - [8] = { spell_damageMore = 1.32, }, - [9] = { spell_damageMore = 1.33, }, - [10] = { spell_damageMore = 1.34, }, - [11] = { spell_damageMore = 1.35, }, - [12] = { spell_damageMore = 1.36, }, - [13] = { spell_damageMore = 1.37, }, - [14] = { spell_damageMore = 1.38, }, - [15] = { spell_damageMore = 1.39, }, - [16] = { spell_damageMore = 1.4, }, - [17] = { spell_damageMore = 1.41, }, - [18] = { spell_damageMore = 1.42, }, - [19] = { spell_damageMore = 1.43, }, - [20] = { spell_damageMore = 1.44, }, - [21] = { spell_damageMore = 1.45, }, - [22] = { spell_damageMore = 1.46, }, - [23] = { spell_damageMore = 1.47, }, - [24] = { spell_damageMore = 1.48, }, - [25] = { spell_damageMore = 1.49, }, - [26] = { spell_damageMore = 1.5, }, - [27] = { spell_damageMore = 1.51, }, - [28] = { spell_damageMore = 1.52, }, - [29] = { spell_damageMore = 1.53, }, - [30] = { spell_damageMore = 1.54, }, - } + [1] = { 25, }, + [2] = { 26, }, + [3] = { 27, }, + [4] = { 28, }, + [5] = { 29, }, + [6] = { 30, }, + [7] = { 31, }, + [8] = { 32, }, + [9] = { 33, }, + [10] = { 34, }, + [11] = { 35, }, + [12] = { 36, }, + [13] = { 37, }, + [14] = { 38, }, + [15] = { 39, }, + [16] = { 40, }, + [17] = { 41, }, + [18] = { 42, }, + [19] = { 43, }, + [20] = { 44, }, + [21] = { 45, }, + [22] = { 46, }, + [23] = { 47, }, + [24] = { 48, }, + [25] = { 49, }, + [26] = { 50, }, + [27] = { 51, }, + [28] = { 52, }, + [29] = { 53, }, + [30] = { 54, }, + }, } gems["Curse On Hit"] = { + curse = true, + trigger = true, intelligence = true, support = true, - trigger = true, - curse = true, - require = "curse or hit", - base = { + color = 3, + requireSkillTypes = { 1, 10, 32, }, + addSkillTypes = { }, + excludeSkillTypes = { 37, 41, 44, }, + baseMods = { + --"apply_linked_curses_on_hit_%" = 100 + --"cannot_cast_curses" = ? }, - quality = { - curseEffectInc = 0.5, + qualityMods = { + mod("CurseEffect", "INC", 0.5), --"curse_effect_+%" = 0.5 + }, + levelMods = { + [1] = mod("Duration", "INC", nil, 0, KeywordFlag.Curse), --"base_curse_duration_+%" }, levels = { - [1] = { curse_durationInc = -50, }, - [2] = { curse_durationInc = -48, }, - [3] = { curse_durationInc = -46, }, - [4] = { curse_durationInc = -44, }, - [5] = { curse_durationInc = -42, }, - [6] = { curse_durationInc = -40, }, - [7] = { curse_durationInc = -38, }, - [8] = { curse_durationInc = -36, }, - [9] = { curse_durationInc = -34, }, - [10] = { curse_durationInc = -32, }, - [11] = { curse_durationInc = -30, }, - [12] = { curse_durationInc = -28, }, - [13] = { curse_durationInc = -26, }, - [14] = { curse_durationInc = -24, }, - [15] = { curse_durationInc = -22, }, - [16] = { curse_durationInc = -20, }, - [17] = { curse_durationInc = -18, }, - [18] = { curse_durationInc = -16, }, - [19] = { curse_durationInc = -14, }, - [20] = { curse_durationInc = -12, }, - [21] = { curse_durationInc = -10, }, - [22] = { curse_durationInc = -8, }, - [23] = { curse_durationInc = -6, }, - [24] = { curse_durationInc = -4, }, - [25] = { curse_durationInc = -2, }, - [26] = { curse_durationInc = -0, }, - [27] = { curse_durationInc = -2, }, - [28] = { curse_durationInc = -4, }, - [29] = { curse_durationInc = -6, }, - [30] = { curse_durationInc = -8, }, - } + [1] = { -50, }, + [2] = { -48, }, + [3] = { -46, }, + [4] = { -44, }, + [5] = { -42, }, + [6] = { -40, }, + [7] = { -38, }, + [8] = { -36, }, + [9] = { -34, }, + [10] = { -32, }, + [11] = { -30, }, + [12] = { -28, }, + [13] = { -26, }, + [14] = { -24, }, + [15] = { -22, }, + [16] = { -20, }, + [17] = { -18, }, + [18] = { -16, }, + [19] = { -14, }, + [20] = { -12, }, + [21] = { -10, }, + [22] = { -8, }, + [23] = { -6, }, + [24] = { -4, }, + [25] = { -2, }, + [26] = { 0, }, + [27] = { 2, }, + [28] = { 4, }, + [29] = { 6, }, + [30] = { 8, }, + }, } gems["Elemental Focus"] = { intelligence = true, support = true, - require = "damage", - base = { - manaCostMore = 1.3, - cannotShock = true, - cannotChill = true, - cannotFreeze = true, - cannotIgnite = true, + color = 3, + requireSkillTypes = { 10, 1, 29, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 30), + --"cannot_inflict_status_ailments" = ? + flag("CannotShock"), + flag("CannotChill"), + flag("CannotFreeze"), + flag("CannotIgnite"), }, - quality = { - elementalInc = 0.5, + qualityMods = { + mod("ElementalDamage", "INC", 0.5), --"elemental_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("ElementalDamage", "MORE", nil), --"support_gem_elemental_damage_+%_final" }, levels = { - [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, }, - } + [1] = { 30, }, + [2] = { 31, }, + [3] = { 32, }, + [4] = { 33, }, + [5] = { 34, }, + [6] = { 35, }, + [7] = { 36, }, + [8] = { 37, }, + [9] = { 38, }, + [10] = { 39, }, + [11] = { 40, }, + [12] = { 41, }, + [13] = { 42, }, + [14] = { 43, }, + [15] = { 44, }, + [16] = { 45, }, + [17] = { 46, }, + [18] = { 47, }, + [19] = { 48, }, + [20] = { 49, }, + [21] = { 50, }, + [22] = { 51, }, + [23] = { 52, }, + [24] = { 53, }, + [25] = { 54, }, + [26] = { 55, }, + [27] = { 56, }, + [28] = { 57, }, + [29] = { 58, }, + [30] = { 59, }, + }, } gems["Elemental Proliferation"] = { + cold = true, + fire = true, + lightning = true, intelligence = true, support = true, - aoe = true, - fire = true, - cold = true, - lightning = true, - require = "hit", - base = { - manaCostMore = 1.4, + area = true, + color = 3, + requireSkillTypes = { 10, 1, 20, }, + addSkillTypes = { 11, }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 40), + --"elemental_status_effect_aura_radius" = 16 + --"display_what_elemental_proliferation_does" = 1 }, - quality = { - ignite_durationInc = 0.5, - chill_durationInc = 0.5, - freeze_durationInc = 0.5, - shock_durationInc = 0.5, + qualityMods = { + mod("EnemyIgniteDuration", "INC", 0.5), --"ignite_duration_+%" = 0.5 + mod("EnemyChillDuration", "INC", 0.5), --"chill_duration_+%" = 0.5 + mod("EnemyFreezeDuration", "INC", 0.5), --"freeze_duration_+%" = 0.5 + mod("EnemyShockDuration", "INC", 0.5), --"shock_duration_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil), --"support_elemental_proliferation_damage_+%_final" }, levels = { - [1] = { damageMore = 0.7, }, - [2] = { damageMore = 0.7, }, - [3] = { damageMore = 0.71, }, - [4] = { damageMore = 0.71, }, - [5] = { damageMore = 0.72, }, - [6] = { damageMore = 0.72, }, - [7] = { damageMore = 0.73, }, - [8] = { damageMore = 0.73, }, - [9] = { damageMore = 0.74, }, - [10] = { damageMore = 0.74, }, - [11] = { damageMore = 0.75, }, - [12] = { damageMore = 0.75, }, - [13] = { damageMore = 0.76, }, - [14] = { damageMore = 0.76, }, - [15] = { damageMore = 0.77, }, - [16] = { damageMore = 0.77, }, - [17] = { damageMore = 0.78, }, - [18] = { damageMore = 0.78, }, - [19] = { damageMore = 0.79, }, - [20] = { damageMore = 0.79, }, - [21] = { damageMore = 0.8, }, - [22] = { damageMore = 0.8, }, - [23] = { damageMore = 0.81, }, - [24] = { damageMore = 0.81, }, - [25] = { damageMore = 0.82, }, - [26] = { damageMore = 0.82, }, - [27] = { damageMore = 0.83, }, - [28] = { damageMore = 0.83, }, - [29] = { damageMore = 0.84, }, - [30] = { damageMore = 0.84, }, - } + [1] = { -30, }, + [2] = { -30, }, + [3] = { -29, }, + [4] = { -29, }, + [5] = { -28, }, + [6] = { -28, }, + [7] = { -27, }, + [8] = { -27, }, + [9] = { -26, }, + [10] = { -26, }, + [11] = { -25, }, + [12] = { -25, }, + [13] = { -24, }, + [14] = { -24, }, + [15] = { -23, }, + [16] = { -23, }, + [17] = { -22, }, + [18] = { -22, }, + [19] = { -21, }, + [20] = { -21, }, + [21] = { -20, }, + [22] = { -20, }, + [23] = { -19, }, + [24] = { -19, }, + [25] = { -18, }, + [26] = { -18, }, + [27] = { -17, }, + [28] = { -17, }, + [29] = { -16, }, + [30] = { -16, }, + }, } gems["Enlighten"] = { + low_max_level = true, intelligence = true, support = true, - base = { + color = 3, + requireSkillTypes = { }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { }, - quality = { + qualityMods = { + --"local_gem_experience_gain_+%" = 5 + }, + levelMods = { + [1] = mod("ManaCost", "MORE", nil), }, levels = { - [1] = { manaCostMore = 1, }, - [2] = { manaCostMore = 0.96, }, - [3] = { manaCostMore = 0.92, }, - [4] = { manaCostMore = 0.88, }, - [5] = { manaCostMore = 0.84, }, - [6] = { manaCostMore = 0.8, }, - [7] = { manaCostMore = 0.76, }, - [8] = { manaCostMore = 0.72, }, - [9] = { manaCostMore = 0.68, }, - [10] = { manaCostMore = 0.64, }, - } + [1] = { nil, }, + [2] = { -4, }, + [3] = { -8, }, + [4] = { -12, }, + [5] = { -16, }, + [6] = { -20, }, + [7] = { -24, }, + [8] = { -28, }, + [9] = { -32, }, + [10] = { -36, }, + }, } gems["Faster Casting"] = { intelligence = true, support = true, spell = true, - require = "spell", - base = { - manaCostMore = 1.2, + color = 3, + requireSkillTypes = { 2, 39, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 20), }, - quality = { - castSpeedInc = 0.5, + qualityMods = { + mod("Speed", "INC", 0.5, ModFlag.Spell), --"base_cast_speed_+%" = 0.5 + }, + levelMods = { + [1] = mod("Speed", "INC", nil, ModFlag.Spell), --"base_cast_speed_+%" }, levels = { - [1] = { castSpeedInc = 20, }, - [2] = { castSpeedInc = 21, }, - [3] = { castSpeedInc = 22, }, - [4] = { castSpeedInc = 23, }, - [5] = { castSpeedInc = 24, }, - [6] = { castSpeedInc = 25, }, - [7] = { castSpeedInc = 26, }, - [8] = { castSpeedInc = 27, }, - [9] = { castSpeedInc = 28, }, - [10] = { castSpeedInc = 29, }, - [11] = { castSpeedInc = 30, }, - [12] = { castSpeedInc = 31, }, - [13] = { castSpeedInc = 32, }, - [14] = { castSpeedInc = 33, }, - [15] = { castSpeedInc = 34, }, - [16] = { castSpeedInc = 35, }, - [17] = { castSpeedInc = 36, }, - [18] = { castSpeedInc = 37, }, - [19] = { castSpeedInc = 38, }, - [20] = { castSpeedInc = 39, }, - [21] = { castSpeedInc = 40, }, - [22] = { castSpeedInc = 41, }, - [23] = { castSpeedInc = 42, }, - [24] = { castSpeedInc = 43, }, - [25] = { castSpeedInc = 44, }, - [26] = { castSpeedInc = 45, }, - [27] = { castSpeedInc = 46, }, - [28] = { castSpeedInc = 47, }, - [29] = { castSpeedInc = 48, }, - [30] = { castSpeedInc = 49, }, - } + [1] = { 20, }, + [2] = { 21, }, + [3] = { 22, }, + [4] = { 23, }, + [5] = { 24, }, + [6] = { 25, }, + [7] = { 26, }, + [8] = { 27, }, + [9] = { 28, }, + [10] = { 29, }, + [11] = { 30, }, + [12] = { 31, }, + [13] = { 32, }, + [14] = { 33, }, + [15] = { 34, }, + [16] = { 35, }, + [17] = { 36, }, + [18] = { 37, }, + [19] = { 38, }, + [20] = { 39, }, + [21] = { 40, }, + [22] = { 41, }, + [23] = { 42, }, + [24] = { 43, }, + [25] = { 44, }, + [26] = { 45, }, + [27] = { 46, }, + [28] = { 47, }, + [29] = { 48, }, + [30] = { 49, }, + }, } gems["Increased Area of Effect"] = { intelligence = true, support = true, - aoe = true, - require = "aoe", - base = { - manaCostMore = 1.4, + area = true, + color = 3, + requireSkillTypes = { 11, 21, 53, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 40), }, - quality = { - aoe_damageInc = 0.5, + qualityMods = { + mod("Damage", "INC", 0.5, ModFlag.Area), --"area_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("AreaRadius", "INC", nil), --"base_skill_area_of_effect_+%" }, levels = { - [1] = { aoeRadiusInc = 20, }, - [2] = { aoeRadiusInc = 21, }, - [3] = { aoeRadiusInc = 22, }, - [4] = { aoeRadiusInc = 23, }, - [5] = { aoeRadiusInc = 24, }, - [6] = { aoeRadiusInc = 25, }, - [7] = { aoeRadiusInc = 26, }, - [8] = { aoeRadiusInc = 27, }, - [9] = { aoeRadiusInc = 28, }, - [10] = { aoeRadiusInc = 29, }, - [11] = { aoeRadiusInc = 30, }, - [12] = { aoeRadiusInc = 31, }, - [13] = { aoeRadiusInc = 32, }, - [14] = { aoeRadiusInc = 33, }, - [15] = { aoeRadiusInc = 34, }, - [16] = { aoeRadiusInc = 35, }, - [17] = { aoeRadiusInc = 36, }, - [18] = { aoeRadiusInc = 37, }, - [19] = { aoeRadiusInc = 38, }, - [20] = { aoeRadiusInc = 39, }, - [21] = { aoeRadiusInc = 40, }, - [22] = { aoeRadiusInc = 41, }, - [23] = { aoeRadiusInc = 42, }, - [24] = { aoeRadiusInc = 43, }, - [25] = { aoeRadiusInc = 44, }, - [26] = { aoeRadiusInc = 45, }, - [27] = { aoeRadiusInc = 46, }, - [28] = { aoeRadiusInc = 47, }, - [29] = { aoeRadiusInc = 48, }, - [30] = { aoeRadiusInc = 49, }, - } + [1] = { 20, }, + [2] = { 21, }, + [3] = { 22, }, + [4] = { 23, }, + [5] = { 24, }, + [6] = { 25, }, + [7] = { 26, }, + [8] = { 27, }, + [9] = { 28, }, + [10] = { 29, }, + [11] = { 30, }, + [12] = { 31, }, + [13] = { 32, }, + [14] = { 33, }, + [15] = { 34, }, + [16] = { 35, }, + [17] = { 36, }, + [18] = { 37, }, + [19] = { 38, }, + [20] = { 39, }, + [21] = { 40, }, + [22] = { 41, }, + [23] = { 42, }, + [24] = { 43, }, + [25] = { 44, }, + [26] = { 45, }, + [27] = { 46, }, + [28] = { 47, }, + [29] = { 48, }, + [30] = { 49, }, + }, } gems["Increased Critical Damage"] = { intelligence = true, support = true, - require = "hit", - base = { - manaCostMore = 1.3, + color = 3, + requireSkillTypes = { 10, 1, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 30), }, - quality = { - critMultiplier = 0.5, + qualityMods = { + mod("CritMultiplier", "BASE", 0.75), --"base_critical_strike_multiplier_+" = 0.75 + }, + levelMods = { + [1] = mod("CritMultiplier", "BASE", nil), --"base_critical_strike_multiplier_+" }, levels = { - [1] = { critMultiplier = 75, }, - [2] = { critMultiplier = 76, }, - [3] = { critMultiplier = 78, }, - [4] = { critMultiplier = 79, }, - [5] = { critMultiplier = 81, }, - [6] = { critMultiplier = 82, }, - [7] = { critMultiplier = 84, }, - [8] = { critMultiplier = 85, }, - [9] = { critMultiplier = 87, }, - [10] = { critMultiplier = 88, }, - [11] = { critMultiplier = 90, }, - [12] = { critMultiplier = 91, }, - [13] = { critMultiplier = 93, }, - [14] = { critMultiplier = 94, }, - [15] = { critMultiplier = 96, }, - [16] = { critMultiplier = 97, }, - [17] = { critMultiplier = 99, }, - [18] = { critMultiplier = 100, }, - [19] = { critMultiplier = 102, }, - [20] = { critMultiplier = 103, }, - [21] = { critMultiplier = 105, }, - [22] = { critMultiplier = 106, }, - [23] = { critMultiplier = 108, }, - [24] = { critMultiplier = 109, }, - [25] = { critMultiplier = 111, }, - [26] = { critMultiplier = 112, }, - [27] = { critMultiplier = 114, }, - [28] = { critMultiplier = 115, }, - [29] = { critMultiplier = 117, }, - [30] = { critMultiplier = 118, }, - } + [1] = { 75, }, + [2] = { 76, }, + [3] = { 78, }, + [4] = { 79, }, + [5] = { 81, }, + [6] = { 82, }, + [7] = { 84, }, + [8] = { 85, }, + [9] = { 87, }, + [10] = { 88, }, + [11] = { 90, }, + [12] = { 91, }, + [13] = { 93, }, + [14] = { 94, }, + [15] = { 96, }, + [16] = { 97, }, + [17] = { 99, }, + [18] = { 100, }, + [19] = { 102, }, + [20] = { 103, }, + [21] = { 105, }, + [22] = { 106, }, + [23] = { 108, }, + [24] = { 109, }, + [25] = { 111, }, + [26] = { 112, }, + [27] = { 114, }, + [28] = { 115, }, + [29] = { 117, }, + [30] = { 118, }, + }, } gems["Increased Critical Strikes"] = { intelligence = true, support = true, - require = "hit", - base = { - manaCostMore = 1.15, + color = 3, + requireSkillTypes = { 10, 1, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 15), }, - quality = { - critChanceInc = 1, + qualityMods = { + mod("CritChance", "INC", 1), --"critical_strike_chance_+%" = 1 + }, + levelMods = { + [1] = mod("CritChance", "INC", nil), --"critical_strike_chance_+%" + [2] = mod("CritChance", "BASE", nil), --"additional_base_critical_strike_chance" }, levels = { - [1] = { critChanceInc = 50, critChanceBase = 1, }, - [2] = { critChanceInc = 52, critChanceBase = 1, }, - [3] = { critChanceInc = 54, critChanceBase = 1.1, }, - [4] = { critChanceInc = 56, critChanceBase = 1.1, }, - [5] = { critChanceInc = 58, critChanceBase = 1.2, }, - [6] = { critChanceInc = 60, critChanceBase = 1.2, }, - [7] = { critChanceInc = 62, critChanceBase = 1.3, }, - [8] = { critChanceInc = 64, critChanceBase = 1.3, }, - [9] = { critChanceInc = 66, critChanceBase = 1.4, }, - [10] = { critChanceInc = 68, critChanceBase = 1.4, }, - [11] = { critChanceInc = 70, critChanceBase = 1.5, }, - [12] = { critChanceInc = 72, critChanceBase = 1.5, }, - [13] = { critChanceInc = 74, critChanceBase = 1.6, }, - [14] = { critChanceInc = 76, critChanceBase = 1.6, }, - [15] = { critChanceInc = 78, critChanceBase = 1.7, }, - [16] = { critChanceInc = 80, critChanceBase = 1.7, }, - [17] = { critChanceInc = 82, critChanceBase = 1.8, }, - [18] = { critChanceInc = 84, critChanceBase = 1.8, }, - [19] = { critChanceInc = 86, critChanceBase = 1.9, }, - [20] = { critChanceInc = 88, critChanceBase = 1.9, }, - [21] = { critChanceInc = 90, critChanceBase = 2, }, - [22] = { critChanceInc = 92, critChanceBase = 2, }, - [23] = { critChanceInc = 94, critChanceBase = 2.1, }, - [24] = { critChanceInc = 96, critChanceBase = 2.1, }, - [25] = { critChanceInc = 98, critChanceBase = 2.2, }, - [26] = { critChanceInc = 100, critChanceBase = 2.2, }, - [27] = { critChanceInc = 102, critChanceBase = 2.3, }, - [28] = { critChanceInc = 104, critChanceBase = 2.3, }, - [29] = { critChanceInc = 106, critChanceBase = 2.4, }, - [30] = { critChanceInc = 108, critChanceBase = 2.4, }, - } + [1] = { 50, 1, }, + [2] = { 52, 1, }, + [3] = { 54, 1.1, }, + [4] = { 56, 1.1, }, + [5] = { 58, 1.2, }, + [6] = { 60, 1.2, }, + [7] = { 62, 1.3, }, + [8] = { 64, 1.3, }, + [9] = { 66, 1.4, }, + [10] = { 68, 1.4, }, + [11] = { 70, 1.5, }, + [12] = { 72, 1.5, }, + [13] = { 74, 1.6, }, + [14] = { 76, 1.6, }, + [15] = { 78, 1.7, }, + [16] = { 80, 1.7, }, + [17] = { 82, 1.8, }, + [18] = { 84, 1.8, }, + [19] = { 86, 1.9, }, + [20] = { 88, 1.9, }, + [21] = { 90, 2, }, + [22] = { 92, 2, }, + [23] = { 94, 2.1, }, + [24] = { 96, 2.1, }, + [25] = { 98, 2.2, }, + [26] = { 100, 2.2, }, + [27] = { 102, 2.3, }, + [28] = { 104, 2.3, }, + [29] = { 106, 2.4, }, + [30] = { 108, 2.4, }, + }, } gems["Innervate"] = { + lightning = true, intelligence = true, support = true, - lightning = true, - require = "hit", - base = { - manaCostMore = 1.1, - shockChance = 15, + color = 3, + requireSkillTypes = { 10, 1, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 10), + mod("EnemyShockChance", "BASE", 15), --"base_chance_to_shock_%" = 15 }, - quality = { - shock_durationInc = 1.5, + qualityMods = { + mod("EnemyShockDuration", "INC", 1.5), --"shock_duration_+%" = 1.5 + }, + levelMods = { + --[1] = "onslaught_time_granted_on_killing_shocked_enemy_ms" }, levels = { - [1] = { }, - [2] = { }, - [3] = { }, - [4] = { }, - [5] = { }, - [6] = { }, - [7] = { }, - [8] = { }, - [9] = { }, - [10] = { }, - [11] = { }, - [12] = { }, - [13] = { }, - [14] = { }, - [15] = { }, - [16] = { }, - [17] = { }, - [18] = { }, - [19] = { }, - [20] = { }, - [21] = { }, - [22] = { }, - [23] = { }, - [24] = { }, - [25] = { }, - [26] = { }, - [27] = { }, - [28] = { }, - [29] = { }, - [30] = { }, - } + [1] = { 5000, }, + [2] = { 5100, }, + [3] = { 5200, }, + [4] = { 5300, }, + [5] = { 5400, }, + [6] = { 5500, }, + [7] = { 5600, }, + [8] = { 5700, }, + [9] = { 5800, }, + [10] = { 5900, }, + [11] = { 6000, }, + [12] = { 6100, }, + [13] = { 6200, }, + [14] = { 6300, }, + [15] = { 6400, }, + [16] = { 6500, }, + [17] = { 6600, }, + [18] = { 6700, }, + [19] = { 6800, }, + [20] = { 6900, }, + [21] = { 7000, }, + [22] = { 7100, }, + [23] = { 7200, }, + [24] = { 7300, }, + [25] = { 7400, }, + [26] = { 7500, }, + [27] = { 7600, }, + [28] = { 7700, }, + [29] = { 7800, }, + [30] = { 7900, }, + }, } gems["Item Rarity"] = { intelligence = true, support = true, - require = "damage", - base = { + color = 3, + requireSkillTypes = { 10, 1, 40, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { }, - quality = { - lootRarityInc = 0.5, + qualityMods = { + mod("LootRarity", "INC", 0.5), --"base_killed_monster_dropped_item_rarity_+%" = 0.5 + }, + levelMods = { + [1] = mod("LootRarity", "INC", nil), --"base_killed_monster_dropped_item_rarity_+%" }, levels = { - [1] = { lootRarityInc = 40, }, - [2] = { lootRarityInc = 41, }, - [3] = { lootRarityInc = 42, }, - [4] = { lootRarityInc = 43, }, - [5] = { lootRarityInc = 44, }, - [6] = { lootRarityInc = 45, }, - [7] = { lootRarityInc = 46, }, - [8] = { lootRarityInc = 47, }, - [9] = { lootRarityInc = 48, }, - [10] = { lootRarityInc = 49, }, - [11] = { lootRarityInc = 50, }, - [12] = { lootRarityInc = 51, }, - [13] = { lootRarityInc = 52, }, - [14] = { lootRarityInc = 53, }, - [15] = { lootRarityInc = 54, }, - [16] = { lootRarityInc = 55, }, - [17] = { lootRarityInc = 56, }, - [18] = { lootRarityInc = 57, }, - [19] = { lootRarityInc = 58, }, - [20] = { lootRarityInc = 59, }, - [21] = { lootRarityInc = 60, }, - [22] = { lootRarityInc = 61, }, - [23] = { lootRarityInc = 62, }, - [24] = { lootRarityInc = 63, }, - [25] = { lootRarityInc = 64, }, - [26] = { lootRarityInc = 65, }, - [27] = { lootRarityInc = 66, }, - [28] = { lootRarityInc = 67, }, - [29] = { lootRarityInc = 68, }, - [30] = { lootRarityInc = 69, }, - } + [1] = { 40, }, + [2] = { 41, }, + [3] = { 42, }, + [4] = { 43, }, + [5] = { 44, }, + [6] = { 45, }, + [7] = { 46, }, + [8] = { 47, }, + [9] = { 48, }, + [10] = { 49, }, + [11] = { 50, }, + [12] = { 51, }, + [13] = { 52, }, + [14] = { 53, }, + [15] = { 54, }, + [16] = { 55, }, + [17] = { 56, }, + [18] = { 57, }, + [19] = { 58, }, + [20] = { 59, }, + [21] = { 60, }, + [22] = { 61, }, + [23] = { 62, }, + [24] = { 63, }, + [25] = { 64, }, + [26] = { 65, }, + [27] = { 66, }, + [28] = { 67, }, + [29] = { 68, }, + [30] = { 69, }, + }, } gems["Lightning Penetration"] = { + lightning = true, intelligence = true, support = true, - lightning = true, - require = "hit", - base = { - manaCostMore = 1.4, + color = 3, + requireSkillTypes = { 10, 1, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 40), }, - quality = { - lightningInc = 0.5, + qualityMods = { + mod("LightningDamage", "INC", 0.5), --"lightning_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("LightningPenetration", "BASE", nil), --"base_reduce_enemy_lightning_resistance_%" }, levels = { - [1] = { lightningPen = 18, }, - [2] = { lightningPen = 19, }, - [3] = { lightningPen = 20, }, - [4] = { lightningPen = 21, }, - [5] = { lightningPen = 22, }, - [6] = { lightningPen = 23, }, - [7] = { lightningPen = 24, }, - [8] = { lightningPen = 25, }, - [9] = { lightningPen = 26, }, - [10] = { lightningPen = 27, }, - [11] = { lightningPen = 28, }, - [12] = { lightningPen = 29, }, - [13] = { lightningPen = 30, }, - [14] = { lightningPen = 31, }, - [15] = { lightningPen = 32, }, - [16] = { lightningPen = 33, }, - [17] = { lightningPen = 34, }, - [18] = { lightningPen = 35, }, - [19] = { lightningPen = 36, }, - [20] = { lightningPen = 37, }, - [21] = { lightningPen = 38, }, - [22] = { lightningPen = 39, }, - [23] = { lightningPen = 40, }, - [24] = { lightningPen = 41, }, - [25] = { lightningPen = 42, }, - [26] = { lightningPen = 43, }, - [27] = { lightningPen = 44, }, - [28] = { lightningPen = 45, }, - [29] = { lightningPen = 46, }, - [30] = { lightningPen = 47, }, - } + [1] = { 18, }, + [2] = { 19, }, + [3] = { 20, }, + [4] = { 21, }, + [5] = { 22, }, + [6] = { 23, }, + [7] = { 24, }, + [8] = { 25, }, + [9] = { 26, }, + [10] = { 27, }, + [11] = { 28, }, + [12] = { 29, }, + [13] = { 30, }, + [14] = { 31, }, + [15] = { 32, }, + [16] = { 33, }, + [17] = { 34, }, + [18] = { 35, }, + [19] = { 36, }, + [20] = { 37, }, + [21] = { 38, }, + [22] = { 39, }, + [23] = { 40, }, + [24] = { 41, }, + [25] = { 42, }, + [26] = { 43, }, + [27] = { 44, }, + [28] = { 45, }, + [29] = { 46, }, + [30] = { 47, }, + }, } gems["Minefield"] = { intelligence = true, support = true, mine = true, - require = "mine", - base = { - manaCostMore = 1.6, - activeMineLimit = 2, + color = 3, + requireSkillTypes = { 41, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 60), + --"number_of_additional_mines_to_place" = 2 + mod("ActiveMineLimit", "BASE", 2), --"number_of_additional_remote_mines_allowed" = 2 }, - quality = { - mineDetonationRadiusInc = 1, + qualityMods = { + mod("MineDetonationRadius", "INC", 1), --"mine_detonation_radius_+%" = 1 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil), --"support_minefield_mine_damage_+%_final" }, levels = { - [1] = { damageMore = 0.6, }, - [2] = { damageMore = 0.61, }, - [3] = { damageMore = 0.62, }, - [4] = { damageMore = 0.63, }, - [5] = { damageMore = 0.64, }, - [6] = { damageMore = 0.65, }, - [7] = { damageMore = 0.66, }, - [8] = { damageMore = 0.67, }, - [9] = { damageMore = 0.68, }, - [10] = { damageMore = 0.69, }, - [11] = { damageMore = 0.7, }, - [12] = { damageMore = 0.71, }, - [13] = { damageMore = 0.72, }, - [14] = { damageMore = 0.73, }, - [15] = { damageMore = 0.74, }, - [16] = { damageMore = 0.75, }, - [17] = { damageMore = 0.76, }, - [18] = { damageMore = 0.77, }, - [19] = { damageMore = 0.78, }, - [20] = { damageMore = 0.79, }, - [21] = { damageMore = 0.8, }, - [22] = { damageMore = 0.81, }, - [23] = { damageMore = 0.82, }, - [24] = { damageMore = 0.83, }, - [25] = { damageMore = 0.84, }, - [26] = { damageMore = 0.85, }, - [27] = { damageMore = 0.86, }, - [28] = { damageMore = 0.87, }, - [29] = { damageMore = 0.88, }, - [30] = { damageMore = 0.89, }, - } -} -gems["Minion and Totem Elemental Resistance"] = { - intelligence = true, - unsupported = true, + [1] = { -40, }, + [2] = { -39, }, + [3] = { -38, }, + [4] = { -37, }, + [5] = { -36, }, + [6] = { -35, }, + [7] = { -34, }, + [8] = { -33, }, + [9] = { -32, }, + [10] = { -31, }, + [11] = { -30, }, + [12] = { -29, }, + [13] = { -28, }, + [14] = { -27, }, + [15] = { -26, }, + [16] = { -25, }, + [17] = { -24, }, + [18] = { -23, }, + [19] = { -22, }, + [20] = { -21, }, + [21] = { -20, }, + [22] = { -19, }, + [23] = { -18, }, + [24] = { -17, }, + [25] = { -16, }, + [26] = { -15, }, + [27] = { -14, }, + [28] = { -13, }, + [29] = { -12, }, + [30] = { -11, }, + }, } gems["Minion Damage"] = { intelligence = true, + support = true, + minion = true, unsupported = true, } gems["Minion Life"] = { intelligence = true, + support = true, + minion = true, unsupported = true, } gems["Minion Speed"] = { + movement = true, intelligence = true, + support = true, + minion = true, + unsupported = true, +} +gems["Minion and Totem Elemental Resistance"] = { + intelligence = true, + support = true, + minion = true, unsupported = true, } gems["Physical to Lightning"] = { + lightning = true, intelligence = true, support = true, - lightning = true, - require = "hit", - base = { - manaCostMore = 1.1, - physicalConvertTolightning = 50, + color = 3, + requireSkillTypes = { 10, 1, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 10), + skill("PhysicalDamageConvertToLightning", 50), --"skill_physical_damage_%_to_convert_to_lightning" = 50 }, - quality = { - physicalInc = 0.5, - lightningInc = 0.5, + qualityMods = { + mod("PhysicalDamage", "INC", 0.5), --"physical_damage_+%" = 0.5 + mod("LightningDamage", "INC", 0.5), --"lightning_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("PhysicalDamageGainAsLightning", "BASE", nil, 0, 0, nil), --"physical_damage_%_to_add_as_lightning" }, levels = { - [1] = { physicalGainAslightning = 10, }, - [2] = { physicalGainAslightning = 11, }, - [3] = { physicalGainAslightning = 12, }, - [4] = { physicalGainAslightning = 13, }, - [5] = { physicalGainAslightning = 14, }, - [6] = { physicalGainAslightning = 15, }, - [7] = { physicalGainAslightning = 16, }, - [8] = { physicalGainAslightning = 17, }, - [9] = { physicalGainAslightning = 18, }, - [10] = { physicalGainAslightning = 19, }, - [11] = { physicalGainAslightning = 20, }, - [12] = { physicalGainAslightning = 21, }, - [13] = { physicalGainAslightning = 22, }, - [14] = { physicalGainAslightning = 23, }, - [15] = { physicalGainAslightning = 24, }, - [16] = { physicalGainAslightning = 25, }, - [17] = { physicalGainAslightning = 26, }, - [18] = { physicalGainAslightning = 27, }, - [19] = { physicalGainAslightning = 28, }, - [20] = { physicalGainAslightning = 29, }, - [21] = { physicalGainAslightning = 30, }, - [22] = { physicalGainAslightning = 31, }, - [23] = { physicalGainAslightning = 32, }, - [24] = { physicalGainAslightning = 33, }, - [25] = { physicalGainAslightning = 34, }, - [26] = { physicalGainAslightning = 35, }, - [27] = { physicalGainAslightning = 36, }, - [28] = { physicalGainAslightning = 37, }, - [29] = { physicalGainAslightning = 38, }, - [30] = { physicalGainAslightning = 39, }, - } + [1] = { 10, }, + [2] = { 11, }, + [3] = { 12, }, + [4] = { 13, }, + [5] = { 14, }, + [6] = { 15, }, + [7] = { 16, }, + [8] = { 17, }, + [9] = { 18, }, + [10] = { 19, }, + [11] = { 20, }, + [12] = { 21, }, + [13] = { 22, }, + [14] = { 23, }, + [15] = { 24, }, + [16] = { 25, }, + [17] = { 26, }, + [18] = { 27, }, + [19] = { 28, }, + [20] = { 29, }, + [21] = { 30, }, + [22] = { 31, }, + [23] = { 32, }, + [24] = { 33, }, + [25] = { 34, }, + [26] = { 35, }, + [27] = { 36, }, + [28] = { 37, }, + [29] = { 38, }, + [30] = { 39, }, + }, } gems["Power Charge On Critical"] = { intelligence = true, support = true, - require = "hit", - base = { - manaCostMore = 1.1, + color = 3, + requireSkillTypes = { 10, 1, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 10), }, - quality = { - critChanceInc = 1, + qualityMods = { + mod("CritChance", "INC", 1), --"critical_strike_chance_+%" = 1 + }, + levelMods = { + --[1] = "add_power_charge_on_critical_strike_%" }, levels = { - [1] = { }, - [2] = { }, - [3] = { }, - [4] = { }, - [5] = { }, - [6] = { }, - [7] = { }, - [8] = { }, - [9] = { }, - [10] = { }, - [11] = { }, - [12] = { }, - [13] = { }, - [14] = { }, - [15] = { }, - [16] = { }, - [17] = { }, - [18] = { }, - [19] = { }, - [20] = { }, - [21] = { }, - [22] = { }, - [23] = { }, - [24] = { }, - [25] = { }, - [26] = { }, - [27] = { }, - [28] = { }, - [29] = { }, - [30] = { }, - } + [1] = { 35, }, + [2] = { 36, }, + [3] = { 37, }, + [4] = { 38, }, + [5] = { 39, }, + [6] = { 40, }, + [7] = { 41, }, + [8] = { 42, }, + [9] = { 43, }, + [10] = { 44, }, + [11] = { 45, }, + [12] = { 46, }, + [13] = { 47, }, + [14] = { 48, }, + [15] = { 49, }, + [16] = { 50, }, + [17] = { 51, }, + [18] = { 52, }, + [19] = { 53, }, + [20] = { 54, }, + [21] = { 55, }, + [22] = { 56, }, + [23] = { 57, }, + [24] = { 58, }, + [25] = { 59, }, + [26] = { 60, }, + [27] = { 61, }, + [28] = { 62, }, + [29] = { 63, }, + [30] = { 64, }, + }, } gems["Remote Mine"] = { intelligence = true, support = true, mine = true, - require = "spell or projectile", + duration = true, addFlags = { mine = true, duration = true, - showAverage = true, }, - base = { - manaCostMore = 1.5, + color = 3, + requireSkillTypes = { 19, }, + addSkillTypes = { 12, 41, }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 50), + --"is_remote_mine" = 1 + --"base_mine_duration" = 16000 + --"mine_override_pvp_scaling_time_ms" = 900 + --"base_skill_is_mined" = ? + --"disable_skill_if_melee_attack" = ? + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? }, - quality = { - mineLayingSpeedInc = 0.5, + qualityMods = { + mod("MineLayingSpeed", "MORE", 0.5), --"mine_laying_speed_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "MORE", nil, ModFlag.Hit, KeywordFlag.Mine), --"support_remote_mine_hit_damage_+%_final" }, levels = { - [1] = { mineHit_damageMore = 1.3, }, - [2] = { mineHit_damageMore = 1.31, }, - [3] = { mineHit_damageMore = 1.32, }, - [4] = { mineHit_damageMore = 1.33, }, - [5] = { mineHit_damageMore = 1.34, }, - [6] = { mineHit_damageMore = 1.35, }, - [7] = { mineHit_damageMore = 1.36, }, - [8] = { mineHit_damageMore = 1.37, }, - [9] = { mineHit_damageMore = 1.38, }, - [10] = { mineHit_damageMore = 1.39, }, - [11] = { mineHit_damageMore = 1.4, }, - [12] = { mineHit_damageMore = 1.41, }, - [13] = { mineHit_damageMore = 1.42, }, - [14] = { mineHit_damageMore = 1.43, }, - [15] = { mineHit_damageMore = 1.44, }, - [16] = { mineHit_damageMore = 1.45, }, - [17] = { mineHit_damageMore = 1.46, }, - [18] = { mineHit_damageMore = 1.47, }, - [19] = { mineHit_damageMore = 1.48, }, - [20] = { mineHit_damageMore = 1.49, }, - [21] = { mineHit_damageMore = 1.5, }, - [22] = { mineHit_damageMore = 1.51, }, - [23] = { mineHit_damageMore = 1.52, }, - [24] = { mineHit_damageMore = 1.53, }, - [25] = { mineHit_damageMore = 1.54, }, - [26] = { mineHit_damageMore = 1.55, }, - [27] = { mineHit_damageMore = 1.56, }, - [28] = { mineHit_damageMore = 1.57, }, - [29] = { mineHit_damageMore = 1.58, }, - [30] = { mineHit_damageMore = 1.59, }, - } + [1] = { 30, }, + [2] = { 31, }, + [3] = { 32, }, + [4] = { 33, }, + [5] = { 34, }, + [6] = { 35, }, + [7] = { 36, }, + [8] = { 37, }, + [9] = { 38, }, + [10] = { 39, }, + [11] = { 40, }, + [12] = { 41, }, + [13] = { 42, }, + [14] = { 43, }, + [15] = { 44, }, + [16] = { 45, }, + [17] = { 46, }, + [18] = { 47, }, + [19] = { 48, }, + [20] = { 49, }, + [21] = { 50, }, + [22] = { 51, }, + [23] = { 52, }, + [24] = { 53, }, + [25] = { 54, }, + [26] = { 55, }, + [27] = { 56, }, + [28] = { 57, }, + [29] = { 58, }, + [30] = { 59, }, + }, } gems["Spell Echo"] = { + spell = true, intelligence = true, support = true, - spell = true, - require = "spell", - base = { - manaCostMore = 1.4, - damageMore = 0.9, + color = 3, + requireSkillTypes = { 26, }, + addSkillTypes = { }, + excludeSkillTypes = { 30, 37, 41, 42, 15, }, + baseMods = { + mod("ManaCost", "MORE", 40), + --"base_spell_repeat_count" = 1 + mod("Damage", "MORE", -10), --"support_echo_damage_+%_final" = -10 }, - quality = { - spell_damageInc = 0.5, + qualityMods = { + mod("Damage", "INC", 0.5, ModFlag.Spell, 0, nil), --"spell_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("Speed", "MORE", nil, ModFlag.Spell), --"support_multicast_cast_speed_+%_final" }, levels = { - [1] = { castSpeedMore = 1.51, }, - [2] = { castSpeedMore = 1.52, }, - [3] = { castSpeedMore = 1.53, }, - [4] = { castSpeedMore = 1.54, }, - [5] = { castSpeedMore = 1.55, }, - [6] = { castSpeedMore = 1.56, }, - [7] = { castSpeedMore = 1.57, }, - [8] = { castSpeedMore = 1.58, }, - [9] = { castSpeedMore = 1.59, }, - [10] = { castSpeedMore = 1.6, }, - [11] = { castSpeedMore = 1.61, }, - [12] = { castSpeedMore = 1.62, }, - [13] = { castSpeedMore = 1.63, }, - [14] = { castSpeedMore = 1.64, }, - [15] = { castSpeedMore = 1.65, }, - [16] = { castSpeedMore = 1.66, }, - [17] = { castSpeedMore = 1.67, }, - [18] = { castSpeedMore = 1.68, }, - [19] = { castSpeedMore = 1.69, }, - [20] = { castSpeedMore = 1.7, }, - [21] = { castSpeedMore = 1.71, }, - [22] = { castSpeedMore = 1.72, }, - [23] = { castSpeedMore = 1.73, }, - [24] = { castSpeedMore = 1.74, }, - [25] = { castSpeedMore = 1.75, }, - [26] = { castSpeedMore = 1.76, }, - [27] = { castSpeedMore = 1.77, }, - [28] = { castSpeedMore = 1.78, }, - [29] = { castSpeedMore = 1.79, }, - [30] = { castSpeedMore = 1.8, }, - } -} \ No newline at end of file + [1] = { 51, }, + [2] = { 52, }, + [3] = { 53, }, + [4] = { 54, }, + [5] = { 55, }, + [6] = { 56, }, + [7] = { 57, }, + [8] = { 58, }, + [9] = { 59, }, + [10] = { 60, }, + [11] = { 61, }, + [12] = { 62, }, + [13] = { 63, }, + [14] = { 64, }, + [15] = { 65, }, + [16] = { 66, }, + [17] = { 67, }, + [18] = { 68, }, + [19] = { 69, }, + [20] = { 70, }, + [21] = { 71, }, + [22] = { 72, }, + [23] = { 73, }, + [24] = { 74, }, + [25] = { 75, }, + [26] = { 76, }, + [27] = { 77, }, + [28] = { 78, }, + [29] = { 79, }, + [30] = { 80, }, + }, +} diff --git a/Data/Gems/sup_str.lua b/Data/Gems/sup_str.lua index 2b964d58..a1d2e0b7 100644 --- a/Data/Gems/sup_str.lua +++ b/Data/Gems/sup_str.lua @@ -1,143 +1,168 @@ -- Path of Building -- --- Strength support gems +-- Active Strength skills -- Skill gem data (c) Grinding Gear Games -- -local gems = ... +local gems, mod, flag, skill = ... gems["Added Fire Damage"] = { + fire = true, strength = true, support = true, - fire = true, - require = "hit", - base = { - manaCostMore = 1.2, + color = 1, + requireSkillTypes = { 10, 1, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 20), }, - quality = { - fireInc = 0.5, + qualityMods = { + mod("FireDamage", "INC", 0.5), --"fire_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("PhysicalDamageGainAsFire", "BASE", nil, 0, 0, nil), --"physical_damage_%_to_add_as_fire" }, levels = { - [1] = { physicalGainAsfire = 25, }, - [2] = { physicalGainAsfire = 26, }, - [3] = { physicalGainAsfire = 27, }, - [4] = { physicalGainAsfire = 28, }, - [5] = { physicalGainAsfire = 29, }, - [6] = { physicalGainAsfire = 30, }, - [7] = { physicalGainAsfire = 31, }, - [8] = { physicalGainAsfire = 32, }, - [9] = { physicalGainAsfire = 33, }, - [10] = { physicalGainAsfire = 34, }, - [11] = { physicalGainAsfire = 35, }, - [12] = { physicalGainAsfire = 36, }, - [13] = { physicalGainAsfire = 37, }, - [14] = { physicalGainAsfire = 38, }, - [15] = { physicalGainAsfire = 39, }, - [16] = { physicalGainAsfire = 40, }, - [17] = { physicalGainAsfire = 41, }, - [18] = { physicalGainAsfire = 42, }, - [19] = { physicalGainAsfire = 43, }, - [20] = { physicalGainAsfire = 44, }, - [21] = { physicalGainAsfire = 45, }, - [22] = { physicalGainAsfire = 46, }, - [23] = { physicalGainAsfire = 47, }, - [24] = { physicalGainAsfire = 48, }, - [25] = { physicalGainAsfire = 49, }, - [26] = { physicalGainAsfire = 50, }, - [27] = { physicalGainAsfire = 51, }, - [28] = { physicalGainAsfire = 52, }, - [29] = { physicalGainAsfire = 53, }, - [30] = { physicalGainAsfire = 54, }, - } + [1] = { 25, }, + [2] = { 26, }, + [3] = { 27, }, + [4] = { 28, }, + [5] = { 29, }, + [6] = { 30, }, + [7] = { 31, }, + [8] = { 32, }, + [9] = { 33, }, + [10] = { 34, }, + [11] = { 35, }, + [12] = { 36, }, + [13] = { 37, }, + [14] = { 38, }, + [15] = { 39, }, + [16] = { 40, }, + [17] = { 41, }, + [18] = { 42, }, + [19] = { 43, }, + [20] = { 44, }, + [21] = { 45, }, + [22] = { 46, }, + [23] = { 47, }, + [24] = { 48, }, + [25] = { 49, }, + [26] = { 50, }, + [27] = { 51, }, + [28] = { 52, }, + [29] = { 53, }, + [30] = { 54, }, + }, } gems["Blood Magic"] = { strength = true, support = true, - base = { - skill_bloodMagic = true, + color = 1, + requireSkillTypes = { }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + flag("SkillBloodMagic", true), --"base_use_life_in_place_of_mana" = ? }, - quality = { - skill_costInc = -0.5, + qualityMods = { + mod("ManaCost", "INC", -0.5), --"base_mana_cost_-%" = 0.5 + }, + levelMods = { + [1] = mod("ManaCost", "MORE", nil), }, levels = { - [1] = { manaCostMore = 2.45, }, - [2] = { manaCostMore = 2.42, }, - [3] = { manaCostMore = 2.39, }, - [4] = { manaCostMore = 2.37, }, - [5] = { manaCostMore = 2.34, }, - [6] = { manaCostMore = 2.32, }, - [7] = { manaCostMore = 2.29, }, - [8] = { manaCostMore = 2.26, }, - [9] = { manaCostMore = 2.24, }, - [10] = { manaCostMore = 2.21, }, - [11] = { manaCostMore = 2.18, }, - [12] = { manaCostMore = 2.16, }, - [13] = { manaCostMore = 2.13, }, - [14] = { manaCostMore = 2.11, }, - [15] = { manaCostMore = 2.08, }, - [16] = { manaCostMore = 2.05, }, - [17] = { manaCostMore = 2.03, }, - [18] = { manaCostMore = 2, }, - [19] = { manaCostMore = 1.97, }, - [20] = { manaCostMore = 1.96, }, - [21] = { manaCostMore = 1.93, }, - [22] = { manaCostMore = 1.9, }, - [23] = { manaCostMore = 1.87, }, - [24] = { manaCostMore = 1.84, }, - [25] = { manaCostMore = 1.81, }, - [26] = { manaCostMore = 1.78, }, - [27] = { manaCostMore = 1.75, }, - [28] = { manaCostMore = 1.72, }, - [29] = { manaCostMore = 1.69, }, - [30] = { manaCostMore = 1.66, }, - } + [1] = { 145, }, + [2] = { 142, }, + [3] = { 139, }, + [4] = { 137, }, + [5] = { 134, }, + [6] = { 132, }, + [7] = { 129, }, + [8] = { 126, }, + [9] = { 124, }, + [10] = { 121, }, + [11] = { 118, }, + [12] = { 116, }, + [13] = { 113, }, + [14] = { 111, }, + [15] = { 108, }, + [16] = { 105, }, + [17] = { 103, }, + [18] = { 100, }, + [19] = { 97, }, + [20] = { 96, }, + [21] = { 93, }, + [22] = { 90, }, + [23] = { 87, }, + [24] = { 84, }, + [25] = { 81, }, + [26] = { 78, }, + [27] = { 75, }, + [28] = { 72, }, + [29] = { 69, }, + [30] = { 66, }, + }, } gems["Bloodlust"] = { + attack = true, strength = true, support = true, - attack = true, melee = true, - require = "melee", - base = { - manaCostMore = 1.25, + color = 1, + requireSkillTypes = { 24, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 25), + flag("CannotBleed"), --"cannot_cause_bleeding" = ? }, - quality = { - CondMod_EnemyBleeding_melee_damageInc = 0.5, + qualityMods = { + mod("PhysicalDamage", "INC", 0.5, ModFlag.Melee, 0, { type = "Condition", var = "EnemyBleeding" }), --"melee_damage_vs_bleeding_enemies_+%" = 0.5 + }, + levelMods = { + [1] = mod("PhysicalDamage", "MORE", nil, ModFlag.Melee, 0, { type = "Condition", var = "EnemyBleeding" }), --"support_bloodlust_melee_physical_damage_+%_final_vs_bleeding_enemies" }, levels = { - [1] = { CondMod_EnemyBleeding_melee_physicalMore = 1.4, }, - [2] = { CondMod_EnemyBleeding_melee_physicalMore = 1.41, }, - [3] = { CondMod_EnemyBleeding_melee_physicalMore = 1.42, }, - [4] = { CondMod_EnemyBleeding_melee_physicalMore = 1.43, }, - [5] = { CondMod_EnemyBleeding_melee_physicalMore = 1.44, }, - [6] = { CondMod_EnemyBleeding_melee_physicalMore = 1.45, }, - [7] = { CondMod_EnemyBleeding_melee_physicalMore = 1.46, }, - [8] = { CondMod_EnemyBleeding_melee_physicalMore = 1.47, }, - [9] = { CondMod_EnemyBleeding_melee_physicalMore = 1.48, }, - [10] = { CondMod_EnemyBleeding_melee_physicalMore = 1.49, }, - [11] = { CondMod_EnemyBleeding_melee_physicalMore = 1.5, }, - [12] = { CondMod_EnemyBleeding_melee_physicalMore = 1.51, }, - [13] = { CondMod_EnemyBleeding_melee_physicalMore = 1.52, }, - [14] = { CondMod_EnemyBleeding_melee_physicalMore = 1.53, }, - [15] = { CondMod_EnemyBleeding_melee_physicalMore = 1.54, }, - [16] = { CondMod_EnemyBleeding_melee_physicalMore = 1.55, }, - [17] = { CondMod_EnemyBleeding_melee_physicalMore = 1.56, }, - [18] = { CondMod_EnemyBleeding_melee_physicalMore = 1.57, }, - [19] = { CondMod_EnemyBleeding_melee_physicalMore = 1.58, }, - [20] = { CondMod_EnemyBleeding_melee_physicalMore = 1.59, }, - [21] = { CondMod_EnemyBleeding_melee_physicalMore = 1.6, }, - [22] = { CondMod_EnemyBleeding_melee_physicalMore = 1.61, }, - [23] = { CondMod_EnemyBleeding_melee_physicalMore = 1.62, }, - [24] = { CondMod_EnemyBleeding_melee_physicalMore = 1.63, }, - [25] = { CondMod_EnemyBleeding_melee_physicalMore = 1.64, }, - [26] = { CondMod_EnemyBleeding_melee_physicalMore = 1.65, }, - [27] = { CondMod_EnemyBleeding_melee_physicalMore = 1.66, }, - [28] = { CondMod_EnemyBleeding_melee_physicalMore = 1.67, }, - [29] = { CondMod_EnemyBleeding_melee_physicalMore = 1.68, }, - [30] = { CondMod_EnemyBleeding_melee_physicalMore = 1.69, }, - } + [1] = { 40, }, + [2] = { 41, }, + [3] = { 42, }, + [4] = { 43, }, + [5] = { 44, }, + [6] = { 45, }, + [7] = { 46, }, + [8] = { 47, }, + [9] = { 48, }, + [10] = { 49, }, + [11] = { 50, }, + [12] = { 51, }, + [13] = { 52, }, + [14] = { 53, }, + [15] = { 54, }, + [16] = { 55, }, + [17] = { 56, }, + [18] = { 57, }, + [19] = { 58, }, + [20] = { 59, }, + [21] = { 60, }, + [22] = { 61, }, + [23] = { 62, }, + [24] = { 63, }, + [25] = { 64, }, + [26] = { 65, }, + [27] = { 66, }, + [28] = { 67, }, + [29] = { 68, }, + [30] = { 69, }, + }, } gems["Cast on Melee Kill"] = { strength = true, + support = true, + melee = true, + attack = true, + spell = true, + trigger = true, unsupported = true, } gems["Cast when Damage Taken"] = { @@ -145,1038 +170,1225 @@ gems["Cast when Damage Taken"] = { support = true, spell = true, trigger = true, - require = "spell", - base = { + color = 1, + requireSkillTypes = { 36, }, + addSkillTypes = { 42, }, + excludeSkillTypes = { 37, 41, 30, 44, }, + baseMods = { + --"cast_on_damage_taken_%" = 100 + --"spell_uncastable_if_triggerable" = ? + skill("showAverage", true), --"base_skill_show_average_damage_instead_of_dps" = ? }, - quality = { - damageInc = 0.5, + qualityMods = { + mod("Damage", "INC", 0.5, 0, 0, nil), --"damage_+%" = 0.5 + }, + levelMods = { + --[1] = "cast_on_damage_taken_threshold" + [2] = mod("Damage", "MORE", nil), --"cast_on_damage_taken_damage_+%_final" + --[3] = "local_support_gem_max_skill_level_requirement_to_support" }, levels = { - [1] = { damageMore = 0.3, }, - [2] = { damageMore = 0.34, }, - [3] = { damageMore = 0.38, }, - [4] = { damageMore = 0.42, }, - [5] = { damageMore = 0.46, }, - [6] = { damageMore = 0.5, }, - [7] = { damageMore = 0.54, }, - [8] = { damageMore = 0.58, }, - [9] = { damageMore = 0.62, }, - [10] = { damageMore = 0.66, }, - [11] = { damageMore = 0.7, }, - [12] = { damageMore = 0.74, }, - [13] = { damageMore = 0.78, }, - [14] = { damageMore = 0.82, }, - [15] = { damageMore = 0.86, }, - [16] = { damageMore = 0.9, }, - [17] = { damageMore = 0.94, }, - [18] = { damageMore = 0.98, }, - [19] = { damageMore = 1.02, }, - [20] = { damageMore = 1.06, }, - [21] = { damageMore = 1.1, }, - [22] = { damageMore = 1.14, }, - [23] = { damageMore = 1.18, }, - [24] = { damageMore = 1.22, }, - [25] = { damageMore = 1.26, }, - [26] = { damageMore = 1.3, }, - [27] = { damageMore = 1.34, }, - [28] = { damageMore = 1.38, }, - [29] = { damageMore = 1.42, }, - [30] = { damageMore = 1.46, }, - } + [1] = { 528, -70, 38, }, + [2] = { 583, -66, 40, }, + [3] = { 661, -62, 42, }, + [4] = { 725, -58, 44, }, + [5] = { 812, -54, 46, }, + [6] = { 897, -50, 48, }, + [7] = { 1003, -46, 50, }, + [8] = { 1107, -42, 52, }, + [9] = { 1221, -38, 54, }, + [10] = { 1354, -34, 56, }, + [11] = { 1485, -30, 58, }, + [12] = { 1635, -26, 60, }, + [13] = { 1804, -22, 62, }, + [14] = { 1980, -18, 64, }, + [15] = { 2184, -14, 65, }, + [16] = { 2394, -10, 66, }, + [17] = { 2621, -6, 67, }, + [18] = { 2874, -2, 68, }, + [19] = { 3142, 2, 69, }, + [20] = { 3272, 6, 70, }, + [21] = { 3580, 10, 72, }, + [22] = { 3950, 14, 74, }, + [23] = { 4350, 18, 76, }, + [24] = { 4780, 22, 78, }, + [25] = { 5240, 26, 80, }, + [26] = { 5730, 30, 82, }, + [27] = { 6250, 34, 84, }, + [28] = { 6800, 38, 86, }, + [29] = { 7380, 42, 88, }, + [30] = { 7990, 46, 90, }, + }, } gems["Cold to Fire"] = { + cold = true, + fire = true, strength = true, support = true, - fire = true, - cold = true, - require = "hit", - base = { - manaCostMore = 1.1, - coldConvertTofire = 50, + color = 1, + requireSkillTypes = { 10, 1, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 10), + skill("ColdDamageConvertToFire", 50), --"skill_cold_damage_%_to_convert_to_fire" = 50 }, - quality = { - fireInc = 0.5, - coldInc = 0.5, + qualityMods = { + mod("ColdDamage", "INC", 0.5), --"cold_damage_+%" = 0.5 + mod("FireDamage", "INC", 0.5), --"fire_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("ColdDamageGainAsFire", "BASE", nil), --"cold_damage_%_to_add_as_fire" }, levels = { - [1] = { coldGainAsfire = 10, }, - [2] = { coldGainAsfire = 11, }, - [3] = { coldGainAsfire = 12, }, - [4] = { coldGainAsfire = 13, }, - [5] = { coldGainAsfire = 14, }, - [6] = { coldGainAsfire = 15, }, - [7] = { coldGainAsfire = 16, }, - [8] = { coldGainAsfire = 17, }, - [9] = { coldGainAsfire = 18, }, - [10] = { coldGainAsfire = 19, }, - [11] = { coldGainAsfire = 20, }, - [12] = { coldGainAsfire = 21, }, - [13] = { coldGainAsfire = 22, }, - [14] = { coldGainAsfire = 23, }, - [15] = { coldGainAsfire = 24, }, - [16] = { coldGainAsfire = 25, }, - [17] = { coldGainAsfire = 26, }, - [18] = { coldGainAsfire = 27, }, - [19] = { coldGainAsfire = 28, }, - [20] = { coldGainAsfire = 29, }, - [21] = { coldGainAsfire = 30, }, - [22] = { coldGainAsfire = 31, }, - [23] = { coldGainAsfire = 32, }, - [24] = { coldGainAsfire = 33, }, - [25] = { coldGainAsfire = 34, }, - [26] = { coldGainAsfire = 35, }, - [27] = { coldGainAsfire = 36, }, - [28] = { coldGainAsfire = 37, }, - [29] = { coldGainAsfire = 38, }, - [30] = { coldGainAsfire = 39, }, - } + [1] = { 10, }, + [2] = { 11, }, + [3] = { 12, }, + [4] = { 13, }, + [5] = { 14, }, + [6] = { 15, }, + [7] = { 16, }, + [8] = { 17, }, + [9] = { 18, }, + [10] = { 19, }, + [11] = { 20, }, + [12] = { 21, }, + [13] = { 22, }, + [14] = { 23, }, + [15] = { 24, }, + [16] = { 25, }, + [17] = { 26, }, + [18] = { 27, }, + [19] = { 28, }, + [20] = { 29, }, + [21] = { 30, }, + [22] = { 31, }, + [23] = { 32, }, + [24] = { 33, }, + [25] = { 34, }, + [26] = { 35, }, + [27] = { 36, }, + [28] = { 37, }, + [29] = { 38, }, + [30] = { 39, }, + }, } gems["Empower"] = { + low_max_level = true, strength = true, support = true, - base = { - manaCostMore = 1.25, + color = 1, + requireSkillTypes = { }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 25), }, - quality = { + qualityMods = { + --"local_gem_experience_gain_+%" = 5 + }, + levelMods = { + [1] = mod("GemProperty", "LIST", { keyword = "active", key = "level", value = nil }), --"supported_active_skill_gem_level_+" }, levels = { - [1] = { gemLevel_active = 0, }, - [2] = { gemLevel_active = 1, }, - [3] = { gemLevel_active = 2, }, - [4] = { gemLevel_active = 3, }, - [5] = { gemLevel_active = 4, }, - [6] = { gemLevel_active = 5, }, - [7] = { gemLevel_active = 6, }, - [8] = { gemLevel_active = 7, }, - [9] = { gemLevel_active = 8, }, - [10] = { gemLevel_active = 9, }, - } + [1] = { 0, }, + [2] = { 1, }, + [3] = { 2, }, + [4] = { 3, }, + [5] = { 4, }, + [6] = { 5, }, + [7] = { 6, }, + [8] = { 7, }, + [9] = { 8, }, + [10] = { 9, }, + }, } gems["Endurance Charge on Melee Stun"] = { strength = true, support = true, - attack = true, melee = true, - require = "melee", - base = { - manaCostMore = 1.1, + attack = true, + color = 1, + requireSkillTypes = { 24, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 10), + --"gain_endurance_charge_on_melee_stun" = ? }, - quality = { - stunEnemyDurationInc = 1, + qualityMods = { + mod("EnemyStunDuration", "INC", 1), --"base_stun_duration_+%" = 1 + }, + levelMods = { + [1] = mod("EnemyStunThreshold", "INC", nil), --"base_stun_threshold_reduction_+%" }, levels = { - [1] = { stunEnemyThresholdInc = -0, }, - [2] = { stunEnemyThresholdInc = -1, }, - [3] = { stunEnemyThresholdInc = -2, }, - [4] = { stunEnemyThresholdInc = -3, }, - [5] = { stunEnemyThresholdInc = -4, }, - [6] = { stunEnemyThresholdInc = -5, }, - [7] = { stunEnemyThresholdInc = -6, }, - [8] = { stunEnemyThresholdInc = -7, }, - [9] = { stunEnemyThresholdInc = -8, }, - [10] = { stunEnemyThresholdInc = -9, }, - [11] = { stunEnemyThresholdInc = -10, }, - [12] = { stunEnemyThresholdInc = -11, }, - [13] = { stunEnemyThresholdInc = -12, }, - [14] = { stunEnemyThresholdInc = -13, }, - [15] = { stunEnemyThresholdInc = -14, }, - [16] = { stunEnemyThresholdInc = -15, }, - [17] = { stunEnemyThresholdInc = -16, }, - [18] = { stunEnemyThresholdInc = -17, }, - [19] = { stunEnemyThresholdInc = -18, }, - [20] = { stunEnemyThresholdInc = -19, }, - [21] = { stunEnemyThresholdInc = -20, }, - [22] = { stunEnemyThresholdInc = -21, }, - [23] = { stunEnemyThresholdInc = -22, }, - [24] = { stunEnemyThresholdInc = -23, }, - [25] = { stunEnemyThresholdInc = -24, }, - [26] = { stunEnemyThresholdInc = -25, }, - [27] = { stunEnemyThresholdInc = -26, }, - [28] = { stunEnemyThresholdInc = -27, }, - [29] = { stunEnemyThresholdInc = -28, }, - [30] = { stunEnemyThresholdInc = -29, }, - } + [1] = { -0, }, + [2] = { -1, }, + [3] = { -2, }, + [4] = { -3, }, + [5] = { -4, }, + [6] = { -5, }, + [7] = { -6, }, + [8] = { -7, }, + [9] = { -8, }, + [10] = { -9, }, + [11] = { -10, }, + [12] = { -11, }, + [13] = { -12, }, + [14] = { -13, }, + [15] = { -14, }, + [16] = { -15, }, + [17] = { -16, }, + [18] = { -17, }, + [19] = { -18, }, + [20] = { -19, }, + [21] = { -20, }, + [22] = { -21, }, + [23] = { -22, }, + [24] = { -23, }, + [25] = { -24, }, + [26] = { -25, }, + [27] = { -26, }, + [28] = { -27, }, + [29] = { -28, }, + [30] = { -29, }, + }, } gems["Fire Penetration"] = { + fire = true, strength = true, support = true, - fire = true, - require = "hit", - base = { - manaCostMore = 1.4, + color = 1, + requireSkillTypes = { 10, 1, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 40), }, - quality = { - fireInc = 0.5, + qualityMods = { + mod("FireDamage", "INC", 0.5), --"fire_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("FirePenetration", "BASE", nil), --"base_reduce_enemy_fire_resistance_%" }, levels = { - [1] = { firePen = 18, }, - [2] = { firePen = 19, }, - [3] = { firePen = 20, }, - [4] = { firePen = 21, }, - [5] = { firePen = 22, }, - [6] = { firePen = 23, }, - [7] = { firePen = 24, }, - [8] = { firePen = 25, }, - [9] = { firePen = 26, }, - [10] = { firePen = 27, }, - [11] = { firePen = 28, }, - [12] = { firePen = 29, }, - [13] = { firePen = 30, }, - [14] = { firePen = 31, }, - [15] = { firePen = 32, }, - [16] = { firePen = 33, }, - [17] = { firePen = 34, }, - [18] = { firePen = 35, }, - [19] = { firePen = 36, }, - [20] = { firePen = 37, }, - [21] = { firePen = 38, }, - [22] = { firePen = 39, }, - [23] = { firePen = 40, }, - [24] = { firePen = 41, }, - [25] = { firePen = 42, }, - [26] = { firePen = 43, }, - [27] = { firePen = 44, }, - [28] = { firePen = 45, }, - [29] = { firePen = 46, }, - [30] = { firePen = 47, }, - } + [1] = { 18, }, + [2] = { 19, }, + [3] = { 20, }, + [4] = { 21, }, + [5] = { 22, }, + [6] = { 23, }, + [7] = { 24, }, + [8] = { 25, }, + [9] = { 26, }, + [10] = { 27, }, + [11] = { 28, }, + [12] = { 29, }, + [13] = { 30, }, + [14] = { 31, }, + [15] = { 32, }, + [16] = { 33, }, + [17] = { 34, }, + [18] = { 35, }, + [19] = { 36, }, + [20] = { 37, }, + [21] = { 38, }, + [22] = { 39, }, + [23] = { 40, }, + [24] = { 41, }, + [25] = { 42, }, + [26] = { 43, }, + [27] = { 44, }, + [28] = { 45, }, + [29] = { 46, }, + [30] = { 47, }, + }, } gems["Fortify"] = { + attack = true, strength = true, support = true, - attack = true, melee = true, - require = "melee", - base = { - manaCostMore = 1.1, - CondBuff_Fortify = true, + color = 1, + requireSkillTypes = { 24, }, + addSkillTypes = { }, + excludeSkillTypes = { 47, }, + baseMods = { + mod("ManaCost", "MORE", 10), + mod("Misc", "LIST", { type = "Condition", var = "Fortify" }, 0, 0, { type = "Condition", var = "Combat" }), --"chance_to_fortify_on_melee_hit_+%" = 100 + mod("FortifyDuration", "INC", 25), --"fortify_duration_+%" = 25 }, - quality = { - fortifyDurationInc = 0.5, + qualityMods = { + mod("FortifyDuration", "INC", 0.5), --"fortify_duration_+%" = 0.5 + }, + levelMods = { + [1] = mod("PhysicalDamage", "INC", nil, ModFlag.Melee), --"melee_physical_damage_+%" }, levels = { - [1] = { melee_physicalInc = 25, }, - [2] = { melee_physicalInc = 26, }, - [3] = { melee_physicalInc = 27, }, - [4] = { melee_physicalInc = 28, }, - [5] = { melee_physicalInc = 29, }, - [6] = { melee_physicalInc = 30, }, - [7] = { melee_physicalInc = 31, }, - [8] = { melee_physicalInc = 32, }, - [9] = { melee_physicalInc = 33, }, - [10] = { melee_physicalInc = 34, }, - [11] = { melee_physicalInc = 35, }, - [12] = { melee_physicalInc = 36, }, - [13] = { melee_physicalInc = 37, }, - [14] = { melee_physicalInc = 38, }, - [15] = { melee_physicalInc = 39, }, - [16] = { melee_physicalInc = 40, }, - [17] = { melee_physicalInc = 41, }, - [18] = { melee_physicalInc = 42, }, - [19] = { melee_physicalInc = 43, }, - [20] = { melee_physicalInc = 44, }, - [21] = { melee_physicalInc = 45, }, - [22] = { melee_physicalInc = 46, }, - [23] = { melee_physicalInc = 47, }, - [24] = { melee_physicalInc = 48, }, - [25] = { melee_physicalInc = 49, }, - [26] = { melee_physicalInc = 50, }, - [27] = { melee_physicalInc = 51, }, - [28] = { melee_physicalInc = 52, }, - [29] = { melee_physicalInc = 53, }, - [30] = { melee_physicalInc = 54, }, - } + [1] = { 25, }, + [2] = { 26, }, + [3] = { 27, }, + [4] = { 28, }, + [5] = { 29, }, + [6] = { 30, }, + [7] = { 31, }, + [8] = { 32, }, + [9] = { 33, }, + [10] = { 34, }, + [11] = { 35, }, + [12] = { 36, }, + [13] = { 37, }, + [14] = { 38, }, + [15] = { 39, }, + [16] = { 40, }, + [17] = { 41, }, + [18] = { 42, }, + [19] = { 43, }, + [20] = { 44, }, + [21] = { 45, }, + [22] = { 46, }, + [23] = { 47, }, + [24] = { 48, }, + [25] = { 49, }, + [26] = { 50, }, + [27] = { 51, }, + [28] = { 52, }, + [29] = { 53, }, + [30] = { 54, }, + }, } gems["Generosity"] = { strength = true, + support = true, + aura = true, unsupported = true, } gems["Increased Burning Damage"] = { + fire = true, strength = true, support = true, - fire = true, - base = { - manaCostMore = 1.2, + color = 1, + requireSkillTypes = { 10, 1, 29, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 20), }, - quality = { - dot_fireInc = 0.5, + qualityMods = { + mod("FireDamage", "INC", 0.5, ModFlag.Dot), --"burn_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("FireDamage", "INC", nil, ModFlag.Dot), --"burn_damage_+%" }, levels = { - [1] = { dot_fireInc = 40, }, - [2] = { dot_fireInc = 41, }, - [3] = { dot_fireInc = 42, }, - [4] = { dot_fireInc = 43, }, - [5] = { dot_fireInc = 44, }, - [6] = { dot_fireInc = 45, }, - [7] = { dot_fireInc = 46, }, - [8] = { dot_fireInc = 47, }, - [9] = { dot_fireInc = 48, }, - [10] = { dot_fireInc = 49, }, - [11] = { dot_fireInc = 50, }, - [12] = { dot_fireInc = 51, }, - [13] = { dot_fireInc = 52, }, - [14] = { dot_fireInc = 53, }, - [15] = { dot_fireInc = 54, }, - [16] = { dot_fireInc = 55, }, - [17] = { dot_fireInc = 56, }, - [18] = { dot_fireInc = 57, }, - [19] = { dot_fireInc = 58, }, - [20] = { dot_fireInc = 59, }, - [21] = { dot_fireInc = 60, }, - [22] = { dot_fireInc = 61, }, - [23] = { dot_fireInc = 62, }, - [24] = { dot_fireInc = 63, }, - [25] = { dot_fireInc = 64, }, - [26] = { dot_fireInc = 65, }, - [27] = { dot_fireInc = 66, }, - [28] = { dot_fireInc = 67, }, - [29] = { dot_fireInc = 68, }, - [30] = { dot_fireInc = 69, }, - } + [1] = { 40, }, + [2] = { 41, }, + [3] = { 42, }, + [4] = { 43, }, + [5] = { 44, }, + [6] = { 45, }, + [7] = { 46, }, + [8] = { 47, }, + [9] = { 48, }, + [10] = { 49, }, + [11] = { 50, }, + [12] = { 51, }, + [13] = { 52, }, + [14] = { 53, }, + [15] = { 54, }, + [16] = { 55, }, + [17] = { 56, }, + [18] = { 57, }, + [19] = { 58, }, + [20] = { 59, }, + [21] = { 60, }, + [22] = { 61, }, + [23] = { 62, }, + [24] = { 63, }, + [25] = { 64, }, + [26] = { 65, }, + [27] = { 66, }, + [28] = { 67, }, + [29] = { 68, }, + [30] = { 69, }, + }, } gems["Increased Duration"] = { strength = true, support = true, - require = "duration", - base = { - manaCostMore = 1.4, + duration = true, + color = 1, + requireSkillTypes = { 12, 55, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 40), }, - quality = { - durationInc = 0.5, + qualityMods = { + mod("Duration", "INC", 0.5), --"skill_effect_duration_+%" = 0.5 + }, + levelMods = { + [1] = mod("Duration", "INC", nil), --"skill_effect_duration_+%" }, levels = { - [1] = { durationInc = 45, }, - [2] = { durationInc = 46, }, - [3] = { durationInc = 47, }, - [4] = { durationInc = 48, }, - [5] = { durationInc = 49, }, - [6] = { durationInc = 50, }, - [7] = { durationInc = 51, }, - [8] = { durationInc = 52, }, - [9] = { durationInc = 53, }, - [10] = { durationInc = 54, }, - [11] = { durationInc = 55, }, - [12] = { durationInc = 56, }, - [13] = { durationInc = 57, }, - [14] = { durationInc = 58, }, - [15] = { durationInc = 59, }, - [16] = { durationInc = 60, }, - [17] = { durationInc = 61, }, - [18] = { durationInc = 62, }, - [19] = { durationInc = 63, }, - [20] = { durationInc = 64, }, - [21] = { durationInc = 65, }, - [22] = { durationInc = 66, }, - [23] = { durationInc = 67, }, - [24] = { durationInc = 68, }, - [25] = { durationInc = 69, }, - [26] = { durationInc = 70, }, - [27] = { durationInc = 71, }, - [28] = { durationInc = 72, }, - [29] = { durationInc = 73, }, - [30] = { durationInc = 74, }, - } + [1] = { 45, }, + [2] = { 46, }, + [3] = { 47, }, + [4] = { 48, }, + [5] = { 49, }, + [6] = { 50, }, + [7] = { 51, }, + [8] = { 52, }, + [9] = { 53, }, + [10] = { 54, }, + [11] = { 55, }, + [12] = { 56, }, + [13] = { 57, }, + [14] = { 58, }, + [15] = { 59, }, + [16] = { 60, }, + [17] = { 61, }, + [18] = { 62, }, + [19] = { 63, }, + [20] = { 64, }, + [21] = { 65, }, + [22] = { 66, }, + [23] = { 67, }, + [24] = { 68, }, + [25] = { 69, }, + [26] = { 70, }, + [27] = { 71, }, + [28] = { 72, }, + [29] = { 73, }, + [30] = { 74, }, + }, } gems["Iron Grip"] = { + projectile = true, strength = true, support = true, - projectile = true, - require = "attack and projectile", - base = { - ironGrip = true, + color = 1, + requireSkillTypes = { 48, 56, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + flag("IronGrip"), --"keystone_strong_bowman" = ? }, - quality = { - projectile_damageInc = 0.5, + qualityMods = { + mod("Damage", "INC", 0.5, ModFlag.Projectile), --"projectile_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "INC", nil, ModFlag.Projectile), --"projectile_damage_+%" }, levels = { - [1] = { projectile_damageInc = 0, }, - [2] = { projectile_damageInc = 2, }, - [3] = { projectile_damageInc = 4, }, - [4] = { projectile_damageInc = 6, }, - [5] = { projectile_damageInc = 8, }, - [6] = { projectile_damageInc = 10, }, - [7] = { projectile_damageInc = 12, }, - [8] = { projectile_damageInc = 14, }, - [9] = { projectile_damageInc = 16, }, - [10] = { projectile_damageInc = 18, }, - [11] = { projectile_damageInc = 20, }, - [12] = { projectile_damageInc = 22, }, - [13] = { projectile_damageInc = 24, }, - [14] = { projectile_damageInc = 26, }, - [15] = { projectile_damageInc = 28, }, - [16] = { projectile_damageInc = 30, }, - [17] = { projectile_damageInc = 32, }, - [18] = { projectile_damageInc = 34, }, - [19] = { projectile_damageInc = 36, }, - [20] = { projectile_damageInc = 38, }, - [21] = { projectile_damageInc = 40, }, - [22] = { projectile_damageInc = 42, }, - [23] = { projectile_damageInc = 44, }, - [24] = { projectile_damageInc = 46, }, - [25] = { projectile_damageInc = 48, }, - [26] = { projectile_damageInc = 50, }, - [27] = { projectile_damageInc = 52, }, - [28] = { projectile_damageInc = 54, }, - [29] = { projectile_damageInc = 56, }, - [30] = { projectile_damageInc = 58, }, - } + [1] = { 0, }, + [2] = { 2, }, + [3] = { 4, }, + [4] = { 6, }, + [5] = { 8, }, + [6] = { 10, }, + [7] = { 12, }, + [8] = { 14, }, + [9] = { 16, }, + [10] = { 18, }, + [11] = { 20, }, + [12] = { 22, }, + [13] = { 24, }, + [14] = { 26, }, + [15] = { 28, }, + [16] = { 30, }, + [17] = { 32, }, + [18] = { 34, }, + [19] = { 36, }, + [20] = { 38, }, + [21] = { 40, }, + [22] = { 42, }, + [23] = { 44, }, + [24] = { 46, }, + [25] = { 48, }, + [26] = { 50, }, + [27] = { 52, }, + [28] = { 54, }, + [29] = { 56, }, + [30] = { 58, }, + }, } gems["Iron Will"] = { + spell = true, strength = true, support = true, - spell = true, - require = "spell", - base = { - ironWill = true, + color = 1, + requireSkillTypes = { 10, 52, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + flag("IronWill"), --"strong_casting" = ? }, - quality = { - spell_damageInc = 0.5, + qualityMods = { + mod("Damage", "INC", 0.5, ModFlag.Spell, 0, nil), --"spell_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("Damage", "INC", nil, ModFlag.Spell, 0, nil), --"spell_damage_+%" }, levels = { - [1] = { spell_damageInc = 0, }, - [2] = { spell_damageInc = 2, }, - [3] = { spell_damageInc = 4, }, - [4] = { spell_damageInc = 6, }, - [5] = { spell_damageInc = 8, }, - [6] = { spell_damageInc = 10, }, - [7] = { spell_damageInc = 12, }, - [8] = { spell_damageInc = 14, }, - [9] = { spell_damageInc = 16, }, - [10] = { spell_damageInc = 18, }, - [11] = { spell_damageInc = 20, }, - [12] = { spell_damageInc = 22, }, - [13] = { spell_damageInc = 24, }, - [14] = { spell_damageInc = 26, }, - [15] = { spell_damageInc = 28, }, - [16] = { spell_damageInc = 30, }, - [17] = { spell_damageInc = 32, }, - [18] = { spell_damageInc = 34, }, - [19] = { spell_damageInc = 36, }, - [20] = { spell_damageInc = 38, }, - [21] = { spell_damageInc = 40, }, - [22] = { spell_damageInc = 42, }, - [23] = { spell_damageInc = 44, }, - [24] = { spell_damageInc = 46, }, - [25] = { spell_damageInc = 48, }, - [26] = { spell_damageInc = 50, }, - [27] = { spell_damageInc = 52, }, - [28] = { spell_damageInc = 54, }, - [29] = { spell_damageInc = 56, }, - [30] = { spell_damageInc = 58, }, - } + [1] = { 0, }, + [2] = { 2, }, + [3] = { 4, }, + [4] = { 6, }, + [5] = { 8, }, + [6] = { 10, }, + [7] = { 12, }, + [8] = { 14, }, + [9] = { 16, }, + [10] = { 18, }, + [11] = { 20, }, + [12] = { 22, }, + [13] = { 24, }, + [14] = { 26, }, + [15] = { 28, }, + [16] = { 30, }, + [17] = { 32, }, + [18] = { 34, }, + [19] = { 36, }, + [20] = { 38, }, + [21] = { 40, }, + [22] = { 42, }, + [23] = { 44, }, + [24] = { 46, }, + [25] = { 48, }, + [26] = { 50, }, + [27] = { 52, }, + [28] = { 54, }, + [29] = { 56, }, + [30] = { 58, }, + }, } gems["Item Quantity"] = { strength = true, support = true, - base = { + color = 1, + requireSkillTypes = { 10, 1, 40, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { }, - quality = { - lootQuantityInc = 0.35 + qualityMods = { + mod("LootQuantity", "INC", 0.35), --"base_killed_monster_dropped_item_quantity_+%" = 0.35 + }, + levelMods = { + [1] = mod("LootQuantity", "INC", nil), --"base_killed_monster_dropped_item_quantity_+%" }, levels = { - [1] = { lootQuantityInc = 17, }, - [2] = { lootQuantityInc = 18, }, - [3] = { lootQuantityInc = 19, }, - [4] = { lootQuantityInc = 20, }, - [5] = { lootQuantityInc = 21, }, - [6] = { lootQuantityInc = 22, }, - [7] = { lootQuantityInc = 23, }, - [8] = { lootQuantityInc = 24, }, - [9] = { lootQuantityInc = 25, }, - [10] = { lootQuantityInc = 26, }, - [11] = { lootQuantityInc = 27, }, - [12] = { lootQuantityInc = 28, }, - [13] = { lootQuantityInc = 29, }, - [14] = { lootQuantityInc = 30, }, - [15] = { lootQuantityInc = 31, }, - [16] = { lootQuantityInc = 32, }, - [17] = { lootQuantityInc = 33, }, - [18] = { lootQuantityInc = 34, }, - [19] = { lootQuantityInc = 35, }, - [20] = { lootQuantityInc = 36, }, - [21] = { lootQuantityInc = 37, }, - [22] = { lootQuantityInc = 38, }, - [23] = { lootQuantityInc = 39, }, - [24] = { lootQuantityInc = 40, }, - [25] = { lootQuantityInc = 41, }, - [26] = { lootQuantityInc = 42, }, - [27] = { lootQuantityInc = 43, }, - [28] = { lootQuantityInc = 44, }, - [29] = { lootQuantityInc = 45, }, - [30] = { lootQuantityInc = 46, }, - } + [1] = { 17, }, + [2] = { 18, }, + [3] = { 19, }, + [4] = { 20, }, + [5] = { 21, }, + [6] = { 22, }, + [7] = { 23, }, + [8] = { 24, }, + [9] = { 25, }, + [10] = { 26, }, + [11] = { 27, }, + [12] = { 28, }, + [13] = { 29, }, + [14] = { 30, }, + [15] = { 31, }, + [16] = { 32, }, + [17] = { 33, }, + [18] = { 34, }, + [19] = { 35, }, + [20] = { 36, }, + [21] = { 37, }, + [22] = { 38, }, + [23] = { 39, }, + [24] = { 40, }, + [25] = { 41, }, + [26] = { 42, }, + [27] = { 43, }, + [28] = { 44, }, + [29] = { 45, }, + [30] = { 46, }, + }, } gems["Knockback"] = { strength = true, support = true, - require = "hit", - base = { + color = 1, + requireSkillTypes = { 10, 1, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + --"knockback_distance_+%" = 50 }, - quality = { + qualityMods = { + --"base_global_chance_to_knockback_%" = 0.5 + }, + levelMods = { + --[1] = "base_global_chance_to_knockback_%" }, levels = { - [1] = { }, - [2] = { }, - [3] = { }, - [4] = { }, - [5] = { }, - [6] = { }, - [7] = { }, - [8] = { }, - [9] = { }, - [10] = { }, - [11] = { }, - [12] = { }, - [13] = { }, - [14] = { }, - [15] = { }, - [16] = { }, - [17] = { }, - [18] = { }, - [19] = { }, - [20] = { }, - [21] = { }, - [22] = { }, - [23] = { }, - [24] = { }, - [25] = { }, - [26] = { }, - [27] = { }, - [28] = { }, - [29] = { }, - [30] = { }, - } + [1] = { 25, }, + [2] = { 26, }, + [3] = { 27, }, + [4] = { 28, }, + [5] = { 29, }, + [6] = { 30, }, + [7] = { 31, }, + [8] = { 32, }, + [9] = { 33, }, + [10] = { 34, }, + [11] = { 35, }, + [12] = { 36, }, + [13] = { 37, }, + [14] = { 38, }, + [15] = { 39, }, + [16] = { 40, }, + [17] = { 41, }, + [18] = { 42, }, + [19] = { 43, }, + [20] = { 44, }, + [21] = { 45, }, + [22] = { 46, }, + [23] = { 47, }, + [24] = { 48, }, + [25] = { 49, }, + [26] = { 50, }, + [27] = { 51, }, + [28] = { 52, }, + [29] = { 53, }, + [30] = { 54, }, + }, } gems["Less Duration"] = { strength = true, support = true, duration = true, - require = "duration", - base = { - manaCostMore = 1.2, + color = 1, + requireSkillTypes = { 12, 55, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 20), }, - quality = { - durationInc = -0.5, + qualityMods = { + mod("Duration", "INC", -0.5), --"skill_effect_duration_+%" = -0.5 + }, + levelMods = { + [1] = mod("Duration", "MORE", nil), --"support_reduced_duration_skill_effect_duration_+%_final" + [2] = mod("Damage", "MORE", nil), --"support_reduced_duration_damage_+%_final" }, levels = { - [1] = { durationMore = 0.6, damageMore = 1.1, }, - [2] = { durationMore = 0.6, damageMore = 1.1, }, - [3] = { durationMore = 0.59, damageMore = 1.11, }, - [4] = { durationMore = 0.59, damageMore = 1.11, }, - [5] = { durationMore = 0.58, damageMore = 1.12, }, - [6] = { durationMore = 0.58, damageMore = 1.12, }, - [7] = { durationMore = 0.57, damageMore = 1.13, }, - [8] = { durationMore = 0.57, damageMore = 1.13, }, - [9] = { durationMore = 0.56, damageMore = 1.14, }, - [10] = { durationMore = 0.56, damageMore = 1.14, }, - [11] = { durationMore = 0.55, damageMore = 1.15, }, - [12] = { durationMore = 0.55, damageMore = 1.15, }, - [13] = { durationMore = 0.54, damageMore = 1.16, }, - [14] = { durationMore = 0.54, damageMore = 1.16, }, - [15] = { durationMore = 0.53, damageMore = 1.17, }, - [16] = { durationMore = 0.53, damageMore = 1.17, }, - [17] = { durationMore = 0.52, damageMore = 1.18, }, - [18] = { durationMore = 0.52, damageMore = 1.18, }, - [19] = { durationMore = 0.51, damageMore = 1.19, }, - [20] = { durationMore = 0.51, damageMore = 1.19, }, - [21] = { durationMore = 0.5, damageMore = 1.2, }, - [22] = { durationMore = 0.5, damageMore = 1.2, }, - [23] = { durationMore = 0.49, damageMore = 1.21, }, - [24] = { durationMore = 0.49, damageMore = 1.21, }, - [25] = { durationMore = 0.48, damageMore = 1.22, }, - [26] = { durationMore = 0.48, damageMore = 1.22, }, - [27] = { durationMore = 0.47, damageMore = 1.23, }, - [28] = { durationMore = 0.47, damageMore = 1.23, }, - [29] = { durationMore = 0.46, damageMore = 1.24, }, - [30] = { durationMore = 0.46, damageMore = 1.24, }, - } + [1] = { -40, 10, }, + [2] = { -40, 10, }, + [3] = { -41, 11, }, + [4] = { -41, 11, }, + [5] = { -42, 12, }, + [6] = { -42, 12, }, + [7] = { -43, 13, }, + [8] = { -43, 13, }, + [9] = { -44, 14, }, + [10] = { -44, 14, }, + [11] = { -45, 15, }, + [12] = { -45, 15, }, + [13] = { -46, 16, }, + [14] = { -46, 16, }, + [15] = { -47, 17, }, + [16] = { -47, 17, }, + [17] = { -48, 18, }, + [18] = { -48, 18, }, + [19] = { -49, 19, }, + [20] = { -49, 19, }, + [21] = { -50, 20, }, + [22] = { -50, 20, }, + [23] = { -51, 21, }, + [24] = { -51, 21, }, + [25] = { -52, 22, }, + [26] = { -52, 22, }, + [27] = { -53, 23, }, + [28] = { -53, 23, }, + [29] = { -54, 24, }, + [30] = { -54, 24, }, + }, } gems["Life Gain on Hit"] = { + attack = true, strength = true, support = true, - attack = true, - require = "attack", - base = { - manaCostMore = 1.5, + color = 1, + requireSkillTypes = { 1, 56, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 50), }, - quality = { - attack_lifeOnHitBase = 0.5, + qualityMods = { + mod("LifeOnHit", "BASE", 0.5, ModFlag.Attack, 0, nil), --"base_life_gain_per_target" = 0.5 + }, + levelMods = { + [1] = mod("LifeOnHit", "BASE", nil, ModFlag.Attack, 0, nil), --"base_life_gain_per_target" }, levels = { - [1] = { attack_lifeOnHitBase = 6, }, - [2] = { attack_lifeOnHitBase = 8, }, - [3] = { attack_lifeOnHitBase = 10, }, - [4] = { attack_lifeOnHitBase = 12, }, - [5] = { attack_lifeOnHitBase = 14, }, - [6] = { attack_lifeOnHitBase = 16, }, - [7] = { attack_lifeOnHitBase = 18, }, - [8] = { attack_lifeOnHitBase = 20, }, - [9] = { attack_lifeOnHitBase = 22, }, - [10] = { attack_lifeOnHitBase = 24, }, - [11] = { attack_lifeOnHitBase = 26, }, - [12] = { attack_lifeOnHitBase = 28, }, - [13] = { attack_lifeOnHitBase = 30, }, - [14] = { attack_lifeOnHitBase = 32, }, - [15] = { attack_lifeOnHitBase = 34, }, - [16] = { attack_lifeOnHitBase = 36, }, - [17] = { attack_lifeOnHitBase = 38, }, - [18] = { attack_lifeOnHitBase = 40, }, - [19] = { attack_lifeOnHitBase = 42, }, - [20] = { attack_lifeOnHitBase = 44, }, - [21] = { attack_lifeOnHitBase = 46, }, - [22] = { attack_lifeOnHitBase = 48, }, - [23] = { attack_lifeOnHitBase = 50, }, - [24] = { attack_lifeOnHitBase = 52, }, - [25] = { attack_lifeOnHitBase = 54, }, - [26] = { attack_lifeOnHitBase = 56, }, - [27] = { attack_lifeOnHitBase = 58, }, - [28] = { attack_lifeOnHitBase = 60, }, - [29] = { attack_lifeOnHitBase = 62, }, - [30] = { attack_lifeOnHitBase = 64, }, - } + [1] = { 6, }, + [2] = { 8, }, + [3] = { 10, }, + [4] = { 12, }, + [5] = { 14, }, + [6] = { 16, }, + [7] = { 18, }, + [8] = { 20, }, + [9] = { 22, }, + [10] = { 24, }, + [11] = { 26, }, + [12] = { 28, }, + [13] = { 30, }, + [14] = { 32, }, + [15] = { 34, }, + [16] = { 36, }, + [17] = { 38, }, + [18] = { 40, }, + [19] = { 42, }, + [20] = { 44, }, + [21] = { 46, }, + [22] = { 48, }, + [23] = { 50, }, + [24] = { 52, }, + [25] = { 54, }, + [26] = { 56, }, + [27] = { 58, }, + [28] = { 60, }, + [29] = { 62, }, + [30] = { 64, }, + }, } gems["Life Leech"] = { strength = true, support = true, - require = "hit", - base = { - manaCostMore = 1.3, + color = 1, + requireSkillTypes = { 10, 1, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 30), + --"life_leech_from_any_damage_permyriad" = 200 }, - quality = { + qualityMods = { + --"life_leech_speed_+%" = 0.5 + }, + levelMods = { + --[1] = "life_leech_speed_+%" }, levels = { - [1] = { }, - [2] = { }, - [3] = { }, - [4] = { }, - [5] = { }, - [6] = { }, - [7] = { }, - [8] = { }, - [9] = { }, - [10] = { }, - [11] = { }, - [12] = { }, - [13] = { }, - [14] = { }, - [15] = { }, - [16] = { }, - [17] = { }, - [18] = { }, - [19] = { }, - [20] = { }, - [21] = { }, - [22] = { }, - [23] = { }, - [24] = { }, - [25] = { }, - [26] = { }, - [27] = { }, - [28] = { }, - [29] = { }, - [30] = { }, - } + [1] = { 0, }, + [2] = { 2, }, + [3] = { 4, }, + [4] = { 6, }, + [5] = { 8, }, + [6] = { 10, }, + [7] = { 12, }, + [8] = { 14, }, + [9] = { 16, }, + [10] = { 18, }, + [11] = { 20, }, + [12] = { 22, }, + [13] = { 24, }, + [14] = { 26, }, + [15] = { 28, }, + [16] = { 30, }, + [17] = { 32, }, + [18] = { 34, }, + [19] = { 36, }, + [20] = { 38, }, + [21] = { 40, }, + [22] = { 42, }, + [23] = { 44, }, + [24] = { 46, }, + [25] = { 48, }, + [26] = { 50, }, + [27] = { 52, }, + [28] = { 54, }, + [29] = { 56, }, + [30] = { 58, }, + }, } gems["Melee Damage on Full Life"] = { + melee = true, strength = true, support = true, - melee = true, - require = "melee", - base = { - manaCostMore = 1.3, + attack = true, + color = 1, + requireSkillTypes = { 24, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 30), }, - quality = { - melee_physicalInc = 0.5, + qualityMods = { + mod("PhysicalDamage", "INC", 0.5, ModFlag.Melee), --"melee_physical_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("PhysicalDamage", "MORE", nil, ModFlag.Melee, 0, { type = "Condition", var = "FullLife" }), --"support_melee_physical_damage_+%_final_while_on_full_life" }, levels = { - [1] = { CondMod_FullLife_melee_physicalMore = 1.3, }, - [2] = { CondMod_FullLife_melee_physicalMore = 1.31, }, - [3] = { CondMod_FullLife_melee_physicalMore = 1.32, }, - [4] = { CondMod_FullLife_melee_physicalMore = 1.33, }, - [5] = { CondMod_FullLife_melee_physicalMore = 1.34, }, - [6] = { CondMod_FullLife_melee_physicalMore = 1.35, }, - [7] = { CondMod_FullLife_melee_physicalMore = 1.36, }, - [8] = { CondMod_FullLife_melee_physicalMore = 1.37, }, - [9] = { CondMod_FullLife_melee_physicalMore = 1.38, }, - [10] = { CondMod_FullLife_melee_physicalMore = 1.39, }, - [11] = { CondMod_FullLife_melee_physicalMore = 1.4, }, - [12] = { CondMod_FullLife_melee_physicalMore = 1.41, }, - [13] = { CondMod_FullLife_melee_physicalMore = 1.42, }, - [14] = { CondMod_FullLife_melee_physicalMore = 1.43, }, - [15] = { CondMod_FullLife_melee_physicalMore = 1.44, }, - [16] = { CondMod_FullLife_melee_physicalMore = 1.45, }, - [17] = { CondMod_FullLife_melee_physicalMore = 1.46, }, - [18] = { CondMod_FullLife_melee_physicalMore = 1.47, }, - [19] = { CondMod_FullLife_melee_physicalMore = 1.48, }, - [20] = { CondMod_FullLife_melee_physicalMore = 1.49, }, - [21] = { CondMod_FullLife_melee_physicalMore = 1.5, }, - [22] = { CondMod_FullLife_melee_physicalMore = 1.51, }, - [23] = { CondMod_FullLife_melee_physicalMore = 1.52, }, - [24] = { CondMod_FullLife_melee_physicalMore = 1.53, }, - [25] = { CondMod_FullLife_melee_physicalMore = 1.54, }, - [26] = { CondMod_FullLife_melee_physicalMore = 1.55, }, - [27] = { CondMod_FullLife_melee_physicalMore = 1.56, }, - [28] = { CondMod_FullLife_melee_physicalMore = 1.57, }, - [29] = { CondMod_FullLife_melee_physicalMore = 1.58, }, - [30] = { CondMod_FullLife_melee_physicalMore = 1.59, }, - } + [1] = { 30, }, + [2] = { 31, }, + [3] = { 32, }, + [4] = { 33, }, + [5] = { 34, }, + [6] = { 35, }, + [7] = { 36, }, + [8] = { 37, }, + [9] = { 38, }, + [10] = { 39, }, + [11] = { 40, }, + [12] = { 41, }, + [13] = { 42, }, + [14] = { 43, }, + [15] = { 44, }, + [16] = { 45, }, + [17] = { 46, }, + [18] = { 47, }, + [19] = { 48, }, + [20] = { 49, }, + [21] = { 50, }, + [22] = { 51, }, + [23] = { 52, }, + [24] = { 53, }, + [25] = { 54, }, + [26] = { 55, }, + [27] = { 56, }, + [28] = { 57, }, + [29] = { 58, }, + [30] = { 59, }, + }, } gems["Melee Physical Damage"] = { + melee = true, strength = true, support = true, - melee = true, - require = "melee", - base = { - manaCostMore = 1.4, + attack = true, + color = 1, + requireSkillTypes = { 24, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 40), }, - quality = { - melee_physicalInc = 0.5, + qualityMods = { + mod("PhysicalDamage", "INC", 0.5, ModFlag.Melee), --"melee_physical_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("PhysicalDamage", "MORE", nil, ModFlag.Melee), --"support_melee_physical_damage_+%_final" }, levels = { - [1] = { melee_physicalMore = 1.3, }, - [2] = { melee_physicalMore = 1.31, }, - [3] = { melee_physicalMore = 1.32, }, - [4] = { melee_physicalMore = 1.33, }, - [5] = { melee_physicalMore = 1.34, }, - [6] = { melee_physicalMore = 1.35, }, - [7] = { melee_physicalMore = 1.36, }, - [8] = { melee_physicalMore = 1.37, }, - [9] = { melee_physicalMore = 1.38, }, - [10] = { melee_physicalMore = 1.39, }, - [11] = { melee_physicalMore = 1.4, }, - [12] = { melee_physicalMore = 1.41, }, - [13] = { melee_physicalMore = 1.42, }, - [14] = { melee_physicalMore = 1.43, }, - [15] = { melee_physicalMore = 1.44, }, - [16] = { melee_physicalMore = 1.45, }, - [17] = { melee_physicalMore = 1.46, }, - [18] = { melee_physicalMore = 1.47, }, - [19] = { melee_physicalMore = 1.48, }, - [20] = { melee_physicalMore = 1.49, }, - [21] = { melee_physicalMore = 1.5, }, - [22] = { melee_physicalMore = 1.51, }, - [23] = { melee_physicalMore = 1.52, }, - [24] = { melee_physicalMore = 1.53, }, - [25] = { melee_physicalMore = 1.54, }, - [26] = { melee_physicalMore = 1.55, }, - [27] = { melee_physicalMore = 1.56, }, - [28] = { melee_physicalMore = 1.57, }, - [29] = { melee_physicalMore = 1.58, }, - [30] = { melee_physicalMore = 1.59, }, - } + [1] = { 30, }, + [2] = { 31, }, + [3] = { 32, }, + [4] = { 33, }, + [5] = { 34, }, + [6] = { 35, }, + [7] = { 36, }, + [8] = { 37, }, + [9] = { 38, }, + [10] = { 39, }, + [11] = { 40, }, + [12] = { 41, }, + [13] = { 42, }, + [14] = { 43, }, + [15] = { 44, }, + [16] = { 45, }, + [17] = { 46, }, + [18] = { 47, }, + [19] = { 48, }, + [20] = { 49, }, + [21] = { 50, }, + [22] = { 51, }, + [23] = { 52, }, + [24] = { 53, }, + [25] = { 54, }, + [26] = { 55, }, + [27] = { 56, }, + [28] = { 57, }, + [29] = { 58, }, + [30] = { 59, }, + }, } gems["Melee Splash"] = { strength = true, support = true, - attack = true, melee = true, - require = "melee", - base = { - manaCostMore = 1.6, + attack = true, + area = true, + color = 1, + requireSkillTypes = { 25, }, + addSkillTypes = { 11, }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 60), + --"support_melee_splash_damage_+%_final" = 0 + --"melee_splash" = ? }, - quality = { - aoeRadiusInc = 0.5, + qualityMods = { + mod("AreaRadius", "INC", 0.5), --"base_skill_area_of_effect_+%" = 0.5 + }, + levelMods = { + --[1] = "support_melee_splash_damage_+%_final_for_splash" + [2] = mod("AreaRadius", "MORE", nil), --"melee_splash_area_of_effect_+%_final" }, levels = { - [1] = { aoeRadiusMore = 1, }, - [2] = { aoeRadiusMore = 1.01, }, - [3] = { aoeRadiusMore = 1.02, }, - [4] = { aoeRadiusMore = 1.03, }, - [5] = { aoeRadiusMore = 1.04, }, - [6] = { aoeRadiusMore = 1.05, }, - [7] = { aoeRadiusMore = 1.06, }, - [8] = { aoeRadiusMore = 1.07, }, - [9] = { aoeRadiusMore = 1.08, }, - [10] = { aoeRadiusMore = 1.09, }, - [11] = { aoeRadiusMore = 1.1, }, - [12] = { aoeRadiusMore = 1.11, }, - [13] = { aoeRadiusMore = 1.12, }, - [14] = { aoeRadiusMore = 1.13, }, - [15] = { aoeRadiusMore = 1.14, }, - [16] = { aoeRadiusMore = 1.15, }, - [17] = { aoeRadiusMore = 1.16, }, - [18] = { aoeRadiusMore = 1.17, }, - [19] = { aoeRadiusMore = 1.18, }, - [20] = { aoeRadiusMore = 1.19, }, - [21] = { aoeRadiusMore = 1.2, }, - [22] = { aoeRadiusMore = 1.21, }, - [23] = { aoeRadiusMore = 1.22, }, - [24] = { aoeRadiusMore = 1.23, }, - [25] = { aoeRadiusMore = 1.24, }, - [26] = { aoeRadiusMore = 1.25, }, - [27] = { aoeRadiusMore = 1.26, }, - [28] = { aoeRadiusMore = 1.27, }, - [29] = { aoeRadiusMore = 1.28, }, - [30] = { aoeRadiusMore = 1.29, }, - } + [1] = { -35, 0, }, + [2] = { -35, 1, }, + [3] = { -34, 2, }, + [4] = { -34, 3, }, + [5] = { -33, 4, }, + [6] = { -33, 5, }, + [7] = { -32, 6, }, + [8] = { -32, 7, }, + [9] = { -31, 8, }, + [10] = { -31, 9, }, + [11] = { -30, 10, }, + [12] = { -30, 11, }, + [13] = { -29, 12, }, + [14] = { -29, 13, }, + [15] = { -28, 14, }, + [16] = { -28, 15, }, + [17] = { -27, 16, }, + [18] = { -27, 17, }, + [19] = { -26, 18, }, + [20] = { -26, 19, }, + [21] = { -25, 20, }, + [22] = { -25, 21, }, + [23] = { -24, 22, }, + [24] = { -24, 23, }, + [25] = { -23, 24, }, + [26] = { -23, 25, }, + [27] = { -22, 26, }, + [28] = { -22, 27, }, + [29] = { -21, 28, }, + [30] = { -21, 29, }, + }, } gems["Multistrike"] = { - strength = true, - support = true, attack = true, melee = true, - require = "melee", - base = { - manaCostMore = 1.8, - attack_damageMore = 0.7, + strength = true, + support = true, + color = 1, + requireSkillTypes = { 28, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 80), + --"base_melee_attack_repeat_count" = 2 + mod("Damage", "MORE", -30, ModFlag.Attack), --"support_multiple_attack_damage_+%_final" = -30 }, - quality = { - melee_physicalInc = 0.5, + qualityMods = { + mod("PhysicalDamage", "INC", 0.5, ModFlag.Melee), --"melee_physical_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("Speed", "MORE", nil, ModFlag.Attack), --"support_multiple_attacks_melee_attack_speed_+%_final" }, levels = { - [1] = { attackSpeedMore = 1.75, }, - [2] = { attackSpeedMore = 1.76, }, - [3] = { attackSpeedMore = 1.77, }, - [4] = { attackSpeedMore = 1.78, }, - [5] = { attackSpeedMore = 1.79, }, - [6] = { attackSpeedMore = 1.8, }, - [7] = { attackSpeedMore = 1.81, }, - [8] = { attackSpeedMore = 1.82, }, - [9] = { attackSpeedMore = 1.83, }, - [10] = { attackSpeedMore = 1.84, }, - [11] = { attackSpeedMore = 1.85, }, - [12] = { attackSpeedMore = 1.86, }, - [13] = { attackSpeedMore = 1.87, }, - [14] = { attackSpeedMore = 1.88, }, - [15] = { attackSpeedMore = 1.89, }, - [16] = { attackSpeedMore = 1.9, }, - [17] = { attackSpeedMore = 1.91, }, - [18] = { attackSpeedMore = 1.92, }, - [19] = { attackSpeedMore = 1.93, }, - [20] = { attackSpeedMore = 1.94, }, - [21] = { attackSpeedMore = 1.95, }, - [22] = { attackSpeedMore = 1.96, }, - [23] = { attackSpeedMore = 1.97, }, - [24] = { attackSpeedMore = 1.98, }, - [25] = { attackSpeedMore = 1.99, }, - [26] = { attackSpeedMore = 2, }, - [27] = { attackSpeedMore = 2.01, }, - [28] = { attackSpeedMore = 2.02, }, - [29] = { attackSpeedMore = 2.03, }, - [30] = { attackSpeedMore = 2.04, }, - } + [1] = { 75, }, + [2] = { 76, }, + [3] = { 77, }, + [4] = { 78, }, + [5] = { 79, }, + [6] = { 80, }, + [7] = { 81, }, + [8] = { 82, }, + [9] = { 83, }, + [10] = { 84, }, + [11] = { 85, }, + [12] = { 86, }, + [13] = { 87, }, + [14] = { 88, }, + [15] = { 89, }, + [16] = { 90, }, + [17] = { 91, }, + [18] = { 92, }, + [19] = { 93, }, + [20] = { 94, }, + [21] = { 95, }, + [22] = { 96, }, + [23] = { 97, }, + [24] = { 98, }, + [25] = { 99, }, + [26] = { 100, }, + [27] = { 101, }, + [28] = { 102, }, + [29] = { 103, }, + [30] = { 104, }, + }, } gems["Ranged Attack Totem"] = { + bow = true, + projectile = true, strength = true, support = true, totem = true, - projectile = true, - require = "attack and projectile", + attack = true, + duration = true, addFlags = { totem = true, }, - base = { - manaCostMore = 2, - attackSpeedMore = 0.7, + color = 1, + requireSkillTypes = { 22, }, + addSkillTypes = { 12, 17, 19, 30, }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 100), + --"is_totem" = 1 + --"base_totem_duration" = 8000 + --"base_totem_range" = 60 + mod("Speed", "MORE", -30, ModFlag.Attack), --"support_attack_totem_attack_speed_+%_final" = -30 + --"base_skill_is_totemified" = ? + --"disable_skill_if_melee_attack" = ? }, - quality = { - totemPlacementSpeedInc = 1, + qualityMods = { + mod("TotemPlacementSpeed", "INC", 1), --"summon_totem_cast_speed_+%" = 1 + }, + levelMods = { + [1] = skill("totemLevel", nil), --"totem_support_gem_level" + [2] = mod("Damage", "MORE", nil), --"support_totem_damage_+%_final" }, levels = { - [1] = { attack_damageMore = 0.5, }, - [2] = { attack_damageMore = 0.51, }, - [3] = { attack_damageMore = 0.52, }, - [4] = { attack_damageMore = 0.53, }, - [5] = { attack_damageMore = 0.54, }, - [6] = { attack_damageMore = 0.55, }, - [7] = { attack_damageMore = 0.56, }, - [8] = { attack_damageMore = 0.57, }, - [9] = { attack_damageMore = 0.58, }, - [10] = { attack_damageMore = 0.59, }, - [11] = { attack_damageMore = 0.6, }, - [12] = { attack_damageMore = 0.61, }, - [13] = { attack_damageMore = 0.62, }, - [14] = { attack_damageMore = 0.63, }, - [15] = { attack_damageMore = 0.64, }, - [16] = { attack_damageMore = 0.65, }, - [17] = { attack_damageMore = 0.66, }, - [18] = { attack_damageMore = 0.67, }, - [19] = { attack_damageMore = 0.68, }, - [20] = { attack_damageMore = 0.69, }, - [21] = { attack_damageMore = 0.7, }, - [22] = { attack_damageMore = 0.71, }, - [23] = { attack_damageMore = 0.72, }, - [24] = { attack_damageMore = 0.73, }, - [25] = { attack_damageMore = 0.74, }, - [26] = { attack_damageMore = 0.75, }, - [27] = { attack_damageMore = 0.76, }, - [28] = { attack_damageMore = 0.77, }, - [29] = { attack_damageMore = 0.78, }, - [30] = { attack_damageMore = 0.79, }, - } + [1] = { 8, -50, }, + [2] = { 10, -49, }, + [3] = { 13, -48, }, + [4] = { 17, -47, }, + [5] = { 21, -46, }, + [6] = { 25, -45, }, + [7] = { 29, -44, }, + [8] = { 33, -43, }, + [9] = { 37, -42, }, + [10] = { 40, -41, }, + [11] = { 43, -40, }, + [12] = { 46, -39, }, + [13] = { 49, -38, }, + [14] = { 52, -37, }, + [15] = { 55, -36, }, + [16] = { 58, -35, }, + [17] = { 61, -34, }, + [18] = { 64, -33, }, + [19] = { 67, -32, }, + [20] = { 70, -31, }, + [21] = { 72, -30, }, + [22] = { 74, -29, }, + [23] = { 76, -28, }, + [24] = { 78, -27, }, + [25] = { 80, -26, }, + [26] = { 82, -25, }, + [27] = { 84, -24, }, + [28] = { 86, -23, }, + [29] = { 88, -22, }, + [30] = { 90, -21, }, + }, } gems["Reduced Mana"] = { strength = true, support = true, - base = { + color = 1, + requireSkillTypes = { }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { }, - quality = { - skill_costInc = -0.25, + qualityMods = { + mod("ManaCost", "INC", -0.25), --"base_mana_cost_-%" = 0.25 + }, + levelMods = { + [1] = mod("ManaCost", "INC", nil), --"base_mana_cost_-%" }, levels = { - [1] = { skill_costInc = -25, }, - [2] = { skill_costInc = -25, }, - [3] = { skill_costInc = -26, }, - [4] = { skill_costInc = -26, }, - [5] = { skill_costInc = -27, }, - [6] = { skill_costInc = -27, }, - [7] = { skill_costInc = -28, }, - [8] = { skill_costInc = -28, }, - [9] = { skill_costInc = -29, }, - [10] = { skill_costInc = -29, }, - [11] = { skill_costInc = -30, }, - [12] = { skill_costInc = -30, }, - [13] = { skill_costInc = -31, }, - [14] = { skill_costInc = -31, }, - [15] = { skill_costInc = -32, }, - [16] = { skill_costInc = -32, }, - [17] = { skill_costInc = -33, }, - [18] = { skill_costInc = -33, }, - [19] = { skill_costInc = -34, }, - [20] = { skill_costInc = -34, }, - [21] = { skill_costInc = -35, }, - [22] = { skill_costInc = -35, }, - [23] = { skill_costInc = -36, }, - [24] = { skill_costInc = -36, }, - [25] = { skill_costInc = -37, }, - [26] = { skill_costInc = -37, }, - [27] = { skill_costInc = -38, }, - [28] = { skill_costInc = -38, }, - [29] = { skill_costInc = -39, }, - [30] = { skill_costInc = -39, }, - } + [1] = { -25, }, + [2] = { -25, }, + [3] = { -26, }, + [4] = { -26, }, + [5] = { -27, }, + [6] = { -27, }, + [7] = { -28, }, + [8] = { -28, }, + [9] = { -29, }, + [10] = { -29, }, + [11] = { -30, }, + [12] = { -30, }, + [13] = { -31, }, + [14] = { -31, }, + [15] = { -32, }, + [16] = { -32, }, + [17] = { -33, }, + [18] = { -33, }, + [19] = { -34, }, + [20] = { -34, }, + [21] = { -35, }, + [22] = { -35, }, + [23] = { -36, }, + [24] = { -36, }, + [25] = { -37, }, + [26] = { -37, }, + [27] = { -38, }, + [28] = { -38, }, + [29] = { -39, }, + [30] = { -39, }, + }, } gems["Spell Totem"] = { strength = true, support = true, totem = true, - require = "spell", + duration = true, addFlags = { totem = true, }, - base = { - manaCostMore = 2, - castSpeedMore = 0.7, + color = 1, + requireSkillTypes = { 18, }, + addSkillTypes = { 12, 17, 19, 30, }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 100), + --"is_totem" = 1 + --"base_totem_duration" = 8000 + --"base_totem_range" = 60 + mod("Speed", "MORE", -30, ModFlag.Spell), --"support_spell_totem_cast_speed_+%_final" = -30 + --"base_skill_is_totemified" = ? }, - quality = { - totemPlacementSpeedInc = 1, + qualityMods = { + mod("TotemPlacementSpeed", "INC", 1), --"summon_totem_cast_speed_+%" = 1 + }, + levelMods = { + [1] = skill("totemLevel", nil), --"totem_support_gem_level" + [2] = mod("Damage", "MORE", nil), --"support_totem_damage_+%_final" }, levels = { - [1] = { spell_damageMore = 0.65, }, - [2] = { spell_damageMore = 0.65, }, - [3] = { spell_damageMore = 0.66, }, - [4] = { spell_damageMore = 0.66, }, - [5] = { spell_damageMore = 0.67, }, - [6] = { spell_damageMore = 0.67, }, - [7] = { spell_damageMore = 0.68, }, - [8] = { spell_damageMore = 0.68, }, - [9] = { spell_damageMore = 0.69, }, - [10] = { spell_damageMore = 0.69, }, - [11] = { spell_damageMore = 0.7, }, - [12] = { spell_damageMore = 0.7, }, - [13] = { spell_damageMore = 0.71, }, - [14] = { spell_damageMore = 0.71, }, - [15] = { spell_damageMore = 0.72, }, - [16] = { spell_damageMore = 0.72, }, - [17] = { spell_damageMore = 0.73, }, - [18] = { spell_damageMore = 0.73, }, - [19] = { spell_damageMore = 0.74, }, - [20] = { spell_damageMore = 0.74, }, - [21] = { spell_damageMore = 0.75, }, - [22] = { spell_damageMore = 0.75, }, - [23] = { spell_damageMore = 0.76, }, - [24] = { spell_damageMore = 0.76, }, - [25] = { spell_damageMore = 0.77, }, - [26] = { spell_damageMore = 0.77, }, - [27] = { spell_damageMore = 0.78, }, - [28] = { spell_damageMore = 0.78, }, - [29] = { spell_damageMore = 0.79, }, - [30] = { spell_damageMore = 0.79, }, - } + [1] = { 8, -35, }, + [2] = { 10, -35, }, + [3] = { 13, -34, }, + [4] = { 17, -34, }, + [5] = { 21, -33, }, + [6] = { 25, -33, }, + [7] = { 29, -32, }, + [8] = { 33, -32, }, + [9] = { 37, -31, }, + [10] = { 40, -31, }, + [11] = { 43, -30, }, + [12] = { 46, -30, }, + [13] = { 49, -29, }, + [14] = { 52, -29, }, + [15] = { 55, -28, }, + [16] = { 58, -28, }, + [17] = { 61, -27, }, + [18] = { 64, -27, }, + [19] = { 67, -26, }, + [20] = { 70, -26, }, + [21] = { 72, -25, }, + [22] = { 74, -25, }, + [23] = { 76, -24, }, + [24] = { 78, -24, }, + [25] = { 80, -23, }, + [26] = { 82, -23, }, + [27] = { 84, -22, }, + [28] = { 86, -22, }, + [29] = { 88, -21, }, + [30] = { 90, -21, }, + }, } gems["Stun"] = { strength = true, support = true, - require = "hit", - base = { + color = 1, + requireSkillTypes = { 10, 1, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { }, - quality = { - stunEnemyDurationInc = 1.5, + qualityMods = { + mod("EnemyStunDuration", "INC", 1.5), --"base_stun_duration_+%" = 1.5 + }, + levelMods = { + [1] = mod("EnemyStunThreshold", "INC", nil), --"base_stun_threshold_reduction_+%" }, levels = { - [1] = { stunEnemyThresholdInc = -30, }, - [2] = { stunEnemyThresholdInc = -31, }, - [3] = { stunEnemyThresholdInc = -32, }, - [4] = { stunEnemyThresholdInc = -33, }, - [5] = { stunEnemyThresholdInc = -34, }, - [6] = { stunEnemyThresholdInc = -35, }, - [7] = { stunEnemyThresholdInc = -36, }, - [8] = { stunEnemyThresholdInc = -37, }, - [9] = { stunEnemyThresholdInc = -38, }, - [10] = { stunEnemyThresholdInc = -39, }, - [11] = { stunEnemyThresholdInc = -40, }, - [12] = { stunEnemyThresholdInc = -41, }, - [13] = { stunEnemyThresholdInc = -42, }, - [14] = { stunEnemyThresholdInc = -43, }, - [15] = { stunEnemyThresholdInc = -44, }, - [16] = { stunEnemyThresholdInc = -45, }, - [17] = { stunEnemyThresholdInc = -46, }, - [18] = { stunEnemyThresholdInc = -47, }, - [19] = { stunEnemyThresholdInc = -48, }, - [20] = { stunEnemyThresholdInc = -49, }, - [21] = { stunEnemyThresholdInc = -50, }, - [22] = { stunEnemyThresholdInc = -51, }, - [23] = { stunEnemyThresholdInc = -52, }, - [24] = { stunEnemyThresholdInc = -53, }, - [25] = { stunEnemyThresholdInc = -54, }, - [26] = { stunEnemyThresholdInc = -55, }, - [27] = { stunEnemyThresholdInc = -56, }, - [28] = { stunEnemyThresholdInc = -57, }, - [29] = { stunEnemyThresholdInc = -58, }, - [30] = { stunEnemyThresholdInc = -59, }, - } + [1] = { -30, }, + [2] = { -31, }, + [3] = { -32, }, + [4] = { -33, }, + [5] = { -34, }, + [6] = { -35, }, + [7] = { -36, }, + [8] = { -37, }, + [9] = { -38, }, + [10] = { -39, }, + [11] = { -40, }, + [12] = { -41, }, + [13] = { -42, }, + [14] = { -43, }, + [15] = { -44, }, + [16] = { -45, }, + [17] = { -46, }, + [18] = { -47, }, + [19] = { -48, }, + [20] = { -49, }, + [21] = { -50, }, + [22] = { -51, }, + [23] = { -52, }, + [24] = { -53, }, + [25] = { -54, }, + [26] = { -55, }, + [27] = { -56, }, + [28] = { -57, }, + [29] = { -58, }, + [30] = { -59, }, + }, } gems["Weapon Elemental Damage"] = { + attack = true, strength = true, support = true, - attack = true, - require = "attack", - base = { - manaCostMore = 1.4, + color = 1, + requireSkillTypes = { 1, 56, }, + addSkillTypes = { }, + excludeSkillTypes = { }, + baseMods = { + mod("ManaCost", "MORE", 40), }, - quality = { - weapon_elementalInc = 0.5, + qualityMods = { + mod("ElementalDamage", "INC", 0.5, ModFlag.Weapon), --"weapon_elemental_damage_+%" = 0.5 + }, + levelMods = { + [1] = mod("ElementalDamage", "MORE", nil, ModFlag.Weapon), --"support_weapon_elemental_damage_+%_final" }, levels = { - [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, }, - } -} \ No newline at end of file + [1] = { 40, }, + [2] = { 41, }, + [3] = { 42, }, + [4] = { 43, }, + [5] = { 44, }, + [6] = { 45, }, + [7] = { 46, }, + [8] = { 47, }, + [9] = { 48, }, + [10] = { 49, }, + [11] = { 50, }, + [12] = { 51, }, + [13] = { 52, }, + [14] = { 53, }, + [15] = { 54, }, + [16] = { 55, }, + [17] = { 56, }, + [18] = { 57, }, + [19] = { 58, }, + [20] = { 59, }, + [21] = { 60, }, + [22] = { 61, }, + [23] = { 62, }, + [24] = { 63, }, + [25] = { 64, }, + [26] = { 65, }, + [27] = { 66, }, + [28] = { 67, }, + [29] = { 68, }, + [30] = { 69, }, + }, +} diff --git a/Data/Uniques/body.lua b/Data/Uniques/body.lua index c4dbcf56..bb534b6a 100644 --- a/Data/Uniques/body.lua +++ b/Data/Uniques/body.lua @@ -415,7 +415,7 @@ Requires Level 64, 90 Str, 105 Int (50 to 75)% increased Armour and Energy Shield +(50 to 70) to maximum Life +(70 to 80) to maximum Energy Shield -(14 to 18)% to all Elemental Resistances ++(14 to 18)% to all Elemental Resistances +1 maximum Energy Shield per 5 Strength Zealot's Oath ]],[[ diff --git a/Data/Uniques/boots.lua b/Data/Uniques/boots.lua index c736eb49..ac8a68e7 100644 --- a/Data/Uniques/boots.lua +++ b/Data/Uniques/boots.lua @@ -183,7 +183,7 @@ League: Warbands Energy Shield: (194 to 230) Requires Level 67, 123 Int (110 to 140)% increased Energy Shield -(20 to 30) to maximum Energy Shield ++(20 to 30) to maximum Energy Shield 30% increased Movement Speed 20% increased Movement Speed on Shocked Ground 50% increased Damage on Burning Ground diff --git a/Data/Uniques/ring.lua b/Data/Uniques/ring.lua index 0c5d3bd4..fbce7c7f 100644 --- a/Data/Uniques/ring.lua +++ b/Data/Uniques/ring.lua @@ -336,6 +336,7 @@ Variant: Pre 1.2.0 Variant: Current League: Anarchy, Onslaught Requires Level 30 +Implicits: 1 +(15 to 25) to maximum Energy Shield +(60 to 75) to Intelligence Right ring slot: You cannot Regenerate Mana diff --git a/Modules/Build.lua b/Modules/Build.lua index 46a705d3..eb06cfe1 100644 --- a/Modules/Build.lua +++ b/Modules/Build.lua @@ -17,6 +17,7 @@ function buildMode:Init(dbFileName, buildName) self.tree = main.tree self.importTab = common.New("ImportTab", self) + self.configTab = common.New("ConfigTab", self) self.spec = common.New("PassiveSpec", self) self.treeTab = common.New("TreeTab", self) self.skillsTab = common.New("SkillsTab", self) @@ -71,7 +72,7 @@ function buildMode:Init(dbFileName, buildName) self.controls.pointDisplay.Draw = function(control) local x, y = control:GetPos() local used, ascUsed = self.spec:CountAllocNodes() - local usedMax = 120 + (self.calcsTab.mainOutput.total_extraPoints or 0) + local usedMax = 120 + (self.calcsTab.mainOutput.ExtraPoints or 0) local ascMax = 8 local str = string.format("%s%3d / %3d %s%d / %d", used > usedMax and "^1" or "^7", used, usedMax, ascUsed > ascMax and "^1" or "^7", ascUsed, ascMax) local strW = DrawStringWidth(16, "FIXED", str) + 6 @@ -116,6 +117,10 @@ function buildMode:Init(dbFileName, buildName) self.viewMode = "IMPORT" end) self.controls.modeImport.locked = function() return self.viewMode == "IMPORT" end + self.controls.modeConfig = common.New("ButtonControl", {"TOPRIGHT",self.anchorSideBar,"TOPLEFT"}, 300, 0, 100, 20, "Configuration", function() + self.viewMode = "CONFIG" + end) + self.controls.modeConfig.locked = function() return self.viewMode == "CONFIG" end self.controls.modeTree = common.New("ButtonControl", {"TOPLEFT",self.anchorSideBar,"TOPLEFT"}, 0, 26, 72, 20, "Tree", function() self.viewMode = "TREE" end) @@ -187,56 +192,56 @@ function buildMode:Init(dbFileName, buildName) -- This defines the stats in the side bar, and also which stats show in node/item comparisons -- This may be user-customisable in the future self.displayStats = { - { mod = "total_averageHit", label = "Average Hit", fmt = ".1f", compPercent = true }, - { mod = "total_speed", label = "Attack/Cast Rate", fmt = ".2f", compPercent = true }, - { mod = "total_critChance", label = "Crit Chance", fmt = ".2f%%", pc = true }, - { mod = "total_critMultiplier", label = "Crit Multiplier", fmt = "d%%", pc = true }, - { mod = "total_hitChance", label = "Hit Chance", fmt = "d%%", pc = true, condFunc = function(v,o) return v < 1 end }, - { mod = "total_dps", label = "Total DPS", fmt = ".1f", compPercent = true }, - { mod = "total_damageDot", label = "DoT DPS", fmt = ".1f", compPercent = true }, - { mod = "bleed_dps", label = "Bleed DPS", fmt = ".1f", compPercent = true }, - { mod = "ignite_dps", label = "Ignite DPS", fmt = ".1f", compPercent = true }, - { mod = "poison_dps", label = "Poison DPS", fmt = ".1f", compPercent = true }, - { mod = "poison_damage", label = "Total Damage per Poison", fmt = ".1f", compPercent = true }, - { mod = "total_manaCost", label = "Mana Cost", fmt = "d", compPercent = true }, + { mod = "AverageHit", label = "Average Hit", fmt = ".1f", compPercent = true }, + { mod = "Speed", label = "Attack/Cast Rate", fmt = ".2f", compPercent = true }, + { mod = "CritChance", label = "Crit Chance", fmt = ".2f%%" }, + { mod = "CritMultiplier", label = "Crit Multiplier", fmt = "d%%", pc = true }, + { mod = "HitChance", label = "Hit Chance", fmt = "d%%", condFunc = function(v,o) return v < 100 end }, + { mod = "TotalDPS", label = "Total DPS", fmt = ".1f", compPercent = true }, + { mod = "TotalDot", label = "DoT DPS", fmt = ".1f", compPercent = true }, + { mod = "BleedDPS", label = "Bleed DPS", fmt = ".1f", compPercent = true }, + { mod = "IgniteDPS", label = "Ignite DPS", fmt = ".1f", compPercent = true }, + { mod = "PoisonDPS", label = "Poison DPS", fmt = ".1f", compPercent = true }, + { mod = "PoisonDamage", label = "Total Damage per Poison", fmt = ".1f", compPercent = true }, + { mod = "ManaCost", label = "Mana Cost", fmt = "d", compPercent = true }, { }, - { mod = "total_str", label = "Strength", fmt = "d" }, - { mod = "total_dex", label = "Dexterity", fmt = "d" }, - { mod = "total_int", label = "Intelligence", fmt = "d" }, + { mod = "Str", label = "Strength", fmt = "d" }, + { mod = "Dex", label = "Dexterity", fmt = "d" }, + { mod = "Int", label = "Intelligence", fmt = "d" }, { }, - { mod = "total_life", label = "Total Life", fmt = "d", compPercent = true }, - { mod = "spec_lifeInc", label = "%Inc Life from Tree", fmt = "d%%", condFunc = function(v,o) return v > 0 and o.total_life > 1 end }, - { mod = "total_lifeUnreserved", label = "Unreserved Life", fmt = "d", condFunc = function(v,o) return v < o.total_life end, compPercent = true }, - { mod = "total_lifeUnreservedPercent", label = "Unreserved Life", fmt = "d%%", pc = true, condFunc = function(v,o) return v < 1 end }, - { mod = "total_lifeRegen", label = "Life Regen", fmt = ".1f" }, + { mod = "Life", label = "Total Life", fmt = "d", compPercent = true }, + { mod = "Spec:LifeInc", label = "%Inc Life from Tree", fmt = "d%%", condFunc = function(v,o) return v > 0 and o.Life > 1 end }, + { mod = "LifeUnreserved", label = "Unreserved Life", fmt = "d", condFunc = function(v,o) return v < o.Life end, compPercent = true }, + { mod = "LifeUnreservedPercent", label = "Unreserved Life", fmt = "d%%", condFunc = function(v,o) return v < 100 end }, + { mod = "LifeRegen", label = "Life Regen", fmt = ".1f" }, { }, - { mod = "total_mana", label = "Total Mana", fmt = "d", compPercent = true }, - { mod = "spec_manaInc", label = "%Inc Mana from Tree", fmt = "d%%" }, - { mod = "total_manaUnreserved", label = "Unreserved Mana", fmt = "d", condFunc = function(v,o) return v < o.total_mana end, compPercent = true }, - { mod = "total_manaUnreservedPercent", label = "Unreserved Mana", fmt = "d%%", pc = true, condFunc = function(v,o) return v < 1 end }, - { mod = "total_manaRegen", label = "Mana Regen", fmt = ".1f" }, + { mod = "Mana", label = "Total Mana", fmt = "d", compPercent = true }, + { mod = "Spec:ManaInc", label = "%Inc Mana from Tree", fmt = "d%%" }, + { mod = "ManaUnreserved", label = "Unreserved Mana", fmt = "d", condFunc = function(v,o) return v < o.Mana end, compPercent = true }, + { mod = "ManaUnreservedPercent", label = "Unreserved Mana", fmt = "d%%", condFunc = function(v,o) return v < 100 end }, + { mod = "ManaRegen", label = "Mana Regen", fmt = ".1f" }, { }, - { mod = "total_energyShield", label = "Energy Shield", fmt = "d", compPercent = true }, - { mod = "spec_energyShieldInc", label = "%Inc ES from Tree", fmt = "d%%" }, - { mod = "total_energyShieldRegen", label = "Energy Shield Regen", fmt = ".1f" }, - { mod = "total_evasion", label = "Evasion rating", fmt = "d", compPercent = true }, - { mod = "spec_evasionInc", label = "%Inc Evasion from Tree", fmt = "d%%" }, - { mod = "total_evadeChance", label = "Evade Chance", fmt = "d%%", pc = true }, - { mod = "total_armour", label = "Armour", fmt = "d", compPercent = true }, - { mod = "spec_armourInc", label = "%Inc Armour from Tree", fmt = "d%%" }, - { mod = "total_blockChance", label = "Block Chance", fmt = "d%%", pc = true }, - { mod = "total_spellBlockChance", label = "Spell Block Chance", fmt = "d%%", pc = true }, - { mod = "total_dodgeAttacks", label = "Attack Dodge Chance", fmt = "d%%", pc = true }, - { mod = "total_dodgeSpells", label = "Spell Dodge Chance", fmt = "d%%", pc = true }, + { mod = "EnergyShield", label = "Energy Shield", fmt = "d", compPercent = true }, + { mod = "Spec:EnergyShieldInc", label = "%Inc ES from Tree", fmt = "d%%" }, + { mod = "EnergyShieldRegen", label = "Energy Shield Regen", fmt = ".1f" }, + { mod = "Evasion", label = "Evasion rating", fmt = "d", compPercent = true }, + { mod = "Spec:EvasionInc", label = "%Inc Evasion from Tree", fmt = "d%%" }, + { mod = "EvadeChance", label = "Evade Chance", fmt = "d%%" }, + { mod = "Armour", label = "Armour", fmt = "d", compPercent = true }, + { mod = "Spec:ArmourInc", label = "%Inc Armour from Tree", fmt = "d%%" }, + { mod = "BlockChance", label = "Block Chance", fmt = "d%%" }, + { mod = "SpellBlockChance", label = "Spell Block Chance", fmt = "d%%" }, + { mod = "AttackDodgeChance", label = "Attack Dodge Chance", fmt = "d%%" }, + { mod = "SpellDodgeChance", label = "Spell Dodge Chance", fmt = "d%%" }, { }, - { mod = "total_fireResist", label = "Fire Resistance", fmt = "d%%", condFunc = function() return true end }, - { mod = "total_coldResist", label = "Cold Resistance", fmt = "d%%", condFunc = function() return true end }, - { mod = "total_lightningResist", label = "Lightning Resistance", fmt = "d%%", condFunc = function() return true end }, - { mod = "total_chaosResist", label = "Chaos Resistance", fmt = "d%%", condFunc = function() return true end }, - { mod = "total_fireResistOverCap", label = "Fire Res. Over Max", fmt = "d%%" }, - { mod = "total_coldResistOverCap", label = "Cold Res. Over Max", fmt = "d%%" }, - { mod = "total_lightningResistOverCap", label = "Lightning Res. Over Max", fmt = "d%%" }, - { mod = "total_chaosResistOverCap", label = "Chaos Res. Over Max", fmt = "d%%" }, + { mod = "FireResist", label = "Fire Resistance", fmt = "d%%", condFunc = function() return true end }, + { mod = "ColdResist", label = "Cold Resistance", fmt = "d%%", condFunc = function() return true end }, + { mod = "LightningResist", label = "Lightning Resistance", fmt = "d%%", condFunc = function() return true end }, + { mod = "ChaosResist", label = "Chaos Resistance", fmt = "d%%", condFunc = function() return true end }, + { mod = "FireResistOverCap", label = "Fire Res. Over Max", fmt = "d%%" }, + { mod = "ColdResistOverCap", label = "Cold Res. Over Max", fmt = "d%%" }, + { mod = "LightningResistOverCap", label = "Lightning Res. Over Max", fmt = "d%%" }, + { mod = "ChaosResistOverCap", label = "Chaos Res. Over Max", fmt = "d%%" }, } self.viewMode = "TREE" @@ -253,6 +258,7 @@ function buildMode:Init(dbFileName, buildName) -- These will be called to load or save data to their respective sections of the build XML file self.savers = { ["Build"] = self, + ["Config"] = self.configTab, ["Spec"] = self.spec, ["TreeView"] = self.treeTab.viewer, ["Items"] = self.itemsTab, @@ -266,6 +272,11 @@ function buildMode:Init(dbFileName, buildName) return end + if next(self.configTab.input) == nil then + -- Check for old calcs tab settings + self.configTab:ImportCalcSettings() + end + -- Build calculation output tables self.calcsTab:BuildOutput() self:RefreshStatList() @@ -402,6 +413,8 @@ function buildMode:OnFrame(inputEvents) } if self.viewMode == "IMPORT" then self.importTab:Draw(tabViewPort, inputEvents) + elseif self.viewMode == "CONFIG" then + self.configTab:Draw(tabViewPort, inputEvents) elseif self.viewMode == "TREE" then self.treeTab:Draw(tabViewPort, inputEvents) elseif self.viewMode == "SKILLS" then diff --git a/Modules/CalcSections.lua b/Modules/CalcSections.lua new file mode 100644 index 00000000..42b4bd5b --- /dev/null +++ b/Modules/CalcSections.lua @@ -0,0 +1,298 @@ +-- Path of Building +-- +-- Module: Calc Sections +-- List of sections for the Calcs tab +-- + +return { +{ 3, "HitDamage", 1, "Skill Hit Damage", data.colorCodes.OFFENCE, { + extra = "{output:DisplayDamage}", + colWidth = 95, + { + { format = "All Types:", }, + { format = "Physical:" }, + { format = "Lightning:" }, + { format = "Cold:" }, + { format = "Fire:" }, + { format = "Chaos:" }, + }, + { label = "Added Min", + { }, + { format = "{0:mod:1}", { modName = "PhysicalMin", cfg = "skill" }, }, + { format = "{0:mod:1}", { modName = "LightningMin", cfg = "skill" }, }, + { format = "{0:mod:1}", { modName = "ColdMin", cfg = "skill" }, }, + { format = "{0:mod:1}", { modName = "FireMin", cfg = "skill" }, }, + { format = "{0:mod:1}", { modName = "ChaosMin", cfg = "skill" }, }, + }, + { label = "Added Max", + { }, + { format = "{0:mod:1}", { modName = "PhysicalMax", cfg = "skill" }, }, + { format = "{0:mod:1}", { modName = "LightningMax", cfg = "skill" }, }, + { format = "{0:mod:1}", { modName = "ColdMax", cfg = "skill" }, }, + { format = "{0:mod:1}", { modName = "FireMax", cfg = "skill" }, }, + { format = "{0:mod:1}", { modName = "ChaosMax", cfg = "skill" }, }, + }, + { label = "Total Increased", + { format = "{0:mod:1}%", { modName = "Damage", modType = "INC", cfg = "skill" }, }, + { format = "{0:mod:1}%", { modName = "PhysicalDamage", modType = "INC", cfg = "skill" }, }, + { format = "{0:mod:1}%", { modName = { "LightningDamage", "ElementalDamage" }, modType = "INC", cfg = "skill" }, }, + { format = "{0:mod:1}%", { modName = { "ColdDamage", "ElementalDamage" }, modType = "INC", cfg = "skill" }, }, + { format = "{0:mod:1}%", { modName = { "FireDamage", "ElementalDamage" }, modType = "INC", cfg = "skill" }, }, + { format = "{0:mod:1}%", { modName = "ChaosDamage", modType = "INC", cfg = "skill" }, }, + }, + { label = "Total More", + { format = "{0:mod:1}%", { modName = "Damage", modType = "MORE", cfg = "skill" }, }, + { format = "{0:mod:1}%", { modName = "PhysicalDamage", modType = "MORE", cfg = "skill" }, }, + { format = "{0:mod:1}%", { modName = { "LightningDamage", "ElementalDamage" }, modType = "MORE", cfg = "skill" }, }, + { format = "{0:mod:1}%", { modName = { "ColdDamage", "ElementalDamage" }, modType = "MORE", cfg = "skill" }, }, + { format = "{0:mod:1}%", { modName = { "FireDamage", "ElementalDamage" }, modType = "MORE", cfg = "skill" }, }, + { format = "{0:mod:1}%", { modName = "ChaosDamage", modType = "MORE", cfg = "skill" }, }, + }, + { label = "Effective DPS Mod", flag = "effective", + { }, + { format = "x {2:output:PhysicalEffMult}", + { breakdown = "PhysicalEffMult" }, + { label = "Enemy modifiers", modName = { "DamageTaken", "PhysicalDamageTaken" }, enemy = true }, + }, + { format = "x {2:output:LightningEffMult}", + { breakdown = "LightningEffMult" }, + { label = "Player modifiers", modName = { "LightningPenetration", "ElementalPenetration" }, cfg = "skill" }, + { label = "Enemy modifiers", modName = { "DamageTaken", "LightningDamageTaken", "ElementalDamageTaken", "LightningResist", "ElementalResist" }, enemy = true }, + }, + { format = "x {2:output:ColdEffMult}", + { breakdown = "ColdEffMult" }, + { label = "Player modifiers", modName = { "ColdPenetration", "ElementalPenetration" }, cfg = "skill" }, + { label = "Enemy modifiers", modName = { "DamageTaken", "ColdDamageTaken", "ElementalDamageTaken", "ColdResist", "ElementalResist" }, enemy = true }, + }, + { format = "x {2:output:FireEffMult}", + { breakdown = "FireEffMult" }, + { label = "Player modifiers", modName = { "FirePenetration", "ElementalPenetration" }, cfg = "skill" }, + { label = "Enemy modifiers", modName = { "DamageTaken", "FireDamageTaken", "ElementalDamageTaken", "FireResist", "ElementalResist" }, enemy = true }, + }, + { format = "x {2:output:ChaosEffMult}", + { breakdown = "ChaosEffMult" }, + { label = "Enemy modifiers", modName = { "DamageTaken", "ChaosDamageTaken", "ChaosResist" }, enemy = true }, + }, + }, + { label = "Hit Damage", textSize = 12, + { format = "{0:output:TotalMin} to {0:output:TotalMax}", }, + { format = "{0:output:PhysicalMin} to {0:output:PhysicalMax}", { breakdown = "Physical" }, }, + { format = "{0:output:LightningMin} to {0:output:LightningMax}", { breakdown = "Lightning" }, }, + { format = "{0:output:ColdMin} to {0:output:ColdMax}", { breakdown = "Cold" }, }, + { format = "{0:output:FireMin} to {0:output:FireMax}", { breakdown = "Fire" }, }, + { format = "{0:output:ChaosMin} to {0:output:ChaosMax}", { breakdown = "Chaos" }, }, + }, + { label = "Average Hit", { format = "{1:output:AverageHit}", { breakdown = "AverageHit" }, }, }, + { label = "Average Damage", flag = "attack", { format = "{1:output:AverageDamage}", { breakdown = "AverageDamage" }, }, }, + { label = "Skill DPS", flag = "notAverage", { format = "{1:output:TotalDPS}", { breakdown = "TotalDPS" }, }, }, + { label = "Mana Cost", { format = "{0:output:ManaCost}", { breakdown = "ManaCost" }, { modName = "ManaCost", cfg = "skill" }, }, }, +} }, +{ 3, "Dot", 1, "Skill Damage over Time", data.colorCodes.OFFENCE, { + extra = "{1:output:TotalDot} total DoT", + flag = "dot", + colWidth = 95, + { { format = "All Types:", }, { format = "Physical:" }, { format = "Lightning:" }, { format = "Cold:" }, { format = "Fire:" }, { format = "Chaos:" }, }, + { label = "Total Increased", + { format = "{0:mod:1}%", { modName = "Damage", modType = "INC", cfg = "dot" }, }, + { format = "{0:mod:1}%", { modName = "PhysicalDamage", modType = "INC", cfg = "dot" }, }, + { format = "{0:mod:1}%", { modName = { "LightningDamage", "ElementalDamage" }, modType = "INC", cfg = "dot" }, }, + { format = "{0:mod:1}%", { modName = { "ColdDamage", "ElementalDamage" }, modType = "INC", cfg = "dot" }, }, + { format = "{0:mod:1}%", { modName = { "FireDamage", "ElementalDamage" }, modType = "INC", cfg = "dot" }, }, + { format = "{0:mod:1}%", { modName = "ChaosDamage", modType = "INC", cfg = "dot" }, }, + }, + { label = "Total More", + { format = "{0:mod:1}%", { modName = "Damage", modType = "MORE", cfg = "dot" }, }, + { format = "{0:mod:1}%", { modName = "PhysicalDamage", modType = "MORE", cfg = "dot" }, }, + { format = "{0:mod:1}%", { modName = { "LightningDamage", "ElementalDamage" }, modType = "MORE", cfg = "dot" }, }, + { format = "{0:mod:1}%", { modName = { "ColdDamage", "ElementalDamage" }, modType = "MORE", cfg = "dot" }, }, + { format = "{0:mod:1}%", { modName = { "FireDamage", "ElementalDamage" }, modType = "MORE", cfg = "dot" }, }, + { format = "{0:mod:1}%", { modName = "ChaosDamage", modType = "MORE", cfg = "dot" }, }, + }, + { label = "Effective DPS Mod", flag = "effective", + { }, + { format = "x {2:output:PhysicalDotEffMult}", + { breakdown = "PhysicalDotEffMult" }, + { label = "Enemy modifiers", modName = { "DamageTaken", "DotTaken", "PhysicalDamageTaken", "PhysicalDamageReduction" }, enemy = true }, + }, + { format = "x {2:output:LightningDotEffMult}", + { breakdown = "LightningDotEffMult" }, + { label = "Enemy modifiers", modName = { "DamageTaken", "DotTaken", "LightningDamageTaken", "ElementalDamageTaken", "LightningResist", "ElementalResist" }, enemy = true }, + }, + { format = "x {2:output:ColdDotEffMult}", + { breakdown = "ColdDotEffMult" }, + { label = "Enemy modifiers", modName = { "DamageTaken", "DotTaken", "ColdDamageTaken", "ElementalDamageTaken", "ColdResist", "ElementalResist" }, enemy = true }, + }, + { format = "x {2:output:FireDotEffMult}", + { breakdown = "FireDotEffMult" }, + { label = "Enemy modifiers", modName = { "DamageTaken", "DotTaken", "FireDamageTaken", "ElementalDamageTaken", "FireResist", "ElementalResist" }, enemy = true }, + }, + { format = "x {2:output:ChaosDotEffMult}", + { breakdown = "ChaosDotEffMult" }, + { label = "Enemy modifiers", modName = { "DamageTaken", "DotTaken", "ChaosDamageTaken", "ChaosResist" }, enemy = true }, + }, + }, + { label = "Damage over Time", + { format = "{1:output:TotalDot}", }, + { format = "{1:output:PhysicalDot}", { breakdown = "PhysicalDot" }, }, + { format = "{1:output:LightningDot}", { breakdown = "LightningDot" }, }, + { format = "{1:output:ColdDot}", { breakdown = "ColdDot" }, }, + { format = "{1:output:FireDot}", { breakdown = "FireDot" }, }, + { format = "{1:output:ChaosDot}", { breakdown = "ChaosDot" }, }, + }, + { label = "Mana Cost", { format = "{0:output:ManaCost}", { breakdown = "ManaCost" }, { modName = "ManaCost", cfg = "skill" }, }, }, +} }, +{ 1, "Speed", 1, "Attack/Cast Rate", data.colorCodes.OFFENCE, { + extra = "{2:output:Speed}/s", + { label = "Inc. Attack Speed", flag = "attack", { format = "{0:mod:1}%", { modName = "Speed", modType = "INC", cfg = "skill", }, }, }, + { label = "More Attack Speed", flag = "attack", { format = "{0:mod:1}%", { modName = "Speed", modType = "MORE", cfg = "skill", }, }, }, + { label = "Inc. Cast Speed", flag = "spell", { format = "{0:mod:1}%", { modName = "Speed", modType = "INC", cfg = "skill", }, }, }, + { label = "More Cast Speed", flag = "spell", { format = "{0:mod:1}%", { modName = "Speed", modType = "MORE", cfg = "skill", }, }, }, + { label = "Casts per second", flag = "spell", { format = "{2:output:Speed}", { breakdown = "Speed" }, }, }, + { label = "Attacks per second", flag = "attack", { format = "{2:output:Speed}", { breakdown = "Speed" }, }, }, + { label = "Cast time", flag = "spell", { format = "{2:output:Time}s", }, }, + { label = "Attack time", flag = "attack", { format = "{2:output:Time}s", }, }, +} }, +{ 1, "Crit", 1, "Crits", data.colorCodes.OFFENCE, { + extra = "{2:output:CritChance}% x{2:output:CritMultiplier}", + { label = "Inc. Crit Chance", { format = "{0:mod:1}%", { modName = "CritChance", modType = "INC", cfg = "skill" }, }, }, + { label = "Crit Chance", { format = "{2:output:CritChance}%", { breakdown = "CritChance" }, { modName = "CritChance", cfg = "skill" }, }, }, + { label = "Crit Multiplier", { format = "x {2:output:CritMultiplier}", { modName = "CritMultiplier", cfg = "skill"}, }, }, + { label = "Crit Effect Mod", { format = "x {3:output:CritEffect}", { breakdown = "CritEffect" }, }, }, +} }, +{ 1, "HitChance", 1, "Accuracy", data.colorCodes.OFFENCE, { + 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" }, }, }, +} }, +{ 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" }, }, }, + { label = "Skill Duration", flag = "duration", { format = "{2:output:Duration}s", { breakdown = "Duration" }, }, }, + { label = "Projectile Count", flag = "projectile", { format = "{0:output:ProjectileCount}", { modName = "ProjectileCount", cfg = "skill" }, }, }, + { label = "Pierce Chance", flag = "projectile", { format = "{0:output:PierceChance}%", { modName = "PierceChance", cfg = "skill" }, }, }, + { label = "Proj. Speed Mod", flag = "projectile", { format = "x {2:output:ProjectileSpeedMod}", { breakdown = "ProjectileSpeedMod" }, { modName = "ProjectileSpeed", cfg = "skill" }, }, }, + { label = "Area Radius Mod", flag = "area", { format = "x {2:output:AreaRadiusMod}", { breakdown = "AreaRadiusMod" }, { modName = "AreaRadius", cfg = "skill" }, }, }, + { label = "Active Trap Limit", flag = "trap", { format = "{0:output:ActiveTrapLimit}", { modName = "ActiveTrapLimit", cfg = "skill" }, }, }, + { label = "Trap Cooldown", flag = "trap", { format = "{2:output:TrapCooldown}s", { breakdown = "TrapCooldown" }, { modName = "TrapCooldownRecovery", cfg = "skill" }, }, }, + { label = "Active Mine Limit", flag = "mine", { format = "{0:output:ActiveMineLimit}", { modName = "ActiveMineLimit", cfg = "skill" }, }, }, + { label = "Active Totem Limit", flag = "totem", { format = "{0:output:ActiveTotemLimit}", { modName = "ActiveTotemLimit", cfg = "skill" }, }, }, + { label = "Totem Life Mod", flag = "totem", { format = "x {2:output:TotemLifeMod}", { breakdown = "TotemLifeMod" }, { modName = "TotemLife", cfg = "skill" }, }, }, + { label = "Totem Life", flag = "totem", { format = "{0:output:TotemLife}", { breakdown = "TotemLife" }, }, }, +} }, +{ 1, "Bleed", 1, "Bleed", data.colorCodes.OFFENCE, { + extra = "{0:output:BleedChance}% {1:output:BleedDPS} {2:output:BleedDuration}s", + flag = "bleed", + { label = "Chance to Bleed", { format = "{0:output:BleedChance}%", { modName = "BleedChance", cfg = "skill" }, }, }, + { label = "Total Increased", { format = "{0:mod:1}%", { modName = { "Damage", "PhysicalDamage" }, modType = "INC", cfg = "bleed" }, }, }, + { label = "Total More", { format = "{0:mod:1}%", { modName = { "Damage", "PhysicalDamage" }, modType = "MORE", cfg = "bleed" }, }, }, + { label = "Effective DPS Mod", flag = "effective", { format = "x {2:output:BleedEffMult}", { breakdown = "BleedEffMult" }, { label = "Enemy modifiers", modName = { "DamageTaken", "DotTaken", "PhysicalDamageTaken", "PhysicalDamageReduction" }, enemy = true }, }, }, + { label = "Bleed DPS", { format = "{1:output:BleedDPS}", { breakdown = "BleedDPS" }, }, }, + { label = "Bleed Duration", { format = "{2:output:BleedDuration}s", { breakdown = "BleedDuration" }, }, }, +} }, +{ 1, "Poison", 1, "Poison", data.colorCodes.OFFENCE, { + extra = "{0:output:PoisonChance}% {1:output:PoisonDPS} {2:output:PoisonDuration}s", + flag = "poison", + { label = "Chance to Poison", { format = "{0:output:PoisonChance}%", { modName = "PoisonChance", cfg = "skill" }, }, }, + { label = "Total Increased", { format = "{0:mod:1}%", { modName = { "Damage", "ChaosDamage" }, modType = "INC", cfg = "poison" }, }, }, + { label = "Total More", { format = "{0:mod:1}%", { modName = { "Damage", "ChaosDamage" }, modType = "MORE", cfg = "poison" }, }, }, + { label = "Effective DPS Mod", flag = "effective", { format = "x {2:output:PoisonEffMult}", { breakdown = "PoisonEffMult" }, { label = "Enemy modifiers", modName = { "ChaosResist", "DamageTaken", "DotTaken", "ChaosDamageTaken" }, enemy = true }, }, }, + { label = "Poison DPS", { format = "{1:output:PoisonDPS}", { breakdown = "PoisonDPS" }, }, }, + { label = "Poison Duration", { format = "{2:output:PoisonDuration}s", { breakdown = "PoisonDuration" }, }, }, + { label = "Dmg. per Poison", { format = "{1:output:PoisonDamage}", { breakdown = "PoisonDamage" }, }, }, +} }, +{ 1, "Ignite", 1, "Ignite", data.colorCodes.OFFENCE, { + extra = "{0:output:IgniteChance}% {1:output:IgniteDPS} {2:output:IgniteDuration}s", + flag = "ignite", + { label = "Chance to Ignite", { format = "{0:output:IgniteChance}%", { label = "Player modifiers", modName = "EnemyIgniteChance", cfg = "skill" }, { label = "Enemy modifiers", modName = "SelfIgniteChance", enemy = true }, }, }, + { label = "Total Increased", { format = "{0:mod:1}%", { modName = { "Damage", "FireDamage", "ElementalDamage" }, modType = "INC", cfg = "ignite" }, }, }, + { label = "Total More", { format = "{0:mod:1}%", { modName = { "Damage", "FireDamage", "ElementalDamage" }, modType = "MORE", cfg = "ignite" }, }, }, + { label = "Effective DPS Mod", flag = "effective", { format = "x {2:output:IgniteEffMult}", { breakdown = "IgniteEffMult" }, { label = "Enemy modifiers", modName = { "FireResist", "ElementalResist", "DamageTaken", "DotTaken", "FireDamageTaken", "ElementalDamageTaken" }, enemy = true }, }, }, + { label = "Ignite DPS", { format = "{1:output:IgniteDPS}", { breakdown = "IgniteDPS" }, }, }, + { label = "Ignite Duration", { format = "{2:output:IgniteDuration}s", { breakdown = "IgniteDuration" }, { label = "Player modifiers", modName = "EnemyIgniteDuration", cfg = "skill" }, { label = "Enemy modifiers", modName = "SelfIgniteDuration", enemy = true }, }, }, +} }, +{ 1, "MiscEffects", 1, "Other Effects", data.colorCodes.OFFENCE, { + { label = "Chance to Shock", flag = "shock", { format = "{0:output:ShockChance}%", { label = "Player modifiers", modName = "EnemyShockChance", cfg = "skill" }, { label = "Enemy modifiers", modName = "SelfShockChance", enemy = true }, }, }, + { label = "Shock Dur. Mod", flag = "shock", { format = "x {2:output:ShockDurationMod}", { label = "Player modifiers", modName = "EnemyShockDuration", cfg = "skill" }, { label = "Enemy modifiers", modName = "SelfShockDuration", enemy = true }, }, }, + { label = "Chance to Freeze", flag = "freeze", { format = "{0:output:FreezeChance}%", { label = "Player modifiers", modName = "EnemyFreezeChance", cfg = "skill" }, { label = "Enemy modifiers", modName = "SelfFreezeChance", enemy = true }, }, }, + { label = "Freeze Dur. Mod", flag = "shock", { format = "x {2:output:FreezeDurationMod}", { label = "Player modifiers", modName = "EnemyFreezeDuration", cfg = "skill" }, { label = "Enemy modifiers", modName = "SelfFreezeDuration", enemy = true }, }, }, + { label = "Stun Thresh. Mod", { format = "x {2:output:EnemyStunThresholdMod}", { modName = "EnemyStunThreshold", cfg = "skill" }, }, }, + { label = "Stun Duration", { format = "{2:output:EnemyStunDuration}s", { breakdown = "EnemyStunDuration" }, { label = "Player modifiers", modName = { "EnemyStunDuration" }, cfg = "skill" }, { label = "Enemy modifiers", modName = { "StunRecovery" }, enemy = true }, }, }, +} }, +{ 1, "Attributes", 2, "Attributes", data.colorCodes.NORMAL, { + extra = data.colorCodes.STRENGTH.."{0:output:Str}^7, "..data.colorCodes.DEXTERITY.."{0:output:Dex}^7, "..data.colorCodes.INTELLIGENCE.."{0:output:Int}", + { label = "Strength", { format = "{0:output:Str}", { breakdown = "Str" }, { modName = "Str" }, }, }, + { label = "Dexterity", { format = "{0:output:Dex}", { breakdown = "Dex" }, { modName = "Dex" }, }, }, + { label = "Intelligence", { format = "{0:output:Int}", { breakdown = "Int" }, { modName = "Int" }, }, }, +} }, +{ 1, "Life", 2, "Life", data.colorCodes.DEFENCE, { + extra = "{0:output:LifeUnreserved}/{0:output:Life}", + { label = "Base from Gear", { format = "{0:mod:1}", { modName = "Life", modType = "BASE", modSource = "Item" }, }, }, + { label = "Inc. from Tree", { format = "{0:mod:1}%", { modName = "Life", modType = "INC", modSource = "Node" }, }, }, + { label = "Total Base", { format = "{0:mod:1}", { modName = "Life", modType = "BASE" }, }, }, + { label = "Total Increased", { format = "{0:mod:1}%", { modName = "Life", modType = "INC", }, }, }, + { label = "Total", { format = "{0:output:Life}", { breakdown = "Life" }, }, }, + { label = "Reserved", { format = "{0:output:LifeReserved} ({0:output:LifeReservedPercent}%)", { breakdown = "LifeReserved" }, }, }, + { label = "Unreserved", { format = "{0:output:LifeUnreserved} ({0:output:LifeUnreservedPercent}%)" }, }, + { label = "Regen", { format = "{1:output:LifeRegen} ({1:output:LifeRegenPercent}%)", { modName = { "LifeRegen", "LifeRegenPercent" }, modType = "BASE" }, }, }, +} }, +{ 1, "Mana", 2, "Mana", data.colorCodes.DEFENCE, { + extra = "{0:output:ManaUnreserved}/{0:output:Mana}", + { label = "Base from Gear", { format = "{0:mod:1}", { modName = "Mana", modType = "BASE", modSource = "Item" }, }, }, + { label = "Inc. from Tree", { format = "{0:mod:1}%", { modName = "Mana", modType = "INC", modSource = "Node" }, }, }, + { label = "Total Base", { format = "{0:mod:1}", { modName = "Mana", modType = "BASE" }, }, }, + { label = "Total Increased", { format = "{0:mod:1}%", { modName = "Mana", modType = "INC" }, }, }, + { label = "Total", { format = "{0:output:Mana}", { breakdown = "Mana" }, }, }, + { label = "Reserved", { format = "{0:output:ManaReserved} ({0:output:ManaReservedPercent}%)", { breakdown = "ManaReserved" }, }, }, + { label = "Unreserved", { format = "{0:output:ManaUnreserved} ({0:output:ManaUnreservedPercent}%)" }, }, + { label = "Base Regen", { format = "{1:mod:1}", { modName = "ManaRegen", modType = "BASE" }, }, }, + { label = "Increased Regen", { format = "{0:mod:1}%", { modName = "ManaRegen", modType = "INC" }, }, }, + { label = "Regen", { format = "{1:output:ManaRegen}", { breakdown = "ManaRegen" }, }, }, +} }, +{ 1, "EnergyShield", 2, "Energy Shield", data.colorCodes.DEFENCE, { + extra = "{0:output:EnergyShield}", + { label = "Base from Armours", { format = "{0:output:Gear:EnergyShield}", }, }, + { label = "Global Base", { format = "{0:mod:1}", { modName = "EnergyShield", modType = "BASE" }, }, }, + { label = "Inc. from Tree", { format = "{0:mod:1}%", { modName = "EnergyShield", modType = "INC", modSource = "Node" }, }, }, + { label = "Total Increased", { format = "{0:mod:1}%", { modName = { "EnergyShield", "Defences" }, modType = "INC" }, }, }, + { label = "Total More", { format = "{0:mod:1}%", { modName = { "EnergyShield", "Defences" }, modType = "MORE" }, }, }, + { label = "Total", { format = "{0:output:EnergyShield}", { breakdown = "EnergyShield" }, }, }, + { label = "Recharge Rate", { format = "{1:output:EnergyShieldRecharge}", { breakdown = "EnergyShieldRecharge" }, { modName = { "EnergyShieldRecharge", "EnergyShieldRecovery" }, }, }, }, + { label = "Recharge Delay", { format = "{2:output:EnergyShieldRechargeDelay}s", { breakdown = "EnergyShieldRechargeDelay" }, { modName = "EnergyShieldRechargeFaster" }, }, }, + { label = "Regen", { format = "{1:output:EnergyShieldRegen} ({1:output:EnergyShieldRegenPercent}%)", { modName = { "EnergyShieldRegen", "EnergyShieldRegenPercent", "EnergyShieldRecovery" }, modType = "BASE" }, }, }, +} }, +{ 1, "Armour", 3, "Armour", data.colorCodes.DEFENCE, { + extra = "{0:output:Armour}", + { label = "Base from Armours", { format = "{0:output:Gear:Armour}" }, }, + { label = "Global Base", { format = "{0:mod:1}", { modName = "Armour", modType = "BASE" }, }, }, + { label = "Inc. from Tree", { format = "{0:mod:1}%", { modName = { "Armour", "ArmourAndEvasion" }, modType = "INC", modSource = "Node", }, }, }, + { label = "Total Increased", { format = "{0:mod:1}%", { modName = { "Armour", "ArmourAndEvasion", "Defences" }, modType = "INC" }, }, }, + { label = "Total More", { format = "{0:mod:1}%", { modName = { "Armour", "ArmourAndEvasion", "Defences" }, modType = "MORE" }, }, }, + { label = "Total", { format = "{0:output:Armour}", { breakdown = "Armour" }, }, }, +} }, +{ 1, "Evasion", 3, "Evasion", data.colorCodes.DEFENCE, { + extra = "{0:output:Evasion}", + { label = "Base from Armours", { format = "{0:output:Gear:Evasion}", }, }, + { label = "Global Base", { format = "{0:mod:1}", { modName = "Evasion", modType = "BASE" }, }, }, + { label = "Inc. from Tree", { format = "{0:mod:1}%", { modName = { "Evasion", "ArmourAndEvasion" }, modType = "INC", modSource = "Node" }, }, }, + { 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" }, }, }, +} }, +{ 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}", + { label = "Fire Resist", { format = "{0:output:FireResist}% (+{0:output:FireResistOverCap}%)", { breakdown = "FireResist" }, { modName = { "FireResistMax", "FireResist", "ElementalResist" }, }, }, }, + { label = "Cold Resist", { format = "{0:output:ColdResist}% (+{0:output:ColdResistOverCap}%)", { breakdown = "ColdResist" }, { modName = { "ColdResistMax", "ColdResist", "ElementalResist" }, }, }, }, + { label = "Lightning Resist", { format = "{0:output:LightningResist}% (+{0:output:LightningResistOverCap}%)", { breakdown = "LightningResist" }, { modName = { "LightningResistMax", "LightningResist", "ElementalResist" }, }, }, }, + { label = "Chaos Resist", { format = "{0:output:ChaosResist}% (+{0:output:ChaosResistOverCap}%)", { breakdown = "ChaosResist" }, { modName = { "ChaosResistMax", "ChaosResist" }, }, }, }, +} }, +{ 1, "MiscDefences", 3, "Other Defences", data.colorCodes.DEFENCE, { + { label = "Dodge Chance", { format = "{0:output:AttackDodgeChance}%", { modName = "AttackDodgeChance" }, }, }, + { label = "Spell Ddg. Chance", { format = "{0:output:SpellDodgeChance}%", { modName = "SpellDodgeChance" }, }, }, + { label = "Block Chance", { format = "{0:output:BlockChance}%", { breakdown = "BlockChance" }, { modName = "BlockChance" }, }, }, + { label = "Spell Block Chance", { format = "{0:output:SpellBlockChance}%", { breakdown = "SpellBlockChance" }, { modName = { "SpellBlockChance", "BlockChanceConv" }, }, }, }, + { label = "Stun Avoid Chance", { format = "{0:output:StunAvoidChance}%", { modName = "AvoidStun" }, }, }, + { label = "Stun Duration", { format = "{2:output:StunDuration}s", { breakdown = "StunDuration" }, { modName = "StunRecovery" }, }, }, + { label = "Block Duration", { format = "{2:output:BlockDuration}s", { breakdown = "BlockDuration" }, { modName = { "StunRecovery", "BlockRecovery" }, }, }, }, +} }, +} \ No newline at end of file diff --git a/Modules/Calcs.lua b/Modules/Calcs.lua index 6feb2ce1..cda04de7 100644 --- a/Modules/Calcs.lua +++ b/Modules/Calcs.lua @@ -4,166 +4,102 @@ -- Performs all the offense and defense calculations. -- Here be dragons! -- -local grid = ... local pairs = pairs local ipairs = ipairs local t_insert = table.insert +local t_remove = table.remove local m_abs = math.abs local m_ceil = math.ceil local m_floor = math.floor local m_min = math.min local m_max = math.max - -local mod_listMerge = modLib.listMerge -local mod_listScaleMerge = modLib.listScaleMerge -local mod_dbMerge = modLib.dbMerge -local mod_dbScaleMerge = modLib.dbScaleMerge -local mod_dbUnmerge = modLib.dbUnmerge -local mod_dbMergeList = modLib.dbMergeList -local mod_dbScaleMergeList = modLib.dbScaleMergeList -local mod_dbUnmergeList = modLib.dbUnmergeList - -local setViewMode = LoadModule("Modules/CalcsView", grid) - -local isElemental = { fire = true, cold = true, lightning = true } +local s_format = string.format +local band = bit.band +local bor = bit.bor -- List of all damage types, ordered according to the conversion sequence -local dmgTypeList = {"physical", "lightning", "cold", "fire", "chaos"} +local dmgTypeList = {"Physical", "Lightning", "Cold", "Fire", "Chaos"} --- Combine specified modifiers from all current namespaces -local function sumMods(modDB, mult, ...) - local activeWatchers = modDB._activeWatchers - local val = mult and 1 or 0 - for i = 1, select('#', ...) do - local modName = select(i, ...) - if modName then - for space, spaceName in pairs(modDB._spaces) do - local modVal = space[modName] - if modVal then - val = mult and (val * modVal) or (val + modVal) - end - if activeWatchers then - local fullName = (spaceName and spaceName.."_" or "") .. modName - for watchList in pairs(activeWatchers) do - watchList[fullName] = mult and 1 or 0 - end - end - end - end - end - return val -end +local resistTypeList = { "Fire", "Cold", "Lightning", "Chaos" } --- Get value of misc modifier -local function getMiscVal(modDB, spaceName, modName, default) - local space = modDB[spaceName or "global"] - local val = default - if space and space[modName] ~= nil then - val = space[modName] - end - if modDB._activeWatchers then - local fullName = (spaceName and spaceName.."_" or "") .. modName - for watchList in pairs(modDB._activeWatchers) do - watchList[fullName] = default - end - if not space then - modDB[spaceName] = { } - end - end - return val +local isElemental = { Fire = true, Cold = true, Lightning = true } + +-- Calculate and combine INC/MORE modifiers for the given modifier names +local function calcMod(modDB, cfg, ...) + return (1 + (modDB:Sum("INC", cfg, ...)) / 100) * modDB:Sum("MORE", cfg, ...) end -- Calculate value, optionally adding additional base -local function calcVal(modDB, name, base) - local baseVal = sumMods(modDB, false, name.."Base") + (base or 0) - return baseVal * (1 + (sumMods(modDB, false, name.."Inc")) / 100) * sumMods(modDB, true, name.."More") +local function calcVal(modDB, name, cfg, base) + local baseVal = modDB:Sum("BASE", cfg, name) + (base or 0) + if baseVal ~= 0 then + return baseVal * calcMod(modDB, cfg, name) + else + return 0 + end end -- Calculate hit chance local function calcHitChance(evasion, accuracy) local rawChance = accuracy / (accuracy + (evasion / 4) ^ 0.8) * 100 - return m_max(m_min(m_floor(rawChance + 0.5) / 100, 0.95), 0.05) + return m_max(m_min(m_floor(rawChance + 0.5), 95), 5) end -- Merge gem modifiers with given mod list local function mergeGemMods(modList, gem) - for k, v in pairs(gem.data.base) do - mod_listMerge(modList, k, v) + modList:AddList(gem.data.baseMods) + if gem.quality > 0 then + for i = 1, #gem.data.qualityMods do + local scaledMod = copyTable(gem.data.qualityMods[i]) + scaledMod.value = m_floor(scaledMod.value * gem.quality) + modList:AddMod(scaledMod) + end end - for k, v in pairs(gem.data.quality) do - mod_listMerge(modList, k, m_floor(v * gem.quality)) + gem.level = m_max(gem.level, 1) + if not gem.data.levels[gem.level] then + gem.level = m_min(gem.level, #gem.data.levels) end - gem.level = m_min(m_max(gem.level, 1), #gem.data.levels) - for k, v in pairs(gem.data.levels[gem.level]) do - mod_listMerge(modList, k, v) - end -end - --- Generate active namespace table -local function buildSpaceTable(modDB, spaceFlags) - modDB._spaces = { [modDB.global] = false } - if spaceFlags then - for spaceName, val in pairs(spaceFlags) do - if val then - modDB[spaceName] = modDB[spaceName] or { } - if modDB._activeWatchers or next(modDB[spaceName]) then - modDB._spaces[modDB[spaceName]] = spaceName - end + local levelData = gem.data.levels[gem.level] + for col, mod in pairs(gem.data.levelMods) do + if levelData[col] then + local newMod = copyTable(mod) + if type(newMod.value) == "table" then + newMod.value.value = levelData[col] + else + newMod.value = levelData[col] end + modList:AddMod(newMod) end end end --- Start watch section -local function startWatch(env, key, ...) - if env.buildWatch then - -- Running in build mode - -- In this mode, any modifiers read while this section is active will be tracked - env.watchers[key] = { _key = key } - env.modDB._activeWatchers[env.watchers[key] ] = true - return true - else - local watchers = env.watchers - if not watchers or env.spacesChanged then - -- Watch system is disabled or skill namespaces have changed, so all sections will run by default - return true - end - -- This section will be flagged if any modifiers read during build mode have changed since the build mode pass - if not watchers[key] or watchers[key]._flag then - return true - end - for i = 1, select('#', ...) do - -- Check if any dependant sections have been flagged - if watchers[select(i, ...)]._flag then - return true - end - end - return false - end -end - --- End watch section -local function endWatch(env, key) - if env.buildWatch and env.watchers[key] then - env.modDB._activeWatchers[env.watchers[key] ] = nil - end -end - -- Check if given support gem can support the given active skill -- Global function, as GemSelectControl needs to use it too function gemCanSupport(gem, activeSkill) - if gem.data.requireFunc then - setfenv(gem.data.requireFunc, activeSkill.baseFlags) - return gem.data.requireFunc() == true - else + if gem.data.unsupported then + return false + end + for _, skillType in pairs(gem.data.excludeSkillTypes) do + if activeSkill.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 activeSkill.skillTypes[skillType] then + return true + end + end + return false end -- Check if given gem is of the given type ("all", "strength", "melee", etc) -local function gemIsType(gem, type) - return type == "all" or (type == "active" and not gem.data.support) or (type == "elemental" and (gem.data.fire or gem.data.cold or gem.data.lightning)) or gem.data[type] +-- Global function, as ModDBClass and ModListClass need to use it too +function gemIsType(gem, type) + return type == "all" or (type == "elemental" and (gem.data.fire or gem.data.cold or gem.data.lightning)) or gem.data[type] end -- Create an active skill using the given active gem and list of support gems @@ -175,29 +111,27 @@ local function createActiveSkill(activeGem, supportList) data = activeGem.data, level = activeGem.level, quality = activeGem.quality, + fromItem = activeGem.fromItem, srcGem = activeGem, } activeSkill.gemList = { activeSkill.activeGem } -- Build base skill flag set ('attack', 'projectile', etc) - local baseFlags = { } + local baseFlags = copyTable(activeGem.data.baseFlags) activeSkill.baseFlags = baseFlags - for k, v in pairs(activeSkill.activeGem.data) do - if v == true then - baseFlags[k] = true - end - end - if baseFlags.hit then - baseFlags.damage = true - end - if baseFlags.bow then - baseFlags.projectile = true - end + + activeSkill.skillTypes = copyTable(activeGem.data.skillTypes) + for _, gem in ipairs(supportList) do - if gem.data.addFlags and gemCanSupport(gem, activeSkill) then - -- Support gem adds flags to supported skills (eg. Remote Mine adds 'mine') - for k in pairs(gem.data.addFlags) do - baseFlags[k] = true + if gemCanSupport(gem, activeSkill) then + if gem.data.addFlags then + -- Support gem adds flags to supported skills (eg. Remote Mine adds 'mine') + for k in pairs(gem.data.addFlags) do + baseFlags[k] = true + end + end + for _, skillType in pairs(gem.data.addSkillTypes) do + activeSkill.skillTypes[skillType] = true end end end @@ -224,76 +158,9 @@ end -- Build list of modifiers for given active skill local function buildActiveSkillModList(env, activeSkill) - local skillModList = { } + local skillModList = common.New("ModList") activeSkill.skillModList = skillModList - if activeSkill.socketBonuses then - -- Apply local skill modifiers from the item this skill is socketed into - for type, val in pairs(activeSkill.socketBonuses.gemLevel) do - for _, gem in pairs(activeSkill.gemList) do - if not gem.fromItem and gemIsType(gem, type) then - gem.level = gem.level + val - end - end - end - for type, val in pairs(activeSkill.socketBonuses.gemQuality) do - for _, gem in pairs(activeSkill.gemList) do - if not gem.fromItem and gemIsType(gem, type) then - gem.quality = gem.quality + val - end - end - end - for type, modList in pairs(activeSkill.socketBonuses.modList) do - if gemIsType(activeSkill.activeGem, type) then - for k, v in pairs(modList) do - mod_listMerge(skillModList, k, v) - end - end - end - end - - -- Merge skill-specific modifiers - local skillSpace = env.modDB["Skill:"..activeSkill.activeGem.name] - if skillSpace then - for k, v in pairs(skillSpace) do - mod_listMerge(skillModList, k, v) - end - end - - -- Add support gem modifiers to skill mod list - for _, gem in pairs(activeSkill.gemList) do - if gem.data.support then - mergeGemMods(skillModList, gem) - end - end - - -- Apply gem/quality modifiers from support gems - activeSkill.activeGem.level = activeSkill.activeGem.level + (skillModList.gemLevel_active or 0) - activeSkill.activeGem.quality = activeSkill.activeGem.quality + (skillModList.gemQuality_active or 0) - - -- Add active gem modifiers - mergeGemMods(skillModList, activeSkill.activeGem) - - -- Separate auxillary modifiers (mods that can affect defensive stats or other skills) - activeSkill.buffModList = { } - activeSkill.auraModList = { } - activeSkill.curseModList = { } - for k, v in pairs(skillModList) do - local spaceName, modName = modLib.getSpaceName(k) - if spaceName == "BuffEffect" then - mod_listMerge(activeSkill.buffModList, modName, v) - elseif spaceName == "AuraEffect" then - mod_listMerge(activeSkill.auraModList, modName, v) - elseif spaceName == "CurseEffect" then - mod_listMerge(activeSkill.curseModList, modName, v) - end - end - - if activeSkill ~= env.mainSkill then - -- Add to auxillary skill list - t_insert(env.auxSkillList, activeSkill) - end - -- Handle multipart skills activeSkill.skillPartList = { } local activeGemParts = activeSkill.activeGem.data.parts @@ -316,6 +183,197 @@ local function buildActiveSkillModList(env, activeSkill) end activeSkill.baseFlags.multiPart = #activeGemParts > 1 end + + -- Initialise skill flag set + local skillFlags = copyTable(activeSkill.baseFlags) + + -- Set weapon flags + local weapon1Type = env.itemList["Weapon 1"] and env.itemList["Weapon 1"].type or "None" + local weapon2Type = env.itemList["Weapon 2"] and env.itemList["Weapon 2"].type or "" + skillFlags.mainIs1H = true + local weapon1Info = data.weaponTypeInfo[weapon1Type] + if weapon1Info then + if not weapon1Info.oneHand then + skillFlags.mainIs1H = nil + end + if skillFlags.attack then + skillFlags.weapon1Attack = true + if weapon1Info.melee and skillFlags.melee then + skillFlags.projectile = nil + elseif not weapon1Info.melee and skillFlags.projectile then + skillFlags.melee = nil + end + end + end + local weapon2Info = data.weaponTypeInfo[weapon2Type] + if weapon2Info and skillFlags.mainIs1H then + if skillFlags.attack then + skillFlags.weapon2Attack = true + end + end + + -- Build skill mod flag set + local skillModFlags = 0 + skillModFlags = bor(skillModFlags, ModFlag.Hit) + if skillFlags.spell then + skillModFlags = bor(skillModFlags, ModFlag.Spell) + elseif skillFlags.attack then + skillModFlags = bor(skillModFlags, ModFlag.Attack) + end + if skillFlags.weapon1Attack then + skillModFlags = bor(skillModFlags, env.weaponData1.flag or weapon1Info.flag) + if weapon1Type ~= "None" then + skillModFlags = bor(skillModFlags, ModFlag.Weapon) + if skillFlags.mainIs1H then + skillModFlags = bor(skillModFlags, ModFlag.Weapon1H) + else + skillModFlags = bor(skillModFlags, ModFlag.Weapon2H) + end + if weapon1Info.melee then + skillModFlags = bor(skillModFlags, ModFlag.WeaponMelee) + else + skillModFlags = bor(skillModFlags, ModFlag.WeaponRanged) + end + end + end + if skillFlags.melee then + skillModFlags = bor(skillModFlags, ModFlag.Melee) + elseif skillFlags.projectile then + skillModFlags = bor(skillModFlags, ModFlag.Projectile) + end + if skillFlags.area then + skillModFlags = bor(skillModFlags, ModFlag.Area) + end + activeSkill.skillFlags = skillFlags + + -- Build skill keyword flag set + local skillKeywordFlags = 0 + if skillFlags.aura then + skillKeywordFlags = bor(skillKeywordFlags, KeywordFlag.Aura) + end + if skillFlags.curse then + skillKeywordFlags = bor(skillKeywordFlags, KeywordFlag.Curse) + end + if skillFlags.warcry then + skillKeywordFlags = bor(skillKeywordFlags, KeywordFlag.Warcry) + end + if skillFlags.movement then + skillKeywordFlags = bor(skillKeywordFlags, KeywordFlag.Movement) + end + if skillFlags.lightning then + skillKeywordFlags = bor(skillKeywordFlags, KeywordFlag.Lightning) + end + if skillFlags.cold then + skillKeywordFlags = bor(skillKeywordFlags, KeywordFlag.Cold) + end + if skillFlags.fire then + skillKeywordFlags = bor(skillKeywordFlags, KeywordFlag.Fire) + end + if skillFlags.chaos then + skillKeywordFlags = bor(skillKeywordFlags, KeywordFlag.Chaos) + end + if skillFlags.totem then + skillKeywordFlags = bor(skillKeywordFlags, KeywordFlag.Totem) + elseif skillFlags.trap then + skillKeywordFlags = bor(skillKeywordFlags, KeywordFlag.Trap) + elseif skillFlags.mine then + skillKeywordFlags = bor(skillKeywordFlags, KeywordFlag.Mine) + end + activeSkill.skillKeywordFlags = skillKeywordFlags + + if skillFlags.totem then + activeSkill.skillTotemId = activeSkill.activeGem.data.skillTotemId + if not activeSkill.skillTotemId then + if activeSkill.activeGem.data.color == 2 then + activeSkill.skillTotemId = 2 + elseif activeSkill.activeGem.data.color == 3 then + activeSkill.skillTotemId = 3 + else + activeSkill.skillTotemId = 1 + end + end + end + + -- Build config structure for modifier searches + activeSkill.skillCfg = { + flags = skillModFlags, + keywordFlags = skillKeywordFlags, + skillName = activeSkill.activeGem.name:gsub("^Vaal ",""), -- This allows modifiers that target specific skills to also apply to their Vaal counterpart + skillGem = activeSkill.activeGem, + skillPart = activeSkill.skillPart, + slotName = activeSkill.slotName, + } + + -- Apply local skill modifiers from the item this skill is socketed into + for _, value in ipairs(env.modDB:Sum("LIST", activeSkill.skillCfg, "GemProperty")) do + for _, gem in pairs(activeSkill.gemList) do + if not gem.fromItem and gemIsType(gem, value.keyword) then + gem[value.key] = (gem[value.key] or 0) + value.value + end + end + end + + -- Add support gem modifiers to skill mod list + for _, gem in pairs(activeSkill.gemList) do + if gem.data.support then + mergeGemMods(skillModList, gem) + end + end + + -- Apply gem/quality modifiers from support gems + if not activeSkill.activeGem.fromItem then + for _, value in ipairs(skillModList:Sum("LIST", activeSkill.skillCfg, "GemProperty")) do + if value.keyword == "active_skill" then + activeSkill.activeGem[value.key] = activeSkill.activeGem[value.key] + value.value + end + end + end + + -- Add active gem modifiers + mergeGemMods(skillModList, activeSkill.activeGem) + + -- Extract skill data + activeSkill.skillData = { } + for _, value in ipairs(skillModList:Sum("LIST", activeSkill.skillCfg, "Misc")) do + if value.type == "SkillData" then + activeSkill.skillData[value.key] = value.value + end + end + + -- Separate global effect modifiers (mods that can affect defensive stats or other skills) + local i = 1 + while skillModList[i] do + local mod = skillModList[i] + local destList + for _, tag in ipairs(mod.tagList) do + if tag.type == "GlobalEffect" then + if tag.effectType == "Buff" then + destList = "buffModList" + elseif tag.effectType == "Aura" then + destList = "auraModList" + elseif tag.effectType == "Debuff" then + destList = "debuffModList" + elseif tag.effectType == "Curse" then + destList = "curseModList" + end + break + end + end + if destList then + if not activeSkill[destList] then + activeSkill[destList] = { } + end + t_insert(activeSkill[destList], mod) + t_remove(skillModList, i) + else + i = i + 1 + end + end + + if activeSkill.buffModList or activeSkill.auraModList or activeSkill.debuffModList or activeSkill.curseModList then + -- Add to auxillary skill list + t_insert(env.auxSkillList, activeSkill) + end end -- Build list of modifiers from the listed tree nodes @@ -326,11 +384,13 @@ local function buildNodeModList(env, nodeList, finishJewels) end -- Add node modifers - local modList = { } + local modList = common.New("ModList") for _, node in pairs(nodeList) do -- Merge with output list - for k, v in pairs(node.modList) do - mod_listMerge(modList, k, v) + if node.type == "keystone" then + modList:AddMod(node.keystoneMod) + else + modList:AddList(node.modList) end -- Run radius jewels @@ -359,83 +419,118 @@ local function buildNodeModList(env, nodeList, finishJewels) end -- Calculate min/max damage of a hit for the given damage type -local function calcHitDamage(env, output, damageType, ...) +local function calcHitDamage(env, damageType, ...) local modDB = env.modDB - local isAttack = (env.mode_skillType == "ATTACK") + local skillCfg = env.mainSkill.skillCfg local damageTypeMin = damageType.."Min" local damageTypeMax = damageType.."Max" -- Calculate base values - local baseMin, baseMax - if isAttack then - baseMin = getMiscVal(modDB, "weapon1", damageTypeMin, 0) + sumMods(modDB, false, damageTypeMin) - baseMax = getMiscVal(modDB, "weapon1", damageTypeMax, 0) + sumMods(modDB, false, damageTypeMax) - else - local damageEffectiveness = getMiscVal(modDB, "skill", "damageEffectiveness", 0) - if damageEffectiveness == 0 then - damageEffectiveness = 1 + local source = (env.mode_skillType == "ATTACK") and env.weaponData1 or env.mainSkill.skillData + local damageEffectiveness = source.damageEffectiveness or 1 + local addedMin = modDB:Sum("BASE", skillCfg, damageTypeMin) + local addedMax = modDB:Sum("BASE", skillCfg, damageTypeMax) + local baseMin = (source[damageTypeMin] or 0) + addedMin * damageEffectiveness + local baseMax = (source[damageTypeMax] or 0) + addedMax * damageEffectiveness + + if env.breakdown and not (...) and baseMin ~= 0 and baseMax ~= 0 then + t_insert(env.breakdown[damageType], "Base damage:") + local plus = "" + if (source[damageTypeMin] or 0) ~= 0 or (source[damageTypeMax] or 0) ~= 0 then + t_insert(env.breakdown[damageType], s_format("%d to %d ^8(base damage from %s)", source[damageTypeMin], source[damageTypeMax], env.mode_skillType == "ATTACK" and "weapon" or "skill")) + plus = "+ " end - baseMin = getMiscVal(modDB, "skill", damageTypeMin, 0) + sumMods(modDB, false, damageTypeMin) * damageEffectiveness - baseMax = getMiscVal(modDB, "skill", damageTypeMax, 0) + sumMods(modDB, false, damageTypeMax) * damageEffectiveness + if addedMin ~= 0 or addedMax ~= 0 then + if damageEffectiveness ~= 1 then + t_insert(env.breakdown[damageType], s_format("%s(%d to %d) x %.2f ^8(added damage multiplied by damage effectiveness)", plus, addedMin, addedMax, damageEffectiveness)) + else + t_insert(env.breakdown[damageType], s_format("%s%d to %d ^8(added damage)", plus, addedMin, addedMax)) + end + end + t_insert(env.breakdown[damageType], s_format("= %.1f to %.1f", baseMin, baseMax)) + end + + -- Calculate conversions + local addMin, addMax = 0, 0 + local conversionTable = env.conversionTable + for _, otherType in ipairs(dmgTypeList) do + if otherType == damageType then + -- Damage can only be converted from damage types that preceed this one in the conversion sequence, so stop here + break + end + local convMult = conversionTable[otherType][damageType] + if convMult > 0 then + -- Damage is being converted/gained from the other damage type + local min, max = calcHitDamage(env, otherType, damageType, ...) + addMin = addMin + min * convMult + addMax = addMax + max * convMult + end + end + if addMin ~= 0 and addMax ~= 0 then + addMin = round(addMin) + addMax = round(addMax) + end + + if baseMin == 0 and baseMax == 0 then + -- No base damage for this type, don't need to calculate modifiers + if env.breakdown and (addMin ~= 0 or addMax ~= 0) then + local endType, convDst + if (...) then + endType = select(select('#', ...), ...) + convDst = s_format("%d%% to %s", conversionTable[damageType][...] * 100, ...) + else + endType = damageType + end + t_insert(env.breakdown[endType].damageComponents, { + source = damageType, + convSrc = (addMin ~= 0 or addMax ~= 0) and (addMin .. " to " .. addMax), + total = addMin .. " to " .. addMax, + convDst = convDst, + }) + end + return addMin, addMax end -- Build lists of applicable modifier names local addElemental = isElemental[damageType] - local inc = { damageType.."Inc", "damageInc" } - local more = { damageType.."More", "damageMore" } - local damageTypeStr = "total_"..damageType + local modNames = { damageType.."Damage", "Damage" } for i = 1, select('#', ...) do local dstElem = select(i, ...) - damageTypeStr = damageTypeStr..dstElem -- Add modifiers for damage types to which this damage is being converted addElemental = addElemental or isElemental[dstElem] - t_insert(inc, dstElem.."Inc") - t_insert(more, dstElem.."More") + t_insert(modNames, dstElem.."Damage") end if addElemental then -- Damage is elemental or is being converted to elemental damage, add global elemental modifiers - t_insert(inc, "elementalInc") - t_insert(more, "elementalMore") + t_insert(modNames, "ElementalDamage") end -- Combine modifiers - local damageTypeStrInc = damageTypeStr.."Inc" - if startWatch(env, damageTypeStrInc) then - output[damageTypeStrInc] = 1 + sumMods(modDB, false, unpack(inc)) / 100 - endWatch(env, damageTypeStrInc) - end - local damageTypeStrMore = damageTypeStr.."More" - if startWatch(env, damageTypeStrMore) then - output[damageTypeStrMore] = m_floor(sumMods(modDB, true, unpack(more)) * 100 + 0.50000001) / 100 - endWatch(env, damageTypeStrMore) - end + local inc = 1 + modDB:Sum("INC", skillCfg, unpack(modNames)) / 100 + local more = m_floor(modDB:Sum("MORE", skillCfg, unpack(modNames)) * 100 + 0.50000001) / 100 - -- Calculate conversions - if startWatch(env, damageTypeStr.."Conv", "conversionTable") then - local addMin, addMax = 0, 0 - local conversionTable = output.conversionTable - for _, otherType in ipairs(dmgTypeList) do - if otherType == damageType then - -- Damage can only be converted from damage types that preceed this one in the conversion sequence, so stop here - break - end - local convMult = conversionTable[otherType][damageType] - if convMult > 0 then - -- Damage is being converted/gained from the other damage type - local min, max = calcHitDamage(env, output, otherType, damageType, ...) - addMin = addMin + min * convMult - addMax = addMax + max * convMult - end + if env.breakdown then + local endType, convDst + if (...) then + endType = select(select('#', ...), ...) + convDst = s_format("%d%% to %s", conversionTable[damageType][...] * 100, ...) + else + endType = damageType end - output[damageTypeStr.."ConvAddMin"] = addMin - output[damageTypeStr.."ConvAddMax"] = addMax - endWatch(env, damageTypeStr.."Conv") + t_insert(env.breakdown[endType].damageComponents, { + source = damageType, + base = baseMin .. " to " .. baseMax, + inc = (inc ~= 1 and "x "..inc), + more = (more ~= 1 and "x "..more), + convSrc = (addMin ~= 0 or addMax ~= 0) and (addMin .. " to " .. addMax), + total = (round(baseMin * inc * more) + addMin) .. " to " .. (round(baseMax * inc * more) + addMax), + convDst = convDst, + }) end - local modMult = output[damageTypeStrInc] * output[damageTypeStrMore] - return (m_floor(baseMin * modMult + 0.5) + output[damageTypeStr.."ConvAddMin"]), - (m_floor(baseMax * modMult + 0.5) + output[damageTypeStr.."ConvAddMax"]) + return (round(baseMin * inc * more) + addMin), + (round(baseMax * inc * more) + addMax) end -- @@ -443,88 +538,104 @@ end -- Depending on what is being done with the output, other code may run inbetween steps, however the steps must always be performed in order: -- 1. Initialise environment (initEnv) -- 2. Merge main modifiers (mergeMainMods) --- 3. Finalise modifier database (finaliseMods) --- 4. Run calculations (performCalcs) +-- 3. Run calculations (performCalcs) -- -- Thus a basic calculation pass would look like this: -- --- local env = initEnv(input, build) +-- local env = initEnv(build, mode) -- mergeMainMods(env) --- finaliseMods(env, output) -- performCalcs(env, output) -- +local tempTable1 = { } +local tempTable2 = { } +local tempTable3 = { } + -- Initialise environment -- This will initialise the modifier database -local function initEnv(build, input, mode) +local function initEnv(build, mode) local env = { } env.build = build - env.input = input + env.configInput = build.configTab.input + env.gridInput = build.calcsTab.input env.mode = mode env.classId = build.spec.curClassId -- Initialise modifier database with base values - local modDB = { } + local modDB = common.New("ModDB") env.modDB = modDB local classStats = build.tree.characterData[env.classId] - for _, stat in pairs({"str","dex","int"}) do - mod_dbMerge(modDB, "", stat.."Base", classStats["base_"..stat]) + for _, stat in pairs({"Str","Dex","Int"}) do + modDB:NewMod(stat, "BASE", classStats["base_"..stat:lower()], "Base") end local level = build.characterLevel - mod_dbMerge(modDB, "", "lifeBase", 38 + level * 12) - 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, "PerPower", "critChanceInc", 50) - mod_dbMerge(modDB, "", "frenzyMax", 3) - mod_dbMerge(modDB, "PerFrenzy", "speedInc", 4) - mod_dbMerge(modDB, "PerFrenzy", "damageMore", 1.04) - mod_dbMerge(modDB, "", "enduranceMax", 3) - mod_dbMerge(modDB, "PerEndurance", "elementalResist", 4) - mod_dbMerge(modDB, "", "activeTrapLimit", 3) - mod_dbMerge(modDB, "", "activeMineLimit", 5) - mod_dbMerge(modDB, "", "projectileCount", 1) - mod_dbMerge(modDB, "CondMod", "DualWielding_attackSpeedMore", 1.1) - mod_dbMerge(modDB, "CondMod", "DualWielding_attack_physicalMore", 1.2) - mod_dbMerge(modDB, "CondMod", "DualWielding_blockChance", 15) - + modDB.multipliers["Level"] = level + modDB:NewMod("Life", "BASE", 38 + level * 12, "Base") + modDB:NewMod("Mana", "BASE", 34 + level * 6, "Base") + 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("FireResistMax", "BASE", 75, "Base") + modDB:NewMod("FireResist", "BASE", -60, "Base") + modDB:NewMod("ColdResistMax", "BASE", 75, "Base") + modDB:NewMod("ColdResist", "BASE", -60, "Base") + modDB:NewMod("LightningResistMax", "BASE", 75, "Base") + modDB:NewMod("LightningResist", "BASE", -60, "Base") + modDB:NewMod("ChaosResistMax", "BASE", 75, "Base") + modDB:NewMod("ChaosResist", "BASE", -60, "Base") + modDB:NewMod("BlockChanceMax", "BASE", 75, "Base") + modDB:NewMod("PowerChargesMax", "BASE", 3, "Base") + modDB:NewMod("CritChance", "INC", 50, "Base", { type = "Multiplier", var = "PowerCharge" }) + modDB:NewMod("FrenzyChargesMax", "BASE", 3, "Base") + modDB:NewMod("Speed", "INC", 4, "Base", { type = "Multiplier", var = "FrenzyCharge" }) + modDB:NewMod("Damage", "MORE", 4, "Base", { type = "Multiplier", var = "FrenzyCharge" }) + modDB:NewMod("EnduranceChargesMax", "BASE", 3, "Base") + modDB:NewMod("ElementalResist", "BASE", 4, "Base", { type = "Multiplier", var = "EnduranceCharge" }) + modDB:NewMod("ActiveTrapLimit", "BASE", 3, "Base") + modDB:NewMod("ActiveMineLimit", "BASE", 5, "Base") + modDB:NewMod("ActiveTotemLimit", "BASE", 1, "Base") + modDB:NewMod("ProjectileCount", "BASE", 1, "Base") + modDB:NewMod("Speed", "MORE", 10, "Base", ModFlag.Attack, { type = "Condition", var = "DualWielding" }) + modDB:NewMod("PhysicalDamage", "MORE", 20, "Base", ModFlag.Attack, { type = "Condition", var = "DualWielding" }) + modDB:NewMod("BlockChance", "BASE", 15, "Base", { type = "Condition", var = "DualWielding" }) + modDB:NewMod("Misc", "LIST", { type = "EnemyModifier", mod = modLib.createMod("DamageTaken", "INC", 50, "Shock") }, "Base", { type = "Condition", var = "EnemyShocked" }) + -- Add bandit mods if build.banditNormal == "Alira" then - mod_dbMerge(modDB, "", "manaBase", 60) + modDB:NewMod("Mana", "BASE", 60, "Bandit") elseif build.banditNormal == "Kraityn" then - mod_dbMerge(modDB, "", "elementalResist", 10) + modDB:NewMod("ElementalResist", "BASE", 10, "Bandit") elseif build.banditNormal == "Oak" then - mod_dbMerge(modDB, "", "lifeBase", 40) + modDB:NewMod("Life", "BASE", 40, "Bandit") else - mod_dbMerge(modDB, "", "extraPoints", 1) + modDB:NewMod("ExtraPoints", "BASE", 1, "Bandit") end if build.banditCruel == "Alira" then - mod_dbMerge(modDB, "", "castSpeedInc", 5) + modDB:NewMod("Speed", "INC", 5, "Bandit", ModFlag.Spell) elseif build.banditCruel == "Kraityn" then - mod_dbMerge(modDB, "", "attackSpeedInc", 8) + modDB:NewMod("Speed", "INC", 8, "Bandit", ModFlag.Attack) elseif build.banditCruel == "Oak" then - mod_dbMerge(modDB, "", "physicalInc", 16) + modDB:NewMod("PhysicalDamage", "INC", 16, "Bandit") else - mod_dbMerge(modDB, "", "extraPoints", 1) + modDB:NewMod("ExtraPoints", "BASE", 1, "Bandit") end if build.banditMerciless == "Alira" then - mod_dbMerge(modDB, "", "powerMax", 1) + modDB:NewMod("PowerChargesMax", "BASE", 1, "Bandit") elseif build.banditMerciless == "Kraityn" then - mod_dbMerge(modDB, "", "frenzyMax", 1) + modDB:NewMod("FrenzyChargesMax", "BASE", 1, "Bandit") elseif build.banditMerciless == "Oak" then - mod_dbMerge(modDB, "", "enduranceMax", 1) + modDB:NewMod("EnduranceChargesMax", "BASE", 1, "Bandit") else - mod_dbMerge(modDB, "", "extraPoints", 1) + modDB:NewMod("ExtraPoints", "BASE", 1, "Bandit") end - -- Add mods from the input table - mod_dbMergeList(modDB, input) + -- Initialise enemy modifier database + local enemyDB = common.New("ModDB") + env.enemyDB = enemyDB + + -- Add mods from the config tab + modDB:AddList(build.configTab.modList) + enemyDB:AddList(build.configTab.enemyModList) return env end @@ -539,8 +650,8 @@ local function mergeMainMods(env, repSlotName, repItem) local build = env.build -- Build and merge item modifiers, and create list of radius jewels - env.itemModList = wipeTable(env.itemModList) env.radiusJewelList = wipeTable(env.radiusJewelList) + env.itemList = { } for slotName, slot in pairs(build.itemsTab.slots) do local item if slotName == repSlotName then @@ -575,97 +686,143 @@ local function mergeMainMods(env, repSlotName, repItem) }) end end + env.itemList[slotName] = item if item then -- Merge mods for this item into the global item mod list local srcList = item.modList or item.slotModList[slot.slotNum] - for k, v in pairs(srcList) do - mod_listMerge(env.itemModList, k, v) - end + env.modDB:AddList(srcList) if item.type ~= "Jewel" then -- Update item counts + local key if item.rarity == "UNIQUE" then - mod_listMerge(env.itemModList, "gear_UniqueCount", 1) + key = "UniqueItem" elseif item.rarity == "RARE" then - mod_listMerge(env.itemModList, "gear_RareCount", 1) + key = "RareItem" elseif item.rarity == "MAGIC" then - mod_listMerge(env.itemModList, "gear_MagicCount", 1) + key = "MagicItem" else - mod_listMerge(env.itemModList, "gear_NormalCount", 1) + key = "NormalItem" end + env.modDB.multipliers[key] = (env.modDB.multipliers[key] or 0) + 1 end end end - mod_dbMergeList(env.modDB, env.itemModList) + + if env.mode == "MAIN" then + -- Process extra skills granted by items + local markList = { } + for _, mod in ipairs(env.modDB.mods["ExtraSkill"] or { }) do + -- Extract the name of the slot containing the item this skill was granted by + local slotName + for _, tag in ipairs(mod.tagList) do + if tag.type == "SocketedIn" then + slotName = tag.slotName + break + end + end + + -- Check if a matching group already exists + local group + for index, socketGroup in pairs(build.skillsTab.socketGroupList) do + if socketGroup.source == mod.source and socketGroup.slot == slotName then + if socketGroup.gemList[1] and socketGroup.gemList[1].nameSpec == mod.value.name then + group = socketGroup + markList[socketGroup] = true + break + end + end + end + if not group then + -- Create a new group for this skill + group = { label = "", enabled = true, gemList = { }, source = mod.source, slot = slotName } + t_insert(build.skillsTab.socketGroupList, group) + markList[group] = true + end + + -- Update the group + group.sourceItem = build.itemsTab.list[tonumber(mod.source:match("Item:(%d+):"))] + wipeTable(group.gemList) + t_insert(group.gemList, { + nameSpec = mod.value.name, + level = mod.value.level, + quality = 0, + enabled = true, + fromItem = true, + }) + if mod.value.noSupports then + group.noSupports = true + else + for _, socketGroup in pairs(build.skillsTab.socketGroupList) do + -- Look for other groups that are socketed in the item + if socketGroup.slot == slotName and not socketGroup.source then + -- Add all support gems to the skill's group + for _, gem in ipairs(socketGroup.gemList) do + if gem.data and gem.data.support then + t_insert(group.gemList, gem) + end + end + end + end + end + build.skillsTab:ProcessSocketGroup(group) + end + + -- Remove any socket groups that no longer have a matching item + local i = 1 + while build.skillsTab.socketGroupList[i] do + local socketGroup = build.skillsTab.socketGroupList[i] + if socketGroup.source and not markList[socketGroup] then + t_remove(build.skillsTab.socketGroupList, i) + if build.skillsTab.displayGroup == socketGroup then + build.skillsTab.displayGroup = nil + end + else + i = i + 1 + end + end + end + + -- Get the weapon data tables for the equipped weapons + env.weaponData1 = env.itemList["Weapon 1"] and env.itemList["Weapon 1"].weaponData and env.itemList["Weapon 1"].weaponData[1] or copyTable(data.unarmedWeaponData[env.classId]) + env.weaponData2 = env.itemList["Weapon 2"] and env.itemList["Weapon 2"].weaponData and env.itemList["Weapon 2"].weaponData[2] or { } -- Build and merge modifiers for allocated passives - env.specModList = buildNodeModList(env, build.spec.allocNodes, true) - mod_dbMergeList(env.modDB, env.specModList) + env.modDB:AddList(buildNodeModList(env, build.spec.allocNodes, true)) -- Determine main skill group if env.mode == "GRID" then - env.input.skill_number = m_min(m_max(#build.skillsTab.socketGroupList, 1), env.input.skill_number or 1) - env.mainSocketGroup = env.input.skill_number - env.skillPart = env.input.skill_part or 1 - env.buffMode = env.input.misc_buffMode + env.gridInput.skill_number = m_min(m_max(#build.skillsTab.socketGroupList, 1), env.gridInput.skill_number or 1) + env.mainSocketGroup = env.gridInput.skill_number + env.skillPart = env.gridInput.skill_part or 1 + env.buffMode = env.gridInput.misc_buffMode else build.mainSocketGroup = m_min(m_max(#build.skillsTab.socketGroupList, 1), build.mainSocketGroup or 1) env.mainSocketGroup = build.mainSocketGroup env.buffMode = "EFFECTIVE" end - -- Build list of bonuses to socketed gems - local slotSocketBonuses = { } - for slotName in pairs(build.itemsTab.slots) do - if env.modDB["SocketedIn:"..slotName] then - slotSocketBonuses[slotName] = { - supports = { }, - gemLevel = { }, - gemQuality = { }, - modList = { } - } - for k, v in pairs(env.modDB["SocketedIn:"..slotName]) do - local spaceName, modName = modLib.getSpaceName(k) - if spaceName == "supportedBy" then - local level, support = modName:match("(%d+):(.+)") - if level then - for gemName, gemData in pairs(data.gems) do - if support == gemName:lower() then - t_insert(slotSocketBonuses[slotName].supports, { name = gemName, data = gemData, level = tonumber(level), quality = 0, enabled = true, fromItem = true }) - break - end - end - end - elseif spaceName == "gemLevel" then - slotSocketBonuses[slotName].gemLevel[modName] = v - elseif spaceName == "gemQuality" then - slotSocketBonuses[slotName].gemQuality[modName] = v - else - if not slotSocketBonuses[slotName].modList[spaceName] then - slotSocketBonuses[slotName].modList[spaceName] = { } - end - mod_listMerge(slotSocketBonuses[slotName].modList[spaceName], modName, v) - end - end - end - end - -- Build list of active skills env.activeSkillList = { } + local groupCfg = wipeTable(tempTable1) for index, socketGroup in pairs(build.skillsTab.socketGroupList) do local socketGroupSkillList = { } if socketGroup.enabled or index == env.mainSocketGroup then -- Build list of supports for this socket group - local socketBonuses = socketGroup.slot and slotSocketBonuses[socketGroup.slot] - local supportList = { } - if socketBonuses then - for _, gem in ipairs(socketBonuses.supports) do - t_insert(supportList, gem) + local supportList = wipeTable(tempTable2) + groupCfg.slotName = socketGroup.slot + for _, value in ipairs(env.modDB:Sum("LIST", groupCfg, "ExtraSupport")) do + -- Add extra supports from the item this group is socketed in + local gemData = data.gems[value.name] + if gemData then + t_insert(supportList, { name = value.name, data = gemData, level = value.level, quality = 0, enabled = true, fromItem = true }) end end for _, gem in ipairs(socketGroup.gemList) do if gem.enabled and gem.data and gem.data.support then + -- Add support gems from this group local add = true for _, otherGem in pairs(supportList) do + -- Check if there's another support with the same name already present if gem.data == otherGem.data then add = false if gem.level > otherGem.level then @@ -686,9 +843,9 @@ local function mergeMainMods(env, repSlotName, repItem) -- Create active skills for _, gem in ipairs(socketGroup.gemList) do - if gem.enabled and gem.data and not gem.data.support then + if gem.enabled and gem.data and not gem.data.support and not gem.data.unsupported then local activeSkill = createActiveSkill(gem, supportList) - activeSkill.socketBonuses = socketBonuses + activeSkill.slotName = socketGroup.slot t_insert(socketGroupSkillList, activeSkill) t_insert(env.activeSkillList, activeSkill) end @@ -698,8 +855,8 @@ local function mergeMainMods(env, repSlotName, repItem) -- Select the main skill from this socket group local activeSkillIndex if env.mode == "GRID" then - env.input.skill_activeNumber = m_min(#socketGroupSkillList, env.input.skill_activeNumber or 1) - activeSkillIndex = env.input.skill_activeNumber + env.gridInput.skill_activeNumber = m_min(#socketGroupSkillList, env.gridInput.skill_activeNumber or 1) + activeSkillIndex = env.gridInput.skill_activeNumber else socketGroup.mainActiveSkill = m_min(#socketGroupSkillList, socketGroup.mainActiveSkill or 1) activeSkillIndex = socketGroup.mainActiveSkill @@ -749,1097 +906,1423 @@ local function mergeMainMods(env, repSlotName, repItem) end end --- Prepare environment for calculations -local function finaliseMods(env, output) +-- Finalise environment and perform the calculations +local function performCalcs(env) local modDB = env.modDB + local enemyDB = env.enemyDB - local weapon1Type = getMiscVal(modDB, "weapon1", "type", "None") - local weapon2Type = getMiscVal(modDB, "weapon2", "type", "") - if weapon1Type == output.weapon1Type and weapon2Type == output.weapon2Type then - env.spacesChanged = false - else - env.spacesChanged = true - output.weapon1Type = weapon1Type - output.weapon2Type = weapon2Type - - -- Initialise skill flag set - env.skillFlags = wipeTable(env.skillFlags) - local skillFlags = env.skillFlags - for k, v in pairs(env.mainSkill.baseFlags) do - skillFlags[k] = v - end - - -- Set weapon flags - skillFlags.mainIs1H = true - local weapon1Info = data.weaponTypeInfo[weapon1Type] - if weapon1Info then - if not weapon1Info.oneHand then - skillFlags.mainIs1H = nil - end - if skillFlags.attack then - skillFlags.weapon1Attack = true - if weapon1Info.melee and skillFlags.melee then - skillFlags.bow = nil - skillFlags.projectile = nil - elseif not weapon1Info.melee and skillFlags.bow then - skillFlags.melee = nil - end - end - end - local weapon2Info = data.weaponTypeInfo[weapon2Type] - if weapon2Info and skillFlags.mainIs1H then - if skillFlags.attack then - skillFlags.weapon2Attack = true - end - end - - -- Build list of namespaces to search for mods - local skillSpaceFlags = wipeTable(env.skillSpaceFlags) - env.skillSpaceFlags = skillSpaceFlags - skillSpaceFlags["hit"] = true - if skillFlags.spell then - skillSpaceFlags["spell"] = true - elseif skillFlags.attack then - skillSpaceFlags["attack"] = true - end - if skillFlags.weapon1Attack then - if getMiscVal(modDB, "weapon1", "varunastra", false) then - skillSpaceFlags["axe"] = true - skillSpaceFlags["claw"] = true - skillSpaceFlags["dagger"] = true - skillSpaceFlags["mace"] = true - skillSpaceFlags["sword"] = true - else - skillSpaceFlags[weapon1Info.space] = true - end - if weapon1Type ~= "None" then - skillSpaceFlags["weapon"] = true - if skillFlags.mainIs1H then - skillSpaceFlags["weapon1h"] = true - if weapon1Info.melee then - skillSpaceFlags["weapon1hMelee"] = true - else - skillSpaceFlags["weaponRanged"] = true - end - else - skillSpaceFlags["weapon2h"] = true - if weapon1Info.melee then - skillSpaceFlags["weapon2hMelee"] = true - else - skillSpaceFlags["weaponRanged"] = true - end - end - end - end - if skillFlags.melee then - skillSpaceFlags["melee"] = true - elseif skillFlags.projectile then - skillSpaceFlags["projectile"] = true - if skillFlags.attack then - skillSpaceFlags["projectileAttack"] = true - end - end - if skillFlags.totem then - skillSpaceFlags["totem"] = true - elseif skillFlags.trap then - skillSpaceFlags["trap"] = true - skillSpaceFlags["trapHit"] = true - elseif skillFlags.mine then - skillSpaceFlags["mine"] = true - skillSpaceFlags["mineHit"] = true - end - if skillFlags.aoe then - skillSpaceFlags["aoe"] = true - end - if skillFlags.debuff then - skillSpaceFlags["debuff"] = true - end - if skillFlags.aura then - skillSpaceFlags["aura"] = true - end - if skillFlags.curse then - skillSpaceFlags["curse"] = true - end - if skillFlags.warcry then - skillSpaceFlags["warcry"] = true - end - if skillFlags.movement then - skillSpaceFlags["movementSkills"] = true - end - if skillFlags.lightning then - skillSpaceFlags["lightningSkills"] = true - skillSpaceFlags["elementalSkills"] = true - end - if skillFlags.cold then - skillSpaceFlags["coldSkills"] = true - skillSpaceFlags["elementalSkills"] = true - end - if skillFlags.fire then - skillSpaceFlags["fireSkills"] = true - skillSpaceFlags["elementalSkills"] = true - end - if skillFlags.chaos then - skillSpaceFlags["chaosSkills"] = true - end + local output = { } + env.output = output + modDB.stats = output + local breakdown + if env.mode == "GRID" then + breakdown = { } + env.breakdown = breakdown end - if weapon1Type == "None" then - -- Merge unarmed weapon modifiers - for k, v in pairs(data.unarmedWeapon[env.classId]) do - mod_dbMerge(modDB, "weapon1", k, v) - end - end - + -- Set modes if env.mainSkill.baseFlags.attack then env.mode_skillType = "ATTACK" else env.mode_skillType = "SPELL" end - if env.skillFlags.showAverage then + if env.mainSkill.skillData.showAverage then env.mode_average = true end - if env.buffMode == "BUFFED" then - env.mode_buffs = true - env.mode_effective = false - elseif env.buffMode == "EFFECTIVE" then + if env.buffMode == "EFFECTIVE" then env.mode_buffs = true + env.mode_combat = true env.mode_effective = true + elseif env.buffMode == "COMBAT" then + env.mode_buffs = true + env.mode_combat = true + env.mode_effective = false + elseif env.buffMode == "BUFFED" then + env.mode_buffs = true + env.mode_combat = false + env.mode_effective = false else env.mode_buffs = false + env.mode_combat = false env.mode_effective = false end - -- Reset namespaces - buildSpaceTable(modDB) - - -- Add boss modifiers - if getMiscVal(modDB, "effective", "enemyIsBoss", false) then - mod_dbMerge(modDB, "", "curseEffectMore", 0.4) - mod_dbMerge(modDB, "effective", "elementalResist", 30) - mod_dbMerge(modDB, "effective", "chaosResist", 15) + -- Merge keystone modifiers + do + local keystoneList = wipeTable(tempTable1) + for _, name in ipairs(modDB:Sum("LIST", nil, "Keystone")) do + keystoneList[name] = true + end + for name in pairs(keystoneList) do + local node = env.build.tree.keystoneMap[name] + modDB:AddList(node.modList) + end end -- Merge auxillary skill modifiers and calculate skill life and mana reservations + env.reserved_LifeBase = 0 + env.reserved_LifePercent = 0 + env.reserved_ManaBase = 0 + env.reserved_ManaPercent = 0 + if breakdown then + breakdown.LifeReserved = { reservations = { } } + breakdown.ManaReserved = { reservations = { } } + end for _, activeSkill in pairs(env.activeSkillList) do local skillModList = activeSkill.skillModList - + local skillCfg = activeSkill.skillCfg + -- Merge auxillary modifiers - mod_dbMergeList(modDB, activeSkill.buffModList) - local auraEffect = (1 + (getMiscVal(modDB, nil, "auraEffectInc", 0) + (skillModList.auraEffectInc or 0)) / 100) * getMiscVal(modDB, nil, "auraEffectMore", 1) * (skillModList.auraEffectMore or 1) - mod_dbScaleMergeList(modDB, activeSkill.auraModList, auraEffect) + if env.mode_buffs then + if activeSkill.buffModList then + if activeSkill.activeGem.data.golem and modDB:Sum("FLAG", skillCfg, "LiegeOfThePrimordial") and (activeSkill.activeGem.data.fire or activeSkill.activeGem.data.cold or activeSkill.activeGem.data.lightning) then + modDB:ScaleAddList(activeSkill.buffModList, 2) + else + modDB:AddList(activeSkill.buffModList) + end + end + if activeSkill.auraModList then + local inc = modDB:Sum("INC", skillCfg, "AuraEffect") + skillModList:Sum("INC", skillCfg, "AuraEffect") + local more = modDB:Sum("MORE", skillCfg, "AuraEffect") * skillModList:Sum("MORE", skillCfg, "AuraEffect") + local auraEffect = (1 + inc / 100) * more + modDB:ScaleAddList(activeSkill.auraModList, auraEffect) + end + end if env.mode_effective then - local curseEffect = (1 + (getMiscVal(modDB, nil, "curseEffectInc", 0) + (skillModList.curseEffectInc or 0)) / 100) * getMiscVal(modDB, nil, "curseEffectMore", 1) * (skillModList.curseEffectMore or 1) - mod_dbScaleMergeList(modDB, activeSkill.curseModList, curseEffect) + if activeSkill.debuffModList then + enemyDB:AddList(activeSkill.debuffModList) + end + if activeSkill.curseModList then + modDB.conditions["EnemyCursed"] = true + local inc = modDB:Sum("INC", skillCfg, "CurseEffect") + enemyDB:Sum("INC", nil, "CurseEffect") + skillModList:Sum("INC", skillCfg, "CurseEffect") + local more = modDB:Sum("MORE", skillCfg, "CurseEffect") * enemyDB:Sum("MORE", nil, "CurseEffect") * skillModList:Sum("MORE", skillCfg, "CurseEffect") + local curseEffect = (1 + inc / 100) * more + enemyDB:ScaleAddList(activeSkill.curseModList, curseEffect) + end end -- Calculate reservations - local baseVal, suffix - baseVal = skillModList.skill_manaReservedBase - if baseVal then - suffix = "Base" - else - baseVal = skillModList.skill_manaReservedPercent - if baseVal then - suffix = "Percent" + if activeSkill.skillTypes[SkillType.ManaCostReserved] then + local baseVal = activeSkill.skillData.manaCostOverride or activeSkill.skillData.manaCost + local suffix = activeSkill.skillTypes[SkillType.ManaCostPercent] and "Percent" or "Base" + local mult = skillModList:Sum("MORE", skillCfg, "ManaCost") + local more = modDB:Sum("MORE", skillCfg, "ManaReserved") * skillModList:Sum("MORE", skillCfg, "ManaReserved") + local inc = modDB:Sum("INC", skillCfg, "ManaReserved") + skillModList:Sum("INC", skillCfg, "ManaReserved") + local cost = m_ceil(m_ceil(m_floor(baseVal * mult) * more) * (1 + inc / 100)) + local pool = "Mana" + if modDB:Sum("FLAG", skillCfg, "BloodMagic", "SkillBloodMagic") or skillModList:Sum("FLAG", skillCfg, "SkillBloodMagic") then + pool = "Life" end - end - if baseVal then - local more = sumMods(modDB, true, "manaReservedMore") * (skillModList.manaReservedMore or 1) - local inc = sumMods(modDB, false, "manaReservedInc") + (skillModList.manaReservedInc or 0) - local cost = m_ceil(m_ceil(m_floor(baseVal * (skillModList.manaCostMore or 1)) * more) * (1 + inc / 100)) - if getMiscVal(modDB, nil, "bloodMagic", false) or skillModList.skill_bloodMagic then - mod_dbMerge(modDB, "reserved", "life"..suffix, cost) - else - mod_dbMerge(modDB, "reserved", "mana"..suffix, cost) - end - end - end - - -- Merge main skill mods - mod_dbMergeList(modDB, env.mainSkill.skillModList) - if env.mainSkill.baseFlags.multiPart and modDB["SkillPart"..env.mainSkill.skillPart] then - mod_dbMergeList(modDB, modDB["SkillPart"..env.mainSkill.skillPart]) - end - - -- Merge gear-sourced keystone modifiers - if modDB.gear then - for name, node in pairs(env.build.tree.keystoneMap) do - if getMiscVal(modDB, "gear", "keystone:"..name, false) and not getMiscVal(modDB, nil, "keystone:"..name, false) then - -- Keystone is granted by gear but not allocated on tree, so add its modifiers - mod_dbMergeList(modDB, buildNodeModList(env, { node })) + env["reserved_"..pool..suffix] = env["reserved_"..pool..suffix] + cost + if breakdown then + t_insert(breakdown[pool.."Reserved"].reservations, { + skillName = activeSkill.activeGem.name, + base = baseVal .. (activeSkill.skillTypes[SkillType.ManaCostPercent] and "%" or ""), + mult = mult ~= 1 and ("x "..mult), + more = more ~= 1 and ("x "..more), + inc = inc ~= 0 and ("x "..(1 + inc/100)), + total = cost .. (activeSkill.skillTypes[SkillType.ManaCostPercent] and "%" or ""), + }) end end end -- Build condition list - local condList = wipeTable(env.condList) - env.condList = condList - if weapon1Type == "Staff" then + local condList = modDB.conditions + if env.itemList["Weapon 1"] and env.itemList["Weapon 1"].type == "Staff" then condList["UsingStaff"] = true end - if env.skillFlags.mainIs1H and weapon2Type == "Shield" then + if env.itemList["Weapon 2"] and env.itemList["Weapon 2"].type == "Shield" then condList["UsingShield"] = true end - if data.weaponTypeInfo[weapon1Type] and data.weaponTypeInfo[weapon2Type] then + if env.weaponData1.type and env.weaponData2.type then condList["DualWielding"] = true end if weapon1Type == "None" then condList["Unarmed"] = true end - if getMiscVal(modDB, "gear", "NormalCount", 0) > 0 then + if (modDB.multipliers["NormalItem"] or 0) > 0 then condList["UsingNormalItem"] = true end - if getMiscVal(modDB, "gear", "MagicCount", 0) > 0 then + if (modDB.multipliers["MagicItem"] or 0) > 0 then condList["UsingMagicItem"] = true end - if getMiscVal(modDB, "gear", "RareCount", 0) > 0 then + if (modDB.multipliers["RareItem"] or 0) > 0 then condList["UsingRareItem"] = true end - if getMiscVal(modDB, "gear", "UniqueCount", 0) > 0 then + if (modDB.multipliers["UniqueItem"] or 0) > 0 then condList["UsingUniqueItem"] = true end - if getMiscVal(modDB, "reserved", "manaBase", 0) == 0 and getMiscVal(modDB, "reserved", "manaPercent", 0) == 0 then + if env.reserved_manaBase == 0 and env.reserved_manaPercent == 0 then condList["NoManaReserved"] = true end - if modDB.Cond then - for k, v in pairs(modDB.Cond) do - condList[k] = v - if v then - env.skillFlags[k] = true - end - end - end if env.mode_buffs then - if modDB.CondBuff then - for k, v in pairs(modDB.CondBuff) do - condList[k] = v - if v then - env.skillFlags[k] = true - end - end - end - if modDB.CondEff and env.mode_effective then - for k, v in pairs(modDB.CondEff) do - condList[k] = v - if v then - env.skillFlags[k] = true - end - end - mod_dbMerge(modDB, "CondMod", "EnemyShocked_effective_damageTakenInc", 50) - condList["EnemyFrozenShockedIgnited"] = condList["EnemyFrozen"] or condList["EnemyShocked"] or condList["EnemyIgnited"] - condList["EnemyElementalStatus"] = condList["EnemyChilled"] or condList["EnemyFrozen"] or condList["EnemyShocked"] or condList["EnemyIgnited"] - end - if not getMiscVal(modDB, nil, "neverCrit", false) then + condList["Buffed"] = true + end + if env.mode_combat then + condList["Combat"] = true + if not modDB:Sum("FLAG", nil, "NeverCrit") then condList["CritInPast8Sec"] = true end - if env.skillFlags.attack then + if env.mainSkill.skillFlags.attack then condList["AttackedRecently"] = true - elseif env.skillFlags.spell then + elseif env.mainSkill.skillFlags.spell then condList["CastSpellRecently"] = true end - if env.skillFlags.movement then + if env.mainSkill.skillFlags.movement then condList["UsedMovementSkillRecently"] = true end - if env.skillFlags.totem then + if env.mainSkill.skillFlags.totem then condList["SummonedTotemRecently"] = true end - if env.skillFlags.mine then + if env.mainSkill.skillFlags.mine then condList["DetonatedMinesRecently"] = true end end - - -- Calculate maximum charges - output.powerCount = 0 - output.frenzyCount = 0 - output.enduranceCount = 0 - output.powerMax = getMiscVal(modDB, nil, "powerMax", 0) - output.frenzyMax = getMiscVal(modDB, nil, "frenzyMax", 0) - output.enduranceMax = getMiscVal(modDB, nil, "enduranceMax", 0) - if getMiscVal(modDB, "buff", "power", false) then - env.skillFlags.havePower = true - if env.mode_buffs then - output.powerCount = output.powerMax - end - end - if getMiscVal(modDB, "buff", "frenzy", false) then - env.skillFlags.haveFrenzy = true - if env.mode_buffs then - output.frenzyCount = output.frenzyMax - end - end - if getMiscVal(modDB, "buff", "endurance", false) then - env.skillFlags.haveEndurance = true - if env.mode_buffs then - output.enduranceCount = output.enduranceMax - end - end - if output.powerCount == output.powerMax then - condList["AtMaxPower"] = true - end - if output.frenzyCount == output.frenzyMax then - condList["AtMaxFrenzy"] = true - end - if output.enduranceCount == output.enduranceMax then - condList["AtMaxEndurance"] = true + if env.mode_effective then + condList["Effective"] = true end - -- Build and merge conditional modifier list - local condModList = wipeTable(env.condModList) - env.condModList = condModList - if modDB.CondMod then - for k, v in pairs(modDB.CondMod) do - local isNot, condName, modName = modLib.getCondName(k) - if (isNot and not condList[condName]) or (not isNot and condList[condName]) then - mod_listMerge(condModList, modName, v) - end + -- Process misc modifiers + for _, value in ipairs(modDB:Sum("LIST", skillCfg, "Misc")) do + if value.type == "Condition" then + condList[value.var] = true + elseif value.type == "Multiplier" then + modDB.multipliers[value.var] = (modDB.multipliers[value.var] or 0) + value.value end end - if modDB.CondEffMod and env.mode_effective then - for k, v in pairs(modDB.CondEffMod) do - local isNot, condName, modName = modLib.getCondName(k) - if (isNot and not condList[condName]) or (not isNot and condList[condName]) then - mod_listMerge(condModList, modName, v) - end - end - end - mod_dbMergeList(modDB, env.condModList) - - -- Add per-item-type mods - for spaceName, countName in pairs({["PerNormal"]="NormalCount",["PerMagic"]="MagicCount",["PerRare"]="RareCount",["PerUnique"]="UniqueCount",["PerGrandSpectrum"]="GrandSpectrumCount"}) do - local space = modDB[spaceName] - if space then - local count = getMiscVal(modDB, "gear", countName, 0) - for k, v in pairs(space) do - mod_dbScaleMerge(modDB, "", k, v, count) - end + -- Process enemy modifiers last in case they depend on conditions that were set by misc modifiers + for _, value in ipairs(modDB:Sum("LIST", skillCfg, "Misc")) do + if value.type == "EnemyModifier" then + enemyDB:AddMod(value.mod) end end - if env.mode_buffs then - -- Build buff mod list - local buffModList = wipeTable(env.buffModList) - env.buffModList = buffModList + -- Process conditions that can depend on other conditions + if env.mode_effective then + if condList["EnemyIgnited"] then + condList["EnemyBurning"] = true + end + condList["EnemyFrozenShockedIgnited"] = condList["EnemyFrozen"] or condList["EnemyShocked"] or condList["EnemyIgnited"] + condList["EnemyElementalStatus"] = condList["EnemyChilled"] or condList["EnemyFrozen"] or condList["EnemyShocked"] or condList["EnemyIgnited"] + condList["NotEnemyElementalStatus"] = not condList["EnemyElementalStatus"] + end - -- Calculate total charge bonuses - if env.skillFlags.havePower then - for k, v in pairs(modDB.PerPower) do - mod_listScaleMerge(buffModList, k, v, output.powerMax) - end + -- Calculate current and maximum charges + output.PowerCharges = 0 + output.FrenzyCharges = 0 + output.EnduranceCharges = 0 + output.PowerChargesMax = modDB:Sum("BASE", nil, "PowerChargesMax") + output.FrenzyChargesMax = modDB:Sum("BASE", nil, "FrenzyChargesMax") + output.EnduranceChargesMax = modDB:Sum("BASE", nil, "EnduranceChargesMax") + if env.configInput.usePowerCharges then + env.mainSkill.skillFlags.havePower = true + if env.mode_combat then + output.PowerCharges = output.PowerChargesMax end - if env.skillFlags.haveFrenzy then - for k, v in pairs(modDB.PerFrenzy) do - mod_listScaleMerge(buffModList, k, v, output.frenzyMax) - end + end + if env.configInput.useFrenzyCharges then + env.mainSkill.skillFlags.haveFrenzy = true + if env.mode_combat then + output.FrenzyCharges = output.FrenzyChargesMax end - if env.skillFlags.haveEndurance then - for k, v in pairs(modDB.PerEndurance) do - mod_listScaleMerge(buffModList, k, v, output.enduranceMax) - end - end - - -- Add other buffs - if env.condList["Onslaught"] then - local effect = m_floor(20 * (1 + sumMods(modDB, false, "onslaughtEffectInc") / 100)) - mod_listMerge(buffModList, "attackSpeedInc", effect) - mod_listMerge(buffModList, "castSpeedInc", effect) - mod_listMerge(buffModList, "movementSpeedInc", effect) - end - if getMiscVal(modDB, "buff", "pendulum", false) then - mod_listMerge(buffModList, "elementalInc", 100) - mod_listMerge(buffModList, "aoeRadiusInc", 25) + end + if env.configInput.useEnduranceCharges then + env.mainSkill.skillFlags.haveEndurance = true + if env.mode_combat then + output.EnduranceCharges = output.EnduranceChargesMax end + end + modDB.multipliers["PowerCharge"] = output.PowerCharges + modDB.multipliers["FrenzyCharge"] = output.FrenzyCharges + modDB.multipliers["EnduranceCharge"] = output.EnduranceCharges + if output.PowerCharges == output.PowerChargesMax then + condList["AtMaxPowerCharges"] = true + end + if output.FrenzyCharges == output.FrenzyChargesMax then + condList["AtMaxFrenzyCharges"] = true + end + if output.EnduranceCharges == output.EnduranceChargesMax then + condList["AtMaxEnduranceCharges"] = true + end - -- Merge buff bonuses - mod_dbMergeList(modDB, buffModList) + -- Add misc buffs + if env.mode_combat then + if condList["Onslaught"] then + local effect = m_floor(20 * (1 + modDB:Sum("INC", nil, "OnslaughtEffect") / 100)) + modDB:NewMod("Speed", "INC", effect, "Onslaught") + modDB:NewMod("MovementSpeed", "INC", effect, "Onslaught") + end + end + + local simpleBreakdown, modBreakdown, slotBreakdown + if breakdown then + simpleBreakdown = function(extraBase, cfg, ...) + extraBase = extraBase or 0 + local base = modDB:Sum("BASE", cfg, (...)) + if (base + extraBase) ~= 0 then + local inc = modDB:Sum("INC", cfg, ...) + local more = modDB:Sum("MORE", cfg, ...) + if inc ~= 0 or more ~= 1 or (base ~= 0 and extraBase ~= 0) then + local out = { } + if base ~= 0 and extraBase ~= 0 then + out[1] = "^7("..round(extraBase, 2).." + "..round(base, 2)..") ^8(base)" + else + out[1] = "^7"..round(base + extraBase, 2).." ^8(base)" + end + if inc ~= 0 then + t_insert(out, "^7x "..s_format("%.2f", 1 + inc/100).." ^8(increased/reduced)") + end + if more ~= 1 then + t_insert(out, "^7x "..s_format("%.2f", more).." ^8(more/less)") + end + t_insert(out, "^7= "..output[...]) + breakdown[...] = out + end + end + end + modBreakdown = function(cfg, ...) + local inc = modDB:Sum("INC", cfg, ...) + local more = modDB:Sum("MORE", cfg, ...) + if inc ~= 0 and more ~= 1 then + return { + "^7"..s_format("%.2f", 1 + inc/100).." ^8(increased/reduced)", + "^7x "..s_format("%.2f", more).." ^8(more/less)", + "^7= "..s_format("%.2f", (1 + inc/100) * more), + } + end + end + slotBreakdown = function(source, sourceName, cfg, base, ...) + local inc = modDB:Sum("INC", cfg, ...) + local more = modDB:Sum("MORE", cfg, ...) + local out = { + base = base, + source = source, + sourceName = sourceName, + item = env.itemList[source], + } + out.total = s_format("%.2f", base * (1 + inc / 100) * more) + if inc ~= 0 then + out.inc = s_format(" x %.2f", 1 + inc/100) + end + if more ~= 1 then + out.more = s_format(" x %.2f", more) + end + t_insert(breakdown[...].slots, out) + end end -- Calculate attributes - for _, stat in pairs({"str","dex","int"}) do - output["total_"..stat] = m_floor(calcVal(modDB, stat)) + for _, stat in pairs({"Str","Dex","Int"}) do + output[stat] = round(calcVal(modDB, stat)) + if breakdown then + simpleBreakdown(nil, nil, stat) + end end -- Add attribute bonuses - mod_dbMerge(modDB, "", "lifeBase", m_floor(output.total_str / 2)) - local strDmgBonus = m_floor((output.total_str + getMiscVal(modDB, nil, "dexIntToMeleeBonus", 0)) / 5 + 0.5) - mod_dbMerge(modDB, "melee", "physicalInc", strDmgBonus) - if getMiscVal(modDB, nil, "ironGrip", false) then - mod_dbMerge(modDB, "projectileAttack", "physicalInc", strDmgBonus) + modDB:NewMod("Life", "BASE", m_floor(output.Str / 2), "Strength") + local strDmgBonus = round((output.Str + modDB:Sum("BASE", nil, "DexIntToMeleeBonus", 0)) / 5) + modDB:NewMod("PhysicalDamage", "INC", strDmgBonus, "Strength", ModFlag.Melee) + modDB:NewMod("Accuracy", "BASE", output.Dex * 2, "Dexterity") + if not modDB:Sum("FLAG", nil, "IronReflexes") then + modDB:NewMod("Evasion", "INC", round(output.Dex / 5), "Dexterity") end - if getMiscVal(modDB, nil, "ironWill", false) then - mod_dbMerge(modDB, "spell", "damageInc", strDmgBonus) - end - mod_dbMerge(modDB, "", "accuracyBase", output.total_dex * 2) - if not getMiscVal(modDB, nil, "ironReflexes", false) then - mod_dbMerge(modDB, "", "evasionInc", m_floor(output.total_dex / 5 + 0.5)) - end - mod_dbMerge(modDB, "", "manaBase", m_floor(output.total_int / 2 + 0.5)) - mod_dbMerge(modDB, "", "energyShieldInc", m_floor(output.total_int / 5 + 0.5)) -end + modDB:NewMod("Mana", "BASE", round(output.Int / 2), "Intelligence") + modDB:NewMod("EnergyShield", "INC", round(output.Int / 5), "Intelligence") --- Calculate offence and defence stats -local function performCalcs(env, output) - local modDB = env.modDB + -- ---------------------- -- + -- Defensive Calculations -- + -- ---------------------- -- - -- Calculate life/mana pools - if startWatch(env, "life") then - if getMiscVal(modDB, nil, "chaosInoculation", false) then - output.total_life = 1 - else - output.total_life = calcVal(modDB, "life") + -- Life/mana pools + if modDB:Sum("FLAG", nil, "ChaosInoculation") then + output.Life = 1 + modDB.conditions["FullLife"] = true + else + output.Life = round(calcVal(modDB, "Life")) + if breakdown then + simpleBreakdown(nil, nil, "Life") end - endWatch(env, "life") end - if startWatch(env, "mana") then - output.total_mana = calcVal(modDB, "mana") - mod_dbMerge(modDB, "", "manaRegenBase", output.total_mana * 0.0175) - output.total_manaRegen = sumMods(modDB, false, "manaRegenBase") * (1 + sumMods(modDB, false, "manaRegenInc", "manaRecoveryInc") / 100) * sumMods(modDB, true, "manaRegenMore", "manaRecoveryMore") - endWatch(env, "mana") + output.Mana = round(calcVal(modDB, "Mana")) + output.ManaRegen = round(modDB:Sum("BASE", nil, "ManaRegen") * calcMod(modDB, nil, "ManaRegen", "ManaRecovery"), 1) + if breakdown then + simpleBreakdown(nil, nil, "Mana") + simpleBreakdown(nil, nil, "ManaRegen", "ManaRecovery") end - -- Calculate life/mana reservation - for _, pool in pairs({"life", "mana"}) do - if startWatch(env, pool.."Reservation", pool) then - local max = output["total_"..pool] - local reserved = getMiscVal(modDB, "reserved", pool.."Base", 0) + m_floor(max * getMiscVal(modDB, "reserved", pool.."Percent", 0) / 100 + 0.5) - output["total_"..pool.."Reserved"] = reserved - output["total_"..pool.."ReservedPercent"] = reserved / max - output["total_"..pool.."Unreserved"] = max - reserved - output["total_"..pool.."UnreservedPercent"] = (max - reserved) / max - endWatch(env, pool.."Reservation") + -- Life/mana reservation + for _, pool in pairs({"Life", "Mana"}) do + local max = output[pool] + local reserved = env["reserved_"..pool.."Base"] + m_ceil(max * env["reserved_"..pool.."Percent"] / 100) + output[pool.."Reserved"] = reserved + output[pool.."ReservedPercent"] = reserved / max * 100 + output[pool.."Unreserved"] = max - reserved + output[pool.."UnreservedPercent"] = (max - reserved) / max * 100 + if (max - reserved) / max <= 0.35 then + modDB.conditions["Low"..pool] = true end end - -- Calculate primary defences - if startWatch(env, "energyShield", "mana") then - local convManaToES = getMiscVal(modDB, nil, "manaGainAsEnergyShield", 0) - if convManaToES > 0 then - output.total_energyShield = sumMods(modDB, false, "manaBase") * (1 + sumMods(modDB, false, "energyShieldInc", "defencesInc", "manaInc") / 100) * sumMods(modDB, true, "energyShieldMore", "defencesMore", "manaMore") * convManaToES / 100 - else - output.total_energyShield = 0 + -- Primary defences: Energy shield, evasion and armour + do + local ironReflexes = modDB:Sum("FLAG", nil, "IronReflexes") + local energyShield = 0 + local armour = 0 + local evasion = 0 + if breakdown then + breakdown.EnergyShield = { slots = { } } + breakdown.Armour = { slots = { } } + breakdown.Evasion = { slots = { } } end - local energyShieldFromReservedMana = getMiscVal(modDB, nil, "energyShieldFromReservedMana", 0) - if energyShieldFromReservedMana > 0 then - output.total_energyShield = output.total_energyShield + output.total_manaReserved * (1 + sumMods(modDB, false, "energyShieldInc", "defencesInc") / 100) * sumMods(modDB, true, "energyShieldMore", "defencesMore") * energyShieldFromReservedMana / 100 - end - output.total_gear_energyShieldBase = env.itemModList.energyShieldBase or 0 - for _, slot in pairs({"global","slot:Helmet","slot:Body Armour","slot:Gloves","slot:Boots","slot:Shield"}) do - buildSpaceTable(modDB, { [slot] = true }) - local energyShieldBase = getMiscVal(modDB, slot, "energyShieldBase", 0) - if energyShieldBase > 0 then - output.total_energyShield = output.total_energyShield + energyShieldBase * (1 + sumMods(modDB, false, "energyShieldInc", "defencesInc") / 100) * sumMods(modDB, true, "energyShieldMore", "defencesMore") - end - if slot ~= "global" then - output.total_gear_energyShieldBase = output.total_gear_energyShieldBase + energyShieldBase + local energyShieldBase = modDB:Sum("BASE", nil, "EnergyShield") + if energyShieldBase > 0 then + energyShield = energyShield + energyShieldBase * calcMod(modDB, nil, "EnergyShield", "Defences") + if breakdown then + slotBreakdown("Global", nil, nil, energyShieldBase, "EnergyShield", "Defences") end end - buildSpaceTable(modDB) - output.total_energyShieldRecharge = output.total_energyShield * 0.2 * (1 + sumMods(modDB, false, "energyShieldRechargeInc", "energyShieldRecoveryInc") / 100) * sumMods(modDB, true, "energyShieldRechargeMore", "energyShieldRecoveryMore") - output.total_energyShieldRechargeDelay = 2 / (1 + getMiscVal(modDB, nil, "energyShieldRechargeFaster", 0) / 100) - endWatch(env, "energyShield") - end - if startWatch(env, "armourEvasion", "life") then - output.total_evasion = 0 - local armourFromReservedLife = getMiscVal(modDB, nil, "armourFromReservedLife", 0) - if armourFromReservedLife > 0 then - output.total_armour = output.total_lifeReserved * (1 + sumMods(modDB, false, "armourInc", "armourAndEvasionInc", "defencesInc") / 100) * sumMods(modDB, true, "armourMore", "defencesMore") * armourFromReservedLife / 100 - else - output.total_armour = 0 + local armourBase = modDB:Sum("BASE", nil, "Armour", "ArmourAndEvasion") + if armourBase > 0 then + armour = armour + armourBase * calcMod(modDB, nil, "Armour", "ArmourAndEvasion", "Defences") + if breakdown then + slotBreakdown("Global", nil, nil, armourBase, "Armour", "ArmourAndEvasion", "Defences") + end end - output.total_gear_evasionBase = env.itemModList.evasionBase or 0 - output.total_gear_armourBase = env.itemModList.armourBase or 0 - local ironReflexes = getMiscVal(modDB, nil, "ironReflexes", false) - if getMiscVal(modDB, nil, "unbreakable", false) then - mod_dbMerge(modDB, "slot:Body Armour", "armourBase", getMiscVal(modDB, "slot:Body Armour", "armourBase", 0)) - end - for _, slot in pairs({"global","slot:Helmet","slot:Body Armour","slot:Gloves","slot:Boots","slot:Shield"}) do - buildSpaceTable(modDB, { [slot] = true }) - local evasionBase = getMiscVal(modDB, slot, "evasionBase", 0) - local bothBase = getMiscVal(modDB, slot, "armourAndEvasionBase", 0) - local armourBase = getMiscVal(modDB, slot, "armourBase", 0) + local evasionBase = modDB:Sum("BASE", nil, "Evasion", "ArmourAndEvasion") + if evasionBase > 0 then if ironReflexes then - if evasionBase > 0 or armourBase > 0 or bothBase > 0 then - output.total_armour = output.total_armour + (evasionBase + armourBase + bothBase) * (1 + sumMods(modDB, false, "armourInc", "evasionInc", "armourAndEvasionInc", "defencesInc") / 100) * sumMods(modDB, true, "armourMore", "evasionMore", "defencesMore") + armour = armour + evasionBase * calcMod(modDB, nil, "Armour", "Evasion", "ArmourAndEvasion", "Defences") + if breakdown then + slotBreakdown("Conversion", "Evasion to Armour", nil, evasionBase, "Armour", "Evasion", "ArmourAndEvasion", "Defences") end else - if evasionBase > 0 or bothBase > 0 then - output.total_evasion = output.total_evasion + (evasionBase + bothBase) * (1 + sumMods(modDB, false, "evasionInc", "armourAndEvasionInc", "defencesInc") / 100) * sumMods(modDB, true, "evasionMore", "defencesMore") - end - if armourBase > 0 or bothBase > 0 then - output.total_armour = output.total_armour + (armourBase + bothBase) * (1 + sumMods(modDB, false, "armourInc", "armourAndEvasionInc", "defencesInc") / 100) * sumMods(modDB, true, "armourMore", "defencesMore") + evasion = evasion + evasionBase * calcMod(modDB, nil, "Evasion", "ArmourAndEvasion", "Defences") + if breakdown then + slotBreakdown("Global", nil, nil, evasionBase, "Evasion", "ArmourAndEvasion", "Defences") end end - if slot ~= "global" then - output.total_gear_evasionBase = output.total_gear_evasionBase + evasionBase + bothBase - output.total_gear_armourBase = output.total_gear_armourBase + armourBase + bothBase + end + local gearEnergyShield = 0 + local gearArmour = 0 + local gearEvasion = 0 + local slotCfg = wipeTable(tempTable1) + for _, slot in pairs({"Helmet","Body Armour","Gloves","Boots","Weapon 2"}) do + local armourData = env.itemList[slot] and env.itemList[slot].armourData + if armourData then + slotCfg.slotName = slot + energyShieldBase = armourData.EnergyShield or 0 + if energyShieldBase > 0 then + energyShield = energyShield + energyShieldBase * calcMod(modDB, slotCfg, "EnergyShield", "Defences") + gearEnergyShield = gearEnergyShield + energyShieldBase + if breakdown then + slotBreakdown(slot, nil, slotCfg, energyShieldBase, "EnergyShield", "Defences") + end + end + armourBase = armourData.Armour or 0 + if armourBase > 0 then + if slot == "Body Armour" and modDB:Sum("FLAG", nil, "Unbreakable") then + armourBase = armourBase * 2 + end + armour = armour + armourBase * calcMod(modDB, slotCfg, "Armour", "ArmourAndEvasion", "Defences") + gearArmour = gearArmour + armourBase + if breakdown then + slotBreakdown(slot, nil, slotCfg, armourBase, "Armour", "ArmourAndEvasion", "Defences") + end + end + evasionBase = armourData.Evasion or 0 + if evasionBase > 0 then + if ironReflexes then + armour = armour + evasionBase * calcMod(modDB, slotCfg, "Armour", "Evasion", "ArmourAndEvasion", "Defences") + gearArmour = gearArmour + evasionBase + if breakdown then + slotBreakdown(slot, nil, slotCfg, evasionBase, "Armour", "Evasion", "ArmourAndEvasion", "Defences") + end + else + evasion = evasion + evasionBase * calcMod(modDB, slotCfg, "Evasion", "ArmourAndEvasion", "Defences") + gearEvasion = gearEvasion + evasionBase + if breakdown then + slotBreakdown(slot, nil, slotCfg, evasionBase, "Evasion", "ArmourAndEvasion", "Defences") + end + end + end end end - if getMiscVal(modDB, nil, "cannotEvade", false) then - output.total_evadeChance = 0 - else - local attackerLevel = getMiscVal(modDB, "misc", "evadeMonsterLevel", false) and m_min(getMiscVal(modDB, "monster", "level", 1), #data.enemyAccuracyTable) or m_max(m_min(env.build.characterLevel, 80), 1) - output.total_evadeChance = 1 - calcHitChance(output.total_evasion, data.enemyAccuracyTable[attackerLevel]) + local convManaToES = modDB:Sum("BASE", nil, "ManaGainAsEnergyShield") + if convManaToES > 0 then + energyShieldBase = modDB:Sum("BASE", nil, "Mana") * convManaToES / 100 + energyShield = energyShield + energyShieldBase * calcMod(modDB, nil, "Mana", "EnergyShield", "Defences") + if breakdown then + slotBreakdown("Conversion", "Mana to Energy Shield", nil, energyShieldBase, "EnergyShield", "Defences", "Mana") + end + end + output.EnergyShield = round(energyShield) + output.Armour = round(armour) + output.Evasion = round(evasion) + output["Gear:EnergyShield"] = gearEnergyShield + output["Gear:Armour"] = gearArmour + output["Gear:Evasion"] = gearEvasion + output.EnergyShieldRecharge = round(output.EnergyShield * 0.2 * calcMod(modDB, nil, "EnergyShieldRecharge", "EnergyShieldRecovery"), 1) + output.EnergyShieldRechargeDelay = 2 / (1 + modDB:Sum("INC", nil, "EnergyShieldRechargeFaster") / 100) + if breakdown then + simpleBreakdown(output.EnergyShield * 0.2, nil, "EnergyShieldRecharge", "EnergyShieldRecovery") + if output.EnergyShieldRechargeDelay ~= 2 then + breakdown.EnergyShieldRechargeDelay = { + "^72.00s ^8(base)", + "^7/ "..s_format("%.2f ^8(faster start)", 1 + modDB:Sum("INC", nil, "EnergyShieldRechargeFaster") / 100), + "^7= "..s_format("%.2fs", output.EnergyShieldRechargeDelay) + } + end + end + 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) + 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, + "^7Approximate evade chance: "..output.EvadeChance.."%", + } + end end - buildSpaceTable(modDB) - endWatch(env, "armourEvasion") end - if startWatch(env, "lifeEnergyShieldRegen", "life", "energyShield") then - if getMiscVal(modDB, nil, "noLifeRegen", false) then - output.total_lifeRegen = 0 - elseif getMiscVal(modDB, nil, "zealotsOath", false) then - output.total_lifeRegen = 0 - mod_dbMerge(modDB, "", "energyShieldRegenBase", sumMods(modDB, false, "lifeRegenBase")) - mod_dbMerge(modDB, "", "energyShieldRegenPercent", sumMods(modDB, false, "lifeRegenPercent")) + -- Life and energy shield regen + do + if modDB:Sum("FLAG", nil, "NoLifeRegen") then + output.LifeRegen = 0 + elseif modDB:Sum("FLAG", nil, "ZealotsOath") then + output.LifeRegen = 0 + local lifeBase = modDB:Sum("BASE", nil, "LifeRegen") + if lifeBase > 0 then + modDB:NewMod("EnergyShieldRegen", "BASE", lifeBase, "Zealot's Oath") + end + local lifePercent = modDB:Sum("BASE", nil, "LifeRegenPercent") + if lifePercent > 0 then + modDB:NewMod("EnergyShieldRegenPercent", "BASE", lifePercent, "Zealot's Oath") + end else - mod_dbMerge(modDB, "", "lifeRegenBase", output.total_life * sumMods(modDB, false, "lifeRegenPercent") / 100) - output.total_lifeRegen = sumMods(modDB, false, "lifeRegenBase") * (1 + sumMods(modDB, false, "lifeRecoveryInc") / 100) * sumMods(modDB, true, "lifeRecoveryMore") + local lifeBase = modDB:Sum("BASE", nil, "LifeRegen") + local lifePercent = modDB:Sum("BASE", nil, "LifeRegenPercent") + if lifePercent > 0 then + lifeBase = lifeBase + output.Life * lifePercent / 100 + end + if lifeBase > 0 then + output.LifeRegen = lifeBase * calcMod(modDB, nil, "LifeRecovery") + output.LifeRegenPercent = round(lifeBase / output.Life * 100, 1) + else + output.LifeRegen = 0 + end + end + local esBase = modDB:Sum("BASE", nil, "EnergyShieldRegen") + local esPercent = modDB:Sum("BASE", nil, "EnergyShieldRegenPercent") + if esPercent > 0 then + esBase = esBase + output.EnergyShield * esPercent / 100 + end + if esBase > 0 then + output.EnergyShieldRegen = esBase * calcMod(modDB, nil, "EnergyShieldRecovery") + output.EnergyShieldRegenPercent = round(esBase / output.EnergyShield * 100, 1) + else + output.EnergyShieldRegen = 0 end - mod_dbMerge(modDB, "", "energyShieldRegenBase", output.total_energyShield * sumMods(modDB, false, "energyShieldRegenPercent") / 100) - output.total_energyShieldRegen = sumMods(modDB, false, "energyShieldRegenBase") * (1 + sumMods(modDB, false, "energyShieldRecoveryInc") / 100) * sumMods(modDB, true, "energyShieldRecoveryMore") - endWatch(env, "lifeEnergyShieldRegen") end - if startWatch(env, "resist") then - for _, elem in pairs({"fire", "cold", "lightning"}) do - output["total_"..elem.."ResistMax"] = sumMods(modDB, false, elem.."ResistMax") - output["total_"..elem.."ResistTotal"] = sumMods(modDB, false, elem.."Resist", "elementalResist") - 60 - end - if getMiscVal(modDB, nil, "chaosInoculation", false) then - output.total_chaosResistMax = 100 - output.total_chaosResistTotal = 100 + -- Resistances + for _, elem in ipairs(resistTypeList) do + local max, total + if elem == "Chaos" and modDB:Sum("FLAG", nil, "ChaosInoculation") then + max = 100 + total = 100 else - output.total_chaosResistMax = sumMods(modDB, false, "chaosResistMax") - output.total_chaosResistTotal = sumMods(modDB, false, "chaosResist") - 60 + max = modDB:Sum("BASE", nil, elem.."ResistMax") + total = modDB:Sum("BASE", nil, elem.."Resist", isElemental[elem] and "ElementalResist") end - for _, elem in pairs({"fire", "cold", "lightning", "chaos"}) do - local total = output["total_"..elem.."ResistTotal"] - local cap = output["total_"..elem.."ResistMax"] - output["total_"..elem.."Resist"] = m_min(total, cap) - output["total_"..elem.."ResistOverCap"] = m_max(0, total - cap) + output[elem.."ResistMax"] = max + output[elem.."ResistTotal"] = total + output[elem.."Resist"] = m_min(total, max) + output[elem.."ResistOverCap"] = m_max(0, total - max) + if breakdown then + breakdown[elem.."Resist"] = { + "^7Max: "..max.."%", + "^7Total: "..total.."%", + "^7In hideout: "..(total + 60).."%", + } end - endWatch(env, "resist") end - if startWatch(env, "otherDef") then - output.total_blockChanceMax = sumMods(modDB, false, "blockChanceMax") - output.total_blockChance = m_min(sumMods(modDB, false, "blockChance") / 100 * (1 + sumMods(modDB, false, "blockChanceInc") / 100) * sumMods(modDB, true, "blockChanceMore"), output.total_blockChanceMax) - output.total_spellBlockChance = m_min(sumMods(modDB, false, "spellBlockChance") / 100 * (1 + sumMods(modDB, false, "spellBlockChanceInc") / 100) * sumMods(modDB, true, "spellBlockChanceMore") + output.total_blockChance * m_min(100, getMiscVal(modDB, nil, "blockChanceConv", 0)) / 100, output.total_blockChanceMax) - if getMiscVal(modDB, nil, "cannotBlockAttacks", false) then - output.total_blockChance = 0 + -- Other defences: block, dodge, stun recovery/avoidance + do + output.BlockChanceMax = modDB:Sum("BASE", nil, "BlockChanceMax") + local shieldData = env.itemList["Weapon 2"] and env.itemList["Weapon 2"].armourData + output.BlockChance = m_min(((shieldData and shieldData.BlockChance or 0) + modDB:Sum("BASE", nil, "BlockChance")) * calcMod(modDB, nil, "BlockChance"), output.BlockChanceMax) + output.SpellBlockChance = m_min(modDB:Sum("BASE", nil, "SpellBlockChance") * calcMod(modDB, nil, "SpellBlockChance") + output.BlockChance * modDB:Sum("BASE", nil, "BlockChanceConv") / 100, output.BlockChanceMax) + if breakdown then + simpleBreakdown(shieldData and shieldData.BlockChance, nil, "BlockChance") + simpleBreakdown(output.BlockChance * modDB:Sum("BASE", nil, "BlockChanceConv") / 100, nil, "SpellBlockChance") end - output.total_dodgeAttacks = sumMods(modDB, false, "dodgeAttacks") / 100 - output.total_dodgeSpells = sumMods(modDB, false, "dodgeSpells") / 100 - local stunChance = 1 - sumMods(modDB, false, "avoidStun", 0) / 100 - if output.total_energyShield > output.total_life * 2 then + if modDB:Sum("FLAG", nil, "CannotBlockAttacks") then + output.BlockChance = 0 + end + output.AttackDodgeChance = modDB:Sum("BASE", nil, "AttackDodgeChance") + output.SpellDodgeChance = modDB:Sum("BASE", nil, "SpellDodgeChance") + local stunChance = 100 - modDB:Sum("BASE", nil, "AvoidStun") + if output.EnergyShield > output.Life * 2 then stunChance = stunChance * 0.5 end - output.stun_avoidChance = 1 - stunChance - if output.stun_avoidChance >= 1 then - output.stun_duration = 0 - output.stun_blockDuration = 0 + output.StunAvoidChance = 100 - stunChance + if output.StunAvoidChance >= 100 then + output.StunDuration = 0 + output.BlockDuration = 0 else - output.stun_duration = 0.35 / (1 + sumMods(modDB, false, "stunRecoveryInc") / 100) - output.stun_blockDuration = 0.35 / (1 + sumMods(modDB, false, "stunRecoveryInc", "blockRecoveryInc") / 100) + output.StunDuration = 0.35 / (1 + modDB:Sum("INC", nil, "StunRecovery") / 100) + output.BlockDuration = 0.35 / (1 + modDB:Sum("INC", nil, "StunRecovery", "BlockRecovery") / 100) + if breakdown then + breakdown.StunDuration = { + "^70.35s ^8(base)", + "^7/ "..s_format("%.2f ^8(increased/reduced recovery)", 1 + modDB:Sum("INC", nil, "StunRecovery") / 100), + "^7= "..s_format("%.2fs", output.StunDuration) + } + breakdown.BlockDuration = { + "^70.35s ^8(base)", + "^7/ "..s_format("%.2f ^8(increased/reduced recovery)", 1 + modDB:Sum("INC", nil, "StunRecovery", "BlockRecovery") / 100), + "^7= "..s_format("%.2fs", output.BlockDuration) + } + end end - endWatch(env, "otherDef") end - -- Enable skill namespaces - buildSpaceTable(modDB, env.skillSpaceFlags) + -- ---------------------- -- + -- Offensive Calculations -- + -- ---------------------- -- - -- Calculate projectile stats - if env.skillFlags.projectile then - if startWatch(env, "projectile") then - output.total_projectileCount = sumMods(modDB, false, "projectileCount") - output.total_pierce = m_min(100, sumMods(modDB, false, "pierceChance")) / 100 - output.total_projectileSpeedMod = (1 + sumMods(modDB, false, "projectileSpeedInc") / 100) * sumMods(modDB, true, "projectileSpeedMore") - endWatch(env, "projectile") + -- Merge main skill mods + modDB:AddList(env.mainSkill.skillModList) + + local skillData = env.mainSkill.skillData + local skillFlags = env.mainSkill.skillFlags + local skillCfg = env.mainSkill.skillCfg + if env.mode_buffs then + skillFlags.buffs = true + end + if env.mode_combat then + skillFlags.combat = true + end + if env.mode_effective then + skillFlags.effective = true + end + if not env.mode_average then + skillFlags.notAverage = true + end + + -- Update skill data + for _, value in ipairs(modDB:Sum("LIST", skillCfg, "Misc")) do + if value.type == "SkillData" then + skillData[value.key] = value.value end - if getMiscVal(modDB, nil, "drillneck", false) then - mod_dbMerge(modDB, "projectile", "damageInc", output.total_pierce * 100) + end + + -- Add addition stat bonuses + if modDB:Sum("FLAG", nil, "IronGrip") then + modDB:NewMod("PhysicalDamage", "INC", strDmgBonus, "Strength", bor(ModFlag.Attack, ModFlag.Projectile)) + end + if modDB:Sum("FLAG", nil, "IronWill") then + modDB:NewMod("Damage", "INC", strDmgBonus, "Strength", ModFlag.Spell) + end + + -- Calculate skill type stats + if skillFlags.projectile then + output.ProjectileCount = modDB:Sum("BASE", skillCfg, "ProjectileCount") + output.PierceChance = m_min(100, modDB:Sum("BASE", skillCfg, "PierceChance")) + output.ProjectileSpeedMod = calcMod(modDB, skillCfg, "ProjectileSpeed") + if breakdown then + breakdown.ProjectileSpeedMod = modBreakdown(skillCfg, "ProjectileSpeed") + end + end + if skillFlags.area then + output.AreaRadiusMod = calcMod(modDB, skillCfg, "AreaRadius") + if breakdown then + breakdown.AreaRadiusMod = modBreakdown(skillCfg, "AreaRadius") + end + end + if skillFlags.trap then + output.ActiveTrapLimit = modDB:Sum("BASE", skillCfg, "ActiveTrapLimit") + output.TrapCooldown = (skillData.trapCooldown or 4) / calcMod(modDB, skillCfg, "TrapCooldownRecovery") + if breakdown then + breakdown.TrapCooldown = { + s_format("%.2fs ^8(base)", skillData.trapCooldown or 4), + s_format("/ %.2f ^8(increased/reduced cooldown recovery)", 1 + modDB:Sum("INC", skillCfg, "TrapCooldownRecovery") / 100), + s_format("= %.2fs", output.TrapCooldown) + } + end + end + if skillFlags.mine then + output.ActiveMineLimit = modDB:Sum("BASE", skillCfg, "ActiveMineLimit") + end + if skillFlags.totem then + output.ActiveTotemLimit = modDB:Sum("BASE", skillCfg, "ActiveTotemLimit") + output.TotemLifeMod = calcMod(modDB, skillCfg, "TotemLife") + output.TotemLife = round(data.monsterLifeTable[skillData.totemLevel] * data.totemLifeMult[env.mainSkill.skillTotemId] * output.TotemLifeMod) + if breakdown then + breakdown.TotemLifeMod = modBreakdown(skillCfg, "TotemLife") + breakdown.TotemLife = { + "Totem level: "..skillData.totemLevel, + data.monsterLifeTable[skillData.totemLevel].." ^8(base life for a level "..skillData.totemLevel.." monster)", + "x "..data.totemLifeMult[env.mainSkill.skillTotemId].." ^8(life multiplier for this totem type)", + "x "..output.TotemLifeMod.." ^8(totem life modifier)", + "= "..output.TotemLife, + } + end + end + + -- Skill duration + local debuffDurationMult + if env.mode_effective then + debuffDurationMult = 1 / calcMod(enemyDB, skillCfg, "BuffExpireFaster") + else + debuffDurationMult = 1 + end + do + output.DurationMod = calcMod(modDB, skillCfg, "Duration") + if breakdown then + breakdown.DurationMod = modBreakdown(skillCfg, "Duration") + end + local durationBase = skillData.duration or 0 + if durationBase > 0 then + output.Duration = durationBase * output.DurationMod + if skillData.debuff then + output.Duration = output.Duration * debuffDurationMult + end + if breakdown and output.Duration ~= durationBase then + breakdown.Duration = { + s_format("%.2fs ^8(base)", durationBase), + } + if output.DurationMod ~= 1 then + t_insert(breakdown.Duration, s_format("x %.2f ^8(duration modifier)", output.DurationMod)) + end + if skillData.debuff and debuffDurationMult ~= 1 then + t_insert(breakdown.Duration, s_format("/ %.2f ^8(debuff expires slower/faster)", 1 / debuffDurationMult)) + end + t_insert(breakdown.Duration, s_format("= %.2fs", output.Duration)) + end end end -- Run skill setup function if env.setupFunc then - env.setupFunc(function(mod, val) mod_dbMerge(modDB, nil, mod, val) end, output) + env.setupFunc(env, output) end local isAttack = (env.mode_skillType == "ATTACK") - -- Calculate enemy resistances - if startWatch(env, "enemyResist") then - local elemResist = getMiscVal(modDB, "effective", "elementalResist", 0) - for _, damageType in pairs({"lightning","cold","fire"}) do - output["enemy_"..damageType.."Resist"] = m_min(elemResist + getMiscVal(modDB, "effective", damageType.."Resist", 0), 75) - end - output.enemy_chaosResist = m_min(getMiscVal(modDB, "effective", "chaosResist", 0), 75) - endWatch(env, "enemyResist") + -- Cache global damage disabling flags + local canDeal = { } + for _, damageType in pairs(dmgTypeList) do + canDeal[damageType] = not modDB:Sum("FLAG", skillCfg, "DealNo"..damageType) end - -- Cache global damage disabling flags - if startWatch(env, "canDeal") then - output.canDeal = { } - for _, damageType in pairs(dmgTypeList) do - output.canDeal[damageType] = not getMiscVal(modDB, nil, "dealNo"..damageType, false) + -- Calculate enemy resistances + do + local elemResist = enemyDB:Sum("BASE", nil, "ElementalResist") + for _, damageType in pairs({"Lightning","Cold","Fire"}) do + output["Enemy"..damageType.."Resist"] = m_min(enemyDB:Sum("BASE", nil, damageType.."Resist") + elemResist, 75) end - endWatch(env, "canDeal") + output.EnemyChaosResist = m_min(enemyDB:Sum("BASE", nil, "ChaosResist"), 75) end - local canDeal = output.canDeal -- Calculate damage conversion percentages - if startWatch(env, "conversionTable") then - output.conversionTable = { } - for damageTypeIndex = 1, 4 do - local damageType = dmgTypeList[damageTypeIndex] - local globalConv = { } - local skillConv = { } - local add = { } - local globalTotal, skillTotal = 0, 0 - for otherTypeIndex = damageTypeIndex + 1, 5 do - -- For all possible destination types, check for global and skill conversions - otherType = dmgTypeList[otherTypeIndex] - globalConv[otherType] = sumMods(modDB, false, damageType.."ConvertTo"..otherType) - globalTotal = globalTotal + globalConv[otherType] - skillConv[otherType] = getMiscVal(modDB, "skill", damageType.."ConvertTo"..otherType, 0) - skillTotal = skillTotal + skillConv[otherType] - add[otherType] = sumMods(modDB, false, damageType.."GainAs"..otherType) - end - if globalTotal + skillTotal > 100 then - -- Conversion exceeds 100%, scale down non-skill conversions - local factor = (100 - skillTotal) / globalTotal - for type, val in pairs(globalConv) do - globalConv[type] = globalConv[type] * factor - end - globalTotal = globalTotal * factor - end - local dmgTable = { } - for type, val in pairs(globalConv) do - dmgTable[type] = (globalConv[type] + skillConv[type] + add[type]) / 100 - end - dmgTable.mult = 1 - (globalTotal + skillTotal) / 100 - output.conversionTable[damageType] = dmgTable + env.conversionTable = wipeTable(env.conversionTable) + for damageTypeIndex = 1, 4 do + local damageType = dmgTypeList[damageTypeIndex] + local globalConv = wipeTable(tempTable1) + local skillConv = wipeTable(tempTable2) + local add = wipeTable(tempTable3) + local globalTotal, skillTotal = 0, 0 + for otherTypeIndex = damageTypeIndex + 1, 5 do + -- For all possible destination types, check for global and skill conversions + otherType = dmgTypeList[otherTypeIndex] + globalConv[otherType] = modDB:Sum("BASE", skillCfg, damageType.."DamageConvertTo"..otherType) + globalTotal = globalTotal + globalConv[otherType] + skillConv[otherType] = skillData[damageType.."DamageConvertTo"..otherType] or 0 + skillTotal = skillTotal + skillConv[otherType] + add[otherType] = modDB:Sum("BASE", skillCfg, damageType.."DamageGainAs"..otherType) + end + if skillTotal > 100 then + -- Skill conversion exceeds 100%, scale it down and remove non-skill conversions + local factor = 100 / skillTotal + for type, val in pairs(skillConv) do + -- The game currently doesn't scale this down even though it is supposed to + --skillConv[type] = val * factor + end + for type, val in pairs(globalConv) do + globalConv[type] = 0 + end + elseif globalTotal + skillTotal > 100 then + -- Conversion exceeds 100%, scale down non-skill conversions + local factor = (100 - skillTotal) / globalTotal + for type, val in pairs(globalConv) do + globalConv[type] = val * factor + end + globalTotal = globalTotal * factor + end + local dmgTable = { } + for type, val in pairs(globalConv) do + dmgTable[type] = (globalConv[type] + skillConv[type] + add[type]) / 100 + end + dmgTable.mult = 1 - m_min((globalTotal + skillTotal) / 100, 1) + env.conversionTable[damageType] = dmgTable + end + env.conversionTable["Chaos"] = { mult = 1 } + + -- Calculate hit chance + output.Accuracy = calcVal(modDB, "Accuracy", skillCfg) + if breakdown then + simpleBreakdown(nil, skillCfg, "Accuracy") + end + 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) + 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, + "^7Approximate hit chance: "..output.HitChance.."%", + } end - output.conversionTable["chaos"] = { mult = 1 } - endWatch(env, "conversionTable") end - -- Calculate damage for each damage type - local combMin, combMax = 0, 0 - for _, damageType in pairs(dmgTypeList) do - local min, max - if startWatch(env, damageType, "enemyResist", "canDeal", "conversionTable") then - if canDeal[damageType] then - min, max = calcHitDamage(env, output, damageType) - local convMult = output.conversionTable[damageType].mult - min = min * convMult - max = max * convMult - if env.mode_effective then - -- Apply resistances - local preMult - local taken = getMiscVal(modDB, "effective", damageType.."TakenInc", 0) + getMiscVal(modDB, "effective", "damageTakenInc", 0) - if isElemental[damageType] then - local resist = output["enemy_"..damageType.."Resist"] - sumMods(modDB, false, damageType.."Pen", "elementalPen") - preMult = 1 - resist / 100 - taken = taken + getMiscVal(modDB, "effective", "elementalTakenInc", 0) - elseif damageType == "chaos" then - preMult = 1 - output.enemy_chaosResist / 100 - else - preMult = 1 - taken = taken - getMiscVal(modDB, "effective", "physicalRed", 0) - end - if env.skillSpaceFlags.projectile then - taken = taken + getMiscVal(modDB, "effective", "projectileTakenInc", 0) - end - local mult = preMult * (1 + taken / 100) - min = min * mult - max = max * mult - end + -- Calculate attack/cast speed + do + local baseSpeed + if isAttack then + if skillData.castTimeOverridesAttackTime then + -- Skill is overriding weapon attack speed + baseSpeed = 1 / skillData.castTime * (1 + (env.weaponData1.AttackSpeedInc or 0) / 100) else - min, max = 0, 0 + baseSpeed = env.weaponData1.attackRate or 1 end - output["total_"..damageType.."Min"] = min - output["total_"..damageType.."Max"] = max - output["total_"..damageType.."Avg"] = (min + max) / 2 - endWatch(env, damageType) else - min = output["total_"..damageType.."Min"] - max = output["total_"..damageType.."Max"] + baseSpeed = 1 / (skillData.castTime or 1) + end + output.Speed = baseSpeed * calcMod(modDB, skillCfg, "Speed") + output.Time = 1 / output.Speed + if breakdown then + simpleBreakdown(baseSpeed, skillCfg, "Speed") end - combMin = combMin + min - combMax = combMax + max end - output.total_combMin = combMin - output.total_combMax = combMax + + -- Calculate hit damage for each damage type + local totalMin, totalMax = 0, 0 + for _, damageType in ipairs(dmgTypeList) do + local min, max + if canDeal[damageType] then + if breakdown then + breakdown[damageType] = { + damageComponents = { } + } + end + min, max = calcHitDamage(env, damageType) + local convMult = env.conversionTable[damageType].mult + if breakdown then + t_insert(breakdown[damageType], "Hit damage:") + t_insert(breakdown[damageType], "^7"..min.." to "..max.." ^8(total damage)") + if convMult ~= 1 then + t_insert(breakdown[damageType], "^7x "..convMult.." ^8("..((1-convMult)*100).."% converted to other damage types)") + end + end + min = min * convMult + max = max * convMult + if env.mode_effective then + -- Apply enemy resistances and damage taken modifiers + local preMult + local taken = enemyDB:Sum("INC", nil, "DamageTaken", damageType.."DamageTaken") + local resist = 0 + local pen = 0 + if isElemental[damageType] then + resist = output["Enemy"..damageType.."Resist"] + pen = modDB:Sum("BASE", skillCfg, damageType.."Penetration", "ElementalPenetration") + taken = taken + enemyDB:Sum("INC", nil, "ElementalDamageTaken") + elseif damageType == "Chaos" then + resist = output.EnemyChaosResist + else + resist = enemyDB:Sum("INC", nil, "PhysicalDamageReduction") + end + if skillFlags.projectile then + taken = taken + enemyDB:Sum("INC", nil, "ProjectileDamageTaken") + end + local mult = (1 - (resist - pen) / 100) * (1 + taken / 100) + min = min * mult + max = max * mult + if env.mode == "GRID" then + output[damageType.."EffMult"] = mult + end + if breakdown and mult ~= 1 then + t_insert(breakdown[damageType], s_format("x %.3f ^8(effective DPS modifier)", mult)) + local out = { } + local resistForm = (damageType == "Physical") and "physical damage reduction" or "resistance" + if resist ~= 0 then + t_insert(out, "Enemy "..resistForm..": "..resist.."%") + end + if pen ~= 0 then + t_insert(out, "Effective resistance:") + t_insert(out, ""..resist.."% ^8(resistance)") + t_insert(out, "- "..pen.."% ^8(penetration)") + t_insert(out, "= "..(resist-pen).."%") + end + if (resist - pen) ~= 0 and taken ~= 0 then + t_insert(out, "Effective DPS modifier:") + t_insert(out, (1 - (resist - pen) / 100).." ^8("..resistForm..")") + t_insert(out, "x "..(1 + taken / 100).." ^8(increased/reduced damage taken)") + t_insert(out, s_format("= %.3f", mult)) + end + breakdown[damageType.."EffMult"] = out + end + end + if breakdown then + t_insert(breakdown[damageType], "^7= "..round(min).." to "..round(max)) + end + else + min, max = 0, 0 + if breakdown then + breakdown[damageType] = { + "You can't deal "..damageType.." damage" + } + end + end + if env.mode == "GRID" then + output[damageType.."Min"] = min + output[damageType.."Max"] = max + end + output[damageType.."Average"] = (min + max) / 2 + totalMin = totalMin + min + totalMax = totalMax + max + end + output.TotalMin = totalMin + output.TotalMax = totalMax -- Calculate crit chance, crit multiplier, and their combined effect - if startWatch(env, "dps_crit") then - if getMiscVal(modDB, nil, "neverCrit", false) then - output.total_critChance = 0 - output.total_critMultiplier = 0 - output.total_critEffect = 1 - else - local baseCrit - if isAttack then - baseCrit = getMiscVal(modDB, "weapon1", "critChanceBase", 0) - else - baseCrit = getMiscVal(modDB, "skill", "critChanceBase", 0) - end - if baseCrit == 100 then - output.total_critChance = 1 - else - output.total_critChance = calcVal(modDB, "critChance", baseCrit) / 100 - if env.mode_effective then - output.total_critChance = output.total_critChance + getMiscVal(modDB, "effective", "additionalCritChance", 0) / 100 - end - output.total_critChance = m_min(output.total_critChance, 0.95) - if baseCrit > 0 then - output.total_critChance = m_max(output.total_critChance, 0.05) - end - end - if getMiscVal(modDB, nil, "noCritMult", false) then - output.total_critMultiplier = 1 - else - output.total_critMultiplier = 1.5 + sumMods(modDB, false, "critMultiplier") / 100 - end - output.total_critEffect = 1 - output.total_critChance + output.total_critChance * output.total_critMultiplier - end - endWatch(env, "dps_crit") - end - - -- Calculate skill speed - if startWatch(env, "dps_speed") then + if modDB:Sum("FLAG", nil, "NeverCrit") then + output.CritChance = 0 + output.CritMultiplier = 0 + output.CritEffect = 1 + else + local baseCrit if isAttack then - local baseSpeed - local attackTime = getMiscVal(modDB, "skill", "attackTime", 0) - if attackTime > 0 then - -- Skill is overriding weapon attack speed - baseSpeed = 1 / attackTime * (1 + getMiscVal(modDB, "weapon1", "attackSpeedInc", 0) / 100) - else - baseSpeed = getMiscVal(modDB, "weapon1", "attackRate", 0) - end - output.total_speed = baseSpeed * (1 + sumMods(modDB, false, "speedInc", "attackSpeedInc") / 100) * sumMods(modDB, true, "speedMore", "attackSpeedMore") + baseCrit = env.weaponData1.critChance or 0 else - local baseSpeed = 1 / getMiscVal(modDB, "skill", "castTime", 0) - output.total_speed = baseSpeed * (1 + sumMods(modDB, false, "speedInc", "castSpeedInc") / 100) * sumMods(modDB, true, "speedMore", "castSpeedMore") + baseCrit = skillData.critChance or 0 end - output.total_time = 1 / output.total_speed - endWatch(env, "dps_speed") - end - - -- Calculate hit chance - if startWatch(env, "dps_hitChance") then - if not isAttack or getMiscVal(modDB, "skill", "cannotBeEvaded", false) or getMiscVal(modDB, nil, "cannotBeEvaded", false) or getMiscVal(modDB, "weapon1", "cannotBeEvaded", false) then - output.total_hitChance = 1 + if baseCrit == 100 then + output.CritChance = 100 else - output.total_accuracy = calcVal(modDB, "accuracy") - local targetLevel = getMiscVal(modDB, "misc", "hitMonsterLevel", false) and m_min(getMiscVal(modDB, "monster", "level", 1), #data.enemyEvasionTable) or m_max(m_min(env.build.characterLevel, 79), 1) - local targetEvasion = data.enemyEvasionTable[targetLevel] + output.CritChance = calcVal(modDB, "CritChance", skillCfg, baseCrit) if env.mode_effective then - targetEvasion = targetEvasion * getMiscVal(modDB, "effective", "evasionMore", 1) + output.CritChance = output.CritChance + enemyDB:Sum("BASE", nil, "SelfExtraCritChance") + end + output.CritChance = m_min(output.CritChance, 95) + if baseCrit > 0 then + output.CritChance = m_max(output.CritChance, 5) + end + if breakdown then + simpleBreakdown(baseCrit, skillCfg, "CritChance") end - output.total_hitChance = calcHitChance(targetEvasion, output.total_accuracy) end - endWatch(env, "dps_hitChance") + if modDB:Sum("FLAG", skillCfg, "NoCritMultiplier") then + output.CritMultiplier = 1 + else + output.CritMultiplier = 1.5 + modDB:Sum("BASE", skillCfg, "CritMultiplier") / 100 + end + output.CritEffect = 1 - output.CritChance / 100 + output.CritChance / 100 * output.CritMultiplier + if breakdown and output.CritEffect ~= 1 then + breakdown.CritEffect = { + "(1 - "..(output.CritChance/100)..") ^8(portion of damage from non-crits)", + "+ ("..(output.CritChance/100).." x "..output.CritMultiplier..") ^8(portion of damage from crits)", + s_format("= %.3f", output.CritEffect), + } + end end -- Calculate average damage and final DPS - output.total_averageHit = (combMin + combMax) / 2 * output.total_critEffect - output.total_averageDamage = output.total_averageHit * output.total_hitChance - output.total_dps = output.total_averageDamage * output.total_speed * getMiscVal(modDB, "skill", "dpsMultiplier", 1) + output.AverageHit = (totalMin + totalMax) / 2 * output.CritEffect + output.AverageDamage = output.AverageHit * output.HitChance / 100 + output.TotalDPS = output.AverageDamage * output.Speed * (skillData.dpsMultiplier or 1) + if env.mode == "GRID" then + if env.mode_average then + output.DisplayDamage = s_format("%.1f average damage", output.AverageDamage) + else + output.DisplayDamage = s_format("%.1f DPS", output.TotalDPS) + end + end + if breakdown then + if output.CritEffect ~= 1 then + breakdown.AverageHit = { + s_format("%.1f ^8(non-crit average damage)", (totalMin + totalMax) / 2), + s_format("x %.3f ^8(crit effect modifier)", output.CritEffect), + s_format("= %.1f", output.AverageHit), + } + end + if isAttack then + breakdown.AverageDamage = { + s_format("%.1f ^8(average hit)", output.AverageHit), + s_format("x %.2f ^8(chance to hit)", output.HitChance / 100), + s_format("%.1f", output.AverageDamage), + } + breakdown.TotalDPS = { + s_format("%.1f ^8(average damage)", output.AverageDamage), + s_format("x %.2f ^8(attack rate)", output.Speed), + } + else + breakdown.TotalDPS = { + s_format("%.1f ^8(average hit)", output.AverageDamage), + s_format("x %.2f ^8(cast rate)", output.Speed), + } + end + if skillData.dpsMultiplier then + t_insert(breakdown.TotalDPS, s_format("x %d ^8(DPS multiplier for this skill)", skillData.dpsMultiplier)) + end + t_insert(breakdown.TotalDPS, s_format("= %.1f", output.TotalDPS)) + end -- Calculate mana cost (may be slightly off due to rounding differences) - output.total_manaCost = m_floor(m_max(0, getMiscVal(modDB, "skill", "manaCostBase", 0) * (1 + m_floor((sumMods(modDB, true, "manaCostMore") - 1) * 100 + 0.0001) / 100) * (1 + sumMods(modDB, false, "manaCostInc") / 100) - sumMods(modDB, false, "manaCostBase"))) - - -- Calculate AoE stats - if env.skillFlags.aoe then - output.total_aoeRadiusMod = (1 + sumMods(modDB, false, "aoeRadiusInc") / 100) * sumMods(modDB, true, "aoeRadiusMore") - end - - -- Calculate skill duration - if startWatch(env, "duration") then - local durationBase = getMiscVal(modDB, "skill", "durationBase", 0) - output.total_durationMod = (1 + sumMods(modDB, false, "durationInc") / 100) * sumMods(modDB, true, "durationMore") - if durationBase > 0 then - output.total_duration = durationBase * output.total_durationMod + do + local more = m_floor(modDB:Sum("MORE", skillCfg, "ManaCost") * 100 + 0.0001) / 100 + local inc = modDB:Sum("INC", skillCfg, "ManaCost") + output.ManaCost = m_floor(m_max(0, (skillData.manaCost or 0) * more * (1 + inc / 100) - modDB:Sum("BASE", skillCfg, "ManaCost"))) + if breakdown and output.ManaCost ~= (skillData.manaCost or 0) then + breakdown.ManaCost = { + (skillData.manaCost or 0).." ^8(base mana cost)", + } + if more ~= 1 then + t_insert(breakdown.ManaCost, "x "..more.." ^8(mana cost multiplier)") + end + if inc ~= 0 then + t_insert(breakdown.ManaCost, "x "..(1 + inc/100).." ^8(increased/reduced mana cost)") + end + local base = modDB:Sum("BASE", skillCfg, "ManaCost") + if base ~= 0 then + t_insert(breakdown.ManaCost, "- "..base.." ^8(- mana cost)") + end + t_insert(breakdown.ManaCost, "= " .. output.ManaCost) end - endWatch(env, "duration") - end - - -- Calculate trap, mine and totem stats - if startWatch(env, "trapMineTotem") then - if env.skillFlags.trap then - output.total_trapCooldown = getMiscVal(modDB, "skill", "trapCooldown", 4) / (1 + getMiscVal(modDB, nil, "trapCooldownRecoveryInc", 0) / 100) - output.total_activeTrapLimit = sumMods(modDB, false, "activeTrapLimit") - end - if env.skillFlags.mine then - output.total_activeMineLimit = sumMods(modDB, false, "activeMineLimit") - end - if env.skillFlags.totem then - output.totem_lifeMod = (1 + sumMods(modDB, false, "totemLifeInc") / 100) * sumMods(modDB, true, "totemLifeMore") - end - endWatch(env, "trapMineTotem") - end - - -- Calculate enemy stun modifiers - if startWatch(env, "enemyStun") then - local enemyStunThresholdRed = -sumMods(modDB, false, "stunEnemyThresholdInc") - if enemyStunThresholdRed > 75 then - output.stun_enemyThresholdMod = 1 - (75 + (enemyStunThresholdRed - 75) * 25 / (enemyStunThresholdRed - 50)) / 100 - else - output.stun_enemyThresholdMod = 1 - enemyStunThresholdRed / 100 - end - output.stun_enemyDuration = 0.35 * (1 + sumMods(modDB, false, "stunEnemyDurationInc") / 100) - endWatch(env, "enemyStun") end -- Calculate skill DOT components - output.total_damageDot = 0 - for _, damageType in pairs(dmgTypeList) do - if startWatch(env, damageType.."Dot", "enemyResist", "canDeal") then - local baseVal - if canDeal[damageType] then - baseVal = getMiscVal(modDB, "skill", damageType.."DotBase", 0) - else - baseVal = 0 - end - if baseVal > 0 then - env.skillFlags.dot = true - buildSpaceTable(modDB, { - dot = true, - debuff = env.skillSpaceFlags.debuff, - spell = getMiscVal(modDB, "skill", "dotIsSpell", false), - projectile = env.skillSpaceFlags.projectile, - aoe = env.skillSpaceFlags.aoe, - totem = env.skillSpaceFlags.totem, - trap = env.skillSpaceFlags.trap, - mine = env.skillSpaceFlags.mine, - }) - local effMult = 1 - if env.mode_effective then - local preMult - local taken = getMiscVal(modDB, "effective", damageType.."TakenInc", 0) + getMiscVal(modDB, "effective", "damageTakenInc", 0) + getMiscVal(modDB, "effective", "dotTakenInc", 0) - if damageType == "physical" then - taken = taken - getMiscVal(modDB, "effective", "physicalRed", 0) - preMult = 1 - else - if isElemental[damageType] then - taken = taken + getMiscVal(modDB, "effective", "elementalTakenInc", 0) - end - preMult = 1 - output["enemy_"..damageType.."Resist"] / 100 - end - effMult = preMult * (1 + taken / 100) - end - 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) - * effMult - end - buildSpaceTable(modDB, env.skillSpaceFlags) - endWatch(env, damageType.."Dot") + local dotCfg = { + skillName = skillCfg.skillName, + flags = bor(band(skillCfg.flags, ModFlag.SourceMask), ModFlag.Dot, skillData.dotIsSpell and ModFlag.Spell or 0), + keywordFlags = skillCfg.keywordFlags + } + env.mainSkill.dotCfg = dotCfg + output.TotalDot = 0 + for _, damageType in ipairs(dmgTypeList) do + local baseVal + if canDeal[damageType] then + baseVal = skillData[damageType.."Dot"] or 0 + else + baseVal = 0 end - output.total_damageDot = output.total_damageDot + (output["total_"..damageType.."Dot"] or 0) + if baseVal > 0 then + skillFlags.dot = true + local effMult = 1 + if env.mode_effective then + local taken = enemyDB:Sum("INC", nil, "DamageTaken", damageType.."DamageTaken", "DotTaken") + local resist = 0 + if damageType == "Physical" then + resist = enemyDB:Sum("INC", nil, "PhysicalDamageReduction") + else + if isElemental[damageType] then + taken = taken + enemyDB:Sum("INC", nil, "ElementalDamageTaken") + end + resist = output["Enemy"..damageType.."Resist"] + end + effMult = (1 - resist / 100) * (1 + taken / 100) + output[damageType.."DotEffMult"] = effMult + if breakdown and effMult ~= 1 then + local out = { } + local resistForm = (damageType == "Physical") and "physical damage reduction" or "resistance" + if resist ~= 0 then + t_insert(out, "Enemy "..resistForm..": "..resist.."%") + end + if resist ~= 0 and taken ~= 0 then + t_insert(out, "Effective DPS modifier:") + t_insert(out, (1 - resist / 100).." ^8("..resistForm..")") + t_insert(out, "x "..(1 + taken / 100).." ^8(increased/reduced damage taken)") + t_insert(out, s_format("= %.3f", effMult)) + end + breakdown[damageType.."DotEffMult"] = out + end + end + local inc = modDB:Sum("INC", dotCfg, "Damage", damageType.."Damage", isElemental[damageType] and "ElementalDamage" or nil) + local more = round(modDB:Sum("MORE", dotCfg, "Damage", damageType.."Damage", isElemental[damageType] and "ElementalDamage" or nil), 2) + output[damageType.."Dot"] = baseVal * (1 + inc/100) * more * effMult + if breakdown then + breakdown[damageType.."Dot"] = { + s_format("%.1f ^8(base damage per second)", baseVal) + } + if inc ~= 0 then + t_insert(breakdown[damageType.."Dot"], s_format("x %.2f ^8(increased/reduced)", 1 + inc/100)) + end + if more ~= 1 then + t_insert(breakdown[damageType.."Dot"], s_format("x %.2f ^8(more/less)", more)) + end + if effMult ~= 1 then + t_insert(breakdown[damageType.."Dot"], s_format("x %.3f ^8(effective DPS modifier)", effMult)) + end + t_insert(breakdown[damageType.."Dot"], s_format("= %.1f ^8per second", output[damageType.."Dot"])) + end + end + output.TotalDot = output.TotalDot + (output[damageType.."Dot"] or 0) end -- Calculate bleeding chance and damage - env.skillFlags.bleed = false - if startWatch(env, "bleed", "canDeal", "physical", "dps_crit") then - output.bleed_chance = m_min(100, sumMods(modDB, false, "bleedChance")) / 100 - if canDeal.physical and output.bleed_chance > 0 and output.total_physicalAvg > 0 then - env.skillFlags.dot = true - env.skillFlags.bleed = true - env.skillFlags.duration = true - buildSpaceTable(modDB, { - dot = true, - debuff = true, - bleed = true, - projectile = env.skillSpaceFlags.projectile, - aoe = env.skillSpaceFlags.aoe, - totem = env.skillSpaceFlags.totem, - trap = env.skillSpaceFlags.trap, - mine = env.skillSpaceFlags.mine, - }) - local baseVal = output.total_physicalAvg * output.total_critEffect * 0.1 - local effMult = 1 - if env.mode_effective then - local taken = getMiscVal(modDB, "effective", "physicalTakenInc", 0) + getMiscVal(modDB, "effective", "damageTakenInc", 0) + getMiscVal(modDB, "effective", "dotTakenInc", 0) - getMiscVal(modDB, "effective", "physicalRed", 0) - effMult = 1 + taken / 100 - end - output.bleed_dps = baseVal * (1 + sumMods(modDB, false, "damageInc", "physicalInc") / 100) * sumMods(modDB, true, "damageMore", "physicalMore") * effMult - output.bleed_duration = 5 * (1 + sumMods(modDB, false, "durationInc") / 100) * sumMods(modDB, true, "durationMore") - buildSpaceTable(modDB, env.skillSpaceFlags) - end - endWatch(env, "bleed") - end - - -- Calculate poison chance and damage - env.skillFlags.poison = false - if startWatch(env, "poison", "canDeal", "physical", "chaos", "dps_crit", "enemyResist") then - output.poison_chance = m_min(100, sumMods(modDB, false, "poisonChance")) / 100 - if canDeal.chaos and output.poison_chance > 0 and (output.total_physicalAvg > 0 or output.total_chaosAvg > 0) then - env.skillFlags.dot = true - env.skillFlags.poison = true - env.skillFlags.duration = true - buildSpaceTable(modDB, { - dot = true, - debuff = true, - spell = getMiscVal(modDB, "skill", "dotIsSpell", false), - poison = true, - projectile = env.skillSpaceFlags.projectile, - aoe = env.skillSpaceFlags.aoe, - totem = env.skillSpaceFlags.totem, - trap = env.skillSpaceFlags.trap, - mine = env.skillSpaceFlags.mine, - }) - local baseVal = (output.total_physicalAvg + output.total_chaosAvg) * output.total_critEffect * 0.08 - local effMult = 1 - if env.mode_effective then - local taken = getMiscVal(modDB, "effective", "chaosTakenInc", 0) + getMiscVal(modDB, "effective", "damageTakenInc", 0) + getMiscVal(modDB, "effective", "dotTakenInc", 0) - effMult = (1 - output["enemy_chaosResist"] / 100) * (1 + taken / 100) - end - output.poison_dps = baseVal * (1 + sumMods(modDB, false, "damageInc", "chaosInc") / 100) * sumMods(modDB, true, "damageMore", "chaosMore") * effMult - output.poison_duration = 2 * (1 + sumMods(modDB, false, "durationInc") / 100) * sumMods(modDB, true, "durationMore") - output.poison_damage = output.poison_dps * output.poison_duration - buildSpaceTable(modDB, env.skillSpaceFlags) - end - endWatch(env, "poison") - end - - -- Calculate ignite chance and damage - env.skillFlags.ignite = false - if startWatch(env, "ignite", "canDeal", "fire", "cold", "dps_crit", "enemyResist") then - if getMiscVal(modDB, nil, "cannotIgnite", false) then - output.ignite_chance = 0 - else - output.ignite_chance = m_min(100, sumMods(modDB, false, "igniteChance")) / 100 - local sourceDmg = 0 - if canDeal.fire and not getMiscVal(modDB, nil, "fireCannotIgnite", false) then - sourceDmg = sourceDmg + output.total_fireAvg - end - if canDeal.cold and getMiscVal(modDB, nil, "coldCanIgnite", false) then - sourceDmg = sourceDmg + output.total_coldAvg - end - if canDeal.fire and output.ignite_chance > 0 and sourceDmg > 0 then - env.skillFlags.dot = true - env.skillFlags.ignite = true - buildSpaceTable(modDB, { - dot = true, - debuff = true, - spell = getMiscVal(modDB, "skill", "dotIsSpell", false), - ignite = true, - projectile = env.skillSpaceFlags.projectile, - aoe = env.skillSpaceFlags.aoe, - totem = env.skillSpaceFlags.totem, - trap = env.skillSpaceFlags.trap, - mine = env.skillSpaceFlags.mine, - }) - local baseVal = sourceDmg * output.total_critEffect * 0.2 - local effMult = 1 - if env.mode_effective then - local taken = getMiscVal(modDB, "effective", "fireTakenInc", 0) + getMiscVal(modDB, "effective", "elementalTakenInc", 0) + getMiscVal(modDB, "effective", "damageTakenInc", 0) + getMiscVal(modDB, "effective", "dotTakenInc", 0) - effMult = (1 - output["enemy_fireResist"] / 100) * (1 + taken / 100) + skillFlags.bleed = false + output.BleedChance = m_min(100, modDB:Sum("BASE", skillCfg, "BleedChance")) + if canDeal.Physical and not modDB:Sum("FLAG", skillCfg, "CannotBleed") and output.BleedChance > 0 and output.PhysicalAverage > 0 then + skillFlags.bleed = true + skillFlags.duration = true + local dotCfg = { + flags = bor(band(skillCfg.flags, ModFlag.SourceMask), ModFlag.Dot, skillData.dotIsSpell and ModFlag.Spell or 0), + keywordFlags = bor(skillCfg.keywordFlags, KeywordFlag.Bleed) + } + env.mainSkill.bleedCfg = dotCfg + local baseVal = output.PhysicalAverage * output.CritEffect * 0.1 + local effMult = 1 + if env.mode_effective then + local resist = enemyDB:Sum("INC", nil, "PhysicalDamageReduction") + local taken = enemyDB:Sum("INC", dotCfg, "DamageTaken", "PhysicalDamageTaken", "DotTaken") + effMult = (1 - resist / 100) * (1 + taken / 100) + output["BleedEffMult"] = effMult + if breakdown and effMult ~= 1 then + local out = { } + if resist ~= 0 then + t_insert(out, "Enemy physical damage reduction: "..resist.."%") + end + if resist ~= 0 and taken ~= 0 then + t_insert(out, "Effective DPS modifier:") + t_insert(out, (1 - resist / 100).." ^8(physical damage reduction)") + t_insert(out, "x "..(1 + taken / 100).." ^8(increased/reduced damage taken)") + t_insert(out, s_format("= %.3f", effMult)) + end + breakdown.BleedEffMult = out + end + end + local inc = modDB:Sum("INC", dotCfg, "Damage", "PhysicalDamage") + local more = round(modDB:Sum("MORE", dotCfg, "Damage", "PhysicalDamage"), 2) + output.BleedDPS = baseVal * (1 + inc/100) * more * effMult + output.BleedDuration = 5 * calcMod(modDB, dotCfg, "Duration") * debuffDurationMult + if breakdown then + breakdown.BleedDPS = { + "Base damage:", + s_format("%.1f ^8(average physical non-crit damage)", output.PhysicalAverage) + } + if output.CritEffect ~= 1 then + t_insert(breakdown.BleedDPS, s_format("x %.3f ^8(crit effect modifier)", output.CritEffect)) + end + t_insert(breakdown.BleedDPS, "x 0.2 ^8(bleed deals 20% per second)") + t_insert(breakdown.BleedDPS, s_format("= %.1f", baseVal, 1)) + t_insert(breakdown.BleedDPS, "Bleed DPS:") + t_insert(breakdown.BleedDPS, s_format("%.1f ^8(base damage)", baseVal)) + if inc ~= 0 then + t_insert(breakdown.BleedDPS, s_format("x %.2f ^8(increased/reduced)", 1 + inc/100)) + end + if more ~= 0 then + t_insert(breakdown.BleedDPS, s_format("x %.2f ^8(more/less)", more)) + end + if effMult ~= 1 then + t_insert(breakdown.BleedDPS, "x "..effMult.." ^8(effective DPS modifier)") + end + t_insert(breakdown.BleedDPS, s_format("= %.1f ^8per second", output.BleedDPS)) + if output.BleedDuration ~= 5 then + breakdown.BleedDuration = { + "5.00s ^8(base duration)" + } + if output.DurationMod ~= 1 then + t_insert(breakdown.BleedDuration, s_format("x %.2f ^8(duration modifier)", output.DurationMod)) + end + if debuffDurationMult ~= 1 then + t_insert(breakdown.BleedDuration, s_format("/ %.2f ^8(debuff expires slower/faster)", 1 / debuffDurationMult)) + end + t_insert(breakdown.BleedDuration, s_format("= %.2fs", output.BleedDuration)) + end + end + end + + -- Calculate poison chance and damage + skillFlags.poison = false + output.PoisonChance = m_min(100, modDB:Sum("BASE", skillCfg, "PoisonChance")) + if canDeal.Chaos and output.PoisonChance > 0 and (output.PhysicalAverage > 0 or output.ChaosAverage > 0) then + skillFlags.poison = true + skillFlags.duration = true + local dotCfg = { + flags = bor(band(skillCfg.flags, ModFlag.SourceMask), ModFlag.Dot, skillData.dotIsSpell and ModFlag.Spell or 0), + keywordFlags = bor(skillCfg.keywordFlags, KeywordFlag.Poison) + } + env.mainSkill.poisonCfg = dotCfg + local baseVal = (output.PhysicalAverage + output.ChaosAverage) * output.CritEffect * 0.08 + local effMult = 1 + if env.mode_effective then + local resist = output["EnemyChaosResist"] + local taken = enemyDB:Sum("INC", nil, "DamageTaken", "ChaosDamageTaken", "DotTaken") + effMult = (1 - resist / 100) * (1 + taken / 100) + output["PoisonEffMult"] = effMult + if breakdown then + breakdown.PoisonEffMult = { } + if resist ~= 0 then + t_insert(breakdown.PoisonEffMult, "^7Enemy resistance: "..resist.."%") + end + if resist ~= 0 and taken ~= 0 then + t_insert(breakdown.PoisonEffMult, "Effective DPS modifier:") + t_insert(breakdown.PoisonEffMult, (1 - resist / 100).." ^8(resistance)") + t_insert(breakdown.PoisonEffMult, "x "..(1 + taken / 100).." ^8(increased/reduced damage taken)") + t_insert(breakdown.PoisonEffMult, s_format("= %.3f", effMult)) + end + end + end + local inc = modDB:Sum("INC", dotCfg, "Damage", "ChaosDamage") + local more = round(modDB:Sum("MORE", dotCfg, "Damage", "ChaosDamage"), 2) + output.PoisonDPS = baseVal * (1 + inc/100) * more * effMult + local durationBase + if skillData.poisonDurationIsSkillDuration then + durationBase = skillData.duration + else + durationBase = 2 + end + output.PoisonDuration = durationBase * calcMod(modDB, dotCfg, "Duration") * debuffDurationMult + output.PoisonDamage = output.PoisonDPS * output.PoisonDuration + if breakdown then + breakdown.PoisonDPS = { + "Base damage:", + s_format("%.1f ^8(average physical + chaos non-crit damage)", output.PhysicalAverage + output.ChaosAverage) + } + if output.CritEffect ~= 1 then + t_insert(breakdown.PoisonDPS, s_format("x %.3f ^8(crit effect modifier)", output.CritEffect)) + end + t_insert(breakdown.PoisonDPS, "x 0.08 ^8(poison deals 8% per second)") + t_insert(breakdown.PoisonDPS, s_format("= %.1f", baseVal, 1)) + t_insert(breakdown.PoisonDPS, "Poison DPS:") + t_insert(breakdown.PoisonDPS, s_format("%.1f ^8(base damage)", baseVal)) + if inc ~= 0 then + t_insert(breakdown.PoisonDPS, s_format("x %.2f ^8(increased/reduced)", 1 + inc/100)) + end + if more ~= 0 then + t_insert(breakdown.PoisonDPS, s_format("x %.2f ^8(more/less)", more)) + end + if effMult ~= 1 then + t_insert(breakdown.PoisonDPS, "x "..effMult.." ^8(effective DPS modifier)") + end + t_insert(breakdown.PoisonDPS, s_format("= %.1f ^8per second", output.PoisonDPS)) + if output.PoisonDuration ~= 2 then + breakdown.PoisonDuration = { + s_format("%.2fs ^8(base duration)", durationBase) + } + if output.DurationMod ~= 1 then + t_insert(breakdown.PoisonDuration, s_format("x %.2f ^8(duration modifier)", output.DurationMod)) + end + if debuffDurationMult ~= 1 then + t_insert(breakdown.PoisonDuration, s_format("/ %.2f ^8(debuff expires slower/faster)", 1 / debuffDurationMult)) + end + t_insert(breakdown.PoisonDuration, s_format("= %.2fs", output.PoisonDuration)) + end + breakdown.PoisonDamage = { + s_format("%.1f ^8(damage per second)", output.PoisonDPS), + s_format("x %.2f ^8(poison duration)", output.PoisonDuration), + s_format("= %.1f ^8damage per poison stack", output.PoisonDamage),s + } + end + end + + -- Calculate ignite chance and damage + skillFlags.ignite = false + if modDB:Sum("FLAG", skillCfg, "CannotIgnite") then + output.IgniteChance = 0 + else + output.IgniteChance = m_min(100, modDB:Sum("BASE", skillCfg, "EnemyIgniteChance") + enemyDB:Sum("BASE", nil, "SelfIgniteChance")) + local sourceDmg = 0 + if canDeal.Fire and not modDB:Sum("FLAG", skillCfg, "FireCannotIgnite") then + sourceDmg = sourceDmg + output.FireAverage + end + if canDeal.Cold and modDB:Sum("FLAG", skillCfg, "ColdCanIgnite") then + sourceDmg = sourceDmg + output.ColdAverage + end + if canDeal.Fire and output.IgniteChance > 0 and sourceDmg > 0 then + skillFlags.ignite = true + local dotCfg = { + flags = bor(band(skillCfg.flags, ModFlag.SourceMask), ModFlag.Dot, skillData.dotIsSpell and ModFlag.Spell or 0), + keywordFlags = skillCfg.keywordFlags, + } + env.mainSkill.igniteCfg = dotCfg + local baseVal = sourceDmg * output.CritEffect * 0.2 + local effMult = 1 + if env.mode_effective then + local resist = output["EnemyFireResist"] + local taken = enemyDB:Sum("INC", dotCfg, "DamageTaken", "FireDamageTaken", "ElementalDamageTaken", "DotTaken") + effMult = (1 - resist / 100) * (1 + taken / 100) + output["IgniteEffMult"] = effMult + if breakdown then + breakdown.IgniteEffMult = { } + if resist ~= 0 then + t_insert(breakdown.IgniteEffMult, "^7Enemy resistance: "..resist.."%") + end + if resist ~= 0 and taken ~= 0 then + t_insert(breakdown.IgniteEffMult, "Effective DPS modifier:") + t_insert(breakdown.IgniteEffMult, (1 - resist / 100).." ^8(resistance)") + t_insert(breakdown.IgniteEffMult, "x "..(1 + taken / 100).." ^8(increased/reduced damage taken)") + t_insert(breakdown.IgniteEffMult, s_format("= %.3f", effMult)) + end + end + end + local inc = modDB:Sum("INC", dotCfg, "Damage", "FireDamage", "ElementalDamage") + local more = round(modDB:Sum("MORE", dotCfg, "Damage", "FireDamage", "ElementalDamage"), 2) + output.IgniteDPS = baseVal * (1 + inc/100) * more * effMult + local incDur = modDB:Sum("INC", dotCfg, "EnemyIgniteDuration") + enemyDB:Sum("INC", nil, "SelfIgniteDuration") + output.IgniteDuration = 4 * (1 + incDur / 100) * debuffDurationMult + if breakdown then + breakdown.IgniteDPS = { + "Base damage:", + s_format("%.1f ^8(average non-crit damage from sources)", sourceDmg) + } + if output.CritEffect ~= 1 then + t_insert(breakdown.IgniteDPS, s_format("x %.3f ^8(crit effect modifier)", output.CritEffect)) + end + t_insert(breakdown.IgniteDPS, "x 0.2 ^8(ignite deals 20% per second)") + t_insert(breakdown.IgniteDPS, s_format("= %.1f", baseVal, 1)) + t_insert(breakdown.IgniteDPS, "Ignite DPS:") + t_insert(breakdown.IgniteDPS, s_format("%.1f ^8(base damage)", baseVal)) + if inc ~= 0 then + t_insert(breakdown.IgniteDPS, s_format("x %.2f ^8(increased/reduced)", 1 + inc/100)) + end + if more ~= 0 then + t_insert(breakdown.IgniteDPS, s_format("x %.2f ^8(more/less)", more)) + end + if effMult ~= 1 then + t_insert(breakdown.IgniteDPS, "x "..effMult.." ^8(effective DPS modifier)") + end + t_insert(breakdown.IgniteDPS, s_format("= %.1f ^8per second", output.IgniteDPS)) + if output.IgniteDuration ~= 4 then + breakdown.IgniteDuration = { + s_format("4.00s ^8(base duration)", durationBase) + } + if incDur ~= 0 then + t_insert(breakdown.IgniteDuration, s_format("x %.2f ^8(increased/reduced duration)", 1 + incDur/100)) + end + if debuffDurationMult ~= 1 then + t_insert(breakdown.IgniteDuration, s_format("/ %.2f ^8(debuff expires slower/faster)", 1 / debuffDurationMult)) + end + t_insert(breakdown.IgniteDuration, s_format("= %.2fs", output.IgniteDuration)) end - output.ignite_dps = baseVal * (1 + sumMods(modDB, false, "damageInc", "fireInc", "elementalInc") / 100) * sumMods(modDB, true, "damageMore", "fireMore", "elementalMore") * effMult - output.ignite_duration = 4 * (1 + getMiscVal(modDB, "ignite", "durationInc", 0) / 100) - buildSpaceTable(modDB, env.skillSpaceFlags) end end - endWatch(env, "ignite") end -- Calculate shock and freeze chance + duration modifier - if startWatch(env, "shock", "canDeal", "lightning", "fire", "chaos") then - if getMiscVal(modDB, nil, "cannotShock", false) then - output.shock_chance = 0 - else - output.shock_chance = m_min(100, sumMods(modDB, false, "shockChance")) / 100 - local sourceDmg = 0 - if canDeal.lightning and not getMiscVal(modDB, nil, "lightningCannotShock", false) then - sourceDmg = sourceDmg + output.total_lightningAvg - end - if canDeal.physical and getMiscVal(modDB, nil, "physicalCanShock", false) then - sourceDmg = sourceDmg + output.total_physicalAvg - end - if canDeal.fire and getMiscVal(modDB, nil, "fireCanShock", false) then - sourceDmg = sourceDmg + output.total_fireAvg - end - if canDeal.chaos and getMiscVal(modDB, nil, "chaosCanShock", false) then - sourceDmg = sourceDmg + output.total_chaosAvg - end - if output.shock_chance > 0 and sourceDmg > 0 then - env.skillFlags.shock = true - output.shock_durationMod = 1 + getMiscVal(modDB, "shock", "durationInc", 0) / 100 - end + skillFlags.shock = false + if modDB:Sum("FLAG", skillCfg, "CannotShock") then + output.ShockChance = 0 + else + output.ShockChance = m_min(100, modDB:Sum("BASE", skillCfg, "EnemyShockChance") + enemyDB:Sum("BASE", nil, "SelfShockChance")) + local sourceDmg = 0 + if canDeal.Lightning and not modDB:Sum("FLAG", skillCfg, "LightningCannotShock") then + sourceDmg = sourceDmg + output.LightningAverage end - endWatch(env, "shock") + if canDeal.Physical and modDB:Sum("FLAG", skillCfg, "PhysicalCanShock") then + sourceDmg = sourceDmg + output.PhysicalAverage + end + if canDeal.Fire and modDB:Sum("FLAG", skillCfg, "FireCanShock") then + sourceDmg = sourceDmg + output.FireAverage + end + if canDeal.Chaos and modDB:Sum("FLAG", skillCfg, "ChaosCanShock") then + sourceDmg = sourceDmg + output.ChaosAverage + end + if output.ShockChance > 0 and sourceDmg > 0 then + skillFlags.shock = true + output.ShockDurationMod = 1 + modDB:Sum("INC", dotCfg, "EnemyShockDuration") / 100 + enemyDB:Sum("INC", nil, "SelfShockDuration") / 100 + end end - if startWatch(env, "freeze", "canDeal", "cold", "lightning") then - if getMiscVal(modDB, nil, "cannotFreeze", false) then - output.freeze_chance = 0 + skillFlags.freeze = false + if modDB:Sum("FLAG", skillCfg, "CannotFreeze") then + output.FreezeChance = 0 + else + output.FreezeChance = m_min(100, modDB:Sum("BASE", skillCfg, "EnemyFreezeChance") + enemyDB:Sum("BASE", nil, "SelfFreezeChance")) + local sourceDmg = 0 + if canDeal.Cold and not modDB:Sum("FLAG", skillCfg, "ColdCannotFreeze") then + sourceDmg = sourceDmg + output.ColdAverage + end + if canDeal.Lightning and modDB:Sum("FLAG", skillCfg, "LightningCanFreeze") then + sourceDmg = sourceDmg + output.LightningAverage + end + if output.FreezeChance > 0 and sourceDmg > 0 then + skillFlags.freeze = true + output.FreezeDurationMod = 1 + modDB:Sum("INC", dotCfg, "EnemyFreezeDuration") / 100 + enemyDB:Sum("INC", nil, "SelfFreezeDuration") / 100 + end + end + + -- Calculate enemy stun modifiers + do + local enemyStunThresholdRed = -modDB:Sum("INC", skillCfg, "EnemyStunThreshold") + if enemyStunThresholdRed > 75 then + output.EnemyStunThresholdMod = 1 - (75 + (enemyStunThresholdRed - 75) * 25 / (enemyStunThresholdRed - 50)) / 100 else - output.freeze_chance = m_min(100, sumMods(modDB, false, "freezeChance")) / 100 - local sourceDmg = 0 - if canDeal.cold and not getMiscVal(modDB, nil, "coldCannotFreeze", false) then - sourceDmg = sourceDmg + output.total_coldAvg - end - if canDeal.lightning and getMiscVal(modDB, nil, "lightningCanFreeze", false) then - sourceDmg = sourceDmg + output.total_lightningAvg - end - if output.freeze_chance > 0 and sourceDmg > 0 then - env.skillFlags.freeze = true - output.freeze_durationMod = 1 + getMiscVal(modDB, "freeze", "durationInc", 0) / 100 + output.EnemyStunThresholdMod = 1 - enemyStunThresholdRed / 100 + end + local incDur = modDB:Sum("INC", skillCfg, "EnemyStunDuration") + local incRecov = enemyDB:Sum("INC", nil, "StunRecovery") + output.EnemyStunDuration = 0.35 * (1 + incDur / 100) / (1 + incRecov / 100) + if breakdown then + if output.EnemyStunDuration ~= 0.35 then + breakdown.EnemyStunDuration = { + "0.35s ^8(base duration)" + } + if incDur ~= 0 then + t_insert(breakdown.EnemyStunDuration, s_format("x %.2f ^8(increased/reduced stun duration)", 1 + incDur/100)) + end + if incRecov ~= 0 then + t_insert(breakdown.EnemyStunDuration, s_format("/ %.2f ^8(increased/reduced enemy stun recovery)", 1 + incRecov/100)) + end + t_insert(breakdown.EnemyStunDuration, s_format("= %.2fs", output.EnemyStunDuration)) end end - endWatch(env, "freeze") end -- Calculate combined DPS estimate, including DoTs - output.total_combinedDPS = output[(env.mode_average and "total_averageDamage") or "total_dps"] + output.total_damageDot - if env.skillFlags.poison then + output.CombinedDPS = output[(env.mode_average and "AverageDamage") or "TotalDPS"] + output.TotalDot + if skillFlags.poison then if env.mode_average then - output.total_combinedDPS = output.total_combinedDPS + output.poison_chance * output.poison_dps * output.poison_duration + output.CombinedDPS = output.CombinedDPS + output.PoisonChance / 100 * output.PoisonDamage else - output.total_combinedDPS = output.total_combinedDPS + output.poison_chance * output.poison_dps * output.poison_duration * output.total_speed + output.CombinedDPS = output.CombinedDPS + output.PoisonChance / 100 * output.PoisonDamage * output.Speed end end - if env.skillFlags.ignite then - output.total_combinedDPS = output.total_combinedDPS + output.ignite_dps + if skillFlags.ignite then + output.CombinedDPS = output.CombinedDPS + output.IgniteDPS end - if env.skillFlags.bleed then - output.total_combinedDPS = output.total_combinedDPS + output.bleed_dps - end -end - -local calcs = { } - --- Wipe mod database and repopulate with base mods -local function resetModDB(modDB, base) - for spaceName, spaceMods in pairs(modDB) do - local baseSpace = base[spaceName] - if baseSpace then - for k in pairs(spaceMods) do - spaceMods[k] = baseSpace[k] - end - else - wipeTable(spaceMods) - end + if skillFlags.bleed then + output.CombinedDPS = output.CombinedDPS + output.BleedDPS end end -- Print various tables to the console -local function infoDump(env, output) - ConPrintf("== Modifier Database ==") - modLib.dbPrint(env.modDB) - ConPrintf("== Main Skill ==") +local function infoDump(env, output) + env.modDB:Print() + ConPrintf("=== Enemy Mod DB ===") + env.enemyDB:Print() + ConPrintf("=== Main Skill ===") for _, gem in ipairs(env.mainSkill.gemList) do ConPrintf("%s %d/%d", gem.name, gem.level, gem.quality) end - ConPrintf("== Main Skill Mods ==") - modLib.listPrint(env.mainSkill.skillModList) - ConPrintf("== Main Skill Flags ==") - modLib.listPrint(env.skillFlags) - ConPrintf("== Namespaces ==") - modLib.listPrint(env.skillSpaceFlags) + ConPrintf("=== Main Skill Flags ===") + ConPrintf("Mod: %s", modLib.formatFlags(env.mainSkill.skillCfg.flags, ModFlag)) + ConPrintf("Keyword: %s", modLib.formatFlags(env.mainSkill.skillCfg.keywordFlags, KeywordFlag)) + ConPrintf("=== Main Skill Mods ===") + env.mainSkill.skillModList:Print() ConPrintf("== Aux Skills ==") for i, aux in ipairs(env.auxSkillList) do ConPrintf("Skill #%d:", i) @@ -1847,227 +2330,164 @@ local function infoDump(env, output) ConPrintf(" %s %d/%d", gem.name, gem.level, gem.quality) end end - --[[ConPrintf("== Buff Skill Mods ==") - modLib.listPrint(env.buffSkillModList) - ConPrintf("== Aura Skill Mods ==") - modLib.listPrint(env.auraSkillModList) - ConPrintf("== Curse Skill Mods ==") - modLib.listPrint(env.curseSkillModList)]] - if env.buffModList then - ConPrintf("== Other Buff Mods ==") - modLib.listPrint(env.buffModList) +-- ConPrintf("== Conversion Table ==") +-- ConPrintTable(env.conversionTable) + ConPrintf("== Output Table ==") + local outNames = { } + for name in pairs(env.output) do + t_insert(outNames, name) + end + table.sort(outNames) + for _, name in ipairs(outNames) do + ConPrintf("%s = %s", name, tostring(env.output[name])) end - ConPrintf("== Spec Mods ==") - modLib.listPrint(env.specModList) - ConPrintf("== Item Mods ==") - modLib.listPrint(env.itemModList) - ConPrintf("== Conditions ==") - modLib.listPrint(env.condList) - ConPrintf("== Conditional Modifiers ==") - modLib.listPrint(env.condModList) - ConPrintf("== Conversion Table ==") - modLib.dbPrint(output.conversionTable) end -- Generate a function for calculating the effect of some modification to the environment -local function getCalculator(build, input, fullInit, modFunc) +local function getCalculator(build, fullInit, modFunc) -- Initialise environment - local env = initEnv(build, input, "CALCULATOR") + local env = initEnv(build, "CALCULATOR") -- Save a copy of the initial mod database if fullInit then mergeMainMods(env) end - local initModDB = copyTable(env.modDB) + local initModDB = common.New("ModDB") + for modName, modList in pairs(env.modDB.mods) do + initModDB:AddList(modList) + end + initModDB.multipliers = copyTable(env.modDB.multipliers) + initModDB.conditions = copyTable(env.modDB.conditions) + local initEnemyDB = common.New("ModDB") + for modName, modList in pairs(env.enemyDB.mods) do + initEnemyDB:AddList(modList) + end if not fullInit then mergeMainMods(env) end - -- Finialise modifier database and make a copy for later comparison - local baseOutput = { } - local outputMeta = { __index = baseOutput } - finaliseMods(env, baseOutput) - local baseModDB = copyTable(env.modDB) + -- Run base calculation pass + performCalcs(env) + local baseOutput = env.output - -- Run base calculation pass while building watch lists - env.watchers = { } - env.buildWatch = true - env.modDB._activeWatchers = { } - performCalcs(env, baseOutput) - env.buildWatch = false - env.modDB._activeWatchers = nil - - -- Generate list of watched mods - local watchedModList = { } - for _, watchList in pairs(env.watchers) do - for k, default in pairs(watchList) do - -- Add this watcher to the mod's watcher list - local spaceName, modName = modLib.getSpaceName(k) - if not watchedModList[spaceName] then - watchedModList[spaceName] = { } - end - if not baseModDB[spaceName] then - baseModDB[spaceName] = { } - end - if not initModDB[spaceName] then - initModDB[spaceName] = { } - end - if not watchedModList[spaceName][modName] then - watchedModList[spaceName][modName] = { baseModDB[spaceName][modName], { } } - end - watchedModList[spaceName][modName][2][watchList] = true - if initModDB[spaceName][modName] == nil and baseModDB[spaceName][modName] ~= nil then - -- Ensure that the initial mod list has at least a default value for any modifiers present in the base database - initModDB[spaceName][modName] = default - end - end - end - - local flagged = { } return function(...) -- Restore initial mod database - resetModDB(env.modDB, initModDB) - + env.modDB.mods = wipeTable(env.modDB.mods) + for modName, modList in pairs(initModDB.mods) do + env.modDB:AddList(modList) + end + env.modDB.conditions = copyTable(initModDB.conditions) + env.modDB.multipliers = copyTable(initModDB.multipliers) + env.enemyDB.mods = wipeTable(env.enemyDB.mods) + for modName, modList in pairs(initEnemyDB.mods) do + env.enemyDB:AddList(modList) + end + -- Call function to make modifications to the enviroment modFunc(env, ...) - -- Prepare for calculation - local output = setmetatable({ }, outputMeta) - finaliseMods(env, output) + -- Run calculation pass + performCalcs(env) - --[[local debugThis = type(...) == "table" and #(...) == 1 and (...)[1].id == 17735 - if debugThis then - ConPrintf("+++++++++++++++++++++++++++++++++++++++") - end]] - - -- Check if any watched mods have changed - local active = false - for spaceName, watchedMods in pairs(watchedModList) do - for k, v in pairs(env.modDB[spaceName]) do - local watchedMod = watchedMods[k] - if watchedMod and v ~= watchedMod[1] then - -- Modifier value has changed, flag all watchers for this mod - for watchList in pairs(watchedMod[2]) do - watchList._flag = true - flagged[watchList] = true - end - --[[if debugThis then - ConPrintf("%s:%s %s %s", spaceName, k, watchedMod[1], v) - end]] - active = true - end - end - end - if not active then - return baseOutput - end - - -- Run the calculations - performCalcs(env, output) - - --[[if debugThis then - infoDump(env, output) - end]] - - -- Reset watcher flags - for watchList in pairs(flagged) do - watchList._flag = false - flagged[watchList] = nil - end - - return output + return env.output end, baseOutput end +local calcs = { } + -- Get calculator for tree node modifiers -function calcs.getNodeCalculator(build, input) - return getCalculator(build, input, true, function(env, nodeList, remove) +function calcs.getNodeCalculator(build) + return getCalculator(build, true, function(env, nodeList, remove) -- Build and merge/unmerge modifiers for these nodes local nodeModList = buildNodeModList(env, nodeList) if remove then - mod_dbUnmergeList(env.modDB, nodeModList) + for _, mod in ipairs(nodeModList) do + if mod.type == "LIST" or mod.type == "FLAG" then + for i, dbMod in ipairs(env.modDB.mods[mod.name] or { }) do + if mod == dbMod then + t_remove(env.modDB.mods[mod.name], i) + break + end + end + else + env.modDB:NewMod(mod.name, mod.type, -mod.value, mod.source, mod.flags, mod.keywordFlags, unpack(mod.tagList)) + end + end else - mod_dbMergeList(env.modDB, nodeModList) + env.modDB:AddList(nodeModList) end end) end -- Get calculator for item modifiers -function calcs.getItemCalculator(build, input) - return getCalculator(build, input, false, function(env, repSlotName, repItem) +function calcs.getItemCalculator(build) + return getCalculator(build, false, function(env, repSlotName, repItem) -- Merge main mods, replacing the item in the given slot with the given item mergeMainMods(env, repSlotName, repItem) end) end -- Build output for display in the grid or side bar -function calcs.buildOutput(build, input, output, mode) +function calcs.buildOutput(build, mode) -- Build output - local env = initEnv(build, input, mode) + local env = initEnv(build, mode) mergeMainMods(env) - finaliseMods(env, output) - performCalcs(env, output) + performCalcs(env) - output.total_extraPoints = getMiscVal(env.modDB, nil, "extraPoints", 0) - - -- Add extra display-only stats - for k, v in pairs(env.specModList) do - output["spec_"..k] = v - end - for k, v in pairs(env.itemModList) do - output["gear_"..k] = v - end + local output = env.output if mode == "MAIN" then - - elseif mode == "GRID" then - for i, aux in pairs(env.auxSkillList) do - output["buff_label"..i] = aux.activeGem.name - end - for _, damageType in pairs(dmgTypeList) do - -- Add damage ranges - if output["total_"..damageType.."Max"] > 0 then - output["total_"..damageType] = formatRound(output["total_"..damageType.."Min"]) .. " - " .. formatRound(output["total_"..damageType.."Max"]) - else - output["total_"..damageType] = 0 - end - if damageType ~= "physical" then - if damageType ~= "chaos" then - for _, domain in pairs({"spec_","gear_"}) do - local dmgResist = output[domain..damageType.."Resist"] - local elemResist = output[domain.."elementalResist"] - if dmgResist or elemResist then - output[domain..damageType.."Resist"] = (dmgResist or 0) + (elemResist or 0) - end - end - end - local actual = output["total_"..damageType.."Resist"] - local over = output["total_"..damageType.."ResistOverCap"] - if over > 0 then - output["total_"..damageType.."ResistStr"] = actual .. "+" .. over - else - output["total_"..damageType.."ResistStr"] = actual - end - end - end - output.total_damage = formatRound(output.total_combMin) .. " - " .. formatRound(output.total_combMax) + output.ExtraPoints = env.modDB:Sum("BASE", nil, "ExtraPoints") - -- Calculate XP modifier + local specCfg = { + source = "Node" + } + for _, stat in pairs({"Life", "Mana", "Armour", "Evasion", "EnergyShield"}) do + output["Spec:"..stat.."Inc"] = env.modDB:Sum("INC", specCfg, stat) + end + elseif mode == "GRID" then + -- Calculate XP modifier + --[[ FIXME if input.monster_level and input.monster_level > 0 then local playerLevel = build.characterLevel local diff = m_abs(playerLevel - input.monster_level) - 3 - m_floor(playerLevel / 16) if diff <= 0 then - output.monster_xp = 1 + output.MonsterXP = 1 else - output.monster_xp = m_max(0.01, ((playerLevel + 5) / (playerLevel + 5 + diff ^ 2.5)) ^ 1.5) + output.MonsterXP = m_max(0.01, ((playerLevel + 5) / (playerLevel + 5 + diff ^ 2.5)) ^ 1.5) + end + end]] + local buffList = { } + local combatList = { } + local curseList = { } + if output.PowerCharges > 0 then + t_insert(combatList, s_format("%d Power Charges", output.PowerCharges)) + end + if output.FrenzyCharges > 0 then + t_insert(combatList, s_format("%d Frenzy Charges", output.FrenzyCharges)) + end + if output.EnduranceCharges > 0 then + t_insert(combatList, s_format("%d Endurance Charges", output.EnduranceCharges)) + end + if env.modDB.conditions.Onslaught then + t_insert(combatList, "Onslaught") + end + for _, activeSkill in ipairs(env.activeSkillList) do + if activeSkill.buffModList or activeSkill.auraModList then + t_insert(buffList, activeSkill.activeGem.name) + end + if activeSkill.curseModList then + t_insert(curseList, activeSkill.activeGem.name) end end + output.BuffList = table.concat(buffList, ", ") + output.CombatList = table.concat(combatList, ", ") + output.CurseList = table.concat(curseList, ", ") - -- Configure view mode - setViewMode(env, build.skillsTab.socketGroupList, env.mainSkillGroupActiveSkillList or { }) - - --infoDump(env, output) + infoDump(env) end + + return env end return calcs diff --git a/Modules/CalcsView.lua b/Modules/CalcsView.lua deleted file mode 100644 index 57d3d17e..00000000 --- a/Modules/CalcsView.lua +++ /dev/null @@ -1,517 +0,0 @@ --- Path of Building --- --- Module: Calcs View --- Configures the display grid in the calculations breakdown tab --- -local grid = ... - -local function fieldNames(pre, suf, spec) - return { - spec:match("p") and (pre.."_physical"..suf) or false, - spec:match("l") and (pre.."_lightning"..suf) or false, - spec:match("c") and (pre.."_cold"..suf) or false, - 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.."_elemental"..suf) or false - } -end - -local columnWidths = { - 160, 60, - 160, 60, - 160, 60, - 160, 95, 95, 95, 95, 95, 95, 70 -} - -local columns = { } - -local skillGroupList = { } -local skillList = { } -local skillPartList = { } -local auxSkillList = { } - -columns[1] = { - { - { "Attributes:" }, - { "output", "Gear Strength:", "gear_strBase" }, - { "output", "Gear Dexterity:", "gear_dexBase" }, - { "output", "Gear Intelligence:", "gear_intBase" }, - { "output", data.colorCodes.STRENGTH.."Strength^7:", "total_str" }, - { "output", data.colorCodes.DEXTERITY.."Dexterity^7:", "total_dex" }, - { "output", data.colorCodes.INTELLIGENCE.."Intelligence^7:", "total_int" }, - { }, - { "Life:" }, - { "output", "Base from Tree:", "spec_lifeBase" }, - { "output", "Inc. from Tree %:", "spec_lifeInc" }, - { "output", "Base from Gear:", "gear_lifeBase" }, - { "output", "Inc. from Gear %:", "gear_lifeInc" }, - { "output", "Total:", "total_life", formatRound }, - { "output", "Reserved:", "total_lifeReserved", formatRound }, - { "output", "Unreserved:", "total_lifeUnreserved", formatRound }, - { "output", "Unreserved %:", "total_lifeUnreservedPercent", formatPercent }, - { "output", "Regen from Tree %:", "spec_lifeRegenPercent" }, - { "output", "Base Regen from Gear:", "gear_lifeRegenBase" }, - { "output", "Regen from Gear %:", "gear_lifeRegenPercent" }, - { "output", "Total Regen:", "total_lifeRegen", getFormatRound(1) }, - { }, - { "Mana:" }, - { "output", "Base from Tree:", "spec_manaBase" }, - { "output", "Inc. from Tree %:", "spec_manaInc" }, - { "output", "Base from Gear:", "gear_manaBase" }, - { "output", "Inc. from Gear:", "gear_manaInc" }, - { "output", "Total:", "total_mana", formatRound }, - { "output", "Reserved:", "total_manaReserved", formatRound }, - { "output", "Unreserved:", "total_manaUnreserved", formatRound }, - { "output", "Unreserved %:", "total_manaUnreservedPercent", formatPercent }, - { "output", "Inc. Regen from Tree %:", "spec_manaRegenInc" }, - { "output", "Base Regen from Gear:", "gear_manaRegenBase" }, - { "output", "Inc. Regen from Gear %:", "gear_manaRegenInc" }, - { "output", "Total Regen:", "total_manaRegen", getFormatRound(1) }, - { }, - { "Block and Stun:" }, - { "output", "Attack Block Chance:", "total_blockChance", formatPercent }, - { "output", "Spell Block Chance:", "total_spellBlockChance", formatPercent }, - { "output", "Chance to Avoid Stun:", "stun_avoidChance", formatPercent }, - { "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 }, - { }, - { "Supporting Skills:" }, - }, - auxSkillList -} - -columns[3] = { - { - { "Monsters:" }, - { "input", "Monster level:", "monster_level" }, - { "output", "Experience:", "monster_xp", formatPercent }, - { }, - { "Energy Shield:" }, - { "output", "Base from Tree:", "spec_energyShieldBase" }, - { "output", "Inc. from Tree %:", "spec_energyShieldInc" }, - { "output", "Base from Gear:", "total_gear_energyShieldBase" }, - { "output", "Inc. from Gear %:", "gear_energyShieldInc" }, - { "output", "Total:", "total_energyShield", formatRound }, - { "output", "Recharge rate:", "total_energyShieldRecharge", getFormatRound(1) }, - { "output", "Recharge delay:", "total_energyShieldRechargeDelay", getFormatSec(2) }, - { "output", "Regen:", "total_energyShieldRegen", getFormatRound(1) }, - { }, - { "Evasion:" }, - { "output", "Base from Tree:", "spec_evasionBase" }, - { "output", "Inc. from Tree %:", "spec_evasionInc" }, - { "output", "Base from Gear:", "total_gear_evasionBase" }, - { "output", "Inc. from Gear %:", "gear_evasionInc" }, - { "output", "Total:", "total_evasion", formatRound }, - { "input", "Use Monster Level?", "misc_evadeMonsterLevel", "check" }, - { "output", "Evade Chance:", "total_evadeChance", formatPercent }, - { }, - { "Armour:" }, - { "output", "Base from Tree:", "spec_armourBase" }, - { "output", "Inc. from Tree %:", "spec_armourInc" }, - { "output", "Base from Gear:", "total_gear_armourBase" }, - { "output", "Inc. from Gear %:", "gear_armourInc" }, - { "output", "Total:", "total_armour", formatRound }, - { }, - { "Resistances:" }, - { "output", "Fire from Tree:", "spec_fireResist" }, - { "output", "Cold from Tree:", "spec_coldResist" }, - { "output", "Lightning from Tree:", "spec_lightningResist" }, - { "output", "Chaos from Tree:", "spec_chaosResist" }, - { "output", "Fire from Gear:", "gear_fireResist" }, - { "output", "Cold from Gear:", "gear_coldResist" }, - { "output", "Lightning from Gear:", "gear_lightningResist" }, - { "output", "Chaos from Gear:", "gear_chaosResist" }, - { "output", "Fire Resistance:", "total_fireResistStr", "string" }, - { "output", "Cold Resistance:", "total_coldResistStr", "string" }, - { "output", "Lightning Resistance:", "total_lightningResistStr", "string" }, - { "output", "Chaos Resistance:", "total_chaosResistStr", "string" }, - } -} - -columns[5] = { - { - { "Conditions:" }, - { "input", "Always on Low Life?", "Cond_LowLife", "check" }, - { "input", "Always on Full Life?", "Cond_FullLife", "check" }, - { }, - { "Buffs:" }, - { "input", "Power Charges?", "buff_power", "check" }, - }, { - flag = "havePower", - { "output", "Max Power:", "powerMax" }, - }, { - { "input", "Frenzy Charges?", "buff_frenzy", "check" }, - }, { - flag = "haveFrenzy", - { "output", "Max Frenzy:", "frenzyMax" }, - }, { - { "input", "Endurance Charges?", "buff_endurance", "check" }, - }, { - flag = "haveEndurance", - { "output", "Max Endurance:", "enduranceMax" }, - }, { - { "input", "Onslaught?", "CondBuff_Onslaught", "check" }, - { "input", "Phasing?", "CondBuff_Phasing", "check" }, - { "input", "Fortify?", "CondBuff_Fortify", "check" }, - { "input", "Using a Flask?", "CondBuff_UsingFlask", "check" }, - { "input", "Pendulum of Dest.?", "buff_pendulum", "check" }, - }, { - { }, - { "For Effective DPS:" }, - { "input", "Enemy is Cursed?", "CondEff_EnemyCursed", "check" }, - { "input", "Enemy is Bleeding?", "CondEff_EnemyBleeding", "check" }, - { "input", "Enemy is Poisoned?", "CondEff_EnemyPoisoned", "check" }, - { "input", "Enemy is Burning?", "CondEff_EnemyBurning", "check" }, - { "input", "Enemy is Ignited?", "CondEff_EnemyIgnited", "check" }, - { "input", "Enemy is Chilled?", "CondEff_EnemyChilled", "check" }, - { "input", "Enemy is Frozen?", "CondEff_EnemyFrozen", "check" }, - { "input", "Enemy is Shocked?", "CondEff_EnemyShocked", "check" }, - { "input", "Enemy Phys. Red. %:", "effective_physicalRed" }, - { "input", "Enemy Fire Resist:", "effective_fireResist" }, - { "input", "Enemy Cold Resist:", "effective_coldResist" }, - { "input", "Enemy Lightning Resist:", "effective_lightningResist" }, - { "input", "Enemy Chaos Resist:", "effective_chaosResist" }, - { "input", "Enemy is a Boss?", "effective_enemyIsBoss", "check" }, - { }, - { "Crit Chance:" }, - }, { - flag = "attack", - { "output", "Weapon Crit %:", "gear_weapon1_critChanceBase" }, - }, { - { "output", "Tree Global Crit %:", "spec_critChanceInc" }, - { "output", "Gear Global Crit %:", "gear_global_critChanceInc" }, - }, { - flag = "spell", - { "output", "Tree Spell Crit %:", "spec_spell_critChanceInc" }, - { "output", "Gear Spell Crit %:", "gear_spell_critChanceInc" }, - }, { - flag = "melee", - { "output", "Tree Melee Crit %:", "spec_melee_critChanceInc" }, - }, { - flag = "totem", - { "output", "Tree Totem Crit %:", "spec_totem_critChanceInc" }, - }, { - flag = "trap", - { "output", "Tree Trap Crit %:", "spec_trap_critChanceInc" }, - }, { - flag = "mine", - { "output", "Tree Mine Crit %:", "spec_mine_critChanceInc" }, - }, { - { "output", "Crit Chance:", "total_critChance", getFormatPercent(2) }, - { "output", "Tree Global Multi %:", "spec_critMultiplier" }, - { "output", "Gear Global Multi %:", "gear_critMultiplier" }, - }, { - flag = "spell", - { "output", "Tree Spell Multi %:", "spec_spell_critMultiplier" }, - }, { - flag = "melee", - { "output", "Tree Melee Multi %:", "spec_melee_critMultiplier" }, - }, { - flag = "totem", - { "output", "Tree Totem Multi %:", "spec_totem_critMultiplier" }, - }, { - flag = "trap", - { "output", "Tree Trap Multi %:", "spec_trap_critMultiplier" }, - }, { - flag = "mine", - { "output", "Tree Mine Multi %:", "spec_mine_critMultiplier" }, - }, { - { "output", "Multiplier:", "total_critMultiplier", formatPercent }, - }, { - flag = "attack", - { }, - { "Accuracy:" }, - { "output", "Tree Accuracy+:", "spec_accuracyBase" }, - { "output", "Tree Accuracy %:", "spec_accuracyInc" }, - { "output", "Gear Accuracy+:", "gear_accuracyBase" }, - { "output", "Gear Accuracy %:", "gear_accuracyInc" }, - { "output", "Total Accuracy:", "total_accuracy", formatRound }, - { "input", "Use Monster Level?", "misc_hitMonsterLevel", "check" }, - { "output", "Chance to Hit:", "total_hitChance", formatPercent }, - } -} - -columns[7] = { - { - { "View Skill Details:" }, - { "input", "Socket Group:", "skill_number", "choice", 4, skillGroupList }, - { "input", "Active Skill:", "skill_activeNumber", "choice", 4, skillList }, - }, { - flag = "multiPart", - { "input", "Skill Part:", "skill_part", "choice", 2, skillPartList }, - }, { - { }, - { "input", "Mode:", "misc_buffMode", "choice", 2, { {label="Unbuffed",val="UNBUFFED"}, {label="With buffs",val="BUFFED"}, {label="Effective DPS with buffs",val="EFFECTIVE"} } }, - { }, - }, { - flag = "attack", - { { "Attack:", "Physical", "Lightning", "Cold", "Fire", "Chaos", "Combined", "Elemental" } }, - }, { - flag = "weapon1Attack", - { "output", "Main Hand:", "gear_weapon1_name", "string", 3 }, - { "output", "Weapon Min:", fieldNames("gear_weapon1", "Min", "plcfh") }, - { "output", "Weapon Max:", fieldNames("gear_weapon1", "Max", "plcfh") }, - { "output", "Weapon APS:", "gear_weapon1_attackRate" }, - { "output", "Weapon DPS:", fieldNames("gear_weapon1", "DPS", "plcfhae"), getFormatRound(2) }, - }, { - flag = "weapon2Attack", - { "output", "Off Hand:", "gear_weapon2_name", "string", 3 }, - { "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("gear_weapon2", "DPS", "plcfhae"), getFormatRound(2) }, - }, { - flag = "attack", - { "output", "Tree Attack Dmg %:", fieldNames("spec_attack", "Inc", "pa") }, - { "output", "Tree Weapon Dmg %:", fieldNames("spec_weapon", "Inc", "plcfae") }, - { "output", "Gear Weapon Dmg %:", fieldNames("gear_weapon", "Inc", "plcfae") }, - }, { - flag = "spell", - { { "Spell:", "Physical", "Lightning", "Cold", "Fire", "Chaos", "Combined", "Elemental" } }, - { "output", "Tree Spell Dmg %:", fieldNames("spec_spell", "Inc", "a") }, - { "output", "Gear Spell Dmg %:", fieldNames("gear_spell", "Inc", "a") }, - }, { - flag = "projectile", - { "output", "Tree Projectile Dmg %:", fieldNames("spec_projectile", "Inc", "a") }, - { "output", "Gear Projectile Dmg %:", fieldNames("gear_projectile", "Inc", "a") }, - }, { - flag = "aoe", - { "output", "Tree Area Dmg %:", fieldNames("spec_aoe", "Inc", "a") }, - { "output", "Gear Area Dmg %:", fieldNames("gear_aoe", "Inc", "a") }, - }, { - flag = "totem", - { "output", "Tree Totem Dmg %:", fieldNames("spec_totem", "Inc", "a") }, - { "output", "Gear Totem Dmg %:", fieldNames("gear_totem", "Inc", "a") }, - }, { - flag = "trap", - { "output", "Tree Trap Dmg %:", fieldNames("spec_trap", "Inc", "a") }, - { "output", "Gear Trap Dmg %:", fieldNames("gear_trap", "Inc", "a") }, - }, { - flag = "mine", - { "output", "Tree Mine Dmg %:", fieldNames("spec_mine", "Inc", "a") }, - { "output", "Gear Mine Dmg %:", fieldNames("gear_mine", "Inc", "a") }, - }, { - { "output", "Tree Global %:", fieldNames("spec", "Inc", "plcfhe") }, - { "output", "Gear Global %:", fieldNames("gear", "Inc", "plcfhae") }, - }, { - flag = "attack", - { "output", "Gear Attack Min+:", fieldNames("gear_attack", "Min", "plcfh") }, - { "output", "Gear Attack Max+:", fieldNames("gear_attack", "Max", "plcfh") }, - }, { - flag = "spell", - { "output", "Gear Spell Min+:", fieldNames("gear_spell", "Min", "plcfh") }, - { "output", "Gear Spell Max+:", fieldNames("gear_spell", "Max", "plcfh") }, - }, { - flag = "attack", - { "output", "Tree Attack Speed %:", "spec_attackSpeedInc" }, - { "output", "Gear Attack Speed %:", "gear_attackSpeedInc" }, - { "output", "Tree Attack&Cast Sp. %:", "spec_speedInc" }, - { "output", "Gear Attack&Cast Sp. %:", "gear_speedInc" }, - { "output", "Enemy Resists:", fieldNames("enemy", "Resist", "lcfh") }, - { "output", "Attack Damage:", fieldNames("total", "", "plcfha") }, - { "output", "Average Hit:", "total_averageHit", getFormatRound(1) }, - { "output", "Attack Speed:", "total_speed", getFormatRound(2) }, - { "output", "Attack Time:", "total_time", getFormatSec(2) }, - { "output", "Attack DPS:", "total_dps", getFormatRound(1) }, - }, { - flag = "spell", - { "output", "Tree Cast Speed %:", "spec_castSpeedInc" }, - { "output", "Gear Cast Speed %:", "gear_castSpeedInc" }, - { "output", "Tree Attack&Cast Sp. %:", "spec_speedInc" }, - { "output", "Gear Attack&Cast Sp. %:", "gear_speedInc" }, - { "output", "Enemy Resists:", fieldNames("enemy", "Resist", "lcfh") }, - { "output", "Spell Damage:", fieldNames("total", "", "plcfha") }, - { "output", "Average Hit:", "total_averageHit", getFormatRound(1) }, - { "output", "Cast Rate:", "total_speed", getFormatRound(2) }, - { "output", "Cast Time:", "total_time", getFormatSec(2) }, - { "output", "Spell DPS:", "total_dps", getFormatRound(1) }, - }, { - flag = "cast", - { "output", "Tree Cast Speed %:", "spec_castSpeedInc" }, - { "output", "Gear Cast Speed %:", "gear_castSpeedInc" }, - { "output", "Tree Attack&Cast Sp. %:", "spec_speedInc" }, - { "output", "Gear Attack&Cast Sp. %:", "gear_speedInc" }, - { "output", "Enemy Resists:", fieldNames("enemy", "Resist", "lcfh") }, - { "output", "Secondary Damage:", fieldNames("total", "", "plcfha") }, - { "output", "Average Hit:", "total_averageHit", getFormatRound(1) }, - { "output", "Cast Rate:", "total_speed", getFormatRound(2) }, - { "output", "Cast Time:", "total_time", getFormatSec(2) }, - }, { - { "output", "Mana Cost:", "total_manaCost", formatRound } - }, { - flag = "projectile", - { "output", "Projectile Count:", "total_projectileCount" }, - { "output", "Tree Pierce Chance %:", "spec_pierceChance" }, - { "output", "Gear Pierce Chance %:", "gear_pierceChance" }, - { "output", "Pierce Chance:", "total_pierce", formatPercent }, - { "output", "Projectile Speed Mod:", "total_projectileSpeedMod", formatPercent }, - }, { - flag = "aoe", - { "output", "AoE Radius Mod:", "total_aoeRadiusMod", formatPercent }, - }, { - flag = "duration", - { "output", "Tree Duration %:", "spec_durationInc" }, - { "output", "Skill Duration Mod:", "total_durationMod", formatPercent }, - { "output", "Skill Duration:", "total_duration", getFormatSec(2) }, - }, { - flag = "trap", - { "output", "Active Trap Limit:", "total_activeTrapLimit" }, - { "output", "Trap Cooldown:", "total_trapCooldown", getFormatSec(2) }, - }, { - flag = "mine", - { "output", "Active Mine Limit:", "total_activeMineLimit" }, - }, { - flag = "totem", - { "output", "Totem Life Mod:", "totem_lifeMod", formatPercent }, - }, { - flag = "dot", - { "output", "Tree DoT Dmg %:", fieldNames("spec_dot", "Inc", "pfa") }, - { "output", "Gear DoT Dmg %:", fieldNames("gear_dot", "Inc", "pfa") }, - { "output", "DoT:", fieldNames("total", "Dot", "plcfha"), getFormatRound(1) }, - }, { - flag = "bleed", - { "output", "Tree Bleed Chance %:", "spec_bleedChance" }, - { "output", "Gear Bleed Chance %:", "gear_bleedChance" }, - { "output", "Bleed Chance:", "bleed_chance", formatPercent }, - { "output", "Bleed DPS:", "bleed_dps", getFormatRound(1) }, - { "output", "Bleed Duration:", "bleed_duration", getFormatSec(2) }, - }, { - flag = "poison", - { "output", "Tree Poison Chance %:", "spec_poisonChance" }, - { "output", "Gear Poison Chance %:", "gear_poisonChance" }, - { "output", "Tree Poison Dmg %:", "spec_poison_damageInc" }, - { "output", "Poison Chance:", "poison_chance", formatPercent }, - { "output", "Poison DPS:", "poison_dps", getFormatRound(1) }, - { "output", "Poison Duration:", "poison_duration", getFormatSec(2) }, - { "output", "Damage per Poison:", "poison_damage", getFormatRound(1) }, - }, { - flag = "ignite", - { "output", "Tree 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", getFormatSec(2) }, - }, { - flag = "shock", - { "output", "Tree Shock Chance %:", "spec_shockChance" }, - { "output", "Gear Shock Chance %:", "gear_shockChance" }, - { "output", "Shock Chance:", "shock_chance", formatPercent }, - { "output", "Shock Duration Mod:", "shock_durationMod", formatPercent }, - }, { - flag = "freeze", - { "output", "Tree Freeze Chance %:", "spec_freezeChance" }, - { "output", "Gear Freeze Chance %:", "gear_freezeChance" }, - { "output", "Freeze Chance:", "freeze_chance", formatPercent }, - { "output", "Freeze Duration Mod:", "freeze_durationMod", formatPercent }, - } -} - -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(env, skillGroups, activeSkillList) - wipeTable(skillGroupList) - if #skillGroups > 0 then - for i, skillGroup in pairs(skillGroups) do - skillGroupList[i] = { val = i, label = skillGroup.displayLabel } - end - else - skillGroupList[1] = { val = 1, label = "No skills found. Go to the Skills page and create a skill." } - end - wipeTable(skillList) - if #activeSkillList > 0 then - for i, activeSkill in pairs(activeSkillList) do - skillList[i] = { val = i, label = activeSkill.activeGem.name } - end - else - skillList[1] = { val = 1, label = "" } - end - wipeTable(skillPartList) - for i, partName in pairs(env.mainSkill.skillPartList) do - skillPartList[i] = { val = i, label = partName } - end - wipeTable(auxSkillList) - for i in pairs(env.auxSkillList) do - auxSkillList[i] = { "output", "Skill "..i..":", "buff_label"..i, "string", 3 } - end - if curFlags then - local noNewFlags = true - local sub = copyTable(curFlags) - for flag in pairs(env.skillFlags) do - if curFlags[flag] then - sub[flag] = nil - else - noNewFlags = false - break - end - end - if noNewFlags and not next(sub) then - return - end - end - curFlags = copyTable(env.skillFlags) - - grid:Clear() - - for colX, colTables in pairs(columns) do - local y = 1 - for _, data in ipairs(colTables) do - if not data.flag or curFlags[data.flag] then - mkFieldTable(colX, y, data) - y = y + #data - end - end - end - - for col, width in ipairs(columnWidths) do - grid:SetColWidth(col, width) - end -end \ No newline at end of file diff --git a/Modules/Common.lua b/Modules/Common.lua index 04377603..69d3da68 100644 --- a/Modules/Common.lua +++ b/Modules/Common.lua @@ -185,12 +185,21 @@ function isValueInArray(tbl, val) end end +-- Rounds a number to the nearest decimal places +function round(val, dec) + if dec then + return m_floor(val * 10 ^ dec + 0.5) / 10 ^ dec + else + return m_floor(val + 0.5) + 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)) + val = m_floor(m_abs(val * 10 ^ dec) + 0.5) local str = string.reverse(s_format("%.0f", val)) if #str < (dec + 1) then str = str .. string.rep("0", dec + 1 - #str) diff --git a/Modules/Data.lua b/Modules/Data.lua index 90b6638e..e3b25d67 100644 --- a/Modules/Data.lua +++ b/Modules/Data.lua @@ -6,7 +6,136 @@ data = { } +ModFlag = { } +-- Damage modes +ModFlag.Attack = 0x00000001 +ModFlag.Spell = 0x00000002 +ModFlag.Hit = 0x00000004 +ModFlag.Dot = 0x00000008 +-- Damage sources +ModFlag.Melee = 0x00000010 +ModFlag.Area = 0x00000020 +ModFlag.Projectile = 0x00000040 +ModFlag.SourceMask = 0x00000060 +-- Weapon types +ModFlag.Axe = 0x00001000 +ModFlag.Bow = 0x00002000 +ModFlag.Claw = 0x00004000 +ModFlag.Dagger = 0x00008000 +ModFlag.Mace = 0x00010000 +ModFlag.Staff = 0x00020000 +ModFlag.Sword = 0x00040000 +ModFlag.Wand = 0x00080000 +ModFlag.Unarmed = 0x00100000 +-- Weapon classes +ModFlag.WeaponMelee =0x00200000 +ModFlag.WeaponRanged=0x00400000 +ModFlag.Weapon = 0x00800000 +ModFlag.Weapon1H = 0x01000000 +ModFlag.Weapon2H = 0x02000000 + +KeywordFlag = { } +-- Skill keywords +KeywordFlag.Aura = 0x000001 +KeywordFlag.Curse = 0x000002 +KeywordFlag.Warcry = 0x000004 +KeywordFlag.Movement = 0x000008 +KeywordFlag.Fire = 0x000010 +KeywordFlag.Cold = 0x000020 +KeywordFlag.Lightning = 0x000040 +KeywordFlag.Chaos = 0x000080 +KeywordFlag.Vaal = 0x000100 +-- Skill types +KeywordFlag.Trap = 0x001000 +KeywordFlag.Mine = 0x002000 +KeywordFlag.Totem = 0x004000 +KeywordFlag.Minion = 0x008000 +-- Skill effects +KeywordFlag.Poison = 0x010000 +KeywordFlag.Bleed = 0x020000 + +-- Active skill types, used in ActiveSkills.dat and GrantedEffects.dat +-- Had to reverse engineer this, not sure what all of the values mean +SkillType = { + Attack = 1, + Spell = 2, + Projectile = 3, -- Specifically skills which fire projectiles + DualWield = 4, -- Attack requires dual wielding, only used on Dual Strike + Buff = 5, + CanDualWield = 6, -- Attack can be used while dual wielding + MainHandOnly = 7, -- Attack only uses the main hand + Type8 = 8, -- Only used on Cleave, possibly referencing that it combines both weapons when dual wielding + Minion = 9, + Hit = 10, -- Skill hits (not used on attacks because all of them hit) + Area = 11, + Duration = 12, + Shield = 13, -- Skill requires a shield + ProjectileDamage = 14, -- Skill deals projectile damage but doesn't fire projectiles + ManaCostReserved = 15, -- The skill's mana cost is a reservation + ManaCostPercent = 16, -- The skill's mana cost is a percentage + SkillCanTrap = 17, -- Skill can be turned into a trap + SpellCanTotem = 18, -- Spell can be turned into a totem + SkillCanMine = 19, -- Skill can be turned into a mine + CauseElementalStatus = 20, -- Causes elemental status effects, but doesn't hit (used on Herald of Ash to allow Elemental Proliferation to apply) + CreateMinion = 21, -- Creates or summons minions + AttackCanTotem = 22, -- Attack can be turned into a totem + Chaining = 23, + Melee = 24, + MeleeSingleTarget = 25, + SpellCanRepeat = 26, -- Spell can repeat via Spell Echo + Type27 = 27, -- No idea, used on auras and certain damage skills + AttackCanRepeat = 28, -- Attack can repeat via Multistrike + CausesBurning = 29, -- Deals burning damage + Totem = 30, + Type31 = 31, -- No idea, used on Molten Shell and the Thunder glove enchants, and added by Blasphemy + Curse = 32, + FireSkill = 33, + ColdSkill = 34, + LightningSkill = 35, + TriggerableSpell = 36, + Trap = 37, + MovementSkill = 38, + Cast = 39, + DamageOverTime = 40, + Mine = 41, + TriggeredSpell = 42, + Vaal = 43, + Aura = 44, + LightningSpell = 45, -- Used for Mjolner + Type46 = 46, -- Doesn't appear to be used at all + TriggeredAttack = 47, + ProjectileAttack = 48, + MinionSpell = 49, + ChaosSkill = 50, + Type51 = 51, -- Not used by any skill + Type52 = 52, -- Allows Contagion to be supported by Iron Will + Type53 = 53, -- Allows Burning Arrow and Vigilant Strike to be supported by Inc AoE and Conc Effect + Type54 = 54, -- Not used by any skill + Type55 = 55, -- Allows Burning Arrow to be supported by Inc/Less Duration and Rapid Decay + Type56 = 56, -- Not used by any skill + Type57 = 57, -- Appears to be the same as 47 + Channelled = 58, + Type59 = 59, -- Allows Contagion to be supported by Controlled Destruction + ColdSpell = 60, -- Used for Cospri's Malice +} + data.gems = { } +local function makeGemMod(modName, modType, modVal, flags, keywordFlags, ...) + return { + name = modName, + type = modType, + value = modVal, + flags = flags or 0, + keywordFlags = keywordFlags or 0, + tagList = { ... } + } +end +local function makeFlagMod(modName) + return makeGemMod(modName, "FLAG", true) +end +local function makeSkillMod(dataKey, dataValue, ...) + return makeGemMod("Misc", "LIST", { type = "SkillData", key = dataKey, value = dataValue }, 0, 0, ...) +end local gemTypes = { "act_str", "act_dex", @@ -17,12 +146,14 @@ local gemTypes = { "sup_int", } for _, type in pairs(gemTypes) do - LoadModule("Data/Gems/"..type, data.gems) + LoadModule("Data/Gems/"..type, data.gems, makeGemMod, makeFlagMod, makeSkillMod) end -for _, gemData in pairs(data.gems) do - -- Compile requirement functions for support gems - if gemData.require then - gemData.requireFunc = assert(loadstring("return "..gemData.require)) +for gemName, gemData in pairs(data.gems) do + -- Add sources for gem mods + for _, list in pairs({gemData.baseMods, gemData.qualityMods, gemData.levelMods}) do + for _, mod in pairs(list) do + mod.source = "Gem:"..gemName + end end end @@ -32,12 +163,17 @@ data.colorCodes = { RARE = "^xFFFF77", UNIQUE = "^xAF6025", CRAFTED = "^xB8DAF1", - FIRE = "^x960000", - COLD = "^x366492", + UNSUPPORTED = "^xC05030", + --FIRE = "^x960000", + FIRE = "^xD02020", + --COLD = "^x366492", + COLD = "^x60A0E7", LIGHTNING = "^xFFD700", CHAOS = "^xD02090", POSITIVE = "^x33FF77", NEGATIVE = "^xDD0022", + OFFENCE = "^xE07030", + DEFENCE = "^x8080E0", SCION = "^xFFF0F0", MARAUDER = "^xE05030", RANGER = "^x70FF70", @@ -56,48 +192,37 @@ data.jewelRadius = { { rad = 1500, col = "^x2222CC", label = "Large" } } -data.enemyEvasionTable = {36, 42, 49, 56, 64, 72, 80, 89, 98, 108, - 118, 128, 140, 151, 164, 177, 190, 204, 219, 235, - 251, 268, 286, 305, 325, 345, 367, 389, 412, 437, - 463, 489, 517, 546, 577, 609, 642, 676, 713, 750, - 790, 831, 873, 918, 964, 1013, 1063, 1116, 1170, 1227, - 1287, 1349, 1413, 1480, 1550, 1623, 1698, 1777, 1859, 1944, - 2033, 2125, 2221, 2321, 2425, 2533, 2645, 2761, 2883, 3009, - 3140, 3276, 3418, 3565, 3717, 3876, 4041, 4213, 4391, 4574, - 4767, 4969, 5179, 5398 } -data.enemyAccuracyTable = { 18, 19, 20, 21, 23, 24, 25, 27, 28, 30, - 31, 33, 35, 36, 38, 40, 42, 44, 46, 49, - 51, 54, 56, 59, 62, 65, 68, 71, 74, 78, - 81, 85, 89, 93, 97, 101, 106, 111, 116, 121, - 126, 132, 137, 143, 149, 156, 162, 169, 177, 184, - 192, 200, 208, 217, 226, 236, 245, 255, 266, 277, - 288, 300, 312, 325, 338, 352, 366, 381, 396, 412, - 428, 445, 463, 481, 500, 520, 540, 562, 584, 607, - 632, 657, 683, 711 } +-- Exported data tables: +-- From DefaultMonsterStats.dat +data.monsterEvasionTable = { 36, 42, 49, 56, 64, 72, 80, 89, 98, 108, 118, 128, 140, 151, 164, 177, 190, 204, 219, 235, 251, 268, 286, 305, 325, 345, 367, 389, 412, 437, 463, 489, 517, 546, 577, 609, 642, 676, 713, 750, 790, 831, 873, 918, 964, 1013, 1063, 1116, 1170, 1227, 1287, 1349, 1413, 1480, 1550, 1623, 1698, 1777, 1859, 1944, 2033, 2125, 2221, 2321, 2425, 2533, 2645, 2761, 2883, 3009, 3140, 3276, 3418, 3565, 3717, 3876, 4041, 4213, 4391, 4576, 4768, 4967, 5174, 5389, 5613, 5845, 6085, 6335, 6595, 6864, 7144, 7434, 7735, 8048, 8372, 8709, 9058, 9420, 9796, 10186, } +data.monsterAccuracyTable = { 18, 19, 20, 21, 23, 24, 25, 27, 28, 30, 31, 33, 35, 36, 38, 40, 42, 44, 46, 49, 51, 54, 56, 59, 62, 65, 68, 71, 74, 78, 81, 85, 89, 93, 97, 101, 106, 111, 116, 121, 126, 132, 137, 143, 149, 156, 162, 169, 177, 184, 192, 200, 208, 217, 226, 236, 245, 255, 266, 277, 288, 300, 312, 325, 338, 352, 366, 381, 396, 412, 428, 445, 463, 481, 500, 520, 540, 562, 584, 607, 630, 655, 680, 707, 734, 762, 792, 822, 854, 887, 921, 956, 992, 1030, 1069, 1110, 1152, 1196, 1241, 1288, } +data.monsterLifeTable = { 15, 17, 20, 23, 26, 30, 33, 37, 41, 46, 50, 55, 60, 66, 71, 77, 84, 91, 98, 105, 113, 122, 131, 140, 150, 161, 171, 183, 195, 208, 222, 236, 251, 266, 283, 300, 318, 337, 357, 379, 401, 424, 448, 474, 501, 529, 559, 590, 622, 656, 692, 730, 769, 810, 853, 899, 946, 996, 1048, 1102, 1159, 1219, 1281, 1346, 1415, 1486, 1561, 1640, 1722, 1807, 1897, 1991, 2089, 2192, 2299, 2411, 2528, 2651, 2779, 2913, 3053, 3199, 3352, 3511, 3678, 3853, 4035, 4225, 4424, 4631, 4848, 5074, 5310, 5557, 5815, 6084, 6364, 6658, 6964, 7283, } +-- From MonsterVarieties.dat combined with SkillTotemVariations.dat +data.totemLifeMult = { [1] = 2.94, [2] = 2.94, [3] = 2.94, [4] = 2.94, [5] = 2.94, [6] = 4.2, [7] = 2.94, [8] = 2.94, [9] = 2.94, [10] = 2.94, [11] = 2.94, [12] = 2.94, [13] = 4.5, } data.weaponTypeInfo = { - ["None"] = { oneHand = true, melee = true, space = "unarmed" }, - ["Bow"] = { oneHand = false, melee = false, space = "bow" }, - ["Claw"] = { oneHand = true, melee = true, space = "claw" }, - ["Dagger"] = { oneHand = true, melee = true, space = "dagger" }, - ["Staff"] = { oneHand = false, melee = true, space = "staff" }, - ["Wand"] = { oneHand = true, melee = false, space = "wand" }, - ["One Handed Axe"] = { oneHand = true, melee = true, space = "axe" }, - ["One Handed Mace"] = { oneHand = true, melee = true, space = "mace" }, - ["One Handed Sword"] = { oneHand = true, melee = true, space = "sword" }, - ["Two Handed Axe"] = { oneHand = false, melee = true, space = "axe" }, - ["Two Handed Mace"] = { oneHand = false, melee = true, space = "mace" }, - ["Two Handed Sword"] = { oneHand = false, melee = true, space = "sword" }, + ["None"] = { oneHand = true, melee = true, flag = ModFlag.Unarmed }, + ["Bow"] = { oneHand = false, melee = false, flag = ModFlag.Bow }, + ["Claw"] = { oneHand = true, melee = true, flag = ModFlag.Claw }, + ["Dagger"] = { oneHand = true, melee = true, flag = ModFlag.Dagger }, + ["Staff"] = { oneHand = false, melee = true, flag = ModFlag.Staff }, + ["Wand"] = { oneHand = true, melee = false, flag = ModFlag.Wand }, + ["One Handed Axe"] = { oneHand = true, melee = true, flag = ModFlag.Axe }, + ["One Handed Mace"] = { oneHand = true, melee = true, flag = ModFlag.Mace }, + ["One Handed Sword"] = { oneHand = true, melee = true, flag = ModFlag.Sword }, + ["Two Handed Axe"] = { oneHand = false, melee = true, flag = ModFlag.Axe }, + ["Two Handed Mace"] = { oneHand = false, melee = true, flag = ModFlag.Mace }, + ["Two Handed Sword"] = { oneHand = false, melee = true, flag = ModFlag.Sword }, } -data.unarmedWeapon = { - [0] = { attackRate = 1.2, critChanceBase = 0, physicalMin = 2, physicalMax = 6 }, -- Scion - [1] = { attackRate = 1.2, critChanceBase = 0, physicalMin = 2, physicalMax = 8 }, -- Marauder - [2] = { attackRate = 1.2, critChanceBase = 0, physicalMin = 2, physicalMax = 5 }, -- Ranger - [3] = { attackRate = 1.2, critChanceBase = 0, physicalMin = 2, physicalMax = 5 }, -- Witch - [4] = { attackRate = 1.2, critChanceBase = 0, physicalMin = 2, physicalMax = 6 }, -- Duelist - [5] = { attackRate = 1.2, critChanceBase = 0, physicalMin = 2, physicalMax = 6 }, -- Templar - [6] = { attackRate = 1.2, critChanceBase = 0, physicalMin = 2, physicalMax = 5 }, -- Shadow +data.unarmedWeaponData = { + [0] = { attackRate = 1.2, critChance = 0, PhysicalMin = 2, PhysicalMax = 6 }, -- Scion + [1] = { attackRate = 1.2, critChance = 0, PhysicalMin = 2, PhysicalMax = 8 }, -- Marauder + [2] = { attackRate = 1.2, critChance = 0, PhysicalMin = 2, PhysicalMax = 5 }, -- Ranger + [3] = { attackRate = 1.2, critChance = 0, PhysicalMin = 2, PhysicalMax = 5 }, -- Witch + [4] = { attackRate = 1.2, critChance = 0, PhysicalMin = 2, PhysicalMax = 6 }, -- Duelist + [5] = { attackRate = 1.2, critChance = 0, PhysicalMin = 2, PhysicalMax = 6 }, -- Templar + [6] = { attackRate = 1.2, critChance = 0, PhysicalMin = 2, PhysicalMax = 5 }, -- Shadow } data.itemBases = { } diff --git a/Modules/ItemTools.lua b/Modules/ItemTools.lua index b195ed41..fa274055 100644 --- a/Modules/ItemTools.lua +++ b/Modules/ItemTools.lua @@ -5,9 +5,12 @@ -- local t_insert = table.insert +local t_remove = table.remove local m_min = math.min local m_floor = math.floor +local dmgTypeList = {"Physical", "Lightning", "Cold", "Fire", "Chaos"} + itemLib = { } -- Apply range value (0 to 1) to a modifier that has a range: (x to x) or (x-x to x-x) @@ -179,7 +182,7 @@ function itemLib.parseItemRaw(item) end local modList, extra = modLib.parseMod(rangedLine or line) if modList then - t_insert(item.modLines, { line = line, extra = extra, mods = modList, variantList = variantList, crafted = crafted, range = rangedLine and (tonumber(rangeSpec) or 0.5) }) + t_insert(item.modLines, { line = line, extra = extra, modList = modList, variantList = variantList, crafted = crafted, range = rangedLine and (tonumber(rangeSpec) or 0.5) }) if mode == "GAME" then if gameModeStage == "FINDIMPLICIT" then gameModeStage = "IMPLICIT" @@ -194,12 +197,12 @@ function itemLib.parseItemRaw(item) end elseif mode == "GAME" then if gameModeStage == "IMPLICIT" or gameModeStage == "EXPLICIT" then - t_insert(item.modLines, { line = line, extra = line, mods = { }, variantList = variantList, crafted = crafted }) + t_insert(item.modLines, { line = line, extra = line, modList = { }, variantList = variantList, crafted = crafted }) elseif gameModeStage == "FINDEXPLICIT" then gameModeStage = "DONE" end elseif foundExplicit then - t_insert(item.modLines, { line = line, extra = line, mods = { }, variantList = variantList, crafted = crafted }) + t_insert(item.modLines, { line = line, extra = line, modList = { }, variantList = variantList, crafted = crafted }) end end end @@ -305,99 +308,114 @@ function itemLib.getPrimarySlotForItem(item) end end +-- Add up local modifiers, and removes them from the modifier list +-- To be considered local, a modifier must be an exact flag match, and cannot have any tags (e.g conditions, multipliers) +local function sumLocal(modList, name, type, flags) + local result = 0 + local i = 1 + while modList[i] do + local mod = modList[i] + if mod.name == name and mod.type == type and mod.flags == flags and mod.keywordFlags == 0 and not mod.tagList[1] then + result = result + mod.value + t_remove(modList, i) + else + i = i + 1 + end + end + return result +end + -- Build list of modifiers for an item in a given slot number (1 or 2) while applying local modifers and adding quality function itemLib.buildItemModListForSlotNum(item, baseList, slotNum) - local modList = { } - -- Process slot-specific modifiers - for k, v in pairs(baseList) do - if k:match("SocketedIn:X") then - local slotName = itemLib.getPrimarySlotForItem(item) - if slotNum then - slotName = slotName:gsub("1", slotNum) + local slotName = itemLib.getPrimarySlotForItem(item) + if slotNum == 2 then + slotName = slotName:gsub("1", "2") + end + local modList = common.New("ModList") + for _, baseMod in ipairs(baseList) do + local mod = copyTable(baseMod) + local add = true + for _, tag in pairs(mod.tagList) do + if tag.type == "SlotNumber" then + if tag.num ~= slotNum then + add = false + break + end + elseif tag.type == "SocketedIn" then + tag.slotName = slotName end - k = k:gsub("SocketedIn:X","SocketedIn:"..slotName) end - local slot = tonumber(k:match("IfSlot:(%d)_")) - if slot then - if slot == slotNum then - k = k:gsub("IfSlot:%d_","") - modLib.listMerge(modList, k, v) - end - else - if slotNum then - k = k:gsub("weaponX_","weapon"..slotNum.."_") - end - modLib.listMerge(modList, k, v) + if add then + mod.sourceSlot = slotName + modList:AddMod(mod) end end if item.base.weapon then - local weaponPrefix = "weapon"..slotNum.."_" - modList[weaponPrefix.."type"] = item.base.type - modList[weaponPrefix.."name"] = item.name - modList[weaponPrefix.."attackRate"] = m_floor(item.base.weapon.attackRateBase * (1 + (modList.attackSpeedInc or 0) / 100) * 100 + 0.5) / 100 - modList[weaponPrefix.."attackSpeedInc"] = modList.attackSpeedInc - modList.attackSpeedInc = nil - for _, dmgType in pairs({"physical","lightning","cold","fire","chaos"}) do - local min = (item.base.weapon[dmgType.."Min"] or 0) + (modList["attack_"..dmgType.."Min"] or 0) - local max = (item.base.weapon[dmgType.."Max"] or 0) + (modList["attack_"..dmgType.."Max"] or 0) - if dmgType == "physical" then - if modList.weaponLocal_noPhysical then - min, max = 0, 0 - else - min = m_floor(min * (1 + ((modList["physicalInc"] or 0) + item.quality) / 100) + 0.5) - max = m_floor(max * (1 + ((modList["physicalInc"] or 0) + item.quality) / 100) + 0.5) - end - modList["physicalInc"] = nil + local weaponData = { } + item.weaponData[slotNum] = weaponData + weaponData.type = item.base.type + weaponData.name = item.name + weaponData.AttackSpeedInc = sumLocal(modList, "Speed", "INC", ModFlag.Attack) + weaponData.attackRate = m_floor(item.base.weapon.attackRateBase * (1 + weaponData.AttackSpeedInc / 100) * 100 + 0.5) / 100 + for _, dmgType in pairs(dmgTypeList) do + local min = (item.base.weapon[dmgType.."Min"] or 0) + sumLocal(modList, dmgType.."Min", "BASE", ModFlag.Attack) + local max = (item.base.weapon[dmgType.."Max"] or 0) + sumLocal(modList, dmgType.."Max", "BASE", ModFlag.Attack) + if dmgType == "Physical" then + local physInc = sumLocal(modList, "PhysicalDamage", "INC", 0) + min = m_floor(min * (1 + (physInc + item.quality) / 100) + 0.5) + max = m_floor(max * (1 + (physInc + item.quality) / 100) + 0.5) end if min > 0 and max > 0 then - modList[weaponPrefix..dmgType.."Min"] = min - modList[weaponPrefix..dmgType.."Max"] = max - local dps = (min + max) / 2 * modList[weaponPrefix.."attackRate"] - modList[weaponPrefix..dmgType.."DPS"] = dps - modList[weaponPrefix.."damageDPS"] = (modList[weaponPrefix.."damageDPS"] or 0) + dps - if dmgType ~= "physical" and dmgType ~= "chaos" then - modList[weaponPrefix.."elementalDPS"] = (modList[weaponPrefix.."elementalDPS"] or 0) + dps + weaponData[dmgType.."Min"] = min + weaponData[dmgType.."Max"] = max + local dps = (min + max) / 2 * weaponData.attackRate + weaponData[dmgType.."DPS"] = dps + if dmgType ~= "Physical" and dmgType ~= "Chaos" then + weaponData.ElementalDPS = (weaponData.ElementalDPS or 0) + dps end end - modList["attack_"..dmgType.."Min"] = nil - modList["attack_"..dmgType.."Max"] = nil end - if modList.weaponLocal_alwaysCrit then - modList[weaponPrefix.."critChanceBase"] = 100 - else - modList[weaponPrefix.."critChanceBase"] = m_floor(item.base.weapon.critChanceBase * (1 + (modList.critChanceInc or 0) / 100) * 100 + 0.5) / 100 - end - modList.critChanceInc = nil - elseif item.base.armour then - if item.base.type == "Shield" then - modList.weapon2_type = "Shield" - end - local basePrefix = "slot:"..item.base.type.."_" - modList[basePrefix.."armourBase"] = m_floor(((item.base.armour.armourBase or 0) + (modList.armourBase or 0)) * (1 + ((modList.armourInc or 0) + (modList.armourAndEvasionInc or 0) + (modList.armourAndEnergyShieldInc or 0) + (modList.defencesInc or 0) + item.quality) / 100) + 0.5) - modList[basePrefix.."evasionBase"] = m_floor(((item.base.armour.evasionBase or 0) + (modList.evasionBase or 0)) * (1 + ((modList.evasionInc or 0) + (modList.armourAndEvasionInc or 0) + (modList.evasionAndEnergyShieldInc or 0) + (modList.defencesInc or 0) + item.quality) / 100) + 0.5) - modList[basePrefix.."energyShieldBase"] = m_floor(((item.base.armour.energyShieldBase or 0) + (modList.energyShieldBase or 0)) * (1 + ((modList.energyShieldInc or 0) + (modList.armourAndEnergyShieldInc or 0) + (modList.evasionAndEnergyShieldInc or 0) + (modList.defencesInc or 0) + item.quality) / 100) + 0.5) - if item.base.armour.blockChance then - if modList.shieldLocal_noBlock then - modList.blockChance = 0 - else - modList.blockChance = item.base.armour.blockChance + (modList.blockChance or 0) + weaponData.critChance = m_floor(item.base.weapon.critChanceBase * (1 + sumLocal(modList, "CritChance", "INC", 0) / 100) * 100 + 0.5) / 100 + for _, value in ipairs(modList:Sum("LIST", nil, "Misc")) do + if value.type == "WeaponData" then + weaponData[value.key] = value.value + end + end + weaponData.TotalDPS = 0 + for _, dmgType in pairs(dmgTypeList) do + weaponData.TotalDPS = weaponData.TotalDPS + (weaponData[dmgType.."DPS"] or 0) + end + elseif item.base.armour then + local armourData = item.armourData + local armourBase = sumLocal(modList, "Armour", "BASE", 0) + (item.base.armour.armourBase or 0) + local evasionBase = sumLocal(modList, "Evasion", "BASE", 0) + (item.base.armour.evasionBase or 0) + local energyShieldBase = sumLocal(modList, "EnergyShield", "BASE", 0) + (item.base.armour.energyShieldBase or 0) + local armourInc = sumLocal(modList, "Armour", "INC", 0) + local armourEvasionInc = sumLocal(modList, "ArmourAndEvasion", "INC", 0) + local evasionInc = sumLocal(modList, "Evasion", "INC", 0) + local evasionEnergyShieldInc = sumLocal(modList, "EvasionAndEnergyShield", "INC", 0) + local energyShieldInc = sumLocal(modList, "EnergyShield", "INC", 0) + local armourEnergyShieldInc = sumLocal(modList, "ArmourAndEnergyShield", "INC", 0) + local defencesInc = sumLocal(modList, "Defences", "INC", 0) + armourData.Armour = m_floor(armourBase * (1 + (armourInc + armourEvasionInc + armourEnergyShieldInc + defencesInc + item.quality) / 100) + 0.5) + armourData.Evasion = m_floor(evasionBase * (1 + (evasionInc + armourEvasionInc + evasionEnergyShieldInc + defencesInc + item.quality) / 100) + 0.5) + armourData.EnergyShield = m_floor(energyShieldBase * (1 + (energyShieldInc + armourEnergyShieldInc + evasionEnergyShieldInc + defencesInc + item.quality) / 100) + 0.5) + if item.base.armour.blockChance then + armourData.BlockChance = item.base.armour.blockChance + sumLocal(modList, "BlockChance", "BASE", 0) + end + for _, value in ipairs(modList:Sum("LIST", nil, "Misc")) do + if value.type == "ArmourData" then + armourData[value.key] = value.value end end - modList.armourBase = nil - modList.armourInc = nil - modList.evasionBase = nil - modList.evasionInc = nil - modList.energyShieldBase = nil - modList.energyShieldInc = nil - modList.armourAndEvasionInc = nil - modList.armourAndEnergyShieldInc = nil - modList.evasionAndEnergyShieldInc = nil - modList.defencesInc = nil elseif item.type == "Jewel" then - item.jewelFunc = modList.jewelFunc - modList.jewelFunc = nil + for _, value in ipairs(modList:Sum("LIST", nil, "Misc")) do + if value.type == "JewelFunc" then + item.jewelFunc = value.func + end + end end - return modList + return { unpack(modList) } end -- Build lists of modifiers for each slot an item can occupy @@ -406,6 +424,7 @@ function itemLib.buildItemModList(item) return end local baseList = { } + item.baseModList = baseList item.rangeLineList = { } for _, modLine in ipairs(item.modLines) do if not modLine.extra and (not modLine.variantList or modLine.variantList[item.variant]) then @@ -413,16 +432,25 @@ function itemLib.buildItemModList(item) local line = itemLib.applyRange(modLine.line, modLine.range) local list, extra = modLib.parseMod(line) if list and not extra then - modLine.mods = list + modLine.modList = list t_insert(item.rangeLineList, modLine) end end - for k, v in pairs(modLine.mods) do - modLib.listMerge(baseList, k, v) + for _, mod in ipairs(modLine.modList) do + mod.source = "Item:"..(item.id or -1)..":"..item.name + t_insert(baseList, mod) end end end - item.baseModList = baseList + if item.name == "Tabula Rasa, Simple Robe" then + -- Hack to remove the energy shield + t_insert(baseList, { name = "Misc", type = "LIST", value = { type = "ArmourData", key = "EnergyShield" }, flags = 0, keywordFlags = 0, tagList = { } }) + end + if item.base.weapon then + item.weaponData = { } + elseif item.base.armour then + item.armourData = { } + end if item.base.weapon or item.type == "Ring" then item.slotModList = { } for i = 1, 2 do diff --git a/Modules/Main.lua b/Modules/Main.lua index 73b48213..722575d9 100644 --- a/Modules/Main.lua +++ b/Modules/Main.lua @@ -40,6 +40,7 @@ local classList = { "BuildListControl", -- Mode: Build "ImportTab", + "ConfigTab", "TreeTab", "PassiveTree", "PassiveSpec", @@ -53,7 +54,8 @@ local classList = { "ItemListControl", "ItemDBControl", "CalcsTab", - "Grid", + "CalcSectionControl", + "CalcBreakdownControl", } for _, className in pairs(classList) do LoadModule("Classes/"..className, launch, main) @@ -185,6 +187,9 @@ function main:Init() return launch.devMode end + -- FIXME: Remove before merge + self.controls.devMode.label = "^1Experimental" + self.inputEvents = { } self.popups = { } self.tooltipLines = { } @@ -433,6 +438,9 @@ function main:DrawTooltip(x, y, w, h, viewPort, col, center) ttX = ttX + w + 5 if ttX + ttW > viewPort.x + viewPort.width then ttX = m_max(viewPort.x, x - 5 - ttW) + if ttX + ttW > x then + ttY = ttY + h + end end if ttY + ttH > viewPort.y + viewPort.height then ttY = m_max(viewPort.y, y + h - ttH) diff --git a/Modules/ModParser.lua b/Modules/ModParser.lua index f1a43eea..7379b1a5 100644 --- a/Modules/ModParser.lua +++ b/Modules/ModParser.lua @@ -4,6 +4,11 @@ -- Parser function for modifier names -- +local t_insert = table.insert +local band = bit.band +local bor = bit.bor +local bnot = bit.bnot + -- List of modifier forms local formList = { ["^(%d+)%% increased"] = "INC", @@ -35,427 +40,457 @@ local formList = { } -- Map of modifier names --- '{suf}' is replaced with modifier suffix ('Base', 'Inc', 'More') local modNameList = { -- Attributes - ["strength"] = "str{suf}", - ["dexterity"] = "dex{suf}", - ["intelligence"] = "int{suf}", - ["strength and dexterity"] = { "str{suf}", "dex{suf}" }, - ["strength and intelligence"] = { "str{suf}", "int{suf}" }, - ["dexterity and intelligence"] = { "dex{suf}", "int{suf}" }, - ["attributes"] = { "str{suf}", "dex{suf}", "int{suf}" }, - ["all attributes"] = { "str{suf}", "dex{suf}", "int{suf}" }, + ["strength"] = "Str", + ["dexterity"] = "Dex", + ["intelligence"] = "Int", + ["strength and dexterity"] = { "Str", "Dex" }, + ["strength and intelligence"] = { "Str", "Int" }, + ["dexterity and intelligence"] = { "Dex", "Int" }, + ["attributes"] = { "Str", "Dex", "Int" }, + ["all attributes"] = { "Str", "Dex", "Int" }, -- Life/mana - ["maximum life"] = "life{suf}", - ["maximum mana"] = "mana{suf}", - ["mana regeneration rate"] = "manaRegen{suf}", - ["mana cost"] = "manaCost{suf}", - ["mana cost of skills"] = "manaCost{suf}", - ["mana reserved"] = "manaReserved{suf}", - ["mana reservation"] = "manaReserved{suf}", + ["life"] = "Life", + ["maximum life"] = "Life", + ["mana"] = "Mana", + ["maximum mana"] = "Mana", + ["mana regeneration rate"] = "ManaRegen", + ["mana cost"] = "ManaCost", + ["mana cost of skills"] = "ManaCost", + ["mana reserved"] = "ManaReserved", + ["mana reservation"] = "ManaReserved", -- Primary defences - ["maximum energy shield"] = "energyShield{suf}", - ["energy shield recharge rate"] = "energyShieldRecharge{suf}", - ["energy shield recovery rate"] = "energyShieldRecovery{suf}", - ["start of energy shield recharge"] = "energyShieldRechargeFaster", - ["armour"] = "armour{suf}", - ["evasion rating"] = "evasion{suf}", - ["energy shield"] = "energyShield{suf}", - ["armour and evasion"] = "armourAndEvasion{suf}", - ["armour and evasion rating"] = "armourAndEvasion{suf}", - ["evasion rating and armour"] = "armourAndEvasion{suf}", - ["armour and energy shield"] = "armourAndEnergyShield{suf}", - ["evasion and energy shield"] = "evasionAndEnergyShield{suf}", - ["armour, evasion and energy shield"] = "defences{suf}", - ["defences"] = "defences{suf}", + ["maximum energy shield"] = "EnergyShield", + ["energy shield recharge rate"] = "EnergyShieldRecharge", + ["energy shield recovery rate"] = "EnergyShieldRecovery", + ["start of energy shield recharge"] = "EnergyShieldRechargeFaster", + ["armour"] = "Armour", + ["evasion rating"] = "Evasion", + ["energy shield"] = "EnergyShield", + ["armour and evasion"] = "ArmourAndEvasion", + ["armour and evasion rating"] = "ArmourAndEvasion", + ["evasion rating and armour"] = "ArmourAndEvasion", + ["armour and energy shield"] = "ArmourAndEnergyShield", + ["evasion and energy shield"] = "EvasionAndEnergyShield", + ["armour, evasion and energy shield"] = "Defences", + ["defences"] = "Defences", -- Resistances - ["fire resistance"] = "fireResist", - ["maximum fire resistance"] = "fireResistMax", - ["cold resistance"] = "coldResist", - ["maximum cold resistance"] = "coldResistMax", - ["lightning resistance"] = "lightningResist", - ["maximum lightning resistance"] = "lightningResistMax", - ["chaos resistance"] = "chaosResist", - ["fire and cold resistances"] = { "fireResist", "coldResist" }, - ["fire and lightning resistances"] = { "fireResist", "lightningResist" }, - ["cold and lightning resistances"] = { "coldResist", "lightningResist" }, - ["elemental resistances"] = "elementalResist", - ["all elemental resistances"] = "elementalResist", - ["all maximum resistances"] = { "fireResistMax", "coldResistMax", "lightningResistMax", "chaosResistMax" }, + ["fire resistance"] = "FireResist", + ["maximum fire resistance"] = "FireResistMax", + ["cold resistance"] = "ColdResist", + ["maximum cold resistance"] = "ColdResistMax", + ["lightning resistance"] = "LightningResist", + ["maximum lightning resistance"] = "LightningResistMax", + ["chaos resistance"] = "ChaosResist", + ["fire and cold resistances"] = { "FireResist", "ColdResist" }, + ["fire and lightning resistances"] = { "FireResist", "LightningResist" }, + ["cold and lightning resistances"] = { "ColdResist", "LightningResist" }, + ["elemental resistances"] = "ElementalResist", + ["all elemental resistances"] = "ElementalResist", + ["all maximum resistances"] = { "FireResistMax", "ColdResistMax", "LightningResistMax", "ChaosResistMax" }, -- Other defences - ["to dodge attacks"] = "dodgeAttacks", - ["to dodge spells"] = "dodgeSpells", - ["to dodge spell damage"] = "dodgeSpells", - ["to block"] = "blockChance", - ["block chance"] = "blockChance", - ["to block spells"] = "spellBlockChance", - ["chance to block attacks and spells"] = { "blockChance{suf}", "spellBlockChance{suf}" }, - ["maximum block chance"] = "blockChanceMax", - ["to avoid being stunned"] = "avoidStun", - ["to avoid being shocked"] = "avoidShock", - ["to avoid being frozen"] = "avoidFrozen", - ["to avoid being chilled"] = "avoidChilled", - ["to avoid being ignited"] = "avoidIgnite", - ["to avoid elemental status ailments"] = { "avoidShock", "avoidFrozen", "avoidChilled", "avoidIgnite" }, + ["to dodge attacks"] = "AttackDodgeChance", + ["to dodge spells"] = "SpellDodgeChance", + ["to dodge spell damage"] = "SpellDodgeChance", + ["to block"] = "BlockChance", + ["block chance"] = "BlockChance", + ["to block spells"] = "SpellBlockChance", + ["chance to block attacks and spells"] = { "BlockChance", "SpellBlockChance" }, + ["maximum block chance"] = "BlockChanceMax", + ["to avoid being stunned"] = "AvoidStun", + ["to avoid being shocked"] = "AvoidShock", + ["to avoid being frozen"] = "AvoidFrozen", + ["to avoid being chilled"] = "AvoidChilled", + ["to avoid being ignited"] = "AvoidIgnite", + ["to avoid elemental status ailments"] = { "AvoidShock", "AvoidFrozen", "AvoidChilled", "AvoidIgnite" }, -- Stun modifiers - ["stun recovery"] = "stunRecovery{suf}", - ["stun and block recovery"] = "stunRecovery{suf}", - ["stun threshold"] = "stunThreshold{suf}", - ["block recovery"] = "blockRecovery{suf}", - ["enemy stun threshold"] = "stunEnemyThreshold{suf}", - ["stun duration on enemies"] = "stunEnemyDuration{suf}", + ["stun recovery"] = "StunRecovery", + ["stun and block recovery"] = "StunRecovery", + ["stun threshold"] = "StunThreshold", + ["block recovery"] = "BlockRecovery", + ["enemy stun threshold"] = "EnemyStunThreshold", + ["stun duration on enemies"] = "EnemyStunDuration", -- Auras/curses - ["effect of non-curse auras you cast"] = "auraEffect{suf}", - ["effect of your curses"] = "curseEffect{suf}", - ["curse effect"] = "curseEffect{suf}", - ["curse duration"] = "curse_duration{suf}", - ["radius of auras"] = "aura_aoeRadius{suf}", - ["radius of curses"] = "curse_aoeRadius{suf}", + ["effect of non-curse auras you cast"] = "AuraEffect", + ["effect of your curses"] = "CurseEffect", + ["curse effect"] = "CurseEffect", + ["curse duration"] = { "Duration", keywordFlags = KeywordFlag.Curse }, + ["radius of auras"] = { "AreaRadius", keywordFlags = KeywordFlag.Aura }, + ["radius of curses"] = { "AreaRadius", keywordFlags = KeywordFlag.Curse }, -- Charges - ["maximum power charge"] = "powerMax", - ["maximum power charges"] = "powerMax", - ["power charge duration"] = "powerDuration{suf}", - ["maximum frenzy charge"] = "frenzyMax", - ["maximum frenzy charges"] = "frenzyMax", - ["frenzy charge duration"] = "frenzyDuration{suf}", - ["maximum endurance charge"] = "enduranceMax", - ["maximum endurance charges"] = "enduranceMax", - ["endurance charge duration"] = "enduranceDuration{suf}", - ["endurance, frenzy and power charge duration"] = { "powerDuration{suf}", "frenzyDuration{suf}", "enduranceDuration{suf}" }, + ["maximum power charge"] = "PowerChargesMax", + ["maximum power charges"] = "PowerChargesMax", + ["power charge duration"] = "PowerChargesDuration", + ["maximum frenzy charge"] = "FrenzyChargesMax", + ["maximum frenzy charges"] = "FrenzyChargesMax", + ["frenzy charge duration"] = "FrenzyChargesDuration", + ["maximum endurance charge"] = "EnduranceChargesMax", + ["maximum endurance charges"] = "EnduranceChargesMax", + ["endurance charge duration"] = "EnduranceChargesDuration", + ["endurance, frenzy and power charge duration"] = { "PowerChargesDuration", "FrenzyChargesDuration", "EnduranceChargesDuration" }, -- On hit/kill effects - ["life gained on kill"] = "lifeOnKill", - ["mana gained on kill"] = "manaOnKill", - ["life gained for each enemy hit by attacks"] = "attack_lifeOnHit", - ["life gained for each enemy hit by your attacks"] = "attack_lifeOnHit", - ["life gained for each enemy hit by spells"] = "spell_lifeOnHit", - ["life gained for each enemy hit by your spells"] = "spell_lifeOnHit", - ["mana gained for each enemy hit by attacks"] = "attack_manaOnHit", - ["mana gained for each enemy hit by your attacks"] = "attack_manaOnHit", - ["energy shield gained for each enemy hit by attacks"] = "attack_energyShieldOnHit", - ["energy shield gained for each enemy hit by your attacks"] = "attack_energyShieldOnHit", - ["life and mana gained for each enemy hit"] = { "attack_lifeOnHit", "attack_manaOnHit" }, + ["life gained on kill"] = "LifeOnKill", + ["mana gained on kill"] = "ManaOnKill", + ["life gained for each enemy hit by attacks"] = { "LifeOnHit", flags = ModFlag.Attack }, + ["life gained for each enemy hit by your attacks"] = { "LifeOnHit", flags = ModFlag.Attack }, + ["life gained for each enemy hit by spells"] = { "LifeOnHit", flags = ModFlag.Spell }, + ["life gained for each enemy hit by your spells"] = { "LifeOnHit", flags = ModFlag.Spell }, + ["mana gained for each enemy hit by attacks"] = { "ManaOnHit", flags = ModFlag.Attack }, + ["mana gained for each enemy hit by your attacks"] = { "ManaOnHit", flags = ModFlag.Attack }, + ["energy shield gained for each enemy hit by attacks"] = { "EnergyShieldOnHit", flags = ModFlag.Attack }, + ["energy shield gained for each enemy hit by your attacks"] = { "EnergyShieldOnHit", flags = ModFlag.Attack }, + ["life and mana gained for each enemy hit"] = { "LifeOnHit", "ManaOnHit", flags = ModFlag.Attack }, -- Projectile modifiers - ["pierce chance"] = "pierceChance", - ["of projectiles piercing"] = "pierceChance", - ["of arrows piercing"] = "bow_pierceChance", - ["projectile speed"] = "projectileSpeed{suf}", - ["arrow speed"] = "bow_projectileSpeed{suf}", + ["pierce chance"] = "PierceChance", + ["of projectiles piercing"] = "PierceChance", + ["of arrows piercing"] = { "PierceChance", flags = ModFlag.Bow }, + ["projectile speed"] = "ProjectileSpeed", + ["arrow speed"] = { "ProjectileSpeed", flags = ModFlag.Bow }, -- Totem/trap/mine modifiers - ["totem placement speed"] = "totemPlacementSpeed{suf}", - ["totem life"] = "totemLife{suf}", - ["totem duration"] = "totemDuration{suf}", - ["trap throwing speed"] = "trapThrowingSpeed{suf}", - ["trap trigger radius"] = "trapTriggerRadius{suf}", - ["trap duration"] = "trapDuration{suf}", - ["cooldown recovery speed for throwing traps"] = "trapCooldownRecovery{suf}", - ["mine laying speed"] = "mineLayingSpeed{suf}", - ["mine detonation radius"] = "mineDetonationRadius{suf}", - ["mine duration"] = "mineDuration{suf}", + ["totem placement speed"] = "TotemPlacementSpeed", + ["totem life"] = "TotemLife", + ["totem duration"] = "TotemDuration", + ["trap throwing speed"] = "TrapThrowingSpeed", + ["trap trigger radius"] = "TrapTriggerRadius", + ["trap duration"] = "TrapDuration", + ["cooldown recovery speed for throwing traps"] = "TrapCooldownRecovery", + ["mine laying speed"] = "MineLayingSpeed", + ["mine detonation radius"] = "MineDetonationRadius", + ["mine duration"] = "MineDuration", -- Other skill modifiers - ["radius"] = "aoeRadius{suf}", - ["radius of area skills"] = "aoeRadius{suf}", - ["area of effect radius"] = "aoeRadius{suf}", - ["area of effect"] = "aoeRadius{suf}", - ["duration"] = "duration{suf}", - ["skill effect duration"] = "duration{suf}", - ["chaos skill effect duration"] = "chaos_duration{suf}", + ["radius"] = "AreaRadius", + ["radius of area skills"] = "AreaRadius", + ["area of effect radius"] = "AreaRadius", + ["area of effect"] = "AreaRadius", + ["duration"] = "Duration", + ["skill effect duration"] = "Duration", + ["chaos skill effect duration"] = { "Duration", keywordFlags = KeywordFlag.Chaos }, -- Buffs - ["onslaught effect"] = "onslaughtEffect{suf}", - ["fortify duration"] = "fortifyDuration{suf}", - ["effect of fortify on you"] = "fortifyEffect{suf}", + ["onslaught effect"] = "OnslaughtEffect", + ["fortify duration"] = "FortifyDuration", + ["effect of fortify on you"] = "FortifyEffect", -- Basic damage types - ["damage"] = "damage{suf}", - ["physical damage"] = "physical{suf}", - ["lightning damage"] = "lightning{suf}", - ["cold damage"] = "cold{suf}", - ["fire damage"] = "fire{suf}", - ["chaos damage"] = "chaos{suf}", - ["elemental damage"] = "elemental{suf}", + ["damage"] = "Damage", + ["physical damage"] = "PhysicalDamage", + ["lightning damage"] = "LightningDamage", + ["cold damage"] = "ColdDamage", + ["fire damage"] = "FireDamage", + ["chaos damage"] = "ChaosDamage", + ["elemental damage"] = "ElementalDamage", -- Other damage forms - ["attack damage"] = "attack_damage{suf}", - ["physical attack damage"] = "attack_physical{suf}", - ["physical weapon damage"] = "weapon_physical{suf}", - ["physical melee damage"] = "melee_physical{suf}", - ["melee physical damage"] = "melee_physical{suf}", - ["wand damage"] = "wand_damage{suf}", - ["wand physical damage"] = "wand_physical{suf}", - ["claw physical damage"] = "claw_physical{suf}", - ["damage over time"] = "dot_damage{suf}", - ["physical damage over time"] = "dot_physical{suf}", - ["burning damage"] = "dot_fire{suf}", + ["attack damage"] = { "Damage", flags = ModFlag.Attack }, + ["physical attack damage"] = { "PhysicalDamage", flags = ModFlag.Attack }, + ["physical weapon damage"] = { "PhysicalDamage", flags = ModFlag.Weapon }, + ["physical melee damage"] = { "PhysicalDamage", flags = ModFlag.Melee }, + ["melee physical damage"] = { "PhysicalDamage", flags = ModFlag.Melee }, + ["wand damage"] = { "Damage", flags = ModFlag.Wand }, + ["wand physical damage"] = { "PhysicalDamage", flags = ModFlag.Wand }, + ["claw physical damage"] = { "PhysicalDamage", flags = ModFlag.Claw }, + ["damage over time"] = { "Damage", flags = ModFlag.Dot }, + ["physical damage over time"] = { "PhysicalDamage", flags = ModFlag.Dot }, + ["burning damage"] = { "FireDamage", flags = ModFlag.Dot }, + ["righteous fire damage"] = { "Damage", tag = { type = "SkillName", skillName = "Righteous Fire" } }, -- Parser mis-interprets this one (Righteous/Fire Damage instead of Righteous Fire/Damage) -- Crit/accuracy/speed modifiers - ["critical strike chance"] = "critChance{suf}", - ["critical strike multiplier"] = "critMultiplier", - ["accuracy rating"] = "accuracy{suf}", - ["attack speed"] = "attackSpeed{suf}", - ["cast speed"] = "castSpeed{suf}", - ["attack and cast speed"] = "speed{suf}", + ["critical strike chance"] = "CritChance", + ["critical strike multiplier"] = "CritMultiplier", + ["accuracy rating"] = "Accuracy", + ["attack speed"] = { "Speed", flags = ModFlag.Attack }, + ["cast speed"] = { "Speed", flags = ModFlag.Spell }, + ["attack and cast speed"] = "Speed", -- Elemental status ailments - ["to shock"] = "shockChance", - ["shock chance"] = "shockChance", - ["to freeze"] = "freezeChance", - ["freeze chance"] = "freezeChance", - ["to ignite"] = "igniteChance", - ["ignite chance"] = "igniteChance", - ["to freeze, shock and ignite"] = { "freezeChance", "shockChance", "igniteChance" }, - ["shock duration on enemies"] = "shock_duration{suf}", - ["freeze duration on enemies"] = "freeze_duration{suf}", - ["chill duration on enemies"] = "chill_duration{suf}", - ["ignite duration on enemies"] = "ignite_duration{suf}", - ["duration of elemental status ailments on enemies"] = { "shock_duration{suf}", "freeze_duration{suf}", "chill_duration{suf}", "ignite_duration{suf}" }, + ["to shock"] = "EnemyShockChance", + ["shock chance"] = "EnemyShockChance", + ["to freeze"] = "EnemyFreezeChance", + ["freeze chance"] = "EnemyFreezeChance", + ["to ignite"] = "EnemyIgniteChance", + ["ignite chance"] = "EnemyIgniteChance", + ["to freeze, shock and ignite"] = { "EnemyFreezeChance", "EnemyShockChance", "EnemyIgniteChance" }, + ["shock duration on enemies"] = "EnemyShockDuration", + ["freeze duration on enemies"] = "EnemyFreezeDuration", + ["chill duration on enemies"] = "EnemyChillDuration", + ["ignite duration on enemies"] = "EnemyIgniteDuration", + ["duration of elemental status ailments on enemies"] = { "EnemyShockDuration", "EnemyFreezeDuration", "EnemyChillDuration", "EnemyIgniteDuration" }, -- Other debuffs - ["to poison"] = "poisonChance", - ["to poison on hit"] = "poisonChance", - ["poison duration"] = "poison_duration{suf}", - ["to cause bleeding"] = "bleedChance", - ["to cause bleeding on hit"] = "bleedChance", + ["to poison"] = "PoisonChance", + ["to poison on hit"] = "PoisonChance", + ["poison duration"] = { "Duration", keywordFlags = KeywordFlag.Poison }, + ["to cause bleeding"] = "BleedChance", + ["to cause bleeding on hit"] = "BleedChance", + ["bleed duration"] = { "Duration", keywordFlags = KeywordFlag.Bleed }, -- Misc modifiers - ["movement speed"] = "movementSpeed{suf}", - ["light radius"] = "lightRadius{suf}", - ["rarity of items found"] = "lootRarity{suf}", - ["quantity of items found"] = "lootQuantity{suf}", + ["movement speed"] = "MovementSpeed", + ["light radius"] = "LightRadius", + ["rarity of items found"] = "LootRarity", + ["quantity of items found"] = "LootQuantity", } --- List of modifier namespaces -local namespaceList = { +-- List of modifier flags +local modFlagList = { -- Weapon types - ["with axes"] = "axe_", - ["with bows"] = "bow_", - ["with claws"] = "claw_", - ["with daggers"] = "dagger_", - ["with maces"] = "mace_", - ["with staves"] = "staff_", - ["with swords"] = "sword_", - ["with wands"] = "wand_", - ["unarmed"] = "unarmed_", - ["with one handed weapons"] = "weapon1h_", - ["with one handed melee weapons"] = "weapon1hMelee_", - ["with two handed weapons"] = "weapon2h_", - ["with two handed melee weapons"] = "weapon2hMelee_", - ["with ranged weapons"] = "weaponRanged_", + ["with axes"] = { flags = ModFlag.Axe }, + ["with bows"] = { flags = ModFlag.Bow }, + ["with claws"] = { flags = ModFlag.Claw }, + ["with daggers"] = { flags = ModFlag.Dagger }, + ["with maces"] = { flags = ModFlag.Mace }, + ["with staves"] = { flags = ModFlag.Staff }, + ["with swords"] = { flags = ModFlag.Sword }, + ["with wands"] = { flags = ModFlag.Wand }, + ["unarmed"] = { flags = ModFlag.Unarmed }, + ["with one handed weapons"] = { flags = ModFlag.Weapon1H }, + ["with one handed melee weapons"] = { flags = bor(ModFlag.Weapon1H, ModFlag.WeaponMelee) }, + ["with two handed weapons"] = { flags = ModFlag.Weapon2H }, + ["with two handed melee weapons"] = { flags = bor(ModFlag.Weapon2H, ModFlag.WeaponMelee) }, + ["with ranged weapons"] = { flags = ModFlag.WeaponRanged }, -- Skill types - ["spell"] = "spell_", - ["for spells"] = "spell_", - ["with attacks"] = "attack_", - ["for attacks"] = "attack_", - ["weapon"] = "weapon_", - ["with weapons"] = "weapon_", - ["melee"] = "melee_", - ["with melee attacks"] = "melee_", - ["on melee hit"] = "melee_", - ["with poison"] = "poison_", - ["projectile"] = "projectile_", - ["area"] = "aoe_", - ["mine"] = "mine_", - ["with mines"] = "mine_", - ["trap"] = "trap_", - ["with traps"] = "trap_", - ["totem"] = "totem_", - ["with totem skills"] = "totem_", - ["of aura skills"] = "aura_", - ["of curse skills"] = "curse_", - ["for curses"] = "curse_", - ["warcry"] = "warcry_", - ["vaal"] = "vaal_", - ["vaal skill"] = "vaal_", - ["with movement skills"] = "movementSkills_", - ["with lightning skills"] = "lightningSkills_", - ["with cold skills"] = "coldSkills_", - ["with fire skills"] = "fireSkills_", - ["with elemental skills"] = "elementalSkills_", - ["with chaos skills"] = "chaosSkills_", + ["spell"] = { flags = ModFlag.Spell }, + ["for spells"] = { flags = ModFlag.Spell }, + ["with attacks"] = { flags = ModFlag.Attack }, + ["for attacks"] = { flags = ModFlag.Attack }, + ["weapon"] = { flags = ModFlag.Weapon }, + ["with weapons"] = { flags = ModFlag.Weapon }, + ["melee"] = { flags = ModFlag.Melee }, + ["with melee attacks"] = { flags = ModFlag.Melee }, + ["on melee hit"] = { flags = ModFlag.Melee }, + ["with poison"] = { keywordFlags = KeywordFlag.Poison }, + ["projectile"] = { flags = ModFlag.Projectile }, + ["area"] = { flags = ModFlag.Area }, + ["mine"] = { keywordFlags = KeywordFlag.Mine }, + ["with mines"] = { keywordFlags = KeywordFlag.Mine }, + ["trap"] = { keywordFlags = KeywordFlag.Trap }, + ["with traps"] = { keywordFlags = KeywordFlag.Trap }, + ["totem"] = { keywordFlags = KeywordFlag.Totem }, + ["with totem skills"] = { keywordFlags = KeywordFlag.Totem }, + ["of aura skills"] = { keywordFlags = KeywordFlag.Aura }, + ["of curse skills"] = { keywordFlags = KeywordFlag.Curse }, + ["for curses"] = { keywordFlags = KeywordFlag.Curse }, + ["warcry"] = { keywordFlags = KeywordFlag.Warcry }, + ["vaal"] = { keywordFlags = KeywordFlag.Vaal }, + ["vaal skill"] = { keywordFlags = KeywordFlag.Vaal }, + ["with movement skills"] = { keywordFlags = KeywordFlag.Movement }, + ["with lightning skills"] = { keywordFlags = KeywordFlag.Lightning }, + ["with cold skills"] = { keywordFlags = KeywordFlag.Cold }, + ["with fire skills"] = { keywordFlags = KeywordFlag.Fire }, + ["with elemental skills"] = { keywordFlags = bor(KeywordFlag.Lightning, KeywordFlag.Cold, KeywordFlag.Fire) }, + ["with chaos skills"] = { keywordFlags = KeywordFlag.Chaos }, -- Other - ["global"] = "global_", - ["from equipped shield"] = "slot:Shield_", + ["global"] = { tag = { type = "Global" } }, + ["from equipped shield"] = { tag = { type = "SlotName", slotName = "Weapon 2" } }, } --- List of namespaces that appear at the start of a line -local preSpaceList = { - ["^minions have "] = "minion_", - ["^minions deal "] = "minion_", - ["^attacks used by totems have "] = "totem_", - ["^spells cast by totems have "] = "totem_", - ["^attacks have "] = "attack_", - ["^melee attacks have "] = "melee_", - ["^left ring slot: "] = "IfSlot:1_", - ["^right ring slot: "] = "IfSlot:2_", - ["^socketed gems have "] = "SocketedIn:X_all_", - ["^socketed gems deal "] = "SocketedIn:X_all_", - ["^socketed curse gems have "] = "SocketedIn:X_curse_", - ["^socketed melee gems have "] = "SocketedIn:X_melee_", - ["^your flasks grant "] = "", +-- List of modifier flags/tags that appear at the start of a line +local preFlagList = { + ["^minions have "] = { keywordFlags = KeywordFlag.Minion }, + ["^minions deal "] = { keywordFlags = KeywordFlag.Minion }, + ["^attacks used by totems have "] = { keywordFlags = KeywordFlag.Totem }, + ["^spells cast by totems have "] = { keywordFlags = KeywordFlag.Totem }, + ["^attacks have "] = { flags = ModFlag.Attack }, + ["^melee attacks have "] = { flags = ModFlag.Melee }, + ["^left ring slot: "] = { tag = { type = "SlotNumber", num = 1 } }, + ["^right ring slot: "] = { tag = { type = "SlotNumber", num = 2 } }, + ["^socketed gems have "] = { tag = { type = "SocketedIn" } }, + ["^socketed gems deal "] = { tag = { type = "SocketedIn" } }, + ["^socketed curse gems have "] = { tag = { type = "SocketedIn", keyword = "curse" } }, + ["^socketed melee gems have "] = { tag = { type = "SocketedIn", keyword = "melee" } }, + ["^your flasks grant "] = { }, } --- List of special namespaces -local specialSpaceList = { - -- Per charge modifiers - ["per power charge"] = "PerPower_", - ["per frenzy charge"] = "PerFrenzy_", - ["per endurance charge"] = "PerEndurance_", +-- List of modifier tags +local modTagList = { + -- Multipliers + ["per power charge"] = { tag = { type = "Multiplier", var = "PowerCharge" } }, + ["per frenzy charge"] = { tag = { type = "Multiplier", var = "FrenzyCharge" } }, + ["per endurance charge"] = { tag = { type = "Multiplier", var = "EnduranceCharge" } }, + ["per level"] = { tag = { type = "Multiplier", var = "Level" } }, + ["for each normal item you have equipped"] = { tag = { type = "Multiplier", var = "NormalItem" } }, + ["for each magic item you have equipped"] = { tag = { type = "Multiplier", var = "MagicItem" } }, + ["for each rare item you have equipped"] = { tag = { type = "Multiplier", var = "RareItem" } }, + ["for each unique item you have equipped"] = { tag = { type = "Multiplier", var = "UniqueItem" } }, + -- Per stat + ["per (%d+) strength"] = function(num) return { tag = { type = "PerStat", stat = "Str", div = num } } end, + ["per (%d+) dexterity"] = function(num) return { tag = { type = "PerStat", stat = "Dex", div = num } } end, + ["per (%d+) intelligence"] = function(num) return { tag = { type = "PerStat", stat = "Int", div = num } } end, + ["per (%d+) evasion rating"] = function(num) return { tag = { type = "PerStat", stat = "Evasion", div = num } } end, + ["per (%d+) accuracy rating"] = function(num) return { tag = { type = "PerStat", stat = "Accuracy", div = num } } end, -- Slot conditions - ["in main hand"] = "IfSlot:1_", - ["when in main hand"] = "IfSlot:1_", - ["in off hand"] = "IfSlot:2_", - ["when in off hand"] = "IfSlot:2_", + ["in main hand"] = { tag = { type = "SlotNumber", num = 1 } }, + ["when in main hand"] = { tag = { type = "SlotNumber", num = 1 } }, + ["in off hand"] = { tag = { type = "SlotNumber", num = 2 } }, + ["when in off hand"] = { tag = { type = "SlotNumber", num = 2 } }, -- Equipment conditions - ["while holding a shield"] = "CondMod_UsingShield_", - ["with shields"] = "CondMod_UsingShield_", - ["while dual wielding"] = "CondMod_DualWielding_", - ["while wielding a staff"] = "CondMod_UsingStaff_", - ["while unarmed"] = "CondMod_Unarmed_", - ["with a normal item equipped"] = "CondMod_UsingNormalItem_", - ["with a magic item equipped"] = "CondMod_UsingMagicItem_", - ["with a rare item equipped"] = "CondMod_UsingRareItem_", - ["with a unique item equipped"] = "CondMod_UsingUniqueItem_", - ["for each normal item you have equipped"] = "PerNormal_", - ["for each magic item you have equipped"] = "PerMagic_", - ["for each rare item you have equipped"] = "PerRare_", - ["for each unique item you have equipped"] = "PerUnique_", + ["while holding a shield"] = { tag = { type = "Condition", var = "UsingShield" } }, + ["with shields"] = { tag = { type = "Condition", var = "UsingShield" } }, + ["while dual wielding"] = { tag = { type = "Condition", var = "DualWielding" } }, + ["while wielding a staff"] = { tag = { type = "Condition", var = "UsingStaff" } }, + ["while unarmed"] = { tag = { type = "Condition", var = "Unarmed" } }, + ["with a normal item equipped"] = { tag = { type = "Condition", var = "UsingNormalItem" } }, + ["with a magic item equipped"] = { tag = { type = "Condition", var = "UsingMagicItem" } }, + ["with a rare item equipped"] = { tag = { type = "Condition", var = "UsingRareItem" } }, + ["with a unique item equipped"] = { tag = { type = "Condition", var = "UsingUniqueItem" } }, -- Player status conditions - ["when on low life"] = "CondMod_LowLife_", - ["while on low life"] = "CondMod_LowLife_", - ["when not on low life"] = "CondMod_notLowLife_", - ["while not on low life"] = "CondMod_notLowLife_", - ["when on full life"] = "CondMod_FullLife_", - ["when not on full life"] = "CondMod_notFullLife_", - ["while no mana is reserved"] = "CondMod_NoManaReserved_", - ["while you have fortify"] = "CondMod_Fortify_", - ["during onslaught"] = "CondMod_Onslaught_", - ["while you have onslaught"] = "CondMod_Onslaught_", - ["while phasing"] = "CondMod_Phasing_", - ["while using a flask"] = "CondMod_UsingFlask_", - ["during flask effect"] = "CondMod_UsingFlask_", - ["while on consecrated ground"] = "CondMod_OnConsecratedGround_", - ["if you've killed recently"] = "CondMod_KilledRecently_", - ["if you haven't killed recently"] = "CondMod_notKilledRecently_", - ["if you've attacked recently"] = "CondMod_AttackedRecently_", - ["if you've cast a spell recently"] = "CondMod_CastSpellRecently_", - ["if you've summoned a totem recently"] = "CondMod_SummonedTotemRecently_", - ["if you've used a movement skill recently"] = "CondMod_UsedMovementSkillRecently_", - ["if you detonated mines recently"] = "CondMod_DetonatedMinesRecently_", - ["if you've crit in the past 8 seconds"] = "CondMod_CritInPast8Sec_", - ["if energy shield recharge has started recently"] = "CondMod_EnergyShieldRechargeRecently_", + ["when on low life"] = { tag = { type = "Condition", var = "LowLife" } }, + ["while on low life"] = { tag = { type = "Condition", var = "LowLife" } }, + ["when not on low life"] = { tag = { type = "Condition", var = "NotLowLife" } }, + ["while not on low life"] = { tag = { type = "Condition", var = "NotLowLife" } }, + ["when on full life"] = { tag = { type = "Condition", var = "FullLife" } }, + ["when not on full life"] = { tag = { type = "Condition", var = "NotFullLife" } }, + ["while no mana is reserved"] = { tag = { type = "Condition", var = "NoManaReserved" } }, + ["while you have fortify"] = { tag = { type = "Condition", var = "Fortify" } }, + ["during onslaught"] = { tag = { type = "Condition", var = "Onslaught" } }, + ["while you have onslaught"] = { tag = { type = "Condition", var = "Onslaught" } }, + ["while phasing"] = { tag = { type = "Condition", var = "Phasing" } }, + ["while using a flask"] = { tag = { type = "Condition", var = "UsingFlask" } }, + ["during flask effect"] = { tag = { type = "Condition", var = "UsingFlask" } }, + ["while on consecrated ground"] = { tag = { type = "Condition", var = "OnConsecratedGround" } }, + ["if you've killed recently"] = { tag = { type = "Condition", var = "KilledRecently" } }, + ["if you haven't killed recently"] = { tag = { type = "Condition", var = "NotKilledRecently" } }, + ["if you've attacked recently"] = { tag = { type = "Condition", var = "AttackedRecently" } }, + ["if you've cast a spell recently"] = { tag = { type = "Condition", var = "CastSpellRecently" } }, + ["if you've summoned a totem recently"] = { tag = { type = "Condition", var = "SummonedTotemRecently" } }, + ["if you've used a movement skill recently"] = { tag = { type = "Condition", var = "UsedMovementSkillRecently" } }, + ["if you detonated mines recently"] = { tag = { type = "Condition", var = "DetonatedMinesRecently" } }, + ["if you've crit in the past 8 seconds"] = { tag = { type = "Condition", var = "CritInPast8Sec" } }, + ["if energy shield recharge has started recently"] = { tag = { type = "Condition", var = "EnergyShieldRechargeRecently" } }, -- Enemy status conditions - ["against bleeding enemies"] = "CondEffMod_EnemyBleeding_", - ["against poisoned enemies"] = "CondEffMod_EnemyPoisoned_", - ["against burning enemies"] = "CondEffMod_EnemyBurning_", - ["against ignited enemies"] = "CondEffMod_EnemyIgnited_", - ["against shocked enemies"] = "CondEffMod_EnemyShocked_", - ["against frozen enemies"] = "CondEffMod_EnemyFrozen_", - ["against chilled enemies"] = "CondEffMod_EnemyChilled_", - ["enemies which are chilled"] = "CondEffMod_EnemyChilled_", - ["against frozen, shocked or ignited enemies"] = "CondEffMod_EnemyFrozenShockedIgnited_", - ["against enemies that are affected by elemental status ailments"] = "CondEffMod_EnemyElementalStatus_", - ["against enemies that are affected by no elemental status ailments"] = "CondEffMod_notEnemyElementalStatus_", + ["against bleeding enemies"] = { tag = { type = "Condition", var = "EnemyBleeding" }, flags = ModFlag.Hit }, + ["against poisoned enemies"] = { tag = { type = "Condition", var = "EnemyPoisoned" }, flags = ModFlag.Hit }, + ["against burning enemies"] = { tag = { type = "Condition", var = "EnemyBurning" }, flags = ModFlag.Hit }, + ["against ignited enemies"] = { tag = { type = "Condition", var = "EnemyIgnited" }, flags = ModFlag.Hit }, + ["against shocked enemies"] = { tag = { type = "Condition", var = "EnemyShocked" }, flags = ModFlag.Hit }, + ["against frozen enemies"] = { tag = { type = "Condition", var = "EnemyFrozen" }, flags = ModFlag.Hit }, + ["against chilled enemies"] = { tag = { type = "Condition", var = "EnemyChilled" }, flags = ModFlag.Hit }, + ["enemies which are chilled"] = { tag = { type = "Condition", var = "EnemyChilled" }, flags = ModFlag.Hit }, + ["against frozen, shocked or ignited enemies"] = { tag = { type = "Condition", var = "EnemyFrozenShockedIgnited" }, flags = ModFlag.Hit }, + ["against enemies that are affected by elemental status ailments"] = { tag = { type = "Condition", var = "EnemyElementalStatus" }, flags = ModFlag.Hit }, + ["against enemies that are affected by no elemental status ailments"] = { tag = { type = "Condition", var = "NotEnemyElementalStatus" }, flags = ModFlag.Hit }, } +local mod = modLib.createMod +local function flag(name, ...) + return mod(name, "FLAG", true, ...) +end + +local gemNameLookup = { } +for name in pairs(data.gems) do + gemNameLookup[name:lower()] = name +end + -- List of special modifiers local specialModList = { -- Keystones - ["your hits can't be evaded"] = { cannotBeEvaded = true }, - ["never deal critical strikes"] = { neverCrit = true }, - ["no critical strike multiplier"] = { noCritMult = true }, - ["the increase to physical damage from strength applies to projectile attacks as well as melee attacks"] = { ironGrip = true }, - ["converts all evasion rating to armour%. dexterity provides no bonus to evasion rating"] = { ironReflexes = true }, - ["30%% chance to dodge attacks%. 50%% less armour and energy shield, 30%% less chance to block spells and attacks"] = { dodgeAttacks = 30, armourMore = 0.5, energyShieldMore = 0.5, blockChanceMore = 0.7, spellBlockChanceMore = 0.7 }, - ["maximum life becomes 1, immune to chaos damage"] = { chaosInoculation = true }, - ["life regeneration is applied to energy shield instead"] = { zealotsOath = true }, - ["life leech applies instantly%. life regeneration has no effect%."] = { vaalPact = true, noLifeRegen = true }, - ["deal no non%-fire damage"] = { dealNophysical = true, dealNolightning = true, dealNocold = true, dealNochaos = true }, - ["removes all mana%. spend life instead of mana for skills"] = { manaMore = 0, bloodMagic = true }, + ["your hits can't be evaded"] = { flag("CannotBeEvaded") }, + ["never deal critical strikes"] = { flag("NeverCrit") }, + ["no critical strike multiplier"] = { flag("NoCritMultiplier") }, + ["the increase to physical damage from strength applies to projectile attacks as well as melee attacks"] = { flag("IronGrip") }, + ["converts all evasion rating to armour%. dexterity provides no bonus to evasion rating"] = { flag("IronReflexes") }, + ["30%% chance to dodge attacks%. 50%% less armour and energy shield, 30%% less chance to block spells and attacks"] = { mod("AttackDodgeChance", "BASE", 30), mod("Armour", "MORE", -50), mod("EnergyShield", "MORE", -50), mod("BlockChance", "MORE", -30), mod("SpellBlockChance", "MORE", -30) }, + ["maximum life becomes 1, immune to chaos damage"] = { flag("ChaosInoculation") }, + ["life regeneration is applied to energy shield instead"] = { flag("ZealotsOath") }, + ["life leech applies instantly%. life regeneration has no effect%."] = { flag("VaalPact"), flag("NoLifeRegen") }, + ["deal no non%-fire damage"] = { flag("DealNoPhysical"), flag("DealNoLightning"), flag("DealNoCold"), flag("DealNoChaos") }, + ["removes all mana%. spend life instead of mana for skills"] = { mod("Mana", "MORE", -100), flag("BloodMagic") }, -- Ascendancy notables - ["movement skills cost no mana"] = { movementSkills_manaCostMore = 0 }, - ["projectiles have 100%% additional chance to pierce targets at the start of their movement, losing this chance as the projectile travels farther"] = { pierceChance = 100 }, - ["projectile critical strike chance increased by arrow pierce chance"] = { projectile_critChanceInc = 100 }, - ["always poison on hit while using a flask"] = { CondMod_UsingFlask_poisonChance = 100 }, - ["armour received from body armour is doubled"] = { unbreakable = true }, - ["gain (%d+)%% of maximum mana as extra maximum energy shield"] = function(num) return { manaGainAsEnergyShield = num } end, - ["you have fortify"] = { Cond_Fortify = true }, - ["nearby enemies have (%-%d+)%% to chaos resistance"] = function(num) return { effective_chaosResist = num } end, - ["(%d+)%% increased damage of each damage type for which you have a matching golem"] = function(num) return { CondMod_HavePhysicalGolem_physicalInc = num, CondMod_HaveLightningGolem_lightningInc = num, CondMod_HaveColdGolem_coldInc = num, CondMod_HaveFireGolem_fireInc = num, CondMod_HaveChaosGolem_chaosInc = num } end, - ["100%% increased effect of buffs granted by your elemental golems"] = { Cond_LiegeOfThePrimordial = true }, - ["enemies you curse take (%d+)%% increased damage"] = function(num) return { CondMod_EnemyCursed_effective_damageTakenInc = num } end, - ["grants armour equal to (%d+)%% of your reserved life to you and nearby allies"] = function(num) return { armourFromReservedLife = num } end, - ["grants maximum energy shield equal to (%d+)%% of your reserved mana to you and nearby allies"] = function(num) return { energyShieldFromReservedMana = num } end, - ["you and nearby allies deal (%d+)%% increased damage"] = function(num) return { damageInc = num } end, - ["you and nearby allies have (%d+)%% increased movement speed"] = function(num) return { movementSpeedInc = num } end, - ["skills from your helmet penetrate (%d+)%% elemental resistances"] = function(num) return { ["SocketedIn:Helmet_all_elementalPen"] = num } end, - ["skills from your gloves have (%d+)%% increased area of effect"] = function(num) return { ["SocketedIn:Gloves_all_aoeRadiusInc"] = num } end, + ["movement skills cost no mana"] = { mod("ManaCost", "MORE", -100, nil, 0, KeywordFlag.Movement) }, + ["projectiles have 100%% additional chance to pierce targets at the start of their movement, losing this chance as the projectile travels farther"] = { mod("PierceChance", "BASE", 100) }, + ["projectile critical strike chance increased by arrow pierce chance"] = { mod("CritChance", "INC", 100, nil, ModFlag.Projectile) }, + ["always poison on hit while using a flask"] = { mod("PoisonChance", "BASE", 100, { type = "Condition", var = "UsingFlask" }) }, + ["armour received from body armour is doubled"] = { flag("Unbreakable") }, + ["gain (%d+)%% of maximum mana as extra maximum energy shield"] = function(num) return { mod("ManaGainAsEnergyShield", "BASE", num) } end, + ["you have fortify"] = { mod("Misc", "LIST", { type = "Condition", var = "Fortify"}) }, + ["(%d+)%% increased damage of each damage type for which you have a matching golem"] = function(num) return { mod("PhysicalDamage", "INC", num, { type = "Condition", var = "HavePhysicalGolem"}), mod("LightningDamage", "INC", num, { type = "Condition", var = "HaveLightningGolem"}), mod("ColdDamage", "INC", num, { type = "Condition", var = "HaveColdGolem"}), mod("FireDamage", "INC", num, { type = "Condition", var = "HaveFireGolem"}), mod("ChaosDamage", "INC", num, { type = "Condition", var = "HaveChaosGolem"}) } end, + ["100%% increased effect of buffs granted by your elemental golems"] = { flag("LiegeOfThePrimordial") }, + ["every 10 seconds, gain (%d+)%% increased elemental damage for 4 seconds"] = function(num) return { mod("ElementalDamage", "INC", num, { type = "Condition", var = "PendulumOfDestruction" }) } end, + ["every 10 seconds, gain (%d+)%% increased radius of area skills for 4 seconds"] = function(num) return { mod("AreaRadius", "INC", num, { type = "Condition", var = "PendulumOfDestruction" }) } end, + ["enemies you curse take (%d+)%% increased damage"] = function(num) return { mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("DamageTaken", "INC", num) }, { type = "Condition", var = "EnemyCursed" }) } end, + ["nearby enemies have (%-%d+)%% to chaos resistance"] = function(num) return { mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("ChaosResist", "BASE", num) }) } end, + ["nearby enemies take (%d+)%% increased elemental damage"] = function(num) return { mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("ElementalDamageTaken", "INC", num) }) } end, + ["enemies near your totems take (%d+)%% increased physical and fire damage"] = function(num) return { mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("PhysicalDamageTaken", "INC", num) }), mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("FireDamageTaken", "INC", num) }) } end, + ["grants armour equal to (%d+)%% of your reserved life to you and nearby allies"] = function(num) return { mod("Armour", "BASE", num/100, { type = "PerStat", stat = "LifeReserved", div = 1 }) } end, + ["grants maximum energy shield equal to (%d+)%% of your reserved mana to you and nearby allies"] = function(num) return { mod("EnergyShield", "BASE", num/100, { type = "PerStat", stat = "ManaReserved", div = 1 }) } end, + ["you and nearby allies deal (%d+)%% increased damage"] = function(num) return { mod("Damage", "INC", num) } end, + ["you and nearby allies have (%d+)%% increased movement speed"] = function(num) return { mod("MovementSpeed", "INC", num) } end, + ["skills from your helmet penetrate (%d+)%% elemental resistances"] = function(num) return { mod("ElementalPenetration", "BASE", num, { type = "SocketedIn", slotName = "Helmet" }) } end, + ["skills from your gloves have (%d+)%% increased area of effect"] = function(num) return { mod("AreaRadius", "INC", num, { type = "SocketedIn", slotName = "Gloves" }) } end, + ["(%d+)%% less totem damage per totem"] = function(num) return { mod("Damage", "MORE", -num, nil, 0, KeywordFlag.Totem, { type = "PerStat", stat = "ActiveTotemLimit", div = 1 }) } end, -- Special node types - ["(%d+)%% of block chance applied to spells"] = function(num) return { blockChanceConv = num } end, - ["(%d+)%% additional block chance with staves"] = function(num) return { CondMod_UsingStaff_blockChance = num } end, - ["(%d+)%% additional block chance while dual wielding or holding a shield"] = function(num) return { CondMod_DualWielding_blockChance = num, CondMod_UsingShield_blockChance = num } end, - ["can have up to (%d+) additional trap placed at a time"] = function(num) return { activeTrapLimit = num } end, - ["can have up to (%d+) additional remote mine placed at a time"] = function(num) return { activeMineLimit = num } end, + ["(%d+)%% of block chance applied to spells"] = function(num) return { mod("BlockChanceConv", "BASE", num) } end, + ["(%d+)%% additional block chance with staves"] = function(num) return { mod("BlockChance", "BASE", num, { type = "Condition", var = "UsingStaff" }) } end, + ["(%d+)%% additional block chance while dual wielding or holding a shield"] = function(num) return { mod("BlockChance", "BASE", num, { type = "Condition", var = "DualWielding"}), mod("BlockChance", "BASE", num, { type = "Condition", var = "UsingShield"}) } end, + ["can have up to (%d+) additional traps? placed at a time"] = function(num) return { mod("ActiveTrapLimit", "BASE", num) } end, + ["can have up to (%d+) additional remote mines? placed at a time"] = function(num) return { mod("ActiveMineLimit", "BASE", num) } end, + ["can have up to (%d+) additional totems? summoned at a time"] = function(num) return { mod("ActiveTotemLimit", "BASE", num) } end, -- Other modifiers - ["cannot be stunned"] = { avoidStun = 100 }, - ["cannot be shocked"] = { avoidShock = 100 }, - ["cannot be frozen"] = { avoidFreeze = 100 }, - ["cannot be chilled"] = { avoidChill = 100 }, - ["cannot be ignited"] = { avoidIgnite = 100 }, - ["cannot evade enemy attacks"] = { cannotEvade = true }, - ["deal no physical damage"] = { dealNophysical = true }, - ["deal no elemental damage"] = { dealNolightning = true, dealNocold = true, dealNofire = true }, - ["your critical strikes do not deal extra damage"] = { noCritMult = true }, - ["iron will"] = { ironWill = true }, - ["adds an additional arrow"] = { attack_projectileCount = 1 }, - ["(%d+) additional arrows"] = function(num) return { attack_projectileCount = num } end, - ["skills fire an additional projectile"] = { projectileCount = 1 }, - ["spells have an additional projectile"] = { spell_projectileCount = 1 }, - ["skills chain %+(%d) times"] = function(num) return { chainCount = num } end, + ["cannot be stunned"] = { mod("AvoidStun", "BASE", 100) }, + ["cannot be shocked"] = { mod("AvoidShock", "BASE", 100) }, + ["cannot be frozen"] = { mod("AvoidFreeze", "BASE", 100) }, + ["cannot be chilled"] = { mod("AvoidChill", "BASE", 100) }, + ["cannot be ignited"] = { mod("AvoidIgnite", "BASE", 100) }, + ["cannot evade enemy attacks"] = { flag("CannotEvade") }, + ["deal no physical damage"] = { flag("DealNoPhysical") }, + ["deal no elemental damage"] = { flag("DealNoLightning"), flag("DealNoCold"), flag("DealNoFire") }, + ["your critical strikes do not deal extra damage"] = { flag("NoCritMultiplier") }, + ["iron will"] = { flag("IronWill") }, + ["adds an additional arrow"] = { mod("ProjectileCount", "BASE", 1, nil, ModFlag.Attack) }, + ["(%d+) additional arrows"] = function(num) return { mod("ProjectileCount", "BASE", num, nil, ModFlag.Attack) } end, + ["skills fire an additional projectile"] = { mod("ProjectileCount", "BASE", 1) }, + ["spells have an additional projectile"] = { mod("ProjectileCount", "BASE", 1, nil, ModFlag.Spell) }, + ["skills chain %+(%d) times"] = function(num) return { mod("ChainCount", "BASE", num) } end, ["reflects (%d+) physical damage to melee attackers"] = { }, -- Special item local modifiers - ["no physical damage"] = { weaponLocal_noPhysical = true }, - ["all attacks with this weapon are critical strikes"] = { weaponLocal_alwaysCrit = true }, - ["hits can't be evaded"] = { weaponX_cannotBeEvaded = true }, - ["no block chance"] = { shieldLocal_noBlock = true }, - ["causes bleeding on hit"] = { bleedChance = 100 }, - ["poisonous hit"] = { poisonChance = 100 }, + ["no physical damage"] = { mod("Misc", "LIST", { type = "WeaponData", key = "PhysicalMin" }), mod("Misc", "LIST", { type = "WeaponData", key = "PhysicalMax" }), mod("Misc", "LIST", { type = "WeaponData", key = "PhysicalDPS" }) }, + ["all attacks with this weapon are critical strikes"] = { mod("Misc", "LIST", { type = "WeaponData", key = "critChance", value = 100 }) }, + ["hits can't be evaded"] = { mod("Misc", "LIST", { type = "WeaponData", key = "CannotBeEvaded", value = true }) }, + ["no block chance"] = { mod("Misc", "LIST", { type = "ArmourData", key = "BlockChance" }) }, + ["causes bleeding on hit"] = { mod("BleedChance", "BASE", 100, nil, ModFlag.Attack) }, + ["poisonous hit"] = { mod("PoisonChance", "BASE", 100, nil, ModFlag.Attack) }, ["has no sockets"] = { }, ["has 1 socket"] = { }, - ["%+(%d+) to level of socketed gems"] = function(num) return { ["SocketedIn:X_gemLevel_all"] = num } end, - ["%+(%d+) to level of socketed (%a+) gems"] = function(num, _, type) return { ["SocketedIn:X_gemLevel_"..type] = num } end, - ["%+(%d+)%% to quality of socketed (%a+) gems"] = function(num, _, type) return { ["SocketedIn:X_gemQuality_"..type] = num } end, - ["%+(%d+) to level of active socketed skill gems"] = function(num) return { ["SocketedIn:X_gemLevel_active"] = num } end, - ["socketed .*gems are supported by level (%d+) (.+)"] = function(num, _, support) return { ["SocketedIn:X_supportedBy_"..num..":"..support] = true } end, - ["socketed curse gems supported by level (%d+) (.+)"] = function(num, _, support) return { ["SocketedIn:X_supportedBy_"..num..":"..support] = true } end, - ["socketed gems fire an additional projectile"] = { ["SocketedIn:X_all_projectileCount"] = 1 }, - ["socketed gems fire (%d+) additional projectiles"] = function(num) return { ["SocketedIn:X_all_projectileCount"] = num } end, - ["socketed gems reserve no mana"] = { ["SocketedIn:X_all_manaReservedMore"] = 0 }, - ["socketed gems have blood magic"] = { ["SocketedIn:X_all_skill_bloodMagic"] = true }, - ["socketed gems gain (%d+)%% of physical damage as extra lightning damage"] = function(num) return { ["SocketedIn:X_all_physicalGainAslightning"] = num } end, - ["socketed red gems get (%d+)%% physical damage as extra fire damage"] = function(num) return { ["SocketedIn:X_strength_physicalGainAsfire"] = num } end, + ["attacks have blood magic"] = { flag("SkillBloodMagic", nil, ModFlag.Attack) }, + ["%+(%d+) to level of socketed gems"] = function(num) return { mod("GemProperty", "LIST", { keyword = "all", key = "level", value = num }, { type = "SocketedIn" }) } end, + ["%+(%d+) to level of socketed (%a+) gems"] = function(num, _, type) return { mod("GemProperty", "LIST", { keyword = type, key = "level", value = num }, { type = "SocketedIn" }) } end, + ["%+(%d+)%% to quality of socketed (%a+) gems"] = function(num, _, type) return { mod("GemProperty", "LIST", { keyword = type, key = "quality", value = num }, { type = "SocketedIn" }) } end, + ["%+(%d+) to level of active socketed skill gems"] = function(num) return { mod("GemProperty", "LIST", { keyword = "active_skill", key = "level", value = num }, { type = "SocketedIn" }) } end, + ["grants level (%d+) (.+)"] = function(num, _, skill) return { mod("ExtraSkill", "LIST", { name = gemNameLookup[skill:gsub(" skill","")] or "Unknown", level = num }, { type = "SocketedIn" }) } end, + ["curse enemies with (%D+) on %a+"] = function(_, skill) return { mod("ExtraSkill", "LIST", { name = gemNameLookup[skill] or "Unknown", level = 1, noSupports = true }, { type = "SocketedIn" }) } end, + ["curse enemies with level (%d+) (.+) on %a+"] = function(num, _, skill) return { mod("ExtraSkill", "LIST", { name = gemNameLookup[skill] or "Unknown", level = num, noSupports = true }, { type = "SocketedIn" }) } end, + ["socketed .*gems are supported by level (%d+) (.+)"] = function(num, _, support) return { mod("ExtraSupport", "LIST", { name = gemNameLookup[support] or "Unknown", level = num }, { type = "SocketedIn" }) } end, + ["socketed curse gems supported by level (%d+) (.+)"] = function(num, _, support) return { mod("ExtraSupport", "LIST", { name = gemNameLookup[support] or "Unknown", level = num }, { type = "SocketedIn" }) } end, + ["socketed gems fire an additional projectile"] = { mod("ProjectileCount", "BASE", 1, { type = "SocketedIn" }) }, + ["socketed gems fire (%d+) additional projectiles"] = function(num) return { mod("ProjectileCount", "BASE", num, { type = "SocketedIn" }) } end, + ["socketed gems reserve no mana"] = { mod("ManaReserved", "MORE", -100, { type = "SocketedIn" }) }, + ["socketed gems have blood magic"] = { flag("SkillBloodMagic", { type = "SocketedIn" }) }, + ["socketed gems gain (%d+)%% of physical damage as extra lightning damage"] = function(num) return { mod("PhysicalDamageGainAsLightning", "BASE", num, { type = "SocketedIn" }) } end, + ["socketed red gems get (%d+)%% physical damage as extra fire damage"] = function(num) return { mod("PhysicalDamageGainAsFire", "BASE", num, { type = "SocketedIn", keyword = "strength" }) } end, -- Unique item modifiers - ["your cold damage can ignite"] = { coldCanIgnite = true }, - ["your fire damage can shock but not ignite"] = { fireCanShock = true, fireCannotIgnite = true }, - ["your cold damage can ignite but not freeze or chill"] = { coldCanIgnite = true, coldCannotFreeze = true, coldCannotChill = true }, - ["your lightning damage can freeze but not shock"] = { lightningCanFreeze = true, lightningCannotShock = true }, - ["your chaos damage can shock"] = { chaosCanShock = true }, - ["your physical damage can chill"] = { physicalCanChill = true }, - ["your physical damage can shock"] = { physicalCanShock = true }, - ["your chaos damage poisons enemies"] = { poisonChance = 100 }, - ["melee attacks cause bleeding"] = { melee_bleedChance = 100 }, - ["melee attacks poison on hit"] = { melee_poisonChance = 100 }, - ["traps and mines deal (%d+)%-(%d+) additional physical damage"] = function(_, min, max) return { trap_physicalMin = tonumber(min), trap_physicalMax = tonumber(max), mine_physicalMin = tonumber(min), mine_physicalMax = tonumber(max) } end, - ["traps and mines deal (%d+) to (%d+) additional physical damage"] = function(_, min, max) return { trap_physicalMin = tonumber(min), trap_physicalMax = tonumber(max), mine_physicalMin = tonumber(min), mine_physicalMax = tonumber(max) } end, - ["traps and mines have a (%d+)%% chance to poison on hit"] = function(num) return { trap_poisonChance = num, mine_poisonChance = num } end, - ["poison cursed enemies on hit"] = { CondMod_EnemyCursed_poisonChance = 100 }, - ["projectile damage increased by arrow pierce chance"] = { drillneck = true }, - ["gain (%d+) armour per grand spectrum"] = function(num) return { PerGrandSpectrum_armourBase = num, gear_GrandSpectrumCount = 1 } end, - ["gain (%d+) mana per grand spectrum"] = function(num) return { PerGrandSpectrum_manaBase = num, gear_GrandSpectrumCount = 1 } end, - ["(%d+)%% increased elemental damage per grand spectrum"] = function(num) return { PerGrandSpectrum_elementalInc = num, gear_GrandSpectrumCount = 1 } end, - ["counts as dual wielding"] = { Cond_DualWielding = true }, - ["counts as all one handed melee weapon types"] = { weaponX_varunastra = true }, - ["gain (%d+)%% of bow physical damage as extra damage of each element"] = function(num) return { bow_physicalGainAslightning = num, bow_physicalGainAscold = num, bow_physicalGainAsfire = num } end, - ["totems fire (%d+) additional projectiles"] = function(num) return { totem_projectileCount = num } end, - ["when at maximum frenzy charges, attacks poison enemies"] = { CondMod_AtMaxFrenzy_attack_poisonChance = 100 }, - ["skills chain an additional time while at maximum frenzy charges"] = { CondMod_AtMaxFrenzy_chainCount = 1 }, - ["you cannot be shocked while at maximum endurance charges"] = { CondMod_AtMaxEndurance_avoidShock = 100 }, - ["you have no life regeneration"] = { noLifeRegen = true }, - ["cannot block attacks"] = { cannotBlockAttacks = true }, - ["projectiles pierce while phasing"] = { CondMod_Phasing_pierceChance = 100 }, - ["reserves (%d+)%% of life"] = function(num) return { reserved_lifePercent = num } end, + ["your cold damage can ignite"] = { flag("ColdCanIgnite") }, + ["your fire damage can shock but not ignite"] = { flag("FireCanShock"), flag("FireCannotIgnite") }, + ["your cold damage can ignite but not freeze or chill"] = { flag("ColdCanIgnite"), flag("ColdCannotFreeze"), flag("ColdCannotChill") }, + ["your lightning damage can freeze but not shock"] = { flag("LightningCanFreeze"), flag("LightningCannotShock") }, + ["your chaos damage can shock"] = { flag("ChaosCanShock") }, + ["your physical damage can chill"] = { flag("PhysicalCanChill") }, + ["your physical damage can shock"] = { flag("PhysicalCanShock") }, + ["your chaos damage poisons enemies"] = { mod("PoisonChance", "BASE", 100) }, + ["melee attacks cause bleeding"] = { mod("BleedChance", "BASE", 100, nil, ModFlag.Melee) }, + ["melee attacks poison on hit"] = { mod("PoisonChance", "BASE", 100, nil, ModFlag.Melee) }, + ["traps and mines deal (%d+)%-(%d+) additional physical damage"] = function(_, min, max) return { mod("PhysicalMin", "BASE", tonumber(min), nil, 0, bor(KeywordFlag.Trap, KeywordFlag.Mine)), mod("PhysicalMax", "BASE", tonumber(max), nil, 0, bor(KeywordFlag.Trap, KeywordFlag.Mine)) } end, + ["traps and mines deal (%d+) to (%d+) additional physical damage"] = function(_, min, max) return { mod("PhysicalMin", "BASE", tonumber(min), nil, 0, bor(KeywordFlag.Trap, KeywordFlag.Mine)), mod("PhysicalMax", "BASE", tonumber(max), nil, 0, bor(KeywordFlag.Trap, KeywordFlag.Mine)) } end, + ["traps and mines have a (%d+)%% chance to poison on hit"] = function(num) return { mod("PoisonChance", "BASE", num, nil, 0, bor(KeywordFlag.Trap, KeywordFlag.Mine)) } end, + ["poison cursed enemies on hit"] = { mod("PoisonChance", "BASE", 100, { type = "Condition", var = "EnemyCursed" }) }, + ["projectile damage increased by arrow pierce chance"] = { mod("Damage", "INC", 1, nil, ModFlag.Projectile, 0, { type = "PerStat", stat = "PierceChance", div = 1 }) }, + ["gain (%d+) armour per grand spectrum"] = function(num) return { mod("Armour", "BASE", num, { type = "Multiplier", var = "GrandSpectrum" }), mod("Misc", "LIST", { type = "Multiplier", var = "GrandSpectrum", value = 1}) } end, + ["gain (%d+) mana per grand spectrum"] = function(num) return { mod("Mana", "BASE", num, { type = "Multiplier", var = "GrandSpectrum" }), mod("Misc", "LIST", { type = "Multiplier", var = "GrandSpectrum", value = 1}) } end, + ["(%d+)%% increased elemental damage per grand spectrum"] = function(num) return { mod("ElementalDamage", "INC", num, { type = "Multiplier", var = "GrandSpectrum" }), mod("Misc", "LIST", { type = "Multiplier", var = "GrandSpectrum", value = 1}) } end, + ["counts as dual wielding"] = { mod("Misc", "LIST", { type = "Condition", var = "DualWielding"}) }, + ["counts as all one handed melee weapon types"] = { mod("Misc", "LIST", { type = "WeaponData", key = "flag", value = bor(ModFlag.Axe, ModFlag.Claw, ModFlag.Dagger, ModFlag.Mace, ModFlag.Sword)}) }, + ["gain (%d+)%% of bow physical damage as extra damage of each element"] = function(num) return { mod("PhysicalDamageGainAsLightning", "BASE", num, nil, ModFlag.Bow), mod("PhysicalDamageGainAsCold", "BASE", num, nil, ModFlag.Bow), mod("PhysicalDamageGainAsFire", "BASE", num, nil, ModFlag.Bow) } end, + ["totems fire (%d+) additional projectiles"] = function(num) return { mod("ProjectileCount", "BASE", num, nil, 0, KeywordFlag.Totem) } end, + ["when at maximum frenzy charges, attacks poison enemies"] = { mod("PoisonChance", "BASE", 100, nil, ModFlag.Attack, { type = "Condition", var = "AtMaxFrenzyCharges" }) }, + ["skills chain an additional time while at maximum frenzy charges"] = { mod("ChainCount", "BASE", 1, { type = "Condition", var = "AtMaxFrenzyCharges" }) }, + ["you cannot be shocked while at maximum endurance charges"] = { mod("AvoidShock", "BASE", 100, { type = "Condition", var = "AtMaxEnduranceCharges" }) }, + ["you have no life regeneration"] = { flag("NoLifeRegen") }, + ["cannot block attacks"] = { flag("CannotBlockAttacks") }, + ["projectiles pierce while phasing"] = { mod("PierceChance", "BASE", 100, { type = "Condition", var = "Phasing" }) }, + ["reserves (%d+)%% of life"] = function(num) return { } end,--FIXME { reserved_lifePercent = num } end, } local keystoneList = { -- List of keystones that can be found on uniques @@ -469,107 +504,129 @@ local keystoneList = { "Acrobatics", } for _, name in pairs(keystoneList) do - specialModList[name:lower()] = { ["gear_keystone:"..name] = true } + specialModList[name:lower()] = { mod("Keystone", "LIST", name) } end -- Special lookups used for various modifier forms local convTypes = { - ["as extra lightning damage"] = "GainAslightning", - ["added as lightning damage"] = "GainAslightning", - ["as extra cold damage"] = "GainAscold", - ["added as cold damage"] = "GainAscold", - ["as extra fire damage"] = "GainAsfire", - ["added as fire damage"] = "GainAsfire", - ["as extra chaos damage"] = "GainAschaos", - ["added as chaos damage"] = "GainAschaos", - ["converted to lightning damage"] = "ConvertTolightning", - ["converted to cold damage"] = "ConvertTocold", - ["converted to fire damage"] = "ConvertTofire", - ["converted to chaos damage"] = "ConvertTochaos", + ["as extra lightning damage"] = "GainAsLightning", + ["added as lightning damage"] = "GainAsLightning", + ["as extra cold damage"] = "GainAsCold", + ["added as cold damage"] = "GainAsCold", + ["as extra fire damage"] = "GainAsFire", + ["added as fire damage"] = "GainAsFire", + ["as extra chaos damage"] = "GainAsChaos", + ["added as chaos damage"] = "GainAsChaos", + ["converted to lightning damage"] = "ConvertToLightning", + ["converted to cold damage"] = "ConvertToCold", + ["converted to fire damage"] = "ConvertToFire", + ["converted to chaos damage"] = "ConvertToChaos", +} +local dmgTypes = { + ["physical"] = "Physical", + ["lightning"] = "Lightning", + ["cold"] = "Cold", + ["fire"] = "Fire", + ["chaos"] = "Chaos", } local penTypes = { - ["lightning resistance"] = "lightningPen", - ["cold resistance"] = "coldPen", - ["fire resistance"] = "firePen", - ["elemental resistance"] = "elementalPen", - ["elemental resistances"] = "elementalPen", + ["lightning resistance"] = "LightningPenetration", + ["cold resistance"] = "ColdPenetration", + ["fire resistance"] = "FirePenetration", + ["elemental resistance"] = "ElementalPenetration", + ["elemental resistances"] = "ElementalPenetration", } local regenTypes = { - ["life"] = "lifeRegen{suf}", - ["maximum life"] = "lifeRegen{suf}", - ["mana"] = "manaRegen{suf}", - ["energy shield"] = "energyShieldRegen{suf}", + ["life"] = "LifeRegen", + ["maximum life"] = "LifeRegen", + ["mana"] = "ManaRegen", + ["energy shield"] = "EnergyShieldRegen", } -- Build active skill name lookup local skillNameList = { } for skillName, data in pairs(data.gems) do if not data.support then - skillNameList[" "..skillName:lower().." "] = "Skill:" .. skillName .. "_" + skillNameList[" "..skillName:lower().." "] = { tag = { type = "SkillName", skillName = skillName } } end end -local function getSimpleConv(src, dst, factor) +local function getSimpleConv(src, dst, type, factor) return function(nodeMods, out, data) - if nodeMods and nodeMods[src] then - modLib.listMerge(out, dst, nodeMods[src] * factor) - modLib.listUnmerge(out, src, nodeMods[src]) + if nodeMods then + local nodeVal = nodeMods:Sum(type, nil, src) + if nodeVal ~= 0 then + out:NewMod(src, type, -nodeVal, "Node:Jewel") + out:NewMod(dst, type, nodeVal * factor, "Node:Jewel") + end end end end -local function getMatchConv(others, dst) +local function getMatchConv(others, dst, type) return function(nodeMods, out, data) if nodeMods then - for k, v in pairs(nodeMods) do + for _, mod in ipairs(nodeMods) do for _, other in pairs(others) do - if k:match(other) then - modLib.listMerge(out, k:gsub(other, dst), v) - modLib.listUnmerge(out, k, v) + if mod.name:match(other) then + out:NewMod(mod.name, type, -mod.value, "Node:Jewel") + out:NewMod(mod.name:gsub(other, dst), type, mod.value, "Node:Jewel") end end end end end end -local function getPerStat(dst, stat, factor) +local function getPerStat(dst, type, flags, stat, factor) return function(nodeMods, out, data) if nodeMods then - data[stat] = (data[stat] or 0) + (nodeMods[stat] or 0) + data[stat] = (data[stat] or 0) + nodeMods:Sum("BASE", nil, stat) else - modLib.listMerge(out, dst, math.floor(data[stat] * factor + 0.5)) + out:NewMod(dst, type, math.floor(data[stat] * factor + 0.5), "Node:Jewel", flags) end end end -- List of radius jewel functions local jewelFuncs = { - ["Strength from Passives in Radius is Transformed to Dexterity"] = getSimpleConv("strBase", "dexBase", 1), - ["Dexterity from Passives in Radius is Transformed to Strength"] = getSimpleConv("dexBase", "strBase", 1), - ["Strength from Passives in Radius is Transformed to Intelligence"] = getSimpleConv("strBase", "intBase", 1), - ["Intelligence from Passives in Radius is Transformed to Strength"] = getSimpleConv("intBase", "strBase", 1), - ["Dexterity from Passives in Radius is Transformed to Intelligence"] = getSimpleConv("dexBase", "intBase", 1), - ["Intelligence from Passives in Radius is Transformed to Dexterity"] = getSimpleConv("intBase", "dexBase", 1), - ["Increases and Reductions to Life in Radius are Transformed to apply to Energy Shield"] = getSimpleConv("lifeInc", "energyShieldInc", 1), - ["Increases and Reductions to Energy Shield in Radius are Transformed to apply to Armour at 200% of their value"] = getSimpleConv("energyShieldInc", "armourInc", 2), - ["Increases and Reductions to Life in Radius are Transformed to apply to Mana at 200% of their value"] = getSimpleConv("lifeInc", "manaInc", 2), - ["Increases and Reductions to Physical Damage in Radius are Transformed to apply to Cold Damage"] = getMatchConv({"physicalInc"}, "coldInc"), - ["Increases and Reductions to Cold Damage in Radius are Transformed to apply to Physical Damage"] = getMatchConv({"coldInc"}, "physicalInc"), - ["Increases and Reductions to other Damage Types in Radius are Transformed to apply to Fire Damage"] = getMatchConv({"physicalInc","coldInc","lightningInc","chaosInc"}, "fireInc"), - ["Melee and Melee Weapon Type modifiers in Radius are Transformed to Bow Modifiers"] = getMatchConv({"melee_","weapon1hMelee_","weapon2hMelee_","axe_","claw_","dagger_","mace_","staff_","sword_"}, "bow_"), - ["Adds 1 to maximum Life per 3 Intelligence in Radius"] = getPerStat("lifeBase", "intBase", 1 / 3), - ["Adds 1 to Maximum Life per 3 Intelligence Allocated in Radius"] = getPerStat("lifeBase", "intBase", 1 / 3), - ["1% increased Evasion Rating per 3 Dexterity Allocated in Radius"] = getPerStat("evasionInc", "dexBase", 1 / 3), - ["1% increased Claw Physical Damage per 3 Dexterity Allocated in Radius"] = getPerStat("claw_physicalInc", "dexBase", 1 / 3), - ["1% increased Melee Physical Damage while Unarmed per 3 Dexterity Allocated in Radius"] = getPerStat("unarmed_physicalInc", "dexBase", 1 / 3), - ["3% increased Totem Life per 10 Strength in Radius"] = getPerStat("totemLifeInc", "strBase", 3 / 10), - ["3% increased Totem Life per 10 Strength Allocated in Radius"] = getPerStat("totemLifeInc", "strBase", 3 / 10), - ["Adds 1 maximum Lightning Damage to Attacks per 1 Dexterity Allocated in Radius"] = getPerStat("attack_lightningMax", "dexBase", 1), - ["5% increased Chaos damage per 10 Intelligence from Allocated Passives in Radius"] = getPerStat("chaosInc", "intBase", 5 / 10), + ["Strength from Passives in Radius is Transformed to Dexterity"] = getSimpleConv("Str", "Dex", "BASE", 1), + ["Dexterity from Passives in Radius is Transformed to Strength"] = getSimpleConv("Dex", "Str", "BASE", 1), + ["Strength from Passives in Radius is Transformed to Intelligence"] = getSimpleConv("Str", "Int", "BASE", 1), + ["Intelligence from Passives in Radius is Transformed to Strength"] = getSimpleConv("Int", "Str", "BASE", 1), + ["Dexterity from Passives in Radius is Transformed to Intelligence"] = getSimpleConv("Dex", "Int", "BASE", 1), + ["Intelligence from Passives in Radius is Transformed to Dexterity"] = getSimpleConv("Int", "Dex", "BASE", 1), + ["Increases and Reductions to Life in Radius are Transformed to apply to Energy Shield"] = getSimpleConv("Life", "EnergyShield", "INC", 1), + ["Increases and Reductions to Energy Shield in Radius are Transformed to apply to Armour at 200% of their value"] = getSimpleConv("EnergyShield", "Armour", "INC", 2), + ["Increases and Reductions to Life in Radius are Transformed to apply to Mana at 200% of their value"] = getSimpleConv("Life", "Mana", "INC", 2), + ["Increases and Reductions to Physical Damage in Radius are Transformed to apply to Cold Damage"] = getMatchConv({"PhysicalDamage"}, "ColdDamage", "INC"), + ["Increases and Reductions to Cold Damage in Radius are Transformed to apply to Physical Damage"] = getMatchConv({"ColdDamage"}, "PhysicalDamage", "INC"), + ["Increases and Reductions to other Damage Types in Radius are Transformed to apply to Fire Damage"] = getMatchConv({"PhysicalDamage","ColdDamage","LightningDamage","ChaosDamage"}, "FireDamage", "INC"), + ["Melee and Melee Weapon Type modifiers in Radius are Transformed to Bow Modifiers"] = function(nodeMods, out, data) + if nodeMods then + local mask1 = bor(ModFlag.Axe, ModFlag.Claw, ModFlag.Dagger, ModFlag.Mace, ModFlag.Staff, ModFlag.Sword, ModFlag.Melee) + local mask2 = bor(ModFlag.Weapon1H, ModFlag.WeaponMelee) + local mask3 = bor(ModFlag.Weapon2H, ModFlag.WeaponMelee) + for _, mod in ipairs(nodeMods) do + if band(mod.flags, mask1) ~= 0 or band(mod.flags, mask2) == mask2 or band(mod.flags, mask3) == mask3 then + out:NewMod(mod.name, mod.type, -mod.value, "Node:Jewel", mod.flags, mod.keywordFlags, unpack(mod.tag)) + out:NewMod(mod.name, mod.type, mod.value, "Node:Jewel", bor(band(mod.flags, bnot(bor(mask1, mask2, mask3))), ModFlag.Bow), mod.keywordFlags, unpack(mod.tag)) + end + end + end + end, + ["Adds 1 to maximum Life per 3 Intelligence in Radius"] = getPerStat("Life", "BASE", 0, "Int", 1 / 3), + ["Adds 1 to Maximum Life per 3 Intelligence Allocated in Radius"] = getPerStat("Life", "BASE", 0, "Int", 1 / 3), + ["1% increased Evasion Rating per 3 Dexterity Allocated in Radius"] = getPerStat("Evasion", "INC", 0, "Dex", 1 / 3), + ["1% increased Claw Physical Damage per 3 Dexterity Allocated in Radius"] = getPerStat("PhysicalDamage", "INC", ModFlag.Claw, "Dex", 1 / 3), + ["1% increased Melee Physical Damage while Unarmed per 3 Dexterity Allocated in Radius"] = getPerStat("PhysicalDamage", "INC", ModFlag.Unarmed, "Dex", 1 / 3), + ["3% increased Totem Life per 10 Strength in Radius"] = getPerStat("TotemLife", "INC", 0, "Str", 3 / 10), + ["3% increased Totem Life per 10 Strength Allocated in Radius"] = getPerStat("TotemLife", "INC", 0, "Str", 3 / 10), + ["Adds 1 maximum Lightning Damage to Attacks per 1 Dexterity Allocated in Radius"] = getPerStat("LightningMax", "BASE", ModFlag.Attack, "Dex", 1), + ["5% increased Chaos damage per 10 Intelligence from Allocated Passives in Radius"] = getPerStat("ChaosDamage", "INC", 0, "Int", 5 / 10), ["Dexterity and Intelligence from passives in Radius count towards Strength Melee Damage bonus"] = function(nodeMods, out, data) if nodeMods then - data.dexBase = (data.dexBase or 0) + (nodeMods.dexBase or 0) - data.intBase = (data.intBase or 0) + (nodeMods.intBase or 0) + data.Dex = (data.Dex or 0) + nodeMods:Sum("BASE", 0, "Dex") + data.Int = (data.Int or 0) + nodeMods:Sum("BASE", 0, "Int") else - modLib.listMerge(out, "dexIntToMeleeBonus", data.dexBase + data.intBase) + out:NewMod("DexIntToMeleeBonus", "BASE", data.Dex + data.Int, "Node:Jewel") end end, } @@ -602,13 +659,13 @@ return function(line) end for desc, func in pairs(jewelFuncs) do if desc:lower() == line:lower() then - return { jewelFunc = func } + return { mod("Misc", "LIST", { type = "JewelFunc", func = func }) } end end - -- Check for a namespace at the start of the line - local space - space, line = scan(line, preSpaceList) + -- Check for a flag/tag specification at the start of the line + local modFlag + modFlag, line = scan(line, preFlagList) -- Scan for modifier form local modForm, formCap @@ -618,86 +675,120 @@ return function(line) end local num = tonumber(formCap[1]) - -- Check for special namespaces (per-charge, conditionals) - local specialSpace - specialSpace, line = scan(line, specialSpaceList, true) + -- Check for tags (per-charge, conditionals) + local modTag, modTag2 + modTag, line, cap = scan(line, modTagList) + if type(modTag) == "function" then + modTag = modTag(tonumber(cap[1]), unpack(cap)) + end + if modTag then + modTag2, line, cap = scan(line, modTagList) + if type(modTag2) == "function" then + modTag2 = modTag2(tonumber(cap[1]), unpack(cap)) + end + end -- Scan for modifier name local modName modName, line = scan(line, modNameList, true) -- Scan for skill name - local skillSpace - skillSpace, line = scan(line, skillNameList, true) + local skillTag + skillTag, line = scan(line, skillNameList, true) - -- Scan for namespace if one hasn't been found already - if not space then - space, line = scan(line, namespaceList, true) + -- Scan for flags if one hasn't been found already + if not modFlag then + modFlag, line = scan(line, modFlagList, true) end - -- Find modifier value and suffix according to form - local val, suffix + -- Find modifier value and type according to form + local modValue = num + local modType = "BASE" + local modSuffix = "" if modForm == "INC" then - val = num - suffix = "Inc" + modType = "INC" elseif modForm == "RED" then - val = -num - suffix = "Inc" + modValue = -num + modType = "INC" elseif modForm == "MORE" then - val = 1 + num / 100 - suffix = "More" + modType = "MORE" elseif modForm == "LESS" then - val = 1 - num / 100 - suffix = "More" + modValue = -num + modType = "MORE" elseif modForm == "BASE" then - val = num - suffix = "Base" elseif modForm == "CHANCE" then - val = num - elseif modForm == "CONV" then - val = num - suffix, line = scan(line, convTypes, true) - if not suffix then + elseif modForm == "CONV" then + modSuffix, line = scan(line, convTypes, true) + if not modSuffix then return { }, line end elseif modForm == "PEN" then - val = num modName, line = scan(line, penTypes, true) if not modName then return { }, line end elseif modForm == "REGENPERCENT" then - val = num - suffix = "Percent" - modName = regenTypes[formCap[2]] - if not modName then + local pool = regenTypes[formCap[2]] + if not pool then return { }, line end + modName = pool .. "Percent" elseif modForm == "REGENFLAT" then - val = num - suffix = "Base" modName = regenTypes[formCap[2]] if not modName then return { }, line end elseif modForm == "DMG" then - val = { tonumber(formCap[1]), tonumber(formCap[2]) } - modName = { formCap[3].."Min", formCap[3].."Max" } + local damageType = dmgTypes[formCap[3]] + if not damageType then + return { }, line + end + modValue = { tonumber(formCap[1]), tonumber(formCap[2]) } + modName = { damageType.."Min", damageType.."Max" } elseif modForm == "DMGATTACKS" then - val = { tonumber(formCap[1]), tonumber(formCap[2]) } - modName = { formCap[3].."Min", formCap[3].."Max" } - space = space or "attack_" + local damageType = dmgTypes[formCap[3]] + if not damageType then + return { }, line + end + modValue = { tonumber(formCap[1]), tonumber(formCap[2]) } + modName = { damageType.."Min", damageType.."Max" } + modFlag = modFlag or { flags = ModFlag.Attack } elseif modForm == "DMGSPELLS" then - val = { tonumber(formCap[1]), tonumber(formCap[2]) } - modName = { formCap[3].."Min", formCap[3].."Max" } - space = "spell_" + local damageType = dmgTypes[formCap[3]] + if not damageType then + return { }, line + end + modValue = { tonumber(formCap[1]), tonumber(formCap[2]) } + modName = { damageType.."Min", damageType.."Max" } + modFlag = modFlag or { flags = ModFlag.Spell } + end + + -- Combine flags and tags + local flags = 0 + local keywordFlags = 0 + local tagList = { } + for _, data in pairs({ modName, modFlag, modTag, modTag2, skillTag }) do + if type(data) == "table" then + flags = bor(flags, data.flags or 0) + keywordFlags = bor(keywordFlags, data.keywordFlags or 0) + if data.tag then + t_insert(tagList, copyTable(data.tag)) + end + end end -- Generate modifier list local nameList = modName or "" local modList = { } for i, name in ipairs(type(nameList) == "table" and nameList or { nameList }) do - modList[(skillSpace or "") .. (specialSpace or "") .. (space or "") .. name:gsub("{suf}", suffix or "")] = type(val) == "table" and val[i] or val + modList[i] = { + name = name .. modSuffix, + type = modType, + value = type(modValue) == "table" and modValue[i] or modValue, + flags = flags, + keywordFlags = keywordFlags, + tagList = tagList, + } end return modList, line:match("%S") and line end \ No newline at end of file diff --git a/Modules/ModTools.lua b/Modules/ModTools.lua index 9ba64758..f0a2324f 100644 --- a/Modules/ModTools.lua +++ b/Modules/ModTools.lua @@ -7,216 +7,463 @@ local t_insert = table.insert local m_floor = math.floor local m_abs = math.abs +local band = bit.band +local bor = bit.bor modLib = { } +local function createMod(modName, modType, modVal, ...) + local flags = 0 + local keywordFlags = 0 + local tagStart = 1 + local source + if select('#', ...) >= 1 and type(select(1, ...)) == "string" then + source = select(1, ...) + tagStart = 2 + end + if select('#', ...) >= 2 and type(select(2, ...)) == "number" then + flags = select(2, ...) + tagStart = 3 + end + if select('#', ...) >= 3 and type(select(3, ...)) == "number" then + keywordFlags = select(3, ...) + tagStart = 4 + end + return { + name = modName, + type = modType, + value = modVal, + flags = flags, + keywordFlags = keywordFlags, + source = source, + tagList = { select(tagStart, ...) } + } +end +modLib.createMod = createMod + modLib.parseMod = LoadModule("Modules/ModParser") --- Break modifier name into namespace and mod name -local spaceLookup = { } -function modLib.getSpaceName(modName) - if not spaceLookup[modName] then - local spaceName, mod = modName:match("^([^_]+)_(.+)$") - if not spaceName then - spaceName = "global" - mod = modName +local function formatFlags(flags, src) + local flagNames = { } + for name, val in pairs(src) do + if band(flags, val) == val then + t_insert(flagNames, name) end - spaceLookup[modName] = { spaceName, mod } - return spaceName, mod end - return unpack(spaceLookup[modName]) + table.sort(flagNames) + local ret + for i, name in ipairs(flagNames) do + ret = (ret and ret.."," or "") .. name + end + return ret or "-" end +modLib.formatFlags = formatFlags --- Extract condition name from modifier name -local condLookup = { } -function modLib.getCondName(modName) - if not condLookup[modName] then - local isNot, condName, mod = modName:match("^(n?o?t?)(%w+)_(.+)$") - isNot = (isNot == "not") - condLookup[modName] = { isNot, condName, mod } - return isNot, condName, mod - end - return unpack(condLookup[modName]) -end - --- Magic table to check modifier type: --- "MORE" = multiplicative (contains 'More' in the modifier name) --- "INC" = additive (contains 'Inc' in the modifier name) -modLib.getModType = { } -modLib.getModType.__index = function(t, modName) - local val - if modName:match("More$") then - val = "MORE" - elseif modName:match("Inc$") then - val = "INC" - else - val = "BASE" - end - t[modName] = val - return val -end -setmetatable(modLib.getModType, modLib.getModType) - --- Merge modifier with existing mod list, respecting additivity/multiplicativity -function modLib.listMerge(modList, modName, modVal) - if modList[modName] then - if type(modVal) == "boolean" then - modList[modName] = modList[modName] or modVal - elseif type(modVal) == "function" then - local orig = modList[modName] - modList[modName] = function(...) orig(...) modVal(...) end - elseif modLib.getModType[modName] == "MORE" then - modList[modName] = modList[modName] * modVal - else - modList[modName] = modList[modName] + modVal - end - else - modList[modName] = modVal - end -end - --- Scale and merge modifier with existing mod list -function modLib.listScaleMerge(modList, modName, modVal, scale) - if type(modVal) == "number" then - local type = modLib.getModType[modName] - if type == "MORE" then - modLib.listMerge(modList, modName, 1 + m_floor((modVal - 1) * scale * 100) / 100) - elseif type == "INC" or m_floor(modVal) == modVal then -- Yes, there's a nasty hack there, move along - modLib.listMerge(modList, modName, m_floor(modVal * scale)) - else - modLib.listMerge(modList, modName, modVal * scale) - end - else - modLib.listMerge(modList, modName, modVal) - end -end - - --- Unmerge modifier from existing mod list, respecting additivity/multiplicativity -function modLib.listUnmerge(modList, modName, modVal) - if type(modVal) == "boolean" then - if modVal == true then - modList[modName] = false - end - elseif type(modVal) == "string" then - modList[modName] = nil - elseif modLib.getModType[modName] == "MORE" then - if modVal == 0 then - modList[modName] = 1 - else - modList[modName] = (modList[modName] or 1) / modVal - end - else - modList[modName] = (modList[modName] or 0) - modVal - end -end - --- Merge modifier with mod database -function modLib.dbMerge(modDB, spaceName, modName, modVal) - if not spaceName then - spaceName, modName = modLib.getSpaceName(modName) - elseif spaceName == "" then - spaceName = "global" - end - if not modDB[spaceName] then - modDB[spaceName] = { } - end - modLib.listMerge(modDB[spaceName], modName, modVal) -end - --- Scale and merge modifier with mod database -function modLib.dbScaleMerge(modDB, spaceName, modName, modVal, scale) - if not spaceName then - spaceName, modName = modLib.getSpaceName(modName) - elseif spaceName == "" then - spaceName = "global" - end - if not modDB[spaceName] then - modDB[spaceName] = { } - end - modLib.listScaleMerge(modDB[spaceName], modName, modVal, scale) -end - --- Scale and merge modifier list with mod database -function modLib.dbScaleMergeList(modDB, modList, scale) - if scale and scale ~= 1 then - for k, modVal in pairs(modList) do - local spaceName, modName = modLib.getSpaceName(k) - if not modDB[spaceName] then - modDB[spaceName] = { } +local function formatTags(tagList) + local ret + for _, tag in ipairs(tagList) do + local paramNames = { } + local haveType + for name, val in pairs(tag) do + if name == "type" then + haveType = true + else + t_insert(paramNames, name) end - modLib.listScaleMerge(modDB[spaceName], modName, modVal, scale) end - else - modLib.dbMergeList(modDB, modList) - end -end - --- Unmerge modifier from mod database -function modLib.dbUnmerge(modDB, spaceName, modName, modVal) - if not spaceName then - spaceName, modName = modLib.getSpaceName(modName) - elseif spaceName == "" then - spaceName = "global" - end - if not modDB[spaceName] then - modDB[spaceName] = { } - end - modLib.listUnmerge(modDB[spaceName], modName, modVal) -end - --- Merge modifier list with mod database -function modLib.dbMergeList(modDB, modList) - for k, modVal in pairs(modList) do - local spaceName, modName = modLib.getSpaceName(k) - if not modDB[spaceName] then - modDB[spaceName] = { } + table.sort(paramNames) + if haveType then + t_insert(paramNames, 1, "type") end - modLib.listMerge(modDB[spaceName], modName, modVal) - end -end - --- Unmerge modifier list from mod database -function modLib.dbUnmergeList(modDB, modList) - for k, modVal in pairs(modList) do - local spaceName, modName = modLib.getSpaceName(k) - if not modDB[spaceName] then - modDB[spaceName] = { } + local str = "" + for i, paramName in ipairs(paramNames) do + if i > 1 then + str = str .. "/" + end + str = str .. string.format("%s=%s", paramName, tostring(tag[paramName])) end - modLib.listUnmerge(modDB[spaceName], modName, modVal) + ret = (ret and ret.."," or "") .. str end + return ret or "-" end --- Print modifier list to the console -function modLib.listPrint(modList, tab) - local names = { } - for k in pairs(modList) do - if type(k) == "string" then - t_insert(names, k) - end +local function formatValue(value) + if type(value) ~= "table" then + return tostring(value) end - table.sort(names) - for _, name in pairs(names) do - ConPrintf("%s%s = %s", string.rep("\t", tab or 0), name, modList[name]) - end -end - --- Print modifier database to the console -function modLib.dbPrint(modDB) - local spaceNames = { } - for k in pairs(modDB) do - t_insert(spaceNames, k) - end - table.sort(spaceNames) - for _, spaceName in pairs(spaceNames) do - if type(modDB[spaceName]) ~= "table" then - ConPrintf("%s = %s", spaceName, modDB[spaceName]) - elseif next(modDB[spaceName]) then - ConPrintf("%s = {", spaceName) - modLib.listPrint(modDB[spaceName], 1) - ConPrintf("},") + local paramNames = { } + local haveType + for name, val in pairs(value) do + if name == "type" then + haveType = true else - ConPrintf("%s = { },", spaceName) + t_insert(paramNames, name) end end + table.sort(paramNames) + if haveType then + t_insert(paramNames, 1, "type") + end + local ret = "" + for i, paramName in ipairs(paramNames) do + if i > 1 then + ret = ret .. "/" + end + ret = ret .. string.format("%s=%s", paramName, tostring(value[paramName])) + end + return "{"..ret.."}" +end + +function modLib.formatMod(mod) + return string.format("%s = %s|%s|%s|%s|%s", formatValue(mod.value), mod.name, mod.type, formatFlags(mod.flags, ModFlag), formatFlags(mod.keywordFlags, KeywordFlag), formatTags(mod.tagList)) +end + +local hack = { } + +local ModListClass = common.NewClass("ModList", function(self) + self.multipliers = { } + self.conditions = { } + self.stats = { } +end) + +function ModListClass:AddMod(mod) + t_insert(self, mod) +end + +function ModListClass:AddList(modList) + for i = 1, #modList do + t_insert(self, modList[i]) + end +end + +function ModListClass:CopyList(modList) + for i = 1, #modList do + self:AddMod(copyTable(modList[i])) + end +end + +function ModListClass:ScaleAddList(modList, scale) + for i = 1, #modList do + local scaledMod = copyTable(modList[i]) + if type(scaledMod.value) == "number" then + scaledMod.value = (m_floor(scaledMod.value) == scaledMod.value) and m_floor(scaledMod.value * scale) or scaledMod.value * scale + end + self:AddMod(scaledMod) + end +end + +function ModListClass:NewMod(...) + self:AddMod(createMod(...)) +end + +function ModListClass:Sum(type, cfg, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) + local flags = cfg and cfg.flags or 0 + local keywordFlags = cfg and cfg.keywordFlags or 0 + local skillName = cfg and cfg.skillName + local skillGem = cfg and cfg.skillGem + local skillPart = cfg and cfg.skillPart + local slotName = cfg and cfg.slotName + local source = cfg and cfg.source + local tabulate = cfg and cfg.tabulate + local result + local nullValue = 0 + if tabulate or type == "LIST" then + result = { } + nullValue = nil + elseif type == "MORE" then + result = 1 + elseif type == "FLAG" then + result = false + nullValue = false + else + result = 0 + end + hack[1] = arg1 + if arg1 then + hack[2] = arg2 + if arg2 then + hack[3] = arg3 + if arg3 then + hack[4] = arg4 + if arg4 then + hack[5] = arg5 + if arg5 then + hack[6] = arg6 + if arg6 then + hack[7] = arg7 + if arg7 then + hack[8] = arg8 + end + end + end + end + end + end + end + for i = 1, #hack do --i = 1, select('#', ...) do + local modName = hack[i]--select(i, ...) + for i = 1, #self do + local mod = self[i] + if mod.name == modName and mod.type == type and band(flags, mod.flags) == mod.flags and (mod.keywordFlags == 0 or band(keywordFlags, mod.keywordFlags) ~= 0) and (not source or mod.source:match(source)) then + local value = mod.value + for _, tag in pairs(mod.tagList) do + if tag.type == "Multiplier" then + local mult = (self.multipliers[tag.var] or 0) + if _G.type(value) == "table" then + value = copyTable(value) + value.value = value.value * mult + else + value = value * mult + end + elseif tag.type == "PerStat" then + local mult = m_floor((self.stats[tag.stat] or 0) / tag.div + 0.0001) + (tag.base or 0) + if _G.type(value) == "table" then + value = copyTable(value) + value.value = value.value * mult + else + value = value * mult + end + elseif tag.type == "Condition" then + if not self.conditions[tag.var] then + value = nullValue + end + elseif tag.type == "SocketedIn" then + if tag.slotName ~= slotName or (tag.keyword and (not skillGem or not gemIsType(skillGem, tag.keyword))) then + value = nullValue + end + elseif tag.type == "SkillName" then + if tag.skillName ~= skillName then + value = nullValue + end + elseif tag.type == "SkillPart" then + if tag.skillPart ~= skillPart then + value = nullValue + end + elseif tag.type == "SlotName" then + if tag.slotName ~= slotName then + value = nullValue + end + end + end + if tabulate or type == "LIST" then + if value then + t_insert(result, value) + end + elseif type == "MORE" then + result = result * (1 + value / 100) + elseif type == "FLAG" then + result = result or value + else + result = result + value + end + end + end + hack[i] = nil + end + return result +end + +function ModListClass:Print() + for _, mod in ipairs(self) do + ConPrintf("%s|%s", modLib.formatMod(mod), mod.source or "?") + end +end + +local ModDBClass = common.NewClass("ModDB", function(self) + self.mods = { } + self.multipliers = { } + self.conditions = { } + self.stats = { } +end) + +function ModDBClass:AddMod(mod) + local name = mod.name + if not self.mods[name] then + self.mods[name] = { } + end + t_insert(self.mods[name], mod) +end + +function ModDBClass:AddList(modList) + local mods = self.mods + for i = 1, #modList do + local mod = modList[i] + local name = mod.name + if not mods[name] then + mods[name] = { } + end + t_insert(mods[name], mod) + end +end + +function ModDBClass:CopyList(modList) + for i = 1, #modList do + self:AddMod(copyTable(modList[i])) + end +end + +function ModDBClass:ScaleAddList(modList, scale) + for i = 1, #modList do + local scaledMod = copyTable(modList[i]) + if type(scaledMod.value) == "number" then + scaledMod.value = (m_floor(scaledMod.value) == scaledMod.value) and m_floor(scaledMod.value * scale) or scaledMod.value * scale + end + self:AddMod(scaledMod) + end +end + +function ModDBClass:NewMod(...) + self:AddMod(createMod(...)) +end + +function ModDBClass:Sum(type, cfg, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) + local flags = cfg and cfg.flags or 0 + local keywordFlags = cfg and cfg.keywordFlags or 0 + local skillName = cfg and cfg.skillName + local skillGem = cfg and cfg.skillGem + local skillPart = cfg and cfg.skillPart + local slotName = cfg and cfg.slotName + local source = cfg and cfg.source + local tabulate = cfg and cfg.tabulate + local result + local nullValue = 0 + if tabulate or type == "LIST" then + result = { } + nullValue = nil + elseif type == "MORE" then + result = 1 + elseif type == "FLAG" then + result = false + nullValue = false + else + result = 0 + end + hack[1] = arg1 + if arg1 then + hack[2] = arg2 + if arg2 then + hack[3] = arg3 + if arg3 then + hack[4] = arg4 + if arg4 then + hack[5] = arg5 + if arg5 then + hack[6] = arg6 + if arg6 then + hack[7] = arg7 + if arg7 then + hack[8] = arg8 + end + end + end + end + end + end + end + for i = 1, #hack do --i = 1, select('#', ...) do + local modName = hack[i]--select(i, ...) + local modList = self.mods[modName] + if modList then + for i = 1, #modList do + local mod = modList[i] + if (not type or mod.type == type )and band(flags, mod.flags) == mod.flags and (mod.keywordFlags == 0 or band(keywordFlags, mod.keywordFlags) ~= 0) and (not source or mod.source:match("[^:]+") == source) then + local value = mod.value + for _, tag in pairs(mod.tagList) do + if tag.type == "Multiplier" then + local mult = (self.multipliers[tag.var] or 0) + if _G.type(value) == "table" then + value = copyTable(value) + value.value = value.value * mult + else + value = value * mult + end + elseif tag.type == "PerStat" then + local mult = m_floor((self.stats[tag.stat] or 0) / tag.div + 0.0001) + (tag.base or 0) + if _G.type(value) == "table" then + value = copyTable(value) + value.value = value.value * mult + else + value = value * mult + end + elseif tag.type == "Condition" then + if not self.conditions[tag.var] then + value = nullValue + end + elseif tag.type == "SocketedIn" then + if tag.slotName ~= slotName or (tag.keyword and (not skillGem or not gemIsType(skillGem, tag.keyword))) then + value = nullValue + end + elseif tag.type == "SkillName" then + if tag.skillName ~= skillName then + value = nullValue + end + elseif tag.type == "SkillPart" then + if tag.skillPart ~= skillPart then + value = nullValue + end + elseif tag.type == "SlotName" then + if tag.slotName ~= slotName then + value = nullValue + end + end + end + if tabulate then + if value and value ~= 0 then + t_insert(result, { value = value, mod = mod }) + end + elseif type == "MORE" then + result = result * (1 + value / 100) + elseif type == "FLAG" then + result = result or value + elseif type == "LIST" then + if value then + t_insert(result, value) + end + else + result = result + value + end + end + end + end + hack[i] = nil + end + return result +end + +function ModDBClass:Print() + ConPrintf("=== Modifiers ===") + local modNames = { } + for modName in pairs(self.mods) do + t_insert(modNames, modName) + end + table.sort(modNames) + for _, modName in ipairs(modNames) do + ConPrintf("'%s' = {", modName) + for _, mod in ipairs(self.mods[modName]) do + ConPrintf("\t%s = %s|%s|%s|%s|%s", formatValue(mod.value), mod.type, formatFlags(mod.flags, ModFlag), formatFlags(mod.keywordFlags, KeywordFlag), formatTags(mod.tagList), mod.source or "?") + end + ConPrintf("},") + end + ConPrintf("=== Conditions ===") + local nameList = { } + for name, value in pairs(self.conditions) do + if value then + t_insert(nameList, name) + end + end + table.sort(nameList) + for i, name in ipairs(nameList) do + ConPrintf(name) + end + ConPrintf("=== Multipliers ===") + wipeTable(nameList) + for name, value in pairs(self.multipliers) do + if value > 0 then + t_insert(nameList, name) + end + end + table.sort(nameList) + for i, name in ipairs(nameList) do + ConPrintf("%s = %d", name, self.multipliers[name]) + end end \ No newline at end of file diff --git a/PathOfBuilding.sln b/PathOfBuilding.sln index 571f08ee..e302e21f 100644 --- a/PathOfBuilding.sln +++ b/PathOfBuilding.sln @@ -50,7 +50,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Modules", "Modules", "{35D8 Modules\Build.lua = Modules\Build.lua Modules\BuildList.lua = Modules\BuildList.lua Modules\Calcs.lua = Modules\Calcs.lua - Modules\CalcsView.lua = Modules\CalcsView.lua + Modules\CalcSections.lua = Modules\CalcSections.lua Modules\Common.lua = Modules\Common.lua Modules\Data.lua = Modules\Data.lua Modules\ItemTools.lua = Modules\ItemTools.lua @@ -63,14 +63,16 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Classes", "Classes", "{7EE4 ProjectSection(SolutionItems) = preProject Classes\BuildListControl.lua = Classes\BuildListControl.lua Classes\ButtonControl.lua = Classes\ButtonControl.lua + Classes\CalcBreakdownControl.lua = Classes\CalcBreakdownControl.lua + Classes\CalcSectionControl.lua = Classes\CalcSectionControl.lua Classes\CalcsTab.lua = Classes\CalcsTab.lua Classes\CheckBoxControl.lua = Classes\CheckBoxControl.lua + Classes\ConfigTab.lua = Classes\ConfigTab.lua Classes\Control.lua = Classes\Control.lua Classes\ControlHost.lua = Classes\ControlHost.lua Classes\DropDownControl.lua = Classes\DropDownControl.lua Classes\EditControl.lua = Classes\EditControl.lua Classes\GemSelectControl.lua = Classes\GemSelectControl.lua - Classes\Grid.lua = Classes\Grid.lua Classes\ImportTab.lua = Classes\ImportTab.lua Classes\ItemDBControl.lua = Classes\ItemDBControl.lua Classes\ItemListControl.lua = Classes\ItemListControl.lua diff --git a/README.md b/README.md index 9ccf6359..dcf1791a 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ Welcome to Path of Building, an offline build planner for Path of Exile! * Add any number of main or supporting skills to your build * Supporting skills (auras, curses, buffs) can be toggled on and off * Automatically applies Socketed Gem modifiers from the item a skill is socketed into + * Automatically applies support gems granted by items * Item planner: * Add items from in game by copying and pasting them straight into the program! * Automatically adds quality to non-corrupted items @@ -48,6 +49,39 @@ Head over to the [Releases](https://github.com/Openarl/PathOfBuilding/releases) ![ss3](https://cloud.githubusercontent.com/assets/19189971/18089780/f0ff234a-6f04-11e6-8c88-6193fe59a5c4.png) ## Changelog +### 1.2.0 - 2016/10/00 +With this update, the program's internal modifier system has been completely overhauled. +On its own this overhaul doesn't change much from the user's perspective, but it has opened the way for some +significant upgrades: + * The Calcs tab has been rebuilt from the ground up to take advantage of the new modifier system: + * The various stats and totals are now more clearly divided into sections + * The individual sections can be minimized to their title bar, so you can hide sections you're not interested in + * Nearly all of the stats and totals in the new Calcs tab have a breakdown view that appears when you hover over them: + * You can click on a stat to pin the breakdown open so you can interact with it + * Each breakdown view shows all the information used to calculate that stat, including ALL modifiers + * You can hover over a modifier's source name to show the item's tooltip or passive node's location + * Hovering over a modifier source type ('Item', 'Node', 'Gem' etc) will show the totals from that source type + * Most modifier totals are no longer displayed in the tab itself, since they can be found in the breakdown views. + The most important ones (such as increased life from tree) are still present, however. + * Per-stat modifiers are now supported, including, but not limited to, the modifiers from: + * Shaper's Touch + * Pillar of the Caged God + * Dreamfeather + * Icestorm is now supported! When you have The Whispering Ice equipped, a special socket group will appear + containing the Icestorm skill. You can select it in the Main Skill dropdown, or view it in the Skills tab. + You cannot add support gems to this group, but supports from any other group socketed in the staff will + automatically apply to the Icestorm skill. + * All other skills granted by items are now supported as well, and will function in the same manner as Icestorm. + This includes "Curse Enemies with X on Hit" modifiers. + * Low life/full life conditions are now detected automatically (>=65% life reserved/with CI respectively), + but you can still turn them on manually if you need to +Other changes: + * The various configuration options in the Calcs tab have been moved to a new Configuration tab + * Moving these into a dedicated tab will provide room for more options to be added in the future + * The names of many options have been changed to clarify their function + * Some options now have tooltips that explain aspects of their function + * Support gem compatability is now determined using the same data the game itself uses, and should now be 100% accurate + ### 1.1.11 - 2016/10/25 * Added flat mana to ES armour rare templates