Compare commits

...

34 Commits

Author SHA1 Message Date
f71b527f71 Update changelog, tweak option description 2022-09-12 13:17:49 -05:00
a65674510e Add option to always show Enchanting breakables
If the user really wants to bypass the level check (or the mod is misbehaving), this allows them to show everything.
2022-09-12 13:14:24 -05:00
41592a7c76 Make WowVer checks into local named vars 2022-09-12 12:59:48 -05:00
62c8db483e Remove debug print 2022-09-12 12:59:22 -05:00
abf769bf9d Show disenchants if skill level can't be determined 2022-09-11 11:31:57 -05:00
9bd5541f81 Update changelog 2022-09-11 00:13:16 -05:00
80e495f707 Attempt to fix enchant level detection on Wrath
This only works if the player hasn't collapsed the Professions section of their skill UI, and if LibBabble-Inventory's translation is correct for this in all cases, but it's the only method I've found so far that works for Wrath. The other option is to show everything as disenchantable, but I don't like that.
2022-09-11 00:12:30 -05:00
3257ce5645 Package for Wrath, update TOCs 2022-09-04 14:01:25 -05:00
93739030f4 Update TOCs 2022-06-01 08:34:15 -05:00
70fa098fc3 Update TOCs and changelog 2022-03-23 20:54:07 -05:00
154da46002 Add some 9.1/9.2 breakables 2022-03-23 20:53:31 -05:00
0779f4c5ae Update TOCs 2021-11-11 12:58:39 -06:00
6d3bef90c0 Update TOC for 9.1 2021-06-28 13:03:10 -05:00
abfc519084 Add option to hide during pet battles, by request 2021-06-14 23:03:32 -05:00
4c4f48d5d9 Update with latest community packager changes for BC-Classic 2021-05-14 21:36:40 -05:00
1798e824b4 Classic-BC support 2021-05-09 17:21:52 -05:00
481793c8ff Fix an issue when IsArtifactRelicItem is not defined 2021-04-09 21:13:30 -05:00
7f53ef3d90 Update changelog 2021-04-09 20:55:50 -05:00
4dce99e2ab Add option to suppress tooltips by request 2021-04-09 20:53:27 -05:00
92a4758371 Update Classic TOC 2021-03-23 12:14:55 -05:00
e01b0cdd78 Update Classic TOC 2021-03-23 12:14:05 -05:00
e764d54642 Update TOC to 9.0.5 2021-03-22 21:47:08 -05:00
6ab9d09140 Update changelog 2020-11-29 11:50:15 -06:00
5a760da5ac Update TOC to latest 2020-11-29 11:49:14 -06:00
592621cf4e Enable nolib creation 2020-10-23 15:32:15 -05:00
82a97f4e05 Tweak toc for community packager 2020-10-23 15:31:08 -05:00
3273a5d7ce Add github workflow for packaging with the community packager 2020-10-13 09:16:50 -05:00
433a1f4660 Setup compatibility with the community packager 2020-10-13 09:04:41 -05:00
67c8c85978 Version bump for 9.0 2020-10-09 09:37:36 -05:00
806666937f Add Shadowlands herbs, ores, and lockboxes 2020-10-09 09:21:59 -05:00
aeaac05586 Corrected changelog 2020-01-14 20:08:51 -06:00
8553efb4a6 Updated TOC to 8.3 2020-01-14 20:07:35 -06:00
0c89d98639 Fixes for Classic
This causes all items to display as disenchantable whether you have the skill for it or not. I have not yet found the correct way to access the player's Enchanting profession level to check against item level for disenchant validity.
2019-09-09 17:10:37 -05:00
4d0b368ba6 Added 8.2's lockbox 2019-08-12 09:17:44 -05:00
6 changed files with 356 additions and 54 deletions

55
.github/workflows/release.yml vendored Normal file
View File

@ -0,0 +1,55 @@
# description of this workflow, can be anything you want
name: Package and release
# we need to let GitHub know _when_ we want to release, typically only when we create a new tag.
# this will target only tags, and not all pushes to the master branch.
# this part can be heavily customized to your liking, like targeting only tags that match a certain word,
# other branches or even pullrequests.
on:
push:
tags:
- '**'
# a workflow is built up as jobs, and within these jobs are steps
jobs:
# "release" is a job, you can name it anything you want
release:
# we can run our steps on pretty much anything, but the "ubuntu-latest" image is a safe bet
runs-on: ubuntu-latest
# specify the environment variables used by the packager, matching the secrets from the project on GitHub
env:
CF_API_KEY: ${{ secrets.CF_API_KEY }}
WOWI_API_TOKEN: ${{ secrets.WOWI_API_TOKEN }}
GITHUB_OAUTH: ${{ secrets.GITHUB_TOKEN }} # "GITHUB_TOKEN" is a secret always provided to the workflow
# for your own token, the name cannot start with "GITHUB_"
# "steps" holds a list of all the steps needed to package and release our AddOn
steps:
# we first have to clone the AddOn project, this is a required step
- name: Clone project
uses: actions/checkout@v1
# once cloned, we just run the GitHub Action for the packager project
- name: Package and release
uses: BigWigsMods/packager@master
# another example where we supply additional arguments, this example is specifically to release
# for the Classic version of the game
- name: Package and release for Classic
uses: BigWigsMods/packager@master
with:
args: -g classic -w 0
- name: Package and release for TBC
uses: BigWigsMods/packager@master
with:
args: -g bcc -w 0
- name: Package and release for Wrath
uses: BigWigsMods/packager@master
with:
args: -g wrath -w 0

