|
|
|
@ -81,6 +81,7 @@ local OreCombineItems = {
|
|
|
|
|
-- MoP
|
|
|
|
|
97512, -- ghost iron nugget
|
|
|
|
|
97546, -- kyparite fragment
|
|
|
|
|
90407, -- sparkling shard
|
|
|
|
|
-- WoD
|
|
|
|
|
109991, -- true iron nugget
|
|
|
|
|
109992, -- blackrock fragment
|
|
|
|
@ -408,6 +409,19 @@ function Breakables:GetEnchantingLevel()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function GetIgnoreListOptions()
|
|
|
|
|
local ret = {}
|
|
|
|
|
|
|
|
|
|
if Breakables.settings.ignoreList ~= nil then
|
|
|
|
|
for k,v in pairs(Breakables.settings.ignoreList) do
|
|
|
|
|
local name, _, _, _, _, _, _, _, _, texture = GetItemInfo(k)
|
|
|
|
|
ret[k] = ("|T%s:0|t %s"):format(texture, name)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return ret
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function Breakables:GetOptions()
|
|
|
|
|
local opts = {
|
|
|
|
|
name = L["Breakables"],
|
|
|
|
@ -541,6 +555,50 @@ function Breakables:GetOptions()
|
|
|
|
|
end,
|
|
|
|
|
order = 7,
|
|
|
|
|
},
|
|
|
|
|
ignoreList = {
|
|
|
|
|
type = 'multiselect',
|
|
|
|
|
name = L["Ignore list"],
|
|
|
|
|
desc = L["Items that have been right-clicked to exclude from the breakable list. Un-check the box to remove the item from the ignore list."],
|
|
|
|
|
get = function(info, key)
|
|
|
|
|
return true
|
|
|
|
|
end,
|
|
|
|
|
set = function(info, key)
|
|
|
|
|
Breakables.settings.ignoreList[key] = nil
|
|
|
|
|
Breakables:FindBreakables()
|
|
|
|
|
end,
|
|
|
|
|
confirm = function()
|
|
|
|
|
return L["Are you sure you want to remove this item from the ignore list?"]
|
|
|
|
|
end,
|
|
|
|
|
values = GetIgnoreListOptions,
|
|
|
|
|
order = 30,
|
|
|
|
|
},
|
|
|
|
|
clearIgnoreList = {
|
|
|
|
|
type = 'execute',
|
|
|
|
|
func = function()
|
|
|
|
|
for k,v in pairs(Breakables.settings.ignoreList) do
|
|
|
|
|
Breakables.settings.ignoreList[k] = nil
|
|
|
|
|
end
|
|
|
|
|
Breakables:FindBreakables()
|
|
|
|
|
end,
|
|
|
|
|
name = L["Clear ignore list"],
|
|
|
|
|
confirm = function()
|
|
|
|
|
return L["Are you sure you want to clear the ignore list?"]
|
|
|
|
|
end,
|
|
|
|
|
disabled = function()
|
|
|
|
|
if Breakables.settings.ignoreList == nil then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
for k,v in pairs(Breakables.settings.ignoreList) do
|
|
|
|
|
if v ~= nil then
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return true
|
|
|
|
|
end,
|
|
|
|
|
order = 31,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -727,6 +785,18 @@ function Breakables:OnMouseUp(frame)
|
|
|
|
|
self.settings.buttonFrameTop[frameNum] = frame:GetTop()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function IgnoreFunc(self, button)
|
|
|
|
|
if button == "RightButton" and not InCombatLockdown() then
|
|
|
|
|
if Breakables.settings.ignoreList == nil then
|
|
|
|
|
Breakables.settings.ignoreList = {}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
Breakables.settings.ignoreList[self.itemId] = true
|
|
|
|
|
Breakables:FindBreakables()
|
|
|
|
|
LibStub("AceConfigRegistry-3.0"):NotifyChange("Breakables")
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function Breakables:FindBreakables(bag)
|
|
|
|
|
if self.settings.hide then
|
|
|
|
|
return
|
|
|
|
@ -774,7 +844,7 @@ function Breakables:FindBreakables(bag)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if (foundBreakables[i][IDX_BREAKABLETYPE] == self.buttonFrame[j].type or (foundBreakables[i][IDX_BREAKABLETYPE] == BREAKABLE_COMBINE and foundBreakables[i][IDX_COUNT] >= 10)) and numBreakableStacks[j] < self.settings.maxBreakablesToShow then
|
|
|
|
|
local isDisenchantable = self:BreakableIsDisenchantable(foundBreakables[i][IDX_TYPE], foundBreakables[i][IDX_LEVEL], foundBreakables[i][IDX_RARITY])
|
|
|
|
|
local isDisenchantable = self:BreakableIsDisenchantable(foundBreakables[i][IDX_TYPE], foundBreakables[i][IDX_LEVEL], foundBreakables[i][IDX_RARITY], foundBreakables[i][IDX_LINK])
|
|
|
|
|
local isLockedItem = foundBreakables[i][IDX_BREAKABLETYPE] == BREAKABLE_PICK
|
|
|
|
|
|
|
|
|
|
if (CanDisenchant and isDisenchantable) or (CanPickLock and isLockedItem) or (foundBreakables[i][IDX_COUNT] >= 5) then
|
|
|
|
@ -796,7 +866,7 @@ function Breakables:FindBreakables(bag)
|
|
|
|
|
btn:EnableMouse(true)
|
|
|
|
|
btn:RegisterForClicks("AnyUp")
|
|
|
|
|
|
|
|
|
|
btn:SetAttribute("type", "spell")
|
|
|
|
|
btn:SetAttribute("type1", "spell")
|
|
|
|
|
|
|
|
|
|
if not btn.text then
|
|
|
|
|
btn.text = btn:CreateFontString()
|
|
|
|
@ -804,11 +874,15 @@ function Breakables:FindBreakables(bag)
|
|
|
|
|
end
|
|
|
|
|
btn.text:SetFont(NumberFont_Outline_Med:GetFont(), self.settings.fontSize, "OUTLINE")
|
|
|
|
|
|
|
|
|
|
btn:HookScript("OnClick", IgnoreFunc)
|
|
|
|
|
|
|
|
|
|
if lbfGroup then
|
|
|
|
|
lbfGroup:AddButton(btn)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
btn.itemId = self:GetItemIdFromLink(foundBreakables[i][IDX_LINK])
|
|
|
|
|
|
|
|
|
|
local attachFrom = "LEFT"
|
|
|
|
|
local attachTo = "RIGHT"
|
|
|
|
|
if self.settings.growDirection then
|
|
|
|
@ -847,13 +921,13 @@ function Breakables:FindBreakables(bag)
|
|
|
|
|
--or (foundBreakables[i][IDX_BREAKABLETYPE] == BREAKABLE_DE and DisenchantId)
|
|
|
|
|
--or PickLockId)
|
|
|
|
|
if BreakableAbilityName then
|
|
|
|
|
btn:SetAttribute("type", "spell")
|
|
|
|
|
btn:SetAttribute("type1", "spell")
|
|
|
|
|
btn:SetAttribute("spell", BreakableAbilityName)
|
|
|
|
|
|
|
|
|
|
btn:SetAttribute("target-bag", foundBreakables[i][IDX_BAG])
|
|
|
|
|
btn:SetAttribute("target-slot", foundBreakables[i][IDX_SLOT])
|
|
|
|
|
else
|
|
|
|
|
btn:SetAttribute("type", "item")
|
|
|
|
|
btn:SetAttribute("type1", "item")
|
|
|
|
|
btn:SetAttribute("item", "item:" .. self:GetItemIdFromLink(foundBreakables[i][IDX_LINK]))
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
@ -932,6 +1006,8 @@ function Breakables:OnEnterBreakableButton(this)
|
|
|
|
|
|
|
|
|
|
GameTooltip:AddLine(" ")
|
|
|
|
|
GameTooltip:AddLine(L["You can click on this button to break this item without having to click on the profession button first."], 1, 1, 1, 1)
|
|
|
|
|
GameTooltip:AddLine(" ")
|
|
|
|
|
GameTooltip:AddLine(L["You can right-click on this button to ignore this item. Items can be unignored from the options screen."], 1, 1, 1, 1)
|
|
|
|
|
GameTooltip:Show()
|
|
|
|
|
showingTooltip = this
|
|
|
|
|
end
|
|
|
|
@ -977,12 +1053,16 @@ function Breakables:FindBreakablesInSlot(bagId, slotId)
|
|
|
|
|
local texture, itemCount, locked, quality, readable = GetContainerItemInfo(bagId, slotId)
|
|
|
|
|
if texture then
|
|
|
|
|
local itemLink = GetContainerItemLink(bagId, slotId)
|
|
|
|
|
if self.settings.ignoreList and self.settings.ignoreList[self:GetItemIdFromLink(itemLink)] then
|
|
|
|
|
return nil
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local itemName, _, itemRarity, itemLevel, _, itemType, itemSubType, _, equipSlot, itemTexture, vendorPrice = GetItemInfo(itemLink)
|
|
|
|
|
|
|
|
|
|
self.myTooltip:SetBagItem(bagId, slotId)
|
|
|
|
|
|
|
|
|
|
if CanDisenchant and itemRarity and itemRarity >= RARITY_UNCOMMON and itemRarity < RARITY_HEIRLOOM
|
|
|
|
|
and self:BreakableIsDisenchantable(itemType, itemLevel, itemRarity) then
|
|
|
|
|
and self:BreakableIsDisenchantable(itemType, itemLevel, itemRarity, itemLink) then
|
|
|
|
|
local i = 1
|
|
|
|
|
local soulbound = false
|
|
|
|
|
for i=1,15 do
|
|
|
|
@ -1006,7 +1086,7 @@ function Breakables:FindBreakablesInSlot(bagId, slotId)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local shouldHideThisItem = (self.settings.hideEqManagerItems and isInEquipmentSet) or (self.settings.hideTabards and isTabard)
|
|
|
|
|
or equipSlot == nil or equipSlot == ""
|
|
|
|
|
or equipSlot == nil or (equipSlot == "" and not IsArtifactRelicItem(itemLink))
|
|
|
|
|
|
|
|
|
|
if (not soulbound or self.settings.showSoulbound) and not shouldHideThisItem then
|
|
|
|
|
return {itemLink, itemCount, itemType, itemTexture, bagId, slotId, itemSubType, itemLevel, BREAKABLE_DE, soulbound, itemName, itemRarity}
|
|
|
|
@ -1183,9 +1263,9 @@ function Breakables:SortBreakables(foundBreakables)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function Breakables:BreakableIsDisenchantable(itemType, itemLevel, itemRarity)
|
|
|
|
|
function Breakables:BreakableIsDisenchantable(itemType, itemLevel, itemRarity, itemLink)
|
|
|
|
|
for i=1,#DisenchantTypes do
|
|
|
|
|
if DisenchantTypes[i] == itemType then
|
|
|
|
|
if DisenchantTypes[i] == itemType or IsArtifactRelicItem(itemLink) then
|
|
|
|
|
-- account for WoD and higher no longer needing specific ilvl. numbers from http://wow.gamepedia.com/Item_level
|
|
|
|
|
if (itemRarity == RARITY_UNCOMMON and itemLevel >= 483)
|
|
|
|
|
or (itemRarity == RARITY_RARE and itemLevel >= 515)
|
|
|
|
|