Minor tweaks and fixes
This commit is contained in:
@@ -37,8 +37,8 @@ function CalcBreakdownClass:SetBreakdownData(displayData, pinned)
|
||||
return
|
||||
end
|
||||
|
||||
-- Build list of sections
|
||||
self.sectionList = wipeTable(self.sectionList)
|
||||
|
||||
for _, sectionData in ipairs(displayData) do
|
||||
if sectionData.breakdown then
|
||||
self:AddBreakdownSection(sectionData)
|
||||
@@ -46,13 +46,14 @@ function CalcBreakdownClass:SetBreakdownData(displayData, pinned)
|
||||
self:AddModSection(sectionData)
|
||||
end
|
||||
end
|
||||
|
||||
if #self.sectionList == 0 then
|
||||
self.calcsTab:ClearDisplayStat()
|
||||
return
|
||||
end
|
||||
|
||||
self.shown = true
|
||||
|
||||
-- Determine the size of each section, and the combined content size of the breakdown
|
||||
self.contentWidth = 0
|
||||
local offset = 2
|
||||
for i, section in ipairs(self.sectionList) do
|
||||
@@ -63,6 +64,7 @@ function CalcBreakdownClass:SetBreakdownData(displayData, pinned)
|
||||
end
|
||||
section.height = #section.lines * section.textSize + 4
|
||||
elseif section.type == "TABLE" then
|
||||
-- This also calculates the width of each column in the table
|
||||
section.width = 4
|
||||
for _, col in pairs(section.colList) do
|
||||
for _, row in pairs(section.rowList) do
|
||||
@@ -86,19 +88,24 @@ function CalcBreakdownClass:SetBreakdownData(displayData, pinned)
|
||||
self.contentHeight = offset - 6
|
||||
end
|
||||
|
||||
-- Add sections based on the breakdown data generated by the Calcs module
|
||||
function CalcBreakdownClass:AddBreakdownSection(sectionData)
|
||||
local breakdown = self.calcsTab.calcsEnv.breakdown[sectionData.breakdown]
|
||||
if not breakdown then
|
||||
return
|
||||
end
|
||||
|
||||
if #breakdown > 0 then
|
||||
-- Text lines
|
||||
t_insert(self.sectionList, {
|
||||
type = "TEXT",
|
||||
lines = breakdown,
|
||||
textSize = 16
|
||||
})
|
||||
end
|
||||
|
||||
if breakdown.damageComponents and #breakdown.damageComponents > 0 then
|
||||
-- Damage component table, used for hit damage breakdowns
|
||||
local section = {
|
||||
type = "TABLE",
|
||||
rowList = breakdown.damageComponents,
|
||||
@@ -114,7 +121,9 @@ function CalcBreakdownClass:AddBreakdownSection(sectionData)
|
||||
}
|
||||
t_insert(self.sectionList, section)
|
||||
end
|
||||
|
||||
if breakdown.reservations and #breakdown.reservations > 0 then
|
||||
-- Reservations table, used for life/mana reservation breakdowns
|
||||
local section = {
|
||||
type = "TABLE",
|
||||
rowList = breakdown.reservations,
|
||||
@@ -129,7 +138,9 @@ function CalcBreakdownClass:AddBreakdownSection(sectionData)
|
||||
}
|
||||
t_insert(self.sectionList, section)
|
||||
end
|
||||
|
||||
if breakdown.slots and #breakdown.slots > 0 then
|
||||
-- Slots table, used for armour/evasion/ES total breakdowns
|
||||
local section = {
|
||||
type = "TABLE",
|
||||
rowList = breakdown.slots,
|
||||
@@ -157,9 +168,12 @@ function CalcBreakdownClass:AddBreakdownSection(sectionData)
|
||||
end
|
||||
end
|
||||
|
||||
-- Add a table section showing a list of modifiers
|
||||
function CalcBreakdownClass:AddModSection(sectionData)
|
||||
local env = self.calcsTab.calcsEnv
|
||||
local build = self.calcsTab.build
|
||||
|
||||
-- Build list of modifiers to display
|
||||
local cfg = (sectionData.cfg and copyTable(env.mainSkill[sectionData.cfg.."Cfg"])) or { }
|
||||
cfg.source = sectionData.modSource
|
||||
cfg.tabulate = true
|
||||
@@ -173,6 +187,8 @@ function CalcBreakdownClass:AddModSection(sectionData)
|
||||
if #rowList == 0 then
|
||||
return
|
||||
end
|
||||
|
||||
-- Create section data
|
||||
local section = {
|
||||
type = "TABLE",
|
||||
label = sectionData.label,
|
||||
@@ -187,7 +203,9 @@ function CalcBreakdownClass:AddModSection(sectionData)
|
||||
},
|
||||
}
|
||||
t_insert(self.sectionList, section)
|
||||
|
||||
if not sectionData.modType then
|
||||
-- Sort modifiers by type
|
||||
for i, row in pairs(rowList) do
|
||||
row.index = i
|
||||
end
|
||||
@@ -199,11 +217,14 @@ function CalcBreakdownClass:AddModSection(sectionData)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
local sourceTotals = { }
|
||||
if not sectionData.modSource then
|
||||
-- Build list of totals from each modifier source
|
||||
local types = { }
|
||||
local typeList = { }
|
||||
for i, row in pairs(rowList) do
|
||||
-- Find all the modifier types and source types that are present in the modifier lsit
|
||||
if not types[row.mod.type] then
|
||||
types[row.mod.type] = true
|
||||
t_insert(typeList, row.mod.type)
|
||||
@@ -218,6 +239,7 @@ function CalcBreakdownClass:AddModSection(sectionData)
|
||||
cfg.source = sourceType
|
||||
for _, modType in ipairs(typeList) do
|
||||
if type(sectionData.modName) == "table" then
|
||||
-- Multiple stats, show each separately
|
||||
for _, modName in ipairs(sectionData.modName) do
|
||||
local total = modDB:Sum(modType, cfg, modName)
|
||||
if modType == "MORE" then
|
||||
@@ -239,18 +261,23 @@ function CalcBreakdownClass:AddModSection(sectionData)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Process modifier data
|
||||
for _, row in pairs(rowList) do
|
||||
if not sectionData.modType then
|
||||
-- No modifier type specified, so format the value to convey type
|
||||
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
|
||||
-- Multiple stat names specified, add this modifier's stat to the table
|
||||
row.name = self:FormatModName(row.mod.name)
|
||||
end
|
||||
local sourceType = row.mod.source:match("[^:]+")
|
||||
if not sectionData.modSource then
|
||||
-- No modifier source specified, add the source type to the table
|
||||
row.source = sourceType
|
||||
row.sourceTooltip = function()
|
||||
main:AddTooltipLine(16, "Total from "..sourceType..":")
|
||||
@@ -261,6 +288,7 @@ function CalcBreakdownClass:AddModSection(sectionData)
|
||||
end
|
||||
end
|
||||
if sourceType == "Item" then
|
||||
-- Modifier is from an item, add item name and tooltip
|
||||
local itemId = row.mod.source:match("Item:(%d+):.+")
|
||||
local item = build.itemsTab.list[tonumber(itemId)]
|
||||
row.sourceName = data.colorCodes[item.rarity]..item.name
|
||||
@@ -269,6 +297,7 @@ function CalcBreakdownClass:AddModSection(sectionData)
|
||||
return data.colorCodes[item.rarity], true
|
||||
end
|
||||
elseif sourceType == "Tree" then
|
||||
-- Modifier is from a passive node, add node name, and add node ID (used to show node location)
|
||||
local nodeId = row.mod.source:match("Tree:(%d+)")
|
||||
if nodeId then
|
||||
local node = build.spec.nodes[tonumber(nodeId)]
|
||||
@@ -278,9 +307,11 @@ function CalcBreakdownClass:AddModSection(sectionData)
|
||||
row.sourceName = "Jewel conversion"
|
||||
end
|
||||
elseif sourceType == "Skill" then
|
||||
-- Extract skill name
|
||||
row.sourceName = row.mod.source:match("Skill:(.+)")
|
||||
end
|
||||
if row.mod.flags ~= 0 or row.mod.keywordFlags ~= 0 then
|
||||
-- Combine, sort and format modifier flags
|
||||
local flagNames = { }
|
||||
for flags, src in pairs({[row.mod.flags] = ModFlag, [row.mod.keywordFlags] = KeywordFlag}) do
|
||||
for name, val in pairs(src) do
|
||||
@@ -290,11 +321,10 @@ function CalcBreakdownClass:AddModSection(sectionData)
|
||||
end
|
||||
end
|
||||
table.sort(flagNames)
|
||||
for _, name in ipairs(flagNames) do
|
||||
row.flags = (row.flags and row.flags .. ", " or "") .. name
|
||||
end
|
||||
row.flags = table.concat(flagNames, ", ")
|
||||
end
|
||||
if row.mod.tagList[1] then
|
||||
-- Format modifier tags
|
||||
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
|
||||
@@ -357,15 +387,18 @@ end
|
||||
|
||||
function CalcBreakdownClass:DrawBreakdownTable(viewPort, x, y, section)
|
||||
local cursorX, cursorY = GetCursorPos()
|
||||
local colX = x + 4
|
||||
if section.label then
|
||||
-- Draw table lable if able
|
||||
DrawString(x + 2, y, "LEFT", 16, "VAR", "^7"..section.label..":")
|
||||
y = y + 16
|
||||
end
|
||||
local colX = x + 4
|
||||
for index, col in ipairs(section.colList) do
|
||||
if col.width then
|
||||
-- Column is present, draw the separator and label
|
||||
col.x = colX
|
||||
if index > 1 then
|
||||
-- Skip the separator for the first column
|
||||
SetDrawColor(0.5, 0.5, 0.5)
|
||||
DrawImage(nil, colX - 2, y, 1, section.label and section.height - 16 or section.height)
|
||||
end
|
||||
@@ -376,10 +409,12 @@ function CalcBreakdownClass:DrawBreakdownTable(viewPort, x, y, section)
|
||||
end
|
||||
local rowY = y + 20
|
||||
for _, row in ipairs(section.rowList) do
|
||||
-- Draw row separator
|
||||
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.width and row[col.key] then
|
||||
-- This row has an entry for this column, draw it
|
||||
if col.right then
|
||||
DrawString(col.x + col.width - 4, rowY + 1, "RIGHT_X", 12, "VAR", "^7"..row[col.key])
|
||||
else
|
||||
@@ -388,6 +423,7 @@ function CalcBreakdownClass:DrawBreakdownTable(viewPort, x, y, section)
|
||||
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
|
||||
-- Mouse is over the cell, draw highlighting lines and show the tooltip/node location
|
||||
SetDrawLayer(nil, 15)
|
||||
SetDrawColor(0, 1, 0)
|
||||
DrawImage(nil, col.x - 2, rowY - 1, col.width, 1)
|
||||
@@ -427,6 +463,7 @@ function CalcBreakdownClass:Draw(viewPort)
|
||||
local width = self.contentWidth
|
||||
local height = self.contentHeight
|
||||
if self.contentHeight > viewPort.height then
|
||||
-- Content won't fit the screen height, so set the scrollbar
|
||||
width = self.contentWidth + scrollBar.width
|
||||
height = viewPort.height
|
||||
scrollBar.height = height - 4
|
||||
@@ -436,6 +473,7 @@ function CalcBreakdownClass:Draw(viewPort)
|
||||
end
|
||||
self.width = width
|
||||
self.height = height
|
||||
-- Calculate position based on the source cell
|
||||
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
|
||||
@@ -443,9 +481,11 @@ function CalcBreakdownClass:Draw(viewPort)
|
||||
end
|
||||
self.x = x
|
||||
self.y = y
|
||||
-- Draw background
|
||||
SetDrawLayer(nil, 10)
|
||||
SetDrawColor(0, 0, 0, 0.9)
|
||||
DrawImage(nil, x + 2, y + 2, width - 4, height - 4)
|
||||
-- Draw border (this is put in sub layer 11 so it draws over the contents, in case they don't fit the screen)
|
||||
SetDrawLayer(nil, 11)
|
||||
if self.pinned then
|
||||
SetDrawColor(0.25, 1, 0.25)
|
||||
@@ -458,6 +498,7 @@ function CalcBreakdownClass:Draw(viewPort)
|
||||
DrawImage(nil, x + width - 2, y, 2, height)
|
||||
SetDrawLayer(nil, 10)
|
||||
self:DrawControls(viewPort)
|
||||
-- Draw the sections
|
||||
y = y - scrollBar.offset
|
||||
for i, section in ipairs(self.sectionList) do
|
||||
local sectionY = y + section.offset
|
||||
@@ -486,6 +527,7 @@ function CalcBreakdownClass:OnKeyDown(key, doubleClick)
|
||||
local mOver = self:IsMouseOver()
|
||||
if key:match("BUTTON") then
|
||||
if not mOver then
|
||||
-- Mouse click outside the control, hide the breakdown
|
||||
self.calcsTab:ClearDisplayStat()
|
||||
self.shown = false
|
||||
return
|
||||
|
||||
@@ -22,6 +22,7 @@ local CalcSectionClass = common.NewClass("CalcSection", "Control", "ControlHost"
|
||||
for _, data in ipairs(self.data) do
|
||||
for _, colData in ipairs(data) do
|
||||
if colData.control then
|
||||
-- Add control to the section's control list and set show/hide function
|
||||
self.controls[colData.controlName] = colData.control
|
||||
colData.control.shown = function()
|
||||
return self.enabled and not self.collapsed and data.enabled
|
||||
@@ -52,6 +53,7 @@ function CalcSectionClass:IsMouseOver()
|
||||
end
|
||||
local mOver = self:IsMouseInBounds()
|
||||
if mOver and not self.collapsed and self.enabled then
|
||||
-- Check if mouse is over one of the cells
|
||||
local cursorX, cursorY = GetCursorPos()
|
||||
for _, data in ipairs(self.data) do
|
||||
if data.enabled then
|
||||
@@ -116,6 +118,7 @@ function CalcSectionClass:UpdatePos()
|
||||
for _, rowData in ipairs(self.data) do
|
||||
if rowData.enabled then
|
||||
for col, colData in ipairs(rowData) do
|
||||
-- Update the real coordinates of this cell
|
||||
colData.x = x + colData.xOffset
|
||||
colData.y = y + colData.yOffset
|
||||
if colData.control then
|
||||
@@ -161,11 +164,13 @@ function CalcSectionClass:Draw(viewPort)
|
||||
local cursorX, cursorY = GetCursorPos()
|
||||
local env = self.calcsTab.calcsEnv
|
||||
local output = self.calcsTab.calcsOutput
|
||||
-- Draw border and background
|
||||
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)
|
||||
-- Draw label
|
||||
if not self.enabled then
|
||||
DrawString(x + 3, y + 3, "LEFT", 16, "VAR BOLD", "^8"..self.label)
|
||||
else
|
||||
@@ -175,8 +180,10 @@ function CalcSectionClass:Draw(viewPort)
|
||||
DrawString(x, y + 3, "LEFT", 16, "VAR", self:FormatStr(self.extra, output))
|
||||
end
|
||||
end
|
||||
-- Draw line below label
|
||||
SetDrawColor(self.col)
|
||||
DrawImage(nil, x + 2, y + 20, width - 4, 2)
|
||||
-- Draw controls
|
||||
SetDrawLayer(nil, 0)
|
||||
self:DrawControls(viewPort)
|
||||
if self.collapsed or not self.enabled then
|
||||
@@ -186,11 +193,13 @@ function CalcSectionClass:Draw(viewPort)
|
||||
for _, rowData in ipairs(self.data) do
|
||||
if rowData.enabled then
|
||||
if rowData.label then
|
||||
-- Draw row label with background
|
||||
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
|
||||
-- Draw column separator at the left end of the cell
|
||||
SetDrawColor(self.col)
|
||||
DrawImage(nil, colData.x, lineY, 2, colData.height)
|
||||
if colData.format then
|
||||
@@ -198,6 +207,7 @@ function CalcSectionClass:Draw(viewPort)
|
||||
self.calcsTab:SetDisplayStat(colData)
|
||||
end
|
||||
if self.calcsTab.displayData == colData then
|
||||
-- This is the display stat, draw a green border around this cell
|
||||
SetDrawColor(0.25, 1, 0.25)
|
||||
DrawImage(nil, colData.x + 2, colData.y, colData.width - 2, colData.height)
|
||||
SetDrawColor(0, 0, 0)
|
||||
@@ -231,6 +241,7 @@ function CalcSectionClass:OnKeyDown(key, doubleClick)
|
||||
return
|
||||
end
|
||||
if mOverComp then
|
||||
-- Pin the stat breakdown
|
||||
self.calcsTab:SetDisplayStat(mOverComp, true)
|
||||
return self.calcsTab.controls.breakdown
|
||||
end
|
||||
|
||||
@@ -34,6 +34,7 @@ local CalcsTabClass = common.NewClass("CalcsTab", "UndoHandler", "ControlHost",
|
||||
self.colWidth = 230
|
||||
self.sectionList = { }
|
||||
|
||||
-- Special section for skill/mode selection
|
||||
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)
|
||||
@@ -109,6 +110,7 @@ Effective DPS: Curses and enemy properties (such as resistances and status condi
|
||||
section.controls.mode:SelByValue(self.input.misc_buffMode)
|
||||
end)
|
||||
|
||||
-- Add sections from the CalcSections module
|
||||
for _, section in ipairs(sectionData) do
|
||||
self:NewSection(unpack(section))
|
||||
end
|
||||
@@ -204,6 +206,7 @@ function CalcsTabClass:Draw(viewPort, inputEvents)
|
||||
|
||||
main:DrawBackground(viewPort)
|
||||
|
||||
-- Arrange the sections
|
||||
local baseX = viewPort.x + 4
|
||||
local baseY = viewPort.y + 4
|
||||
local maxCol = m_floor(viewPort.width / (self.colWidth + 8))
|
||||
@@ -214,6 +217,8 @@ function CalcsTabClass:Draw(viewPort, inputEvents)
|
||||
if section.enabled then
|
||||
local col
|
||||
if section.group == 1 then
|
||||
-- Group 1: Offense
|
||||
-- This group is put into the first 3 columns, with each section placed into the highest available location
|
||||
col = 1
|
||||
local minY = colY[col] or baseY
|
||||
for c = 2, 3 do
|
||||
@@ -223,8 +228,12 @@ function CalcsTabClass:Draw(viewPort, inputEvents)
|
||||
end
|
||||
end
|
||||
elseif section.group == 2 then
|
||||
-- Group 2: Defense (the first 4 sections)
|
||||
-- This group is put entirely into the 4th column
|
||||
col = 4
|
||||
elseif section.group == 3 then
|
||||
-- Group 3: Defense (the remaining sections)
|
||||
-- This group is put into a 5th column if there's room for one, otherwise they are handled separately
|
||||
if maxCol >= 5 then
|
||||
col = 5
|
||||
end
|
||||
@@ -240,13 +249,16 @@ function CalcsTabClass:Draw(viewPort, inputEvents)
|
||||
end
|
||||
end
|
||||
if maxCol < 5 then
|
||||
-- There's no room for a 5th column
|
||||
-- Each section from group 3 will instead be placed into column 4 if there's room, otherwise they'll be put in columns 1-3
|
||||
for c = 1, 3 do
|
||||
colY[c] = m_max(colY[1], colY[2], colY[3])--maxY
|
||||
colY[c] = m_max(colY[1], colY[2], colY[3])
|
||||
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
|
||||
-- No room in the 4th column, find the highest available location in columns 1-4
|
||||
local minY = colY[col]
|
||||
for c = 3, 1, -1 do
|
||||
if colY[c] < minY then
|
||||
@@ -265,6 +277,7 @@ function CalcsTabClass:Draw(viewPort, inputEvents)
|
||||
self.controls.scrollBar.height = viewPort.height
|
||||
self.controls.scrollBar:SetContentDimension(maxY - baseY, viewPort.height)
|
||||
for _, section in ipairs(self.sectionList) do
|
||||
-- Give sections their actual Y position and let them update
|
||||
section.y = section.y - self.controls.scrollBar.offset
|
||||
section:UpdatePos()
|
||||
end
|
||||
|
||||
@@ -220,7 +220,7 @@ function ConfigTabClass:Draw(viewPort, inputEvents)
|
||||
for _, section in ipairs(self.sectionList) do
|
||||
local y = 14
|
||||
for _, varControl in ipairs(section.varControlList) do
|
||||
if varControl:IsEnabled() then
|
||||
if varControl:IsShown() then
|
||||
varControl.y = y
|
||||
y = y + 20
|
||||
end
|
||||
|
||||
@@ -106,7 +106,7 @@ function ItemDBClass:DoesItemMatchFilters(item)
|
||||
if not found then
|
||||
searchStr = searchStr:gsub(" ","")
|
||||
for i, mod in pairs(item.baseModList) do
|
||||
if mod.name:lower():gsub("_",""):match(searchStr) then
|
||||
if mod.name:lower():match(searchStr) then
|
||||
found = true
|
||||
break
|
||||
end
|
||||
|
||||
@@ -43,19 +43,29 @@ local ItemsTabClass = common.NewClass("ItemsTab", "UndoHandler", "ControlHost",
|
||||
-- Build item list
|
||||
self.controls.itemList = common.New("ItemList", {"TOPLEFT",self.slots[baseSlots[1]],"TOPRIGHT"}, 20, 0, 360, 308, self)
|
||||
|
||||
-- Database selector
|
||||
self.controls.selectDBLabel = common.New("LabelControl", {"TOPLEFT",self.controls.itemList,"BOTTOMLEFT"}, 0, 14, 0, 16, "^7Import from:")
|
||||
self.controls.selectDBLabel.shown = function()
|
||||
return self.height < 984
|
||||
end
|
||||
self.controls.selectDB = common.New("DropDownControl", {"LEFT",self.controls.selectDBLabel,"RIGHT"}, 4, 0, 150, 18, { "Uniques", "Rare Templates" })
|
||||
|
||||
-- Unique database
|
||||
self.controls.uniqueDB = common.New("ItemDB", {"TOPLEFT",self.controls.selectDBLabel,"BOTTOMLEFT"}, 0, 46, 360, 260, self, main.uniqueDB)
|
||||
self.controls.uniqueDB = common.New("ItemDB", {"TOPLEFT",self.controls.itemList,"BOTTOMLEFT"}, 0, 76, 360, 260, self, main.uniqueDB)
|
||||
self.controls.uniqueDB.y = function()
|
||||
return self.controls.selectDBLabel:IsShown() and 76 or 54
|
||||
end
|
||||
self.controls.uniqueDB.shown = function()
|
||||
return self.controls.selectDB.sel == 1
|
||||
return not self.controls.selectDBLabel:IsShown() or self.controls.selectDB.sel == 1
|
||||
end
|
||||
|
||||
-- Rare template database
|
||||
self.controls.rareDB = common.New("ItemDB", {"TOPLEFT",self.controls.selectDBLabel,"BOTTOMLEFT"}, 0, 46, 360, 260, self, main.rareDB)
|
||||
self.controls.rareDB = common.New("ItemDB", {"TOPLEFT",self.controls.itemList,"BOTTOMLEFT"}, 0, 76, 360, 260, self, main.rareDB)
|
||||
self.controls.rareDB.y = function()
|
||||
return self.controls.selectDBLabel:IsShown() and 76 or 370
|
||||
end
|
||||
self.controls.rareDB.shown = function()
|
||||
return self.controls.selectDB.sel == 2
|
||||
return not self.controls.selectDBLabel:IsShown() or self.controls.selectDB.sel == 2
|
||||
end
|
||||
|
||||
-- Display item
|
||||
@@ -364,7 +374,7 @@ function ItemsTabClass:AddItemTooltip(item, slot, dbMode)
|
||||
else
|
||||
main:AddTooltipLine(20, rarityCode..item.name)
|
||||
end
|
||||
main:AddTooltipSeperator(10)
|
||||
main:AddTooltipSeparator(10)
|
||||
|
||||
-- Special fields for database items
|
||||
if dbMode and (item.variantList or item.league or item.unreleased) then
|
||||
@@ -381,7 +391,7 @@ function ItemsTabClass:AddItemTooltip(item, slot, dbMode)
|
||||
if item.unreleased then
|
||||
main:AddTooltipLine(16, "^1Not yet available")
|
||||
end
|
||||
main:AddTooltipSeperator(10)
|
||||
main:AddTooltipSeparator(10)
|
||||
end
|
||||
|
||||
local base = item.base
|
||||
@@ -457,7 +467,7 @@ function ItemsTabClass:AddItemTooltip(item, slot, dbMode)
|
||||
main:AddTooltipLine(16, "^x7F7F7FLimited to: ^7"..item.limit)
|
||||
end
|
||||
end
|
||||
main:AddTooltipSeperator(10)
|
||||
main:AddTooltipSeparator(10)
|
||||
|
||||
-- Implicit/explicit modifiers
|
||||
if item.modLines[1] then
|
||||
@@ -475,8 +485,8 @@ function ItemsTabClass:AddItemTooltip(item, slot, dbMode)
|
||||
end
|
||||
end
|
||||
if index == item.implicitLines and item.modLines[index + 1] then
|
||||
-- Add seperator between implicit and explicit modifiers
|
||||
main:AddTooltipSeperator(10)
|
||||
-- Add separator between implicit and explicit modifiers
|
||||
main:AddTooltipSeparator(10)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -484,11 +494,11 @@ function ItemsTabClass:AddItemTooltip(item, slot, dbMode)
|
||||
-- Corrupted item label
|
||||
if item.corrupted then
|
||||
if #item.modLines == item.implicitLines then
|
||||
main:AddTooltipSeperator(10)
|
||||
main:AddTooltipSeparator(10)
|
||||
end
|
||||
main:AddTooltipLine(16, "^1Corrupted")
|
||||
end
|
||||
main:AddTooltipSeperator(14)
|
||||
main:AddTooltipSeparator(14)
|
||||
|
||||
-- Mod differences
|
||||
local calcFunc, calcBase = self.build.calcsTab:GetItemCalculator()
|
||||
@@ -535,7 +545,7 @@ function ItemsTabClass:AddItemTooltip(item, slot, dbMode)
|
||||
|
||||
if launch.devMode and IsKeyDown("ALT") then
|
||||
-- Modifier debugging info
|
||||
main:AddTooltipSeperator(10)
|
||||
main:AddTooltipSeparator(10)
|
||||
for _, mod in ipairs(modList) do
|
||||
main:AddTooltipLine(14, "^7"..modLib.formatMod(mod))
|
||||
end
|
||||
|
||||
@@ -15,5 +15,5 @@ end)
|
||||
|
||||
function LabelClass:Draw()
|
||||
local x, y = self:GetPos()
|
||||
DrawString(x, y, "LEFT", self.height, "VAR", self:GetProperty("label"))
|
||||
DrawString(x, y, "LEFT", self:GetProperty("height"), "VAR", self:GetProperty("label"))
|
||||
end
|
||||
@@ -494,8 +494,8 @@ function PassiveTreeViewClass:DoesNodeMatchSearchStr(node)
|
||||
end
|
||||
if not match and node.mods[index].list then
|
||||
-- Then check modifiers
|
||||
for k in pairs(node.mods[index].list) do
|
||||
errMsg, match = PCall(string.match, k, self.searchStr)
|
||||
for _, mod in ipairs(node.mods[index].list) do
|
||||
errMsg, match = PCall(string.match, mod.name, self.searchStr)
|
||||
if match then
|
||||
return true
|
||||
end
|
||||
@@ -513,7 +513,7 @@ function PassiveTreeViewClass:AddNodeTooltip(node, build)
|
||||
else
|
||||
main:AddTooltipLine(24, "^7"..node.dn..(launch.devMode and IsKeyDown("ALT") and " ["..node.id.."]" or ""))
|
||||
end
|
||||
main:AddTooltipSeperator(14)
|
||||
main:AddTooltipSeparator(14)
|
||||
main:AddTooltipLine(14, "^x80A080Tip: Right click this socket to go to the items page and choose the jewel for this socket.")
|
||||
return
|
||||
end
|
||||
@@ -550,7 +550,7 @@ function PassiveTreeViewClass:AddNodeTooltip(node, build)
|
||||
|
||||
-- Reminder text
|
||||
if node.reminderText then
|
||||
main:AddTooltipSeperator(14)
|
||||
main:AddTooltipSeparator(14)
|
||||
for _, line in ipairs(node.reminderText) do
|
||||
main:AddTooltipLine(14, "^xA0A080"..line)
|
||||
end
|
||||
@@ -559,7 +559,7 @@ function PassiveTreeViewClass:AddNodeTooltip(node, build)
|
||||
-- Mod differences
|
||||
local calcFunc, calcBase = build.calcsTab:GetNodeCalculator(build)
|
||||
if calcFunc then
|
||||
main:AddTooltipSeperator(14)
|
||||
main:AddTooltipSeparator(14)
|
||||
local pathLength
|
||||
local nodeOutput, pathOutput
|
||||
if node.alloc then
|
||||
@@ -589,7 +589,7 @@ function PassiveTreeViewClass:AddNodeTooltip(node, build)
|
||||
|
||||
-- Pathing distance
|
||||
if node.path and #node.path > 0 then
|
||||
main:AddTooltipSeperator(14)
|
||||
main:AddTooltipSeparator(14)
|
||||
main:AddTooltipLine(14, "^7"..#node.path .. " points to node")
|
||||
if #node.path > 1 then
|
||||
-- Handy hint!
|
||||
|
||||
@@ -137,11 +137,11 @@ function SkillListClass:Draw(viewPort)
|
||||
local gemShown = { }
|
||||
if ttGroup.sourceItem then
|
||||
main:AddTooltipLine(18, "^7Source: "..data.colorCodes[ttGroup.sourceItem.rarity]..ttGroup.sourceItem.name)
|
||||
main:AddTooltipSeperator(10)
|
||||
main:AddTooltipSeparator(10)
|
||||
end
|
||||
for index, activeSkill in ipairs(ttGroup.displaySkillList) do
|
||||
if index > 1 then
|
||||
main:AddTooltipSeperator(10)
|
||||
main:AddTooltipSeparator(10)
|
||||
end
|
||||
main:AddTooltipLine(16, "^7Active Skill #"..index..":")
|
||||
for _, gem in ipairs(activeSkill.gemList) do
|
||||
@@ -162,7 +162,7 @@ function SkillListClass:Draw(viewPort)
|
||||
if not gemShown[gem] then
|
||||
if showOtherHeader then
|
||||
showOtherHeader = false
|
||||
main:AddTooltipSeperator(10)
|
||||
main:AddTooltipSeparator(10)
|
||||
main:AddTooltipLine(16, "^7Inactive Gems:")
|
||||
end
|
||||
local reason = ""
|
||||
|
||||
@@ -415,7 +415,7 @@ function main:AddTooltipLine(size, text)
|
||||
end
|
||||
end
|
||||
|
||||
function main:AddTooltipSeperator(size)
|
||||
function main:AddTooltipSeparator(size)
|
||||
t_insert(self.tooltipLines, { size = size })
|
||||
end
|
||||
|
||||
|
||||
@@ -80,9 +80,10 @@ Other changes:
|
||||
* 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
|
||||
* The new class background artworks have been added to the passive skill tree
|
||||
* Unsupported modifiers are now shown in red instead of white to help convey the fact that they won't work
|
||||
* The new class background artworks have been added to the passive skill tree
|
||||
* The required level for a build's passive tree is now shown when hovering over the points display
|
||||
* The Items tab will now display both source lists (Uniques and Rares) if there's room
|
||||
* 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
|
||||
|
||||
@@ -29,9 +29,10 @@ Other changes:
|
||||
* 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
|
||||
* The new class background artworks have been added to the passive skill tree
|
||||
* Unsupported modifiers are now shown in red instead of white to help convey the fact that they won't work
|
||||
* The new class background artworks have been added to the passive skill tree
|
||||
* The required level for a build's passive tree is now shown when hovering over the points display
|
||||
* The Items tab will now display both source lists (Uniques and Rares) if there's room
|
||||
* Support gem compatability is now determined using the same data the game itself uses, and should now be 100% accurate
|
||||
VERSION[1.1.11][2016/10/25]
|
||||
* Added flat mana to ES armour rare templates
|
||||
|
||||
22
manifest.xml
22
manifest.xml
@@ -7,34 +7,34 @@
|
||||
<File sha1="6bb074e0d3a4043f0e5dcbd25c33f8e5e1f5cfe0" name="Launch.lua" part="program"/>
|
||||
<File sha1="93e19c2a160eb49993d50d9e2b47ea79962373d9" name="UpdateCheck.lua" part="program"/>
|
||||
<File sha1="4f17937f2b37784e169a3792b235f2a0a3961e61" name="UpdateApply.lua" part="program"/>
|
||||
<File sha1="00fd324c3bd6292e6bcf50eb237846d8504ee0ae" name="changelog.txt" part="program"/>
|
||||
<File sha1="132831acfb4abf18efad004e4e48c7747a43dd02" name="changelog.txt" part="program"/>
|
||||
<File sha1="ea886e9e8ce013ed7d8805174d43becdca1f533e" name="Classes/BuildListControl.lua" part="program"/>
|
||||
<File sha1="e42437dd7e1b5a1032f1be9852ede4399a003826" name="Classes/ButtonControl.lua" part="program"/>
|
||||
<File sha1="9b458889148f4cf0e521e2d1090213da84bf3176" name="Classes/CalcBreakdownControl.lua" part="program"/>
|
||||
<File sha1="7584ee2977e9e4d1351fdc80caa700301d422e7b" name="Classes/CalcSectionControl.lua" part="program"/>
|
||||
<File sha1="dd707e5d9fefe00cbbbd51cefa94b6de04347b65" name="Classes/CalcsTab.lua" part="program"/>
|
||||
<File sha1="536682686e103cd1bc589c6c9f8dab0e6ac93310" name="Classes/CalcBreakdownControl.lua" part="program"/>
|
||||
<File sha1="23171916fa590c5344b17e67bd8d378574922388" name="Classes/CalcSectionControl.lua" part="program"/>
|
||||
<File sha1="808e7190ff6f97a6bf68c52b848563e96eade7dc" name="Classes/CalcsTab.lua" part="program"/>
|
||||
<File sha1="690f0d9d9ba0cd8092eb660d5d83bb0b9ad9f37d" name="Classes/CheckBoxControl.lua" part="program"/>
|
||||
<File sha1="130c54c6f5ea929d90128fbd576191833b995dab" name="Classes/ConfigTab.lua" part="program"/>
|
||||
<File sha1="cc189c54962246366d8d72ac7e4800553696a91f" name="Classes/ConfigTab.lua" part="program"/>
|
||||
<File sha1="bbb08f183746d6ec023e2bd08fb7a89d365381da" name="Classes/Control.lua" part="program"/>
|
||||
<File sha1="ae55fe1093e727872bc01cc94fa987395f944313" name="Classes/ControlHost.lua" part="program"/>
|
||||
<File sha1="8305ea8d306a13160c369c474d19b05024a1f5ef" name="Classes/DropDownControl.lua" part="program"/>
|
||||
<File sha1="83b030df704dc509cba978298526e03699d8ee3b" name="Classes/EditControl.lua" part="program"/>
|
||||
<File sha1="dca9446ea1a4846f6de2147b25df7818826f9942" name="Classes/GemSelectControl.lua" part="program"/>
|
||||
<File sha1="7a1150c0605ff912d8466e8c03fd242fd8140cfd" name="Classes/ImportTab.lua" part="program"/>
|
||||
<File sha1="3b66dcf4b639a99692463ed28a8ba4dc31b332fa" name="Classes/ItemDBControl.lua" part="program"/>
|
||||
<File sha1="a9d92fa939c186706876a869540364647718be38" name="Classes/ItemDBControl.lua" part="program"/>
|
||||
<File sha1="1d35b4c7c20bb6380c8b739658101fb1bf37cc3c" name="Classes/ItemListControl.lua" part="program"/>
|
||||
<File sha1="b547357491a4faec1d007ae44604b75e05a2613c" name="Classes/ItemSlotControl.lua" part="program"/>
|
||||
<File sha1="e470dc81148fc9079a0a31ea3b24f5f04754c331" name="Classes/ItemsTab.lua" part="program"/>
|
||||
<File sha1="e577edeea7685cb2b0cd0d00b901a458ae45add0" name="Classes/LabelControl.lua" part="program"/>
|
||||
<File sha1="8a6ecf99f65c0fad73cf98da0957e58b0d63236a" name="Classes/ItemsTab.lua" part="program"/>
|
||||
<File sha1="62138c7db82d57d638a16610a26acd0de75d3486" name="Classes/LabelControl.lua" part="program"/>
|
||||
<File sha1="a26d1a34424222856ad018ac43e3c7895d7f05b5" name="Classes/ModDB.lua" part="program"/>
|
||||
<File sha1="a3ed881ebe1ed7c8931675937b4661d77decc316" name="Classes/ModList.lua" part="program"/>
|
||||
<File sha1="6f8f98d6ee505af53441c1fe9ad74fbff86d56ad" name="Classes/PassiveSpec.lua" part="program"/>
|
||||
<File sha1="9a6bce38a62d9c07851cdd095e91f088e37cea4e" name="Classes/PassiveTree.lua" part="program"/>
|
||||
<File sha1="93dbcaa94237666391a2259a18834b7c479d14bb" name="Classes/PassiveTreeView.lua" part="program"/>
|
||||
<File sha1="0e09809d52403cdd10bbbd17f673f76dfee9c5db" name="Classes/PassiveTreeView.lua" part="program"/>
|
||||
<File sha1="b5d4e4e7cedcabefa029cdefc74db5ac0a82d87f" name="Classes/PopupDialog.lua" part="program"/>
|
||||
<File sha1="86fee3127d9520144fc741f6fccc3c1d9f1aa532" name="Classes/ScrollBarControl.lua" part="program"/>
|
||||
<File sha1="261dcf54a4542e6160fd7024d8edf4fc095d9c71" name="Classes/SectionControl.lua" part="program"/>
|
||||
<File sha1="ae0f25f993f6f5950469c34e4e2b9b441b5ad5f5" name="Classes/SkillListControl.lua" part="program"/>
|
||||
<File sha1="48da9a792d6c23ab2bf4821388bdca8b5a09cd62" name="Classes/SkillListControl.lua" part="program"/>
|
||||
<File sha1="272f67304f7f41b6335e19b14479e131c54766fe" name="Classes/SkillsTab.lua" part="program"/>
|
||||
<File sha1="6317bd9ba391832dccafcb62409a5ce2988d1928" name="Classes/SliderControl.lua" part="program"/>
|
||||
<File sha1="80527e0e05c986355ce7af2ba026538aec99a63a" name="Classes/SlotSelectControl.lua" part="program"/>
|
||||
@@ -48,7 +48,7 @@
|
||||
<File sha1="f207df4010cb3c7bc6cce98be2529a3b8a708b8f" name="Modules/Common.lua" part="program"/>
|
||||
<File sha1="132f51b4be7890360f478df52bc6c77772db75cc" name="Modules/Data.lua" part="program"/>
|
||||
<File sha1="5ddfa4a5904cefbf2755c231797175c8ae24ac49" name="Modules/ItemTools.lua" part="program"/>
|
||||
<File sha1="ea30ad5ca76b766665ee8a270dcd0068383ad70f" name="Modules/Main.lua" part="program"/>
|
||||
<File sha1="6c78d33c66ebd76910f983b14c7b6a9e4f354bb1" name="Modules/Main.lua" part="program"/>
|
||||
<File sha1="ede733f8389fb4c5854304fbc20e2be925a3f5d3" name="Modules/ModParser.lua" part="program"/>
|
||||
<File sha1="5f93a9d8f58e0d5990a1f84e1ab1d53fbd35fb56" name="Modules/ModTools.lua" part="program"/>
|
||||
<File sha1="e7ee7e5b6388facb7bf568517ecc401590757df7" name="Assets/ring.png" part="program"/>
|
||||
|
||||
Reference in New Issue
Block a user