View File

@ -39,3 +39,5 @@ ignore:
- readme.md
manual-changelog: changelog.txt
enable-nolib-creation: yes

View File

@ -5,7 +5,40 @@ local LBF = LibStub("Masque", true)
local lbfGroup
local IsArtifactRelicItem = IsArtifactRelicItem
if not IsArtifactRelicItem then
IsArtifactRelicItem = function()
return false
end
end
local WowVer = select(4, GetBuildInfo())
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"]
@ -38,6 +71,14 @@ local AdditionalMillableItems = {
152510,
152511,
168487,
-- Shadowlands herbs
168586, -- rising glory
168589, -- marrowroot
170554, -- vigil's torch
168583, -- widowbloom
169701, -- death blossom
171315, -- nightshade
187699, -- first flower, 9.2.0
}
local AdditionalProspectableItems = {
@ -50,6 +91,14 @@ local AdditionalProspectableItems = {
152513,
152579,
168185,
-- Shadowlands ore
171828, -- laestrite
171833, -- elethium
171829, -- solenium
171830, -- oxxein
171831, -- phaedrum
171832, -- sinvyr
187700, -- progenium ore, 9.2.0
}
local MassMilling = {
@ -69,6 +118,14 @@ local MassMilling = {
[124106] = 209664,
[128304] = 210116,
[151565] = 247861,
-- shadowlands
[168586] = 311417,
[168589] = 311416,
[170554] = 311414,
[168583] = 311415,
[169701] = 311413,
[171315] = 311418,
[187699] = 359490,
}
local HerbCombineItems = {
@ -86,6 +143,13 @@ local HerbCombineItems = {
109627, -- starflower petal
109628, -- nagrand arrowbloom petal
109629, -- talador orchid petal
-- shadowlands
169550, -- rising glory petal
168591, -- marrowroot petal
169699, -- vigil's torch petal
169698, -- widowbloom petal
169700, -- death blossom petal
169697, -- nightshade petal
}
local UnProspectableItems = {
@ -143,6 +207,13 @@ local PickableItems = {
88567, -- ghost iron lockbox
116920, -- true steel lockbox
121331, -- leystone lockbox
169475, -- barnacled lockbox
-- shadowlands
179311, -- venthyr
180532, -- maldraxxi
180533, -- kyrian
180522, -- night fae
186161, -- stygian lockbox, 9.1.0
}
local CanPickLock = false
@ -202,10 +273,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)
@ -338,13 +412,18 @@ function Breakables:RegisterEvents()
self:RegisterEvent("MODIFIER_STATE_CHANGED", "FindBreakables")
if CanDisenchant and WowVer < 80000 then
if CanDisenchant and ShouldHookTradeskillUpdate then
self:RegisterEvent("TRADE_SKILL_UPDATE", "OnTradeSkillUpdate")
end
if CanPickLock then
self:RegisterEvent("CHAT_MSG_OPENING", "OnBagItemLockPicked")
end
if UnitCanPetBattle then
self:RegisterEvent("PET_BATTLE_OPENING_START", "PetBattleStarted")
self:RegisterEvent("PET_BATTLE_OVER", "PetBattleEnded")
end
end
function Breakables:OnModifierChanged()
@ -413,6 +492,16 @@ function Breakables:OnBagItemLockPicked()
self:FindBreakables()
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)
if idx ~= nil then
local name, texture, rank, maxRank, numSpells, spelloffset, skillLine = GetProfessionInfo(idx)
@ -421,15 +510,25 @@ function Breakables:FindLevelOfProfessionIndex(idx)
end
function Breakables:GetEnchantingLevel()
local prof1, prof2 = GetProfessions()
if GetProfessions then
local prof1, prof2 = GetProfessions()
local skillId, rank = self:FindLevelOfProfessionIndex(prof1)
if skillId ~= nil and skillId == EnchantingProfessionId then
self.EnchantingLevel = rank
else
skillId, rank = self:FindLevelOfProfessionIndex(prof2)
local skillId, rank = self:FindLevelOfProfessionIndex(prof1)
if skillId ~= nil and skillId == EnchantingProfessionId then
self.EnchantingLevel = rank
else
skillId, rank = self:FindLevelOfProfessionIndex(prof2)
if skillId ~= nil and skillId == EnchantingProfessionId then
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
@ -590,6 +689,36 @@ function Breakables:GetOptions()
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"],
@ -643,40 +772,81 @@ function Breakables:GetOptions()
end,
order = 20,
}
opts.args.hideEqManagerItems = {
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 ShouldShowTabardControls 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
if not IgnoreEnchantingSkillLevelForDisenchant then
opts.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
end
if UnitCanPetBattle then
opts.args.hideInPetBattle = {
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."],
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.hideEqManagerItems
return self.settings.hideInPetBattle
end,
set = function(info, v)
self.settings.hideEqManagerItems = v
self.settings.hideInPetBattle = v
if info.uiType == "cmd" then
print("|cff33ff99Breakables|r: set |cffffff78hideEqManagerItems|r to " .. tostring(self.settings.hideEqManagerItems))
print("|cff33ff99Breakables|r: set |cffffff78hideInPetBattle|r to " .. tostring(self.settings.hideInPetBattle))
end
self:FindBreakables()
end,
hidden = function()
return not self.settings.showSoulbound
end,
order = 21,
}
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,
order = 3.5,
}
end
@ -1006,7 +1176,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)
@ -1021,20 +1191,24 @@ 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)
@ -1232,7 +1406,7 @@ do
end
function Breakables:IsInEquipmentSet(itemId)
if WowVer < 80000 then
if UseNonNativeEqManagerChecks and GetNumEquipmentSets then
for setIdx=1, GetNumEquipmentSets() do
local set = GetEquipmentSetInfo(setIdx)
local itemArray = GetEquipmentSetItemIDs(set)
@ -1243,7 +1417,7 @@ function Breakables:IsInEquipmentSet(itemId)
end
end
end
else
elseif C_EquipmentSet then
local sets = C_EquipmentSet.GetEquipmentSetIDs()
for k, v in ipairs(sets) do
local itemArray = C_EquipmentSet.GetItemIDs(v)
@ -1297,8 +1471,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
if WowVer >= 80000 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

