mirror of
https://github.com/parnic/breakables.git
synced 2025-06-17 01:41:51 -05:00
Compare commits
25 Commits
Author | SHA1 | Date | |
---|---|---|---|
96cac06743
|
|||
10da683630
|
|||
2a0ad73b5f
|
|||
71ee74a273
|
|||
76fa35ef02
|
|||
dd746f2800
|
|||
1792dac5e5
|
|||
aebaa54dc6
|
|||
a7213689f4
|
|||
26156517ec
|
|||
402c88b82d
|
|||
e559af59ec
|
|||
4d6efe8842
|
|||
0322faf629
|
|||
4c816fc5ed
|
|||
bc3632d177
|
|||
713fbf5f16
|
|||
902adfa2c8
|
|||
e0a5f0b97d
|
|||
4d93c119a2
|
|||
c7a8cf4838
|
|||
ba61a08f05
|
|||
7396b7189a
|
|||
d5a1f01749
|
|||
9ac6b125a3
|
8
.github/workflows/release.yml
vendored
8
.github/workflows/release.yml
vendored
@ -32,7 +32,7 @@ jobs:
|
||||
|
||||
# we first have to clone the AddOn project, this is a required step
|
||||
- name: Clone project
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0 # gets git history for changelogs
|
||||
|
||||
@ -56,3 +56,9 @@ jobs:
|
||||
uses: BigWigsMods/packager@v2
|
||||
with:
|
||||
args: -g wrath -w 0
|
||||
|
||||
- name: Package and release for Cataclysm
|
||||
uses: BigWigsMods/packager@v2
|
||||
with:
|
||||
args: -g cata -w 0
|
||||
|
314
Breakables.lua
314
Breakables.lua
@ -43,14 +43,17 @@ local WowVer = select(4, GetBuildInfo())
|
||||
local IsClassic = false
|
||||
local IsClassicBC = false
|
||||
local IsClassicWrath = false
|
||||
local IsClassicCataclysm = false
|
||||
if GetClassicExpansionLevel then
|
||||
IsClassic = GetClassicExpansionLevel() == 0
|
||||
IsClassicBC = GetClassicExpansionLevel() == 1
|
||||
IsClassicWrath = GetClassicExpansionLevel() == 2
|
||||
IsClassicCataclysm = GetClassicExpansionLevel() == 3
|
||||
else
|
||||
IsClassic = WOW_PROJECT_ID and WOW_PROJECT_ID == WOW_PROJECT_CLASSIC
|
||||
IsClassicBC = false
|
||||
IsClassicWrath = false
|
||||
IsClassicCataclysm = 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
|
||||
@ -59,6 +62,8 @@ else
|
||||
end
|
||||
elseif WOW_PROJECT_WRATH_CLASSIC and WOW_PROJECT_ID == WOW_PROJECT_WRATH_CLASSIC then
|
||||
IsClassicWrath = true
|
||||
elseif WOW_PROJECT_CATACLYSM_CLASSIC and WOW_PROJECT_ID == WOW_PROJECT_CATACLYSM_CLASSIC then
|
||||
IsClassicCataclysm = true
|
||||
end
|
||||
end
|
||||
|
||||
@ -199,6 +204,7 @@ local OreCombineItems = {
|
||||
|
||||
local DisenchantId = 13262
|
||||
local DisenchantTypes = {babbleInv["Armor"], babbleInv["Weapon"]}
|
||||
local DisenchantEquipSlots = {"INVTYPE_PROFESSION_GEAR", "INVTYPE_PROFESSION_TOOL"}
|
||||
local CanDisenchant = false
|
||||
local EnchantingProfessionId = 333
|
||||
|
||||
@ -274,6 +280,7 @@ local IDX_BREAKABLETYPE = 9
|
||||
local IDX_SOULBOUND = 10
|
||||
local IDX_NAME = 11
|
||||
local IDX_RARITY = 12
|
||||
local IDX_EQUIPSLOT = 13
|
||||
|
||||
local BREAKABLE_HERB = 1
|
||||
local BREAKABLE_ORE = 2
|
||||
@ -501,7 +508,11 @@ function Breakables:OnDisable()
|
||||
end
|
||||
|
||||
function Breakables:OnSlashCommand(input)
|
||||
InterfaceOptionsFrame_OpenToCategory(self.optionsFrame)
|
||||
if InterfaceOptionsFrame_OpenToCategory then
|
||||
InterfaceOptionsFrame_OpenToCategory(self.optionsFrame)
|
||||
else
|
||||
Settings.OpenToCategory("Breakables")
|
||||
end
|
||||
end
|
||||
|
||||
function Breakables:OnItemReceived(event, bag)
|
||||
@ -1118,17 +1129,39 @@ function Breakables:OnMouseUp(frame)
|
||||
self.settings.buttonFrameTop[frameNum] = frame:GetTop()
|
||||
end
|
||||
|
||||
local function IgnoreFunc(self, button, isDown)
|
||||
if button == "RightButton" and isDown and not InCombatLockdown() then
|
||||
Breakables.settings.ignoreList[self.itemId] = true
|
||||
StaticPopupDialogs["BREAKABLES_CONFIRM_IGNORE"] = {
|
||||
text = L["This will add the chosen item to the ignore list so it no longer appears as breakable. Items can be removed from the ignore list in the Breakables settings.\n\nWould you like to ignore this item?"],
|
||||
button1 = YES,
|
||||
OnShow = function(self)
|
||||
self:SetFrameStrata("TOOLTIP")
|
||||
end,
|
||||
OnHide = function(self)
|
||||
self:SetFrameStrata("DIALOG")
|
||||
end,
|
||||
OnAccept = function(self, data)
|
||||
Breakables.settings.ignoreList[data] = true
|
||||
Breakables:FindBreakables()
|
||||
LibStub("AceConfigRegistry-3.0"):NotifyChange("Breakables")
|
||||
end,
|
||||
button2 = NO,
|
||||
timeout = 0,
|
||||
whileDead = 1,
|
||||
hideOnEscape = 0
|
||||
}
|
||||
|
||||
local function IgnoreFunc(self, button, isDown)
|
||||
if button == "RightButton" and isDown and not InCombatLockdown() then
|
||||
local dlg = StaticPopup_Show("BREAKABLES_CONFIRM_IGNORE")
|
||||
if dlg then
|
||||
dlg.data = self.itemId
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
do
|
||||
local bagId = 0
|
||||
local updatefunc
|
||||
local foundBreakables = {}
|
||||
function Breakables:FindBreakables()
|
||||
if self.settings.hide then
|
||||
return
|
||||
@ -1143,9 +1176,14 @@ do
|
||||
return
|
||||
end
|
||||
|
||||
if currState ~= STATE_SCANNING then
|
||||
local count = #foundBreakables
|
||||
for i=0, count do
|
||||
foundBreakables[i]=nil
|
||||
end
|
||||
end
|
||||
currState = STATE_SCANNING
|
||||
local foundBreakables = {}
|
||||
local i=1
|
||||
local i=#foundBreakables + 1
|
||||
local numBreakableStacks = {}
|
||||
|
||||
local maxTime = GetTimePreciseSec() + 0.01
|
||||
@ -1187,7 +1225,7 @@ do
|
||||
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], foundBreakables[i][IDX_LINK])
|
||||
local isDisenchantable = self:BreakableIsDisenchantable(foundBreakables[i][IDX_TYPE], foundBreakables[i][IDX_LEVEL], foundBreakables[i][IDX_RARITY], foundBreakables[i][IDX_LINK], nil, foundBreakables[i][IDX_EQUIPSLOT])
|
||||
local isLockedItem = foundBreakables[i][IDX_BREAKABLETYPE] == BREAKABLE_PICK
|
||||
|
||||
if (CanDisenchant and isDisenchantable) or (CanPickLock and isLockedItem) or (foundBreakables[i][IDX_COUNT] >= 5) then
|
||||
@ -1465,7 +1503,7 @@ function Breakables:FindBreakablesInSlot(bagId, slotId)
|
||||
end
|
||||
|
||||
if CanDisenchant and itemRarity and itemRarity >= RARITY_UNCOMMON and itemRarity < RARITY_HEIRLOOM
|
||||
and self:BreakableIsDisenchantable(itemType, itemLevel, itemRarity, itemLink, itemId) then
|
||||
and self:BreakableIsDisenchantable(itemType, itemLevel, itemRarity, itemLink, itemId, equipSlot) then
|
||||
local soulbound = self:ScanForTooltipLine(tooltipData, ITEM_SOULBOUND, ITEM_ACCOUNTBOUND, ITEM_BNETACCOUNTBOUND)
|
||||
|
||||
local isInEquipmentSet = false
|
||||
@ -1481,8 +1519,8 @@ function Breakables:FindBreakablesInSlot(bagId, slotId)
|
||||
local shouldHideThisItem = (self.settings.hideEqManagerItems and isInEquipmentSet) or (self.settings.hideTabards and isTabard)
|
||||
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}
|
||||
if self:IsForcedDisenchantable(itemId) or ((not soulbound or self.settings.showSoulbound) and not shouldHideThisItem) then
|
||||
return {itemLink, itemCount, itemType, itemTexture, bagId, slotId, itemSubType, itemLevel, BREAKABLE_DE, soulbound, itemName, itemRarity, equipSlot}
|
||||
else
|
||||
return nil
|
||||
end
|
||||
@ -1519,11 +1557,11 @@ function Breakables:FindBreakablesInSlot(bagId, slotId)
|
||||
|
||||
if CanMill --[[and (itemSubType == MillingItemSubType or itemSubType == MillingItemSecondarySubType)]] then
|
||||
if millable then
|
||||
return {itemLink, itemCount, itemType, itemTexture, bagId, slotId, itemSubType, itemLevel, BREAKABLE_HERB, false, itemName, itemRarity}
|
||||
return {itemLink, itemCount, itemType, itemTexture, bagId, slotId, itemSubType, itemLevel, BREAKABLE_HERB, false, itemName, itemRarity, equipSlot}
|
||||
else
|
||||
for i=1,#HerbCombineItems do
|
||||
if HerbCombineItems[i] == itemId then
|
||||
return {itemLink, itemCount, itemType, itemTexture, bagId, slotId, itemSubType, itemLevel, BREAKABLE_COMBINE, false, itemName, itemRarity}
|
||||
return {itemLink, itemCount, itemType, itemTexture, bagId, slotId, itemSubType, itemLevel, BREAKABLE_COMBINE, false, itemName, itemRarity, equipSlot}
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -1531,18 +1569,18 @@ function Breakables:FindBreakablesInSlot(bagId, slotId)
|
||||
|
||||
if CanProspect --[[and itemSubType == ProspectingItemSubType]] then
|
||||
if prospectable then
|
||||
return {itemLink, itemCount, itemType, itemTexture, bagId, slotId, itemSubType, itemLevel, BREAKABLE_ORE, false, itemName, itemRarity}
|
||||
return {itemLink, itemCount, itemType, itemTexture, bagId, slotId, itemSubType, itemLevel, BREAKABLE_ORE, false, itemName, itemRarity, equipSlot}
|
||||
else
|
||||
for i=1,#OreCombineItems do
|
||||
if OreCombineItems[i] == itemId then
|
||||
return {itemLink, itemCount, itemType, itemTexture, bagId, slotId, itemSubType, itemLevel, BREAKABLE_COMBINE, false, itemName, itemRarity}
|
||||
return {itemLink, itemCount, itemType, itemTexture, bagId, slotId, itemSubType, itemLevel, BREAKABLE_COMBINE, false, itemName, itemRarity, equipSlot}
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if CanPickLock and self:ItemIsPickable(itemId) and self:ItemIsLocked(bagId, slotId) and self:PlayerHasSkillToPickItem(bagId, slotId) then
|
||||
return {itemLink, itemCount, itemType, itemTexture, bagId, slotId, itemSubType, itemLevel, BREAKABLE_PICK, false, itemName, itemRarity}
|
||||
return {itemLink, itemCount, itemType, itemTexture, bagId, slotId, itemSubType, itemLevel, BREAKABLE_PICK, false, itemName, itemRarity, equipSlot}
|
||||
end
|
||||
end
|
||||
|
||||
@ -1676,118 +1714,124 @@ function Breakables:SortBreakables(foundBreakables)
|
||||
end
|
||||
end
|
||||
|
||||
function Breakables:BreakableIsDisenchantable(itemType, itemLevel, itemRarity, itemLink, itemId)
|
||||
for i=1,#DisenchantTypes do
|
||||
if DisenchantTypes[i] == itemType or IsArtifactRelicItem(itemLink) 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
|
||||
|
||||
-- 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)
|
||||
or (itemRarity == RARITY_EPIC and itemLevel >= 640) then
|
||||
return true
|
||||
end
|
||||
|
||||
-- this is awful. is there an easier way? taken from www.wowpedia.org/Disenchanting
|
||||
if itemRarity == RARITY_UNCOMMON then
|
||||
if itemLevel <= 20 then
|
||||
return self.EnchantingLevel >= 1
|
||||
elseif itemLevel <= 25 then
|
||||
return self.EnchantingLevel >= 25
|
||||
elseif itemLevel <= 30 then
|
||||
return self.EnchantingLevel >= 50
|
||||
elseif itemLevel <= 35 then
|
||||
return self.EnchantingLevel >= 75
|
||||
elseif itemLevel <= 40 then
|
||||
return self.EnchantingLevel >= 100
|
||||
elseif itemLevel <= 45 then
|
||||
return self.EnchantingLevel >= 125
|
||||
elseif itemLevel <= 50 then
|
||||
return self.EnchantingLevel >= 150
|
||||
elseif itemLevel <= 55 then
|
||||
return self.EnchantingLevel >= 175
|
||||
elseif itemLevel <= 60 then
|
||||
return self.EnchantingLevel >= 200
|
||||
elseif itemLevel <= 99 then
|
||||
return self.EnchantingLevel >= 225
|
||||
elseif itemLevel <= 120 then
|
||||
return self.EnchantingLevel >= 275
|
||||
elseif itemLevel <= 150 then
|
||||
return self.EnchantingLevel >= 325
|
||||
elseif itemLevel <= 182 then
|
||||
return self.EnchantingLevel >= 350
|
||||
elseif itemLevel <= 318 then
|
||||
return self.EnchantingLevel >= 425
|
||||
elseif itemLevel <= 437 then
|
||||
return self.EnchantingLevel >= 475
|
||||
else
|
||||
return self.EnchantingLevel >= 475
|
||||
end
|
||||
elseif itemRarity == RARITY_RARE then
|
||||
if itemLevel <= 25 then
|
||||
return self.EnchantingLevel >= 25
|
||||
elseif itemLevel <= 30 then
|
||||
return self.EnchantingLevel >= 50
|
||||
elseif itemLevel <= 35 then
|
||||
return self.EnchantingLevel >= 75
|
||||
elseif itemLevel <= 40 then
|
||||
return self.EnchantingLevel >= 100
|
||||
elseif itemLevel <= 45 then
|
||||
return self.EnchantingLevel >= 125
|
||||
elseif itemLevel <= 50 then
|
||||
return self.EnchantingLevel >= 150
|
||||
elseif itemLevel <= 55 then
|
||||
return self.EnchantingLevel >= 175
|
||||
elseif itemLevel <= 60 then
|
||||
return self.EnchantingLevel >= 200
|
||||
elseif itemLevel <= 97 then
|
||||
return self.EnchantingLevel >= 225
|
||||
elseif itemLevel <= 115 then
|
||||
return self.EnchantingLevel >= 275
|
||||
elseif itemLevel <= 200 then
|
||||
return self.EnchantingLevel >= 325
|
||||
elseif itemLevel <= 346 then
|
||||
return self.EnchantingLevel >= 450
|
||||
elseif itemLevel <= 424 then
|
||||
return self.EnchantingLevel >= 525
|
||||
elseif itemLevel <= 463 then
|
||||
return self.EnchantingLevel >= 550
|
||||
else
|
||||
return self.EnchantingLevel >= 550
|
||||
end
|
||||
elseif itemRarity == RARITY_EPIC then
|
||||
if itemLevel <= 95 then
|
||||
return self.EnchantingLevel >= 225
|
||||
elseif itemLevel <= 164 then
|
||||
return self.EnchantingLevel >= 300
|
||||
elseif itemLevel <= 277 then
|
||||
return self.EnchantingLevel >= 375
|
||||
elseif itemLevel <= 416 then
|
||||
return self.EnchantingLevel >= 475
|
||||
elseif itemLevel <= 575 then
|
||||
return self.EnchantingLevel >= 575
|
||||
else
|
||||
return self.EnchantingLevel >= 575
|
||||
end
|
||||
else
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
function Breakables:BreakableIsDisenchantable(itemType, itemLevel, itemRarity, itemLink, itemId, equipSlot)
|
||||
if not itemId and itemLink then
|
||||
itemId = self:GetItemIdFromLink(itemLink)
|
||||
end
|
||||
|
||||
if self:IsDisenchantableItemType(itemType) or IsArtifactRelicItem(itemLink) or self:IsDisenchantableEquipSlot(equipSlot) 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
|
||||
|
||||
-- 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)
|
||||
or (itemRarity == RARITY_EPIC and itemLevel >= 640) then
|
||||
return true
|
||||
end
|
||||
|
||||
-- this is awful. is there an easier way? taken from www.wowpedia.org/Disenchanting
|
||||
if itemRarity == RARITY_UNCOMMON then
|
||||
if itemLevel <= 20 then
|
||||
return self.EnchantingLevel >= 1
|
||||
elseif itemLevel <= 25 then
|
||||
return self.EnchantingLevel >= 25
|
||||
elseif itemLevel <= 30 then
|
||||
return self.EnchantingLevel >= 50
|
||||
elseif itemLevel <= 35 then
|
||||
return self.EnchantingLevel >= 75
|
||||
elseif itemLevel <= 40 then
|
||||
return self.EnchantingLevel >= 100
|
||||
elseif itemLevel <= 45 then
|
||||
return self.EnchantingLevel >= 125
|
||||
elseif itemLevel <= 50 then
|
||||
return self.EnchantingLevel >= 150
|
||||
elseif itemLevel <= 55 then
|
||||
return self.EnchantingLevel >= 175
|
||||
elseif itemLevel <= 60 then
|
||||
return self.EnchantingLevel >= 200
|
||||
elseif itemLevel <= 99 then
|
||||
return self.EnchantingLevel >= 225
|
||||
elseif itemLevel <= 120 then
|
||||
return self.EnchantingLevel >= 275
|
||||
elseif itemLevel <= 150 then
|
||||
return self.EnchantingLevel >= 325
|
||||
elseif itemLevel <= 182 then
|
||||
return self.EnchantingLevel >= 350
|
||||
elseif itemLevel <= 318 then
|
||||
return self.EnchantingLevel >= 425
|
||||
elseif itemLevel <= 437 then
|
||||
return self.EnchantingLevel >= 475
|
||||
else
|
||||
return self.EnchantingLevel >= 475
|
||||
end
|
||||
elseif itemRarity == RARITY_RARE then
|
||||
if itemLevel <= 25 then
|
||||
return self.EnchantingLevel >= 25
|
||||
elseif itemLevel <= 30 then
|
||||
return self.EnchantingLevel >= 50
|
||||
elseif itemLevel <= 35 then
|
||||
return self.EnchantingLevel >= 75
|
||||
elseif itemLevel <= 40 then
|
||||
return self.EnchantingLevel >= 100
|
||||
elseif itemLevel <= 45 then
|
||||
return self.EnchantingLevel >= 125
|
||||
elseif itemLevel <= 50 then
|
||||
return self.EnchantingLevel >= 150
|
||||
elseif itemLevel <= 55 then
|
||||
return self.EnchantingLevel >= 175
|
||||
elseif itemLevel <= 60 then
|
||||
return self.EnchantingLevel >= 200
|
||||
elseif itemLevel <= 97 then
|
||||
return self.EnchantingLevel >= 225
|
||||
elseif itemLevel <= 115 then
|
||||
return self.EnchantingLevel >= 275
|
||||
elseif itemLevel <= 200 then
|
||||
return self.EnchantingLevel >= 325
|
||||
elseif itemLevel <= 346 then
|
||||
return self.EnchantingLevel >= 450
|
||||
elseif itemLevel <= 424 then
|
||||
return self.EnchantingLevel >= 525
|
||||
elseif itemLevel <= 463 then
|
||||
return self.EnchantingLevel >= 550
|
||||
else
|
||||
return self.EnchantingLevel >= 550
|
||||
end
|
||||
elseif itemRarity == RARITY_EPIC then
|
||||
if itemLevel <= 95 then
|
||||
return self.EnchantingLevel >= 225
|
||||
elseif itemLevel <= 164 then
|
||||
return self.EnchantingLevel >= 300
|
||||
elseif itemLevel <= 277 then
|
||||
return self.EnchantingLevel >= 375
|
||||
elseif itemLevel <= 416 then
|
||||
return self.EnchantingLevel >= 475
|
||||
elseif itemLevel <= 575 then
|
||||
return self.EnchantingLevel >= 575
|
||||
else
|
||||
return self.EnchantingLevel >= 575
|
||||
end
|
||||
else
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
return self:IsForcedDisenchantable(itemId)
|
||||
end
|
||||
|
||||
function Breakables:IsForcedDisenchantable(itemId)
|
||||
for i=1,#AdditionalDisenchantableItems do
|
||||
if AdditionalDisenchantableItems[i] == itemId then
|
||||
return true
|
||||
@ -1796,3 +1840,23 @@ function Breakables:BreakableIsDisenchantable(itemType, itemLevel, itemRarity, i
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
function Breakables:IsDisenchantableItemType(itemType)
|
||||
for i=1,#DisenchantTypes do
|
||||
if DisenchantTypes[i] == itemType then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
function Breakables:IsDisenchantableEquipSlot(equipSlot)
|
||||
for i=1,#DisenchantEquipSlots do
|
||||
if DisenchantEquipSlots[i] == equipSlot then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
@ -1,8 +1,9 @@
|
||||
## Interface: 100002
|
||||
## Interface-Retail: 100002
|
||||
## Interface-Classic: 11403
|
||||
## Interface: 110002
|
||||
## Interface-Retail: 110002
|
||||
## Interface-Classic: 11503
|
||||
## Interface-BCC: 20504
|
||||
## Interface-Wrath: 30400
|
||||
## Interface-Wrath: 30403
|
||||
## Interface-Cata: 40400
|
||||
## Author: Parnic
|
||||
## Name: Breakables
|
||||
## Title: Breakables |cff7fff7f-Ace3-|r
|
||||
@ -14,6 +15,7 @@
|
||||
# ## Version: @project-version@
|
||||
#@end-non-debug@
|
||||
## SavedVariables: BreakablesDB
|
||||
## IconTexture: Interface\Icons\ability_warrior_sunder
|
||||
## OptionalDeps: Ace3, LibBabble-Inventory-3.0, Masque
|
||||
## X-Curse-Project-ID: 16629
|
||||
## X-WoWI-ID: 17929
|
||||
|
@ -1,6 +1,88 @@
|
||||
v1.10.1:
|
||||
|
||||
- Update Classic-era TOC for 1.15.3
|
||||
- Update TOC for TWW
|
||||
|
||||
v1.10.0:
|
||||
|
||||
- Support The War Within/11.0
|
||||
|
||||
v1.9.26:
|
||||
|
||||
- Update Dragonflight TOC for 10.2.7
|
||||
|
||||
v1.9.25:
|
||||
|
||||
- Support Cataclysm Classic 4.4.0
|
||||
|
||||
v1.9.24:
|
||||
|
||||
- Update TOCs
|
||||
|
||||
v1.9.23:
|
||||
|
||||
- Update Dragonflight TOC for 10.2.5
|
||||
|
||||
v1.9.22:
|
||||
|
||||
- Update Classic-era TOC for 1.15.0
|
||||
|
||||
v1.9.21:
|
||||
|
||||
- Update Dragonflight TOC for 10.2.0
|
||||
|
||||
v1.9.20:
|
||||
|
||||
- Update Wrath-Classic TOC for 3.4.3
|
||||
|
||||
v1.9.19:
|
||||
|
||||
- Update Dragonflight TOC for 10.1.7
|
||||
- Update Classic-era TOC for 1.14.4
|
||||
|
||||
v1.9.18:
|
||||
|
||||
- Added a confirmation dialog when ignoring breakables, and updated the description to mention the ignore feature.
|
||||
|
||||
v1.9.17:
|
||||
|
||||
- Update Dragonflight TOC for 10.1.5
|
||||
|
||||
v1.9.16:
|
||||
|
||||
- Update TOC for Wrath Classic 3.4.2
|
||||
|
||||
v1.9.15:
|
||||
|
||||
- Updated TOCs for 10.1.0
|
||||
- Added icon for 10.1.0
|
||||
|
||||
v1.9.14:
|
||||
|
||||
- Updated TOCs for 10.0.7
|
||||
|
||||
v1.9.13:
|
||||
|
||||
- Updated TOCs for 10.0.5
|
||||
|
||||
v1.9.12:
|
||||
|
||||
- Add detection of Dragonflight profession tools as disenchantable.
|
||||
|
||||
v1.9.11:
|
||||
|
||||
- Add detection of Dragonflight profession gear as disenchantable.
|
||||
|
||||
v1.9.10:
|
||||
|
||||
- Add Dragonflight Mystic disenchantable items. (Fixed)
|
||||
|
||||
v1.9.9
|
||||
|
||||
- Fix issue with not updating or showing items in some cases.
|
||||
|
||||
v1.9.8:
|
||||
|
||||
- Add Dragonflight Mystic disenchantable items.
|
||||
- Fix microstutter every time a modifier key, such as Alt, was pressed.
|
||||
- Improve performance when scanning for new breakables (such as when items enter/leave bags, a lockbox is clicked, etc.).
|
||||
|
||||
|
@ -9,7 +9,7 @@ local L = LibStub("AceLocale-3.0"):NewLocale("Breakables", "enUS", true, debug)
|
||||
--@debug@
|
||||
L["Welcome"] = [[Thanks for using |cff33ff99Breakables|r! Use |cffffff78/brk|r to open this menu or |cffffff78/breakables|r to access the same options on the command line.
|
||||
|
||||
Hold shift and drag the profession button to move the breakables bar around. You can also click directly on any breakable item button to break it without having to click the profession button first.
|
||||
Hold shift and drag the profession button to move the breakables bar around. You can also click directly on any breakable item button to break it without having to click the profession button first. Right-clicking a breakable button will add that item to the ignore list so it won't show up again. The ignore list can be managed from the configuration panel.
|
||||
|
||||
If you have any feature requests or problems, please email |cff33ff99breakables@parnic.com|r or visit the |cffffff78curse.com|r or |cffffff78wowinterface.com|r page and leave a comment.]]
|
||||
--@end-debug@
|
12
readme.md
12
readme.md
@ -1,12 +1,14 @@
|
||||
### **Description**
|
||||
# Breakables
|
||||
|
||||
## **Description**
|
||||
|
||||
Displays a bar on screen that allows quick access to enchanting, jewelcrafting, and inscription professions by presenting a Disenchant/Prospect/Mill button and all of the breakable items you have for that profession next to it. Also displays a bar for any locked junkboxes in your inventory if you're a Rogue. This allows one-click access for breaking down items instead of finding the item in your bag, clicking the appropriate profession/skill button, and clicking the item for each and every item you want to break. For prospecting and milling, you will see the number of items you have alongside the number of times you can break it. In the prospecting screenshot on the right, the player has 169 total Saronite Ore in his bags which will allow for 33 total prospects.
|
||||
|
||||
### **Usage**
|
||||
## **Usage**
|
||||
|
||||
By default, if you have the appropriate profession and items in your inventory, a bar will appear with the profession ability followed by any items that are eligible for breaking. You can hold shift to drag the bar around if you want to move it. Clicking the profession button will activate that ability (disenchant/prospect/mill) and clicking an item will break it. You don't have to click the profession button first as simply clicking the item will automatically break it down.
|
||||
By default, if you have the appropriate profession and items in your inventory, a bar will appear with the profession ability followed by any items that are eligible for breaking. You can hold shift to drag the bar around if you want to move it. Clicking the profession button will activate that ability (disenchant/prospect/mill) and clicking an item will break it. You don't have to click the profession button first as simply clicking the item will automatically break it down. Right-clicking an item will place that item on the ignore list so it won't show up in the list again. The ignore list can be managed in the addon's configuration panel.
|
||||
|
||||
### **Configuration**
|
||||
## **Configuration**
|
||||
|
||||
Typing */brk* will open the configuration settings (or you can get to it from Blizzard's Interface options) which consist of:
|
||||
|
||||
@ -14,6 +16,6 @@ Typing */brk* will open the configuration settings (or you can get to it from Bl
|
||||
* **Max number to display**: this controls the highest number of items that you will see next to your profession button. If this is 5 but you have 10 breakable items in your bags, you will only see 5 at a time.
|
||||
* **Show soulbound items**: aimed at enchanters, this controls whether or not you will see items that are soulbound as breakable items or not.
|
||||
|
||||
### **Known issues**
|
||||
## **Known issues**
|
||||
|
||||
* If you have more than 5 of a breakable item but split into stacks all smaller than 5, the game will say you do not have enough items to break. The default UI now has a built-in button to compress stacks that should solve this issue.
|
||||
|
Reference in New Issue
Block a user