Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
125 changes: 91 additions & 34 deletions src/Classes/ItemsTab.lua
Original file line number Diff line number Diff line change
Expand Up @@ -4016,48 +4016,105 @@ function ItemsTabClass:AddItemTooltip(tooltip, item, slot, dbMode)
t_insert(compareSlots, slot)
end
end
table.sort(compareSlots, function(a, b)
if a ~= b then
if slot == a then
return true
end
if slot == b then
return false
end
end
if a.selItemId ~= b.selItemId then
if item == self.items[a.selItemId] then
return true
end
if item == self.items[b.selItemId] then
return false
end

tooltip:AddLine(14, colorCodes.TIP .. "Tip: Press Ctrl+D to disable the display of stat differences.")

local function getReplacedItemAndOutput(compareSlot)
local selItem = self.items[compareSlot.selItemId]
local output = calcFunc({ repSlotName = compareSlot.slotName, repItem = item ~= selItem and item or nil })
return selItem, output
end
local function addCompareForSlot(compareSlot, selItem, output)
if not selItem or not output then
selItem, output = getReplacedItemAndOutput(compareSlot)
end
local aNum = tonumber(a.slotName:match("%d+"))
local bNum = tonumber(b.slotName:match("%d+"))
if aNum and bNum then
return aNum < bNum
local header
if item == selItem then
header = "^7Removing this item from "..compareSlot.label.." will give you:"
else
return a.slotName < b.slotName
header = string.format("^7Equipping this item in %s will give you:%s", compareSlot.label or compareSlot.slotName, selItem and "\n(replacing "..colorCodes[selItem.rarity]..selItem.name.."^7)" or "")
end
end)
self.build:AddStatComparesToTooltip(tooltip, calcBase, output, header)
end

-- Add comparisons for each slot
for _, compareSlot in pairs(compareSlots) do
if not main.slotOnlyTooltips or (slot and (slot.nodeId == compareSlot.nodeId or slot.slotName == compareSlot.slotName)) or not slot or slot == compareSlot then
local selItem = self.items[compareSlot.selItemId]
local output = calcFunc({ repSlotName = compareSlot.slotName, repItem = item ~= selItem and item or nil})
local header
if item == selItem then
header = "^7Removing this item from "..compareSlot.label.." will give you:"
else
header = string.format("^7Equipping this item in %s will give you:%s", compareSlot.label, selItem and "\n(replacing "..colorCodes[selItem.rarity]..selItem.name.."^7)" or "")
-- if we have a specific slot to compare to, and the user has "Show
-- tooltips only for affected slots" checked, we can just compare that
-- one slot
if main.slotOnlyTooltips and slot then
slot = type(slot) ~= "string" and slot or self.slots[slot]
if slot then addCompareForSlot(slot) end
return
end


local slots = {}
local isUnique = item.rarity == "UNIQUE" or item.rarity == "RELIC"
local currentSameUniqueCount = 0
for _, compareSlot in ipairs(compareSlots) do
local selItem, output = getReplacedItemAndOutput(compareSlot)
local isSameUnique = isUnique and selItem and item.name == selItem.name
if isUnique and isSameUnique and item.limit then
currentSameUniqueCount = currentSameUniqueCount + 1
end
table.insert(slots,
{ selItem = selItem, output = output, compareSlot = compareSlot, isSameUnique = isSameUnique })
end

-- limited uniques: only compare to slots with the same item if more don't fit
if currentSameUniqueCount == item.limit then
for _, slotEntry in ipairs(slots) do
if slotEntry.isSameUnique then
addCompareForSlot(slotEntry.compareSlot, slotEntry.selItem, slotEntry.output)
end
end
return
end


-- either the same unique or same base type
local function similar(compareItem, sameUnique)
-- empty slot
if not compareItem then return 0 end

local sameBaseType = not isUnique
and compareItem.rarity ~= "UNIQUE" and compareItem.rarity ~= "RELIC"
and item.base.type == compareItem.base.type
and item.base.subType == compareItem.base.subType
if sameBaseType or sameUnique then
return 1
else
return 0
end
end
-- sort by:
-- 1. empty sockets
-- 2. same base group jewel or unique
-- 3. DPS
-- 4. EHP
local function sortFunc(a, b)
if a == b then return end

local aParams = { a.compareSlot.selItemId == 0 and 1 or 0, similar(a.selItem, a.isSameUnique), a.output.FullDPS, a.output.CombinedDPS, a.output.TotalEHP, a.compareSlot.label, a.compareSlot.slotName }
local bParams = { b.compareSlot.selItemId == 0 and 1 or 0, similar(b.selItem, b.isSameUnique), b.output.FullDPS, b
.output.CombinedDPS, b.output.TotalEHP, b.compareSlot.label, b.compareSlot.slotName }
for i = 1, #aParams do
if aParams[i] == nil or bParams[i] == nil then
-- continue
elseif aParams[i] > bParams[i] then
return true
elseif aParams[i] < bParams[i] then
return false
end
self.build:AddStatComparesToTooltip(tooltip, calcBase, output, header)
end
return false
end
table.sort(slots, sortFunc)

