|
|
|
@ -5,8 +5,67 @@ local LBF = LibStub("Masque", true)
|
|
|
|
|
|
|
|
|
|
local lbfGroup
|
|
|
|
|
|
|
|
|
|
local IsArtifactRelicItem, GetBagName, GetContainerNumSlots, GetContainerItemInfo, GetContainerItemLink =
|
|
|
|
|
IsArtifactRelicItem, GetBagName, GetContainerNumSlots, GetContainerItemInfo, GetContainerItemLink
|
|
|
|
|
if not IsArtifactRelicItem then
|
|
|
|
|
IsArtifactRelicItem = function()
|
|
|
|
|
return false
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
if C_Container then
|
|
|
|
|
if C_Container.GetBagName then
|
|
|
|
|
GetBagName = C_Container.GetBagName
|
|
|
|
|
end
|
|
|
|
|
if C_Container.GetContainerNumSlots then
|
|
|
|
|
GetContainerNumSlots = C_Container.GetContainerNumSlots
|
|
|
|
|
end
|
|
|
|
|
if C_Container.GetContainerItemInfo then
|
|
|
|
|
GetContainerItemInfo = function(bagId, slotId)
|
|
|
|
|
local info = C_Container.GetContainerItemInfo(bagId, slotId)
|
|
|
|
|
if not info then
|
|
|
|
|
return nil
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return info.iconFileID, info.stackCount
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
if C_Container.GetContainerItemLink then
|
|
|
|
|
GetContainerItemLink = C_Container.GetContainerItemLink
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local EQUIPPED_LAST = EQUIPPED_LAST
|
|
|
|
|
if not EQUIPPED_LAST then
|
|
|
|
|
EQUIPPED_LAST = INVSLOT_LAST_EQUIPPED
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local WowVer = select(4, GetBuildInfo())
|
|
|
|
|
local IsClassic = WOW_PROJECT_ID and WOW_PROJECT_ID == WOW_PROJECT_CLASSIC
|
|
|
|
|
local IsClassic = false
|
|
|
|
|
local IsClassicBC = false
|
|
|
|
|
local IsClassicWrath = false
|
|
|
|
|
if GetClassicExpansionLevel then
|
|
|
|
|
IsClassic = GetClassicExpansionLevel() == 0
|
|
|
|
|
IsClassicBC = GetClassicExpansionLevel() == 1
|
|
|
|
|
IsClassicWrath = GetClassicExpansionLevel() == 2
|
|
|
|
|
else
|
|
|
|
|
IsClassic = WOW_PROJECT_ID and WOW_PROJECT_ID == WOW_PROJECT_CLASSIC
|
|
|
|
|
IsClassicBC = false
|
|
|
|
|
IsClassicWrath = false
|
|
|
|
|
if WOW_PROJECT_ID and WOW_PROJECT_ID == WOW_PROJECT_BURNING_CRUSADE_CLASSIC then
|
|
|
|
|
if not LE_EXPANSION_LEVEL_CURRENT or LE_EXPANSION_LEVEL_CURRENT == LE_EXPANSION_BURNING_CRUSADE then
|
|
|
|
|
IsClassicBC = true
|
|
|
|
|
elseif LE_EXPANSION_LEVEL_CURRENT == LE_EXPANSION_WRATH_OF_THE_LICH_KING then
|
|
|
|
|
IsClassicWrath = true
|
|
|
|
|
end
|
|
|
|
|
elseif WOW_PROJECT_WRATH_CLASSIC and WOW_PROJECT_ID == WOW_PROJECT_WRATH_CLASSIC then
|
|
|
|
|
IsClassicWrath = true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local ShouldHookTradeskillUpdate = WowVer < 80000
|
|
|
|
|
local ShouldShowTabardControls = WowVer >= 80000
|
|
|
|
|
local UseNonNativeEqManagerChecks = WowVer < 80000
|
|
|
|
|
local IgnoreEnchantingSkillLevelForDisenchant = WowVer >= 80000
|
|
|
|
|
|
|
|
|
|
local MillingId = 51005
|
|
|
|
|
local MillingItemSubType = babbleInv["Herb"]
|
|
|
|
@ -46,6 +105,7 @@ local AdditionalMillableItems = {
|
|
|
|
|
168583, -- widowbloom
|
|
|
|
|
169701, -- death blossom
|
|
|
|
|
171315, -- nightshade
|
|
|
|
|
187699, -- first flower, 9.2.0
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
local AdditionalProspectableItems = {
|
|
|
|
@ -65,6 +125,7 @@ local AdditionalProspectableItems = {
|
|
|
|
|
171830, -- oxxein
|
|
|
|
|
171831, -- phaedrum
|
|
|
|
|
171832, -- sinvyr
|
|
|
|
|
187700, -- progenium ore, 9.2.0
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
local MassMilling = {
|
|
|
|
@ -91,6 +152,7 @@ local MassMilling = {
|
|
|
|
|
[168583] = 311415,
|
|
|
|
|
[169701] = 311413,
|
|
|
|
|
[171315] = 311418,
|
|
|
|
|
[187699] = 359490,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
local HerbCombineItems = {
|
|
|
|
@ -178,6 +240,7 @@ local PickableItems = {
|
|
|
|
|
180532, -- maldraxxi
|
|
|
|
|
180533, -- kyrian
|
|
|
|
|
180522, -- night fae
|
|
|
|
|
186161, -- stygian lockbox, 9.1.0
|
|
|
|
|
}
|
|
|
|
|
local CanPickLock = false
|
|
|
|
|
|
|
|
|
@ -207,6 +270,7 @@ local BREAKABLE_PICK = 4
|
|
|
|
|
local BREAKABLE_COMBINE = 5
|
|
|
|
|
|
|
|
|
|
local BagUpdateCheckDelay = 0.1
|
|
|
|
|
local PickLockFinishedDelay = 1
|
|
|
|
|
local nextCheck = {}
|
|
|
|
|
for i=0,NUM_BAG_SLOTS do
|
|
|
|
|
nextCheck[i] = -1
|
|
|
|
@ -225,6 +289,10 @@ local showingTooltip = nil
|
|
|
|
|
|
|
|
|
|
Breakables.optionsFrame = {}
|
|
|
|
|
Breakables.justClicked = false
|
|
|
|
|
Breakables.justClickedBag = -1
|
|
|
|
|
Breakables.justClickedSlot = -1
|
|
|
|
|
Breakables.justPickedBag = -1
|
|
|
|
|
Breakables.justPickedSlot = -1
|
|
|
|
|
|
|
|
|
|
function Breakables:OnInitialize()
|
|
|
|
|
self.defaults = {
|
|
|
|
@ -237,10 +305,13 @@ function Breakables:OnInitialize()
|
|
|
|
|
hideEqManagerItems = true,
|
|
|
|
|
hide = false,
|
|
|
|
|
hideInCombat = false,
|
|
|
|
|
hideInPetBattle = true,
|
|
|
|
|
buttonScale = 1,
|
|
|
|
|
fontSize = 11,
|
|
|
|
|
growDirection = 2,
|
|
|
|
|
ignoreList = {},
|
|
|
|
|
showTooltipForBreakables = true,
|
|
|
|
|
showTooltipForProfession = true,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
self.db = LibStub("AceDB-3.0"):New("BreakablesDB", self.defaults, true)
|
|
|
|
@ -295,12 +366,28 @@ function Breakables:InitLDB()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function Breakables:OnEnable()
|
|
|
|
|
function Breakables:SetCapabilities()
|
|
|
|
|
CanMill = IsUsableSpell(GetSpellInfo(MillingId))
|
|
|
|
|
CanProspect = IsUsableSpell(GetSpellInfo(ProspectingId))
|
|
|
|
|
CanDisenchant = IsUsableSpell(GetSpellInfo(DisenchantId))
|
|
|
|
|
CanPickLock = IsUsableSpell(GetSpellInfo(PickLockId))
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function Breakables:OnSpellsChanged()
|
|
|
|
|
local couldMill = CanMill
|
|
|
|
|
local couldProspect = CanProspect
|
|
|
|
|
local couldDisenchant = CanDisenchant
|
|
|
|
|
local couldPick = CanPickLock
|
|
|
|
|
self:SetCapabilities()
|
|
|
|
|
|
|
|
|
|
if couldMill ~= CanMill or couldProspect ~= CanProspect or couldDisenchant ~= CanDisenchant or couldPick ~= CanPickLock then
|
|
|
|
|
self:SetupButtons()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function Breakables:OnEnable()
|
|
|
|
|
self:SetCapabilities()
|
|
|
|
|
|
|
|
|
|
self.EnchantingLevel = 0
|
|
|
|
|
|
|
|
|
|
LibStub("AceConfig-3.0"):RegisterOptionsTable("Breakables", self:GetOptions(), "breakables")
|
|
|
|
@ -317,7 +404,16 @@ function Breakables:OnEnable()
|
|
|
|
|
|
|
|
|
|
self:RegisterEvents()
|
|
|
|
|
|
|
|
|
|
if CanMill or CanProspect or CanDisenchant or CanPickLock then
|
|
|
|
|
self:SetupButtons()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local canBreakSomething = function()
|
|
|
|
|
return CanMill or CanProspect or CanDisenchant or CanPickLock
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function Breakables:SetupButtons()
|
|
|
|
|
numEligibleProfessions = 0
|
|
|
|
|
if canBreakSomething() then
|
|
|
|
|
if CanMill then
|
|
|
|
|
numEligibleProfessions = numEligibleProfessions + 1
|
|
|
|
|
end
|
|
|
|
@ -343,7 +439,7 @@ function Breakables:OnEnable()
|
|
|
|
|
end
|
|
|
|
|
self.frame:SetScript("OnUpdate", self.frame.OnUpdateFunc)
|
|
|
|
|
else
|
|
|
|
|
self:UnregisterAllEvents()
|
|
|
|
|
self:CreateButtonFrame()
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
@ -372,13 +468,17 @@ function Breakables:RegisterEvents()
|
|
|
|
|
self:RegisterEvent("PLAYER_REGEN_ENABLED", "OnLeaveCombat")
|
|
|
|
|
|
|
|
|
|
self:RegisterEvent("MODIFIER_STATE_CHANGED", "FindBreakables")
|
|
|
|
|
self:RegisterEvent("SPELLS_CHANGED", "OnSpellsChanged")
|
|
|
|
|
|
|
|
|
|
if CanDisenchant and WowVer < 80000 then
|
|
|
|
|
if ShouldHookTradeskillUpdate then
|
|
|
|
|
self:RegisterEvent("TRADE_SKILL_UPDATE", "OnTradeSkillUpdate")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if CanPickLock then
|
|
|
|
|
self:RegisterEvent("CHAT_MSG_OPENING", "OnBagItemLockPicked")
|
|
|
|
|
self:RegisterEvent("UNIT_SPELLCAST_SUCCEEDED", "OnSpellCastSucceeded")
|
|
|
|
|
|
|
|
|
|
if UnitCanPetBattle then
|
|
|
|
|
self:RegisterEvent("PET_BATTLE_OPENING_START", "PetBattleStarted")
|
|
|
|
|
self:RegisterEvent("PET_BATTLE_OVER", "PetBattleEnded")
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
@ -440,12 +540,34 @@ function Breakables:OnLeaveCombat()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function Breakables:OnTradeSkillUpdate()
|
|
|
|
|
if not CanDisenchant then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
self:GetEnchantingLevel()
|
|
|
|
|
self:FindBreakables()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function Breakables:OnBagItemLockPicked()
|
|
|
|
|
function Breakables:OnSpellCastSucceeded(evt, unit, guid, spell)
|
|
|
|
|
if spell ~= PickLockId or not CanPickLock then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
self.justPickedBag = self.justClickedBag
|
|
|
|
|
self.justPickedSlot = self.justClickedSlot
|
|
|
|
|
|
|
|
|
|
self:FindBreakables()
|
|
|
|
|
nextCheck[0] = GetTime() + PickLockFinishedDelay
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function Breakables:PetBattleStarted()
|
|
|
|
|
if self.settings.hideInPetBattle then
|
|
|
|
|
self:ToggleButtonFrameVisibility(false)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function Breakables:PetBattleEnded()
|
|
|
|
|
self:ToggleButtonFrameVisibility(true)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function Breakables:FindLevelOfProfessionIndex(idx)
|
|
|
|
@ -468,6 +590,14 @@ function Breakables:GetEnchantingLevel()
|
|
|
|
|
self.EnchantingLevel = rank
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
elseif GetSkillLineInfo then
|
|
|
|
|
for i=1,100 do
|
|
|
|
|
local skillName, header, isExpanded, skillRank, numTempPoints, skillModifier, skillMaxRank, isAbandonable, stepCost, rankCost, minLevel, skillCostType = GetSkillLineInfo(i)
|
|
|
|
|
if skillName == babbleInv["Enchanting"] then
|
|
|
|
|
self.EnchantingLevel = skillRank
|
|
|
|
|
break
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
@ -506,219 +636,313 @@ function Breakables:GetOptions()
|
|
|
|
|
name = L["Welcome"],
|
|
|
|
|
order = 0,
|
|
|
|
|
},
|
|
|
|
|
hideAlways = {
|
|
|
|
|
type = "toggle",
|
|
|
|
|
name = L["Hide bar"],
|
|
|
|
|
desc = L["This will completely hide the breakables bar whether you have anything to break down or not. Note that you can toggle this in a macro using the /breakables command as well."],
|
|
|
|
|
get = function(info)
|
|
|
|
|
return self.settings.hide
|
|
|
|
|
end,
|
|
|
|
|
set = function(info, v)
|
|
|
|
|
self.settings.hide = v
|
|
|
|
|
if info.uiType == "cmd" then
|
|
|
|
|
print("|cff33ff99Breakables|r: set |cffffff78maxBreakables|r to " .. tostring(self.settings.hide))
|
|
|
|
|
end
|
|
|
|
|
self:ToggleButtonFrameVisibility(not v)
|
|
|
|
|
if not v then
|
|
|
|
|
self:FindBreakables()
|
|
|
|
|
end
|
|
|
|
|
end,
|
|
|
|
|
order = 1
|
|
|
|
|
mainSettings = {
|
|
|
|
|
name = L["Settings"],
|
|
|
|
|
type = "group",
|
|
|
|
|
order = 1,
|
|
|
|
|
args = {
|
|
|
|
|
hideAlways = {
|
|
|
|
|
type = "toggle",
|
|
|
|
|
name = L["Hide bar"],
|
|
|
|
|
desc = L["This will completely hide the breakables bar whether you have anything to break down or not. Note that you can toggle this in a macro using the /breakables command as well."],
|
|
|
|
|
get = function(info)
|
|
|
|
|
return self.settings.hide
|
|
|
|
|
end,
|
|
|
|
|
set = function(info, v)
|
|
|
|
|
self.settings.hide = v
|
|
|
|
|
if info.uiType == "cmd" then
|
|
|
|
|
print("|cff33ff99Breakables|r: set |cffffff78maxBreakables|r to " .. tostring(self.settings.hide))
|
|
|
|
|
end
|
|
|
|
|
self:ToggleButtonFrameVisibility(not v)
|
|
|
|
|
if not v then
|
|
|
|
|
self:FindBreakables()
|
|
|
|
|
end
|
|
|
|
|
end,
|
|
|
|
|
order = 1
|
|
|
|
|
},
|
|
|
|
|
hideNoBreakables = {
|
|
|
|
|
type = "toggle",
|
|
|
|
|
name = L["Hide if no breakables"],
|
|
|
|
|
desc = L["Whether or not to hide the action bar if no breakables are present in your bags"],
|
|
|
|
|
get = function(info)
|
|
|
|
|
return self.settings.hideIfNoBreakables
|
|
|
|
|
end,
|
|
|
|
|
set = function(info, v)
|
|
|
|
|
self.settings.hideIfNoBreakables = v
|
|
|
|
|
if info.uiType == "cmd" then
|
|
|
|
|
print("|cff33ff99Breakables|r: set |cffffff78hideIfNoBreakables|r to " .. tostring(self.settings.hideIfNoBreakables))
|
|
|
|
|
end
|
|
|
|
|
self:FindBreakables()
|
|
|
|
|
end,
|
|
|
|
|
order = 2,
|
|
|
|
|
},
|
|
|
|
|
hideInCombat = {
|
|
|
|
|
type = "toggle",
|
|
|
|
|
name = L["Hide during combat"],
|
|
|
|
|
desc = L["Whether or not to hide the breakables bar when you enter combat and show it again when leaving combat."],
|
|
|
|
|
get = function(info)
|
|
|
|
|
return self.settings.hideInCombat
|
|
|
|
|
end,
|
|
|
|
|
set = function(info, v)
|
|
|
|
|
self.settings.hideInCombat = v
|
|
|
|
|
if info.uiType == "cmd" then
|
|
|
|
|
print("|cff33ff99Breakables|r: set |cffffff78hideInCombat|r to " .. tostring(self.settings.hideInCombat))
|
|
|
|
|
end
|
|
|
|
|
end,
|
|
|
|
|
order = 3,
|
|
|
|
|
},
|
|
|
|
|
maxBreakables = {
|
|
|
|
|
type = 'range',
|
|
|
|
|
name = L["Max number to display"],
|
|
|
|
|
desc = L["How many breakable buttons to display next to the profession button at maximum"],
|
|
|
|
|
min = 1,
|
|
|
|
|
max = 50,
|
|
|
|
|
step = 1,
|
|
|
|
|
get = function(info)
|
|
|
|
|
return self.settings.maxBreakablesToShow
|
|
|
|
|
end,
|
|
|
|
|
set = function(info, v)
|
|
|
|
|
self.settings.maxBreakablesToShow = v
|
|
|
|
|
if info.uiType == "cmd" then
|
|
|
|
|
print("|cff33ff99Breakables|r: set |cffffff78maxBreakables|r to " .. tostring(self.settings.maxBreakablesToShow))
|
|
|
|
|
end
|
|
|
|
|
self:FindBreakables()
|
|
|
|
|
end,
|
|
|
|
|
order = 4,
|
|
|
|
|
},
|
|
|
|
|
buttonScale = {
|
|
|
|
|
type = 'range',
|
|
|
|
|
name = L["Button scale"],
|
|
|
|
|
desc = L["This will scale the size of each button up or down."],
|
|
|
|
|
min = 0.1,
|
|
|
|
|
max = 2,
|
|
|
|
|
step = 0.01,
|
|
|
|
|
get = function(info)
|
|
|
|
|
return self.settings.buttonScale
|
|
|
|
|
end,
|
|
|
|
|
set = function(info, v)
|
|
|
|
|
self.settings.buttonScale = v
|
|
|
|
|
Breakables:ApplyScale()
|
|
|
|
|
if info.uiType == "cmd" then
|
|
|
|
|
print("|cff33ff99Breakables|r: set |cffffff78buttonScale|r to " .. tostring(self.settings.buttonScale))
|
|
|
|
|
end
|
|
|
|
|
end,
|
|
|
|
|
order = 5,
|
|
|
|
|
},
|
|
|
|
|
fontSize = {
|
|
|
|
|
type = 'range',
|
|
|
|
|
name = L["Font size"],
|
|
|
|
|
desc = L["This sets the size of the text that shows how many items you have to break."],
|
|
|
|
|
min = 4,
|
|
|
|
|
max = 90,
|
|
|
|
|
step = 1,
|
|
|
|
|
get = function(info)
|
|
|
|
|
return self.settings.fontSize
|
|
|
|
|
end,
|
|
|
|
|
set = function(info, v)
|
|
|
|
|
self.settings.fontSize = v
|
|
|
|
|
Breakables:ApplyScale()
|
|
|
|
|
if info.uiType == "cmd" then
|
|
|
|
|
print("|cff33ff99Breakables|r: set |cffffff78fontSize|r to " .. tostring(self.settings.fontSize))
|
|
|
|
|
end
|
|
|
|
|
end,
|
|
|
|
|
order = 6,
|
|
|
|
|
},
|
|
|
|
|
growDirection = {
|
|
|
|
|
type = 'select',
|
|
|
|
|
name = L["Button grow direction"],
|
|
|
|
|
desc = L["This controls which direction the breakable buttons grow toward."],
|
|
|
|
|
values = validGrowDirections,
|
|
|
|
|
get = function()
|
|
|
|
|
return self.settings.growDirection
|
|
|
|
|
end,
|
|
|
|
|
set = function(info, v)
|
|
|
|
|
self.settings.growDirection = v
|
|
|
|
|
self:FindBreakables()
|
|
|
|
|
end,
|
|
|
|
|
order = 7,
|
|
|
|
|
},
|
|
|
|
|
showTooltipForBreakables = {
|
|
|
|
|
type = "toggle",
|
|
|
|
|
name = L["Show tooltip on breakables"],
|
|
|
|
|
desc = L["Whether or not to show an item tooltip when hovering over a breakable item button."],
|
|
|
|
|
get = function(info)
|
|
|
|
|
return self.settings.showTooltipForBreakables
|
|
|
|
|
end,
|
|
|
|
|
set = function(info, v)
|
|
|
|
|
self.settings.showTooltipForBreakables = v
|
|
|
|
|
if info.uiType == "cmd" then
|
|
|
|
|
print("|cff33ff99Breakables|r: set |cffffff78showTooltipForBreakables|r to " .. tostring(self.settings.showTooltipForBreakables))
|
|
|
|
|
end
|
|
|
|
|
end,
|
|
|
|
|
order = 8,
|
|
|
|
|
},
|
|
|
|
|
showTooltipForProfession = {
|
|
|
|
|
type = "toggle",
|
|
|
|
|
name = L["Show tooltip on profession"],
|
|
|
|
|
desc = L["Whether or not to show an item tooltip when hovering over a profession button on the Breakables bar."],
|
|
|
|
|
get = function(info)
|
|
|
|
|
return self.settings.showTooltipForProfession
|
|
|
|
|
end,
|
|
|
|
|
set = function(info, v)
|
|
|
|
|
self.settings.showTooltipForProfession = v
|
|
|
|
|
if info.uiType == "cmd" then
|
|
|
|
|
print("|cff33ff99Breakables|r: set |cffffff78showTooltipForProfession|r to " .. tostring(self.settings.showTooltipForProfession))
|
|
|
|
|
end
|
|
|
|
|
end,
|
|
|
|
|
order = 9,
|
|
|
|
|
},
|
|
|
|
|
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,
|
|
|
|
|
hidden = function() return not IsIgnoringAnything() end,
|
|
|
|
|
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,
|
|
|
|
|
hidden = function() return not IsIgnoringAnything() end,
|
|
|
|
|
order = 31,
|
|
|
|
|
},
|
|
|
|
|
showSoulbound = {
|
|
|
|
|
type = "toggle",
|
|
|
|
|
name = L["Show soulbound items"],
|
|
|
|
|
desc = L["Whether or not to display soulbound items as breakables."],
|
|
|
|
|
get = function(info)
|
|
|
|
|
return self.settings.showSoulbound
|
|
|
|
|
end,
|
|
|
|
|
set = function(info, v)
|
|
|
|
|
self.settings.showSoulbound = v
|
|
|
|
|
if info.uiType == "cmd" then
|
|
|
|
|
print("|cff33ff99Breakables|r: set |cffffff78showSoulbound|r to " .. tostring(self.settings.showSoulbound))
|
|
|
|
|
end
|
|
|
|
|
self:FindBreakables()
|
|
|
|
|
end,
|
|
|
|
|
hidden = function()
|
|
|
|
|
return not CanDisenchant
|
|
|
|
|
end,
|
|
|
|
|
order = 20,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
hideNoBreakables = {
|
|
|
|
|
type = "toggle",
|
|
|
|
|
name = L["Hide if no breakables"],
|
|
|
|
|
desc = L["Whether or not to hide the action bar if no breakables are present in your bags"],
|
|
|
|
|
get = function(info)
|
|
|
|
|
return self.settings.hideIfNoBreakables
|
|
|
|
|
end,
|
|
|
|
|
set = function(info, v)
|
|
|
|
|
self.settings.hideIfNoBreakables = v
|
|
|
|
|
if info.uiType == "cmd" then
|
|
|
|
|
print("|cff33ff99Breakables|r: set |cffffff78hideIfNoBreakables|r to " .. tostring(self.settings.hideIfNoBreakables))
|
|
|
|
|
end
|
|
|
|
|
self:FindBreakables()
|
|
|
|
|
end,
|
|
|
|
|
reset = {
|
|
|
|
|
name = L["Reset"],
|
|
|
|
|
type = "group",
|
|
|
|
|
order = 2,
|
|
|
|
|
},
|
|
|
|
|
hideInCombat = {
|
|
|
|
|
type = "toggle",
|
|
|
|
|
name = L["Hide during combat"],
|
|
|
|
|
desc = L["Whether or not to hide the breakables bar when you enter combat and show it again when leaving combat."],
|
|
|
|
|
get = function(info)
|
|
|
|
|
return self.settings.hideInCombat
|
|
|
|
|
end,
|
|
|
|
|
set = function(info, v)
|
|
|
|
|
self.settings.hideInCombat = v
|
|
|
|
|
if info.uiType == "cmd" then
|
|
|
|
|
print("|cff33ff99Breakables|r: set |cffffff78hideInCombat|r to " .. tostring(self.settings.hideInCombat))
|
|
|
|
|
end
|
|
|
|
|
end,
|
|
|
|
|
order = 3,
|
|
|
|
|
},
|
|
|
|
|
maxBreakables = {
|
|
|
|
|
type = 'range',
|
|
|
|
|
name = L["Max number to display"],
|
|
|
|
|
desc = L["How many breakable buttons to display next to the profession button at maximum"],
|
|
|
|
|
min = 1,
|
|
|
|
|
max = 50,
|
|
|
|
|
step = 1,
|
|
|
|
|
get = function(info)
|
|
|
|
|
return self.settings.maxBreakablesToShow
|
|
|
|
|
end,
|
|
|
|
|
set = function(info, v)
|
|
|
|
|
self.settings.maxBreakablesToShow = v
|
|
|
|
|
if info.uiType == "cmd" then
|
|
|
|
|
print("|cff33ff99Breakables|r: set |cffffff78maxBreakables|r to " .. tostring(self.settings.maxBreakablesToShow))
|
|
|
|
|
end
|
|
|
|
|
self:FindBreakables()
|
|
|
|
|
end,
|
|
|
|
|
order = 4,
|
|
|
|
|
},
|
|
|
|
|
buttonScale = {
|
|
|
|
|
type = 'range',
|
|
|
|
|
name = L["Button scale"],
|
|
|
|
|
desc = L["This will scale the size of each button up or down."],
|
|
|
|
|
min = 0.1,
|
|
|
|
|
max = 2,
|
|
|
|
|
step = 0.01,
|
|
|
|
|
get = function(info)
|
|
|
|
|
return self.settings.buttonScale
|
|
|
|
|
end,
|
|
|
|
|
set = function(info, v)
|
|
|
|
|
self.settings.buttonScale = v
|
|
|
|
|
Breakables:ApplyScale()
|
|
|
|
|
if info.uiType == "cmd" then
|
|
|
|
|
print("|cff33ff99Breakables|r: set |cffffff78buttonScale|r to " .. tostring(self.settings.buttonScale))
|
|
|
|
|
end
|
|
|
|
|
end,
|
|
|
|
|
order = 5,
|
|
|
|
|
},
|
|
|
|
|
fontSize = {
|
|
|
|
|
type = 'range',
|
|
|
|
|
name = L["Font size"],
|
|
|
|
|
desc = L["This sets the size of the text that shows how many items you have to break."],
|
|
|
|
|
min = 4,
|
|
|
|
|
max = 90,
|
|
|
|
|
step = 1,
|
|
|
|
|
get = function(info)
|
|
|
|
|
return self.settings.fontSize
|
|
|
|
|
end,
|
|
|
|
|
set = function(info, v)
|
|
|
|
|
self.settings.fontSize = v
|
|
|
|
|
Breakables:ApplyScale()
|
|
|
|
|
if info.uiType == "cmd" then
|
|
|
|
|
print("|cff33ff99Breakables|r: set |cffffff78fontSize|r to " .. tostring(self.settings.fontSize))
|
|
|
|
|
end
|
|
|
|
|
end,
|
|
|
|
|
order = 6,
|
|
|
|
|
},
|
|
|
|
|
growDirection = {
|
|
|
|
|
type = 'select',
|
|
|
|
|
name = L["Button grow direction"],
|
|
|
|
|
desc = L["This controls which direction the breakable buttons grow toward."],
|
|
|
|
|
values = validGrowDirections,
|
|
|
|
|
get = function()
|
|
|
|
|
return self.settings.growDirection
|
|
|
|
|
end,
|
|
|
|
|
set = function(info, v)
|
|
|
|
|
self.settings.growDirection = v
|
|
|
|
|
self:FindBreakables()
|
|
|
|
|
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,
|
|
|
|
|
hidden = function() return not IsIgnoringAnything() end,
|
|
|
|
|
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,
|
|
|
|
|
hidden = function() return not IsIgnoringAnything() end,
|
|
|
|
|
order = 31,
|
|
|
|
|
args = {
|
|
|
|
|
resetPlacement = {
|
|
|
|
|
type = "execute",
|
|
|
|
|
name = L["Reset placement"],
|
|
|
|
|
desc = L["Resets where the buttons are placed on the screen to the default location."],
|
|
|
|
|
func = function()
|
|
|
|
|
self.settings.buttonFrameLeft = self.defaults.profile.buttonFrameLeft
|
|
|
|
|
self.settings.buttonFrameTop = self.defaults.profile.buttonFrameTop
|
|
|
|
|
self:CreateButtonFrame()
|
|
|
|
|
end,
|
|
|
|
|
order = 30,
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if CanDisenchant then
|
|
|
|
|
opts.args.showSoulbound = {
|
|
|
|
|
if GetNumEquipmentSets or C_EquipmentSet then
|
|
|
|
|
opts.args.mainSettings.args.hideEqManagerItems = {
|
|
|
|
|
type = "toggle",
|
|
|
|
|
name = L["Show soulbound items"],
|
|
|
|
|
desc = L["Whether or not to display soulbound items as breakables."],
|
|
|
|
|
name = L["Hide Eq. Mgr items"],
|
|
|
|
|
desc = L["Whether or not to hide items that are part of an equipment set in the game's equipment manager."],
|
|
|
|
|
get = function(info)
|
|
|
|
|
return self.settings.showSoulbound
|
|
|
|
|
return self.settings.hideEqManagerItems
|
|
|
|
|
end,
|
|
|
|
|
set = function(info, v)
|
|
|
|
|
self.settings.showSoulbound = v
|
|
|
|
|
self.settings.hideEqManagerItems = v
|
|
|
|
|
if info.uiType == "cmd" then
|
|
|
|
|
print("|cff33ff99Breakables|r: set |cffffff78showSoulbound|r to " .. tostring(self.settings.showSoulbound))
|
|
|
|
|
print("|cff33ff99Breakables|r: set |cffffff78hideEqManagerItems|r to " .. tostring(self.settings.hideEqManagerItems))
|
|
|
|
|
end
|
|
|
|
|
self:FindBreakables()
|
|
|
|
|
end,
|
|
|
|
|
order = 20,
|
|
|
|
|
hidden = function()
|
|
|
|
|
return not CanDisenchant and not self.settings.showSoulbound
|
|
|
|
|
end,
|
|
|
|
|
order = 21,
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if ShouldShowTabardControls then
|
|
|
|
|
opts.args.mainSettings.args.hideTabards = {
|
|
|
|
|
type = "toggle",
|
|
|
|
|
name = L["Hide Tabards"],
|
|
|
|
|
desc = L["Whether or not to hide tabards from the disenchantable items list."],
|
|
|
|
|
get = function(info)
|
|
|
|
|
return self.settings.hideTabards
|
|
|
|
|
end,
|
|
|
|
|
set = function(info, v)
|
|
|
|
|
self.settings.hideTabards = v
|
|
|
|
|
if info.uiType == "cmd" then
|
|
|
|
|
print("|cff33ff99Breakables|r: set |cffffff78hideTabards|r to " .. tostring(self.settings.hideTabards))
|
|
|
|
|
end
|
|
|
|
|
self:FindBreakables()
|
|
|
|
|
end,
|
|
|
|
|
order = 22,
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if not IgnoreEnchantingSkillLevelForDisenchant then
|
|
|
|
|
opts.args.mainSettings.args.ignoreEnchantingSkillLevel = {
|
|
|
|
|
type = "toggle",
|
|
|
|
|
name = L["Ignore Enchanting skill level"],
|
|
|
|
|
desc = L["Whether or not items should be shown when Breakables thinks you don't have the appropriate skill level to disenchant it."],
|
|
|
|
|
get = function(info)
|
|
|
|
|
return self.settings.ignoreEnchantingSkillLevel
|
|
|
|
|
end,
|
|
|
|
|
set = function(info, v)
|
|
|
|
|
self.settings.ignoreEnchantingSkillLevel = v
|
|
|
|
|
self:FindBreakables()
|
|
|
|
|
if info.uiType == "cmd" then
|
|
|
|
|
print("|cff33ff99Breakables|r: set |cffffff78ignoreEnchantingSkillLevel|r to " .. tostring(self.settings.ignoreEnchantingSkillLevel))
|
|
|
|
|
end
|
|
|
|
|
end,
|
|
|
|
|
order = 10,
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if UnitCanPetBattle then
|
|
|
|
|
opts.args.mainSettings.args.hideInPetBattle = {
|
|
|
|
|
type = "toggle",
|
|
|
|
|
name = L["Hide during pet battles"],
|
|
|
|
|
desc = L["Whether or not to hide the breakables bar when you enter a pet battle."],
|
|
|
|
|
get = function(info)
|
|
|
|
|
return self.settings.hideInPetBattle
|
|
|
|
|
end,
|
|
|
|
|
set = function(info, v)
|
|
|
|
|
self.settings.hideInPetBattle = v
|
|
|
|
|
if info.uiType == "cmd" then
|
|
|
|
|
print("|cff33ff99Breakables|r: set |cffffff78hideInPetBattle|r to " .. tostring(self.settings.hideInPetBattle))
|
|
|
|
|
end
|
|
|
|
|
end,
|
|
|
|
|
order = 3.5,
|
|
|
|
|
}
|
|
|
|
|
if GetNumEquipmentSets or C_EquipmentSet then
|
|
|
|
|
opts.args.hideEqManagerItems = {
|
|
|
|
|
type = "toggle",
|
|
|
|
|
name = L["Hide Eq. Mgr items"],
|
|
|
|
|
desc = L["Whether or not to hide items that are part of an equipment set in the game's equipment manager."],
|
|
|
|
|
get = function(info)
|
|
|
|
|
return self.settings.hideEqManagerItems
|
|
|
|
|
end,
|
|
|
|
|
set = function(info, v)
|
|
|
|
|
self.settings.hideEqManagerItems = v
|
|
|
|
|
if info.uiType == "cmd" then
|
|
|
|
|
print("|cff33ff99Breakables|r: set |cffffff78hideEqManagerItems|r to " .. tostring(self.settings.hideEqManagerItems))
|
|
|
|
|
end
|
|
|
|
|
self:FindBreakables()
|
|
|
|
|
end,
|
|
|
|
|
hidden = function()
|
|
|
|
|
return not self.settings.showSoulbound
|
|
|
|
|
end,
|
|
|
|
|
order = 21,
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
if WowVer >= 80000 then
|
|
|
|
|
opts.args.hideTabards = {
|
|
|
|
|
type = "toggle",
|
|
|
|
|
name = L["Hide Tabards"],
|
|
|
|
|
desc = L["Whether or not to hide tabards from the disenchantable items list."],
|
|
|
|
|
get = function(info)
|
|
|
|
|
return self.settings.hideTabards
|
|
|
|
|
end,
|
|
|
|
|
set = function(info, v)
|
|
|
|
|
self.settings.hideTabards = v
|
|
|
|
|
if info.uiType == "cmd" then
|
|
|
|
|
print("|cff33ff99Breakables|r: set |cffffff78hideTabards|r to " .. tostring(self.settings.hideTabards))
|
|
|
|
|
end
|
|
|
|
|
self:FindBreakables()
|
|
|
|
|
end,
|
|
|
|
|
order = 22,
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
return opts
|
|
|
|
@ -733,6 +957,11 @@ function Breakables:CreateButtonFrame()
|
|
|
|
|
self.buttonFrame = {}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
for i=numEligibleProfessions+1,#self.buttonFrame do
|
|
|
|
|
self.buttonFrame[i]:ClearAllPoints()
|
|
|
|
|
self.buttonFrame[i]:Hide()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
for i=1,numEligibleProfessions do
|
|
|
|
|
if not self.buttonFrame[i] then
|
|
|
|
|
self.buttonFrame[i] = CreateFrame("Button", "BREAKABLES_BUTTON_FRAME"..i, self.frame, "SecureActionButtonTemplate")
|
|
|
|
@ -755,7 +984,7 @@ function Breakables:CreateButtonFrame()
|
|
|
|
|
frame:SetHeight(buttonSize)
|
|
|
|
|
|
|
|
|
|
frame:EnableMouse(true)
|
|
|
|
|
frame:RegisterForClicks("LeftButtonUp")
|
|
|
|
|
frame:RegisterForClicks("LeftButtonUp", "LeftButtonDown")
|
|
|
|
|
|
|
|
|
|
if not frame.OnMouseDownFunc then
|
|
|
|
|
frame.OnMouseDownFunc = function(frame) self:OnMouseDown(frame) end
|
|
|
|
@ -850,8 +1079,8 @@ function Breakables:OnMouseUp(frame)
|
|
|
|
|
self.settings.buttonFrameTop[frameNum] = frame:GetTop()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local function IgnoreFunc(self, button)
|
|
|
|
|
if button == "RightButton" and not InCombatLockdown() then
|
|
|
|
|
local function IgnoreFunc(self, button, isDown)
|
|
|
|
|
if button == "RightButton" and isDown and not InCombatLockdown() then
|
|
|
|
|
Breakables.settings.ignoreList[self.itemId] = true
|
|
|
|
|
Breakables:FindBreakables()
|
|
|
|
|
LibStub("AceConfigRegistry-3.0"):NotifyChange("Breakables")
|
|
|
|
@ -863,6 +1092,10 @@ function Breakables:FindBreakables(bag)
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if not canBreakSomething() then
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if self.bCombat then
|
|
|
|
|
self.bPendingUpdate = true
|
|
|
|
|
return
|
|
|
|
@ -925,7 +1158,7 @@ function Breakables:FindBreakables(bag)
|
|
|
|
|
btn:SetWidth(buttonSize)
|
|
|
|
|
btn:SetHeight(buttonSize)
|
|
|
|
|
btn:EnableMouse(true)
|
|
|
|
|
btn:RegisterForClicks("AnyUp")
|
|
|
|
|
btn:RegisterForClicks("AnyUp", "AnyDown")
|
|
|
|
|
|
|
|
|
|
btn:SetAttribute("type1", "spell")
|
|
|
|
|
|
|
|
|
@ -1047,7 +1280,7 @@ end
|
|
|
|
|
|
|
|
|
|
function Breakables:OnEnterProfessionButton(btn)
|
|
|
|
|
local spellId = self:GetSpellIdFromProfessionButton(btn.type)
|
|
|
|
|
if spellId then
|
|
|
|
|
if spellId and self.settings.showTooltipForProfession then
|
|
|
|
|
GameTooltip:SetOwner(btn, "ANCHOR_BOTTOMLEFT")
|
|
|
|
|
GameTooltip:SetSpellByID(spellId)
|
|
|
|
|
|
|
|
|
@ -1062,23 +1295,30 @@ function Breakables:OnLeaveProfessionButton()
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function Breakables:OnEnterBreakableButton(this)
|
|
|
|
|
GameTooltip:SetOwner(this, "ANCHOR_BOTTOMLEFT")
|
|
|
|
|
GameTooltip:SetBagItem(this.bag, this.slot)
|
|
|
|
|
if self.settings.showTooltipForBreakables then
|
|
|
|
|
GameTooltip:SetOwner(this, "ANCHOR_BOTTOMLEFT")
|
|
|
|
|
GameTooltip:SetBagItem(this.bag, this.slot)
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
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
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function Breakables:OnLeaveBreakableButton()
|
|
|
|
|
GameTooltip:Hide()
|
|
|
|
|
showingTooltip = nil
|
|
|
|
|
if showingTooltip then
|
|
|
|
|
GameTooltip:Hide()
|
|
|
|
|
showingTooltip = nil
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function Breakables:PostClickedBreakableButton(this)
|
|
|
|
|
self.justClickedBag = this.bag
|
|
|
|
|
self.justClickedSlot = this.slot
|
|
|
|
|
|
|
|
|
|
if this.type == BREAKABLE_HERB or this.type == BREAKABLE_ORE or this.type == BREAKABLE_DE or this.type == BREAKABLE_COMBINE then
|
|
|
|
|
self.justClicked = true
|
|
|
|
|
end
|
|
|
|
@ -1092,12 +1332,17 @@ function Breakables:FindBreakablesInBag(bagId)
|
|
|
|
|
for slotId=1,GetContainerNumSlots(bagId) do
|
|
|
|
|
local found = self:FindBreakablesInSlot(bagId, slotId)
|
|
|
|
|
if found then
|
|
|
|
|
local addedToExisting = self:MergeBreakables(found, foundBreakables)
|
|
|
|
|
if bagId ~= self.justPickedBag or slotId ~= self.justPickedSlot then
|
|
|
|
|
local addedToExisting = self:MergeBreakables(found, foundBreakables)
|
|
|
|
|
|
|
|
|
|
if not addedToExisting then
|
|
|
|
|
foundBreakables[i] = found
|
|
|
|
|
i = i + 1
|
|
|
|
|
if not addedToExisting then
|
|
|
|
|
foundBreakables[i] = found
|
|
|
|
|
i = i + 1
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
elseif bagId == self.justPickedBag and slotId == self.justPickedSlot then
|
|
|
|
|
self.justPickedBag = -1
|
|
|
|
|
self.justPickedSlot = -1
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
@ -1111,7 +1356,7 @@ function Breakables:FindBreakablesInSlot(bagId, slotId)
|
|
|
|
|
self.myTooltip:SetOwner(WorldFrame, "ANCHOR_NONE")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
local texture, itemCount, locked, quality, readable = GetContainerItemInfo(bagId, slotId)
|
|
|
|
|
local texture, itemCount = GetContainerItemInfo(bagId, slotId)
|
|
|
|
|
if texture then
|
|
|
|
|
local itemLink = GetContainerItemLink(bagId, slotId)
|
|
|
|
|
local itemId = self:GetItemIdFromLink(itemLink)
|
|
|
|
@ -1273,7 +1518,7 @@ do
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
function Breakables:IsInEquipmentSet(itemId)
|
|
|
|
|
if WowVer < 80000 and GetNumEquipmentSets then
|
|
|
|
|
if UseNonNativeEqManagerChecks and GetNumEquipmentSets then
|
|
|
|
|
for setIdx=1, GetNumEquipmentSets() do
|
|
|
|
|
local set = GetEquipmentSetInfo(setIdx)
|
|
|
|
|
local itemArray = GetEquipmentSetItemIDs(set)
|
|
|
|
@ -1338,8 +1583,17 @@ end
|
|
|
|
|
function Breakables:BreakableIsDisenchantable(itemType, itemLevel, itemRarity, itemLink, itemId)
|
|
|
|
|
for i=1,#DisenchantTypes do
|
|
|
|
|
if DisenchantTypes[i] == itemType or IsArtifactRelicItem(itemLink) then
|
|
|
|
|
-- temp hack for bfa until disenchant item level scales are identified. and for classic until finding the profession level api
|
|
|
|
|
if WowVer >= 80000 or IsClassic then
|
|
|
|
|
-- bfa+ no longer has skill level requirements for disenchanting
|
|
|
|
|
if IgnoreEnchantingSkillLevelForDisenchant then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
if self.settings.ignoreEnchantingSkillLevel then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
-- if we couldn't figure out the player's enchanting skill level, err on the side of showing stuff
|
|
|
|
|
if self.EnchantingLevel == 0 then
|
|
|
|
|
return true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|