View File

@ -1,12 +1,22 @@
## Interface: 80200
## Interface: 90207
## Interface-Retail: 90207
## Interface-Classic: 11403
## Interface-BCC: 20504
## Interface-Wrath: 30400
## Author: Parnic
## Name: Breakables
## Title: Breakables |cff7fff7f-Ace3-|r
## Notes: Tracks herbs/ore/items that can be broken into component pieces
## Version: @project-version@ (Revision: @project-revision@)
#@debug@
## Version: development
#@end-debug@
#@non-debug@
# ## Version: @project-version@
#@end-non-debug@
## SavedVariables: BreakablesDB
## OptionalDeps: Ace3, LibBabble-Inventory-3.0, Masque
## X-Compatible-With: 70300
## X-Curse-Project-ID: 16629
## X-WoWI-ID: 17929
#@no-lib-strip@
embeds.xml

View File

@ -1,3 +1,56 @@
v1.8.6:
- Improve enchanting level detection for Wrath Classic
- Add option to ignore enchanting skill level for showing disenchantable items
v1.8.5:
- Wrath Classic compatibility
- Updated TOCs
v1.8.4:
- Updated TOCs
v1.8.3:
- Updated TOCs, added 9.1 and 9.2 herbs, ore, and lockboxes
v1.8.2:
- Updated TOCs for 9.1.5, Classic, and BCC
v1.8.1:
- Updated TOC for 9.1
v1.8.0:
- Classic-BC support
- Added option to hide during pet battles, by request.
v1.7.4:
- Fix an issue when IsArtifactRelicItem is not defined
v1.7.3:
- Add option to suppress tooltips by request
- Updated Classic TOC to 1.13.6
v1.7.2:
- Updated TOC for 9.0.5
v1.7.1:
- Updated TOC to latest
v1.7.0:
- Added Shadowlands herbs, ore, and lockboxes
- Updated TOC for 9.0
v1.6.4:
- Updated TOC for 8.3
v1.6.3:
- (Classic) Made all items display as disenchantable whether you have the skill for it or not. I have not yet found the correct way to access the player's Enchanting profession level to check against item level for disenchant validity.
v1.6.2:
- Added 8.2's lockboxes
v1.6.1:
- Added patch 8.2's new herb and ore

View File

@ -14,7 +14,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**
* 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.
* If you know Mass Milling for a specific type of herb, the current alpha will try to use this ability and fail. I am in the process of leveling a scribe up high enough to debug this problem.