for _, slotEntry in ipairs(slots) do
addCompareForSlot(slotEntry.compareSlot, slotEntry.selItem, slotEntry.output)
end

end
tooltip:AddLine(14, colorCodes.TIP.."Tip: Press Ctrl+D to disable the display of stat differences.")

if launch.devModeAlt then
-- Modifier debugging info
Expand Down
2 changes: 1 addition & 1 deletion src/Classes/PassiveTreeView.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1223,7 +1223,7 @@ function PassiveTreeViewClass:AddNodeTooltip(tooltip, node, build)
if node.type == "Socket" and node.alloc then
local socket, jewel = build.itemsTab:GetSocketAndJewelForNodeID(node.id)
if jewel then
build.itemsTab:AddItemTooltip(tooltip, jewel, { nodeId = node.id })
build.itemsTab:AddItemTooltip(tooltip, jewel, socket)
if node.distanceToClassStart and node.distanceToClassStart > 0 then
tooltip:AddSeparator(14)
tooltip:AddLine(16, string.format("^7Distance to start: %d", node.distanceToClassStart))
Expand Down
23 changes: 7 additions & 16 deletions src/Classes/TradeQuery.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1105,14 +1105,11 @@ function TradeQueryClass:PriceItemRowDisplay(row_idx, top_pane_alignment_ref, ro
local item = new("Item", result.item_string)
tooltip:Clear()
if slotTbl.slotName == "Watcher's Eye" then
local firstValidSlot = self:findValidSlotForWatchersEye()
local currentItem = firstValidSlot.selItemId ~= 0 and self.itemsTab.items[firstValidSlot.selItemId]
local eyeEquipped = currentItem and currentItem.name:find("Watcher's Eye")
-- for watcher's eye we can compare to an already existing one, or
-- default to comparing with all active sockets
self.itemsTab:AddItemTooltip(tooltip, item, eyeEquipped and firstValidSlot or nil)
-- for watcher's eye we don't have a target slot. this will also
-- mean we compare against an existing watcher's eye if one exists
self.itemsTab:AddItemTooltip(tooltip, item, nil)
else
self.itemsTab:AddItemTooltip(tooltip, item, slotTbl)
self.itemsTab:AddItemTooltip(tooltip, item, activeSlot)
end
addMegalomaniacCompareToTooltipIfApplicable(tooltip, pb_index)
tooltip:AddSeparator(10)
Expand Down Expand Up @@ -1141,17 +1138,11 @@ function TradeQueryClass:PriceItemRowDisplay(row_idx, top_pane_alignment_ref, ro
-- item.baseName is nil and throws error in the following AddItemTooltip func
-- if the item is unidentified
local item = new("Item", item_string)
-- for watcher's eye we can compare to an already existing one, or
-- default to comparing with all active sockets
if slotTbl.slotName == "Watcher's Eye" then
local firstValidSlot = self:findValidSlotForWatchersEye()
local currentItem = firstValidSlot.selItemId ~= 0 and self.itemsTab.items[firstValidSlot.selItemId]
local eyeEquipped = currentItem and currentItem.name:find("Watcher's Eye")
-- for watcher's eye we can compare to an already existing one, or
-- default to comparing with all active sockets
self.itemsTab:AddItemTooltip(tooltip, item, eyeEquipped and firstValidSlot or nil, true)
-- we have no comparison slot for the watcher's eye
self.itemsTab:AddItemTooltip(tooltip, item, nil, true)
else
self.itemsTab:AddItemTooltip(tooltip, item, slotTbl, true)
self.itemsTab:AddItemTooltip(tooltip, item, activeSlot, true)
end
addMegalomaniacCompareToTooltipIfApplicable(tooltip, selected_result_index)
end
Expand Down
2 changes: 1 addition & 1 deletion src/Modules/Main.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1032,7 +1032,7 @@ function main:OpenOptionsPopup()
nextRow()
controls.slotOnlyTooltips = new("CheckBoxControl", { "TOPLEFT", nil, "TOPLEFT" }, { defaultLabelPlacementX, currentY, 20 }, "^7Show tooltips only for affected slots:", function(state)
self.slotOnlyTooltips = state
end)
end, "Shows comparisons in tooltips only for the slot you are currently placing the item in, instead of all slots.")
controls.slotOnlyTooltips.state = self.slotOnlyTooltips

nextRow()
Expand Down
Loading