mirror of
https://github.com/parnic/breakables.git
synced 2025-06-17 01:41:51 -05:00
Compare commits
25 Commits
Author | SHA1 | Date | |
---|---|---|---|
70fa098fc3
|
|||
154da46002
|
|||
0779f4c5ae
|
|||
6d3bef90c0
|
|||
abfc519084
|
|||
4c4f48d5d9
|
|||
1798e824b4
|
|||
481793c8ff
|
|||
7f53ef3d90
|
|||
4dce99e2ab
|
|||
92a4758371
|
|||
e01b0cdd78
|
|||
e764d54642
|
|||
6ab9d09140
|
|||
5a760da5ac
|
|||
592621cf4e
|
|||
82a97f4e05
|
|||
3273a5d7ce
|
|||
433a1f4660
|
|||
67c8c85978
|
|||
806666937f
|
|||
aeaac05586
|
|||
8553efb4a6
|
|||
0c89d98639
|
|||
4d0b368ba6
|
50
.github/workflows/release.yml
vendored
Normal file
50
.github/workflows/release.yml
vendored
Normal file
@ -0,0 +1,50 @@
|
||||
# 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
|
2
.pkgmeta
2
.pkgmeta
@ -39,3 +39,5 @@ ignore:
|
||||
- readme.md
|
||||
|
||||
manual-changelog: changelog.txt
|
||||
|
||||
enable-nolib-creation: yes
|
||||
|
219
Breakables.lua
219
Breakables.lua
@ -5,7 +5,16 @@ 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 = WOW_PROJECT_ID and WOW_PROJECT_ID == WOW_PROJECT_CLASSIC
|
||||
local IsClassicBC = WOW_PROJECT_ID and WOW_PROJECT_ID == WOW_PROJECT_BURNING_CRUSADE_CLASSIC
|
||||
|
||||
local MillingId = 51005
|
||||
local MillingItemSubType = babbleInv["Herb"]
|
||||
@ -38,6 +47,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 +67,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 +94,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 +119,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 +183,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 +249,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)
|
||||
@ -345,6 +395,11 @@ function Breakables:RegisterEvents()
|
||||
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 +468,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 +486,17 @@ 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
|
||||
end
|
||||
end
|
||||
@ -590,6 +657,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 +740,62 @@ 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 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
|
||||
|
||||
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 +1125,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 +1140,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 +1355,7 @@ do
|
||||
end
|
||||
|
||||
function Breakables:IsInEquipmentSet(itemId)
|
||||
if WowVer < 80000 then
|
||||
if WowVer < 80000 and GetNumEquipmentSets then
|
||||
for setIdx=1, GetNumEquipmentSets() do
|
||||
local set = GetEquipmentSetInfo(setIdx)
|
||||
local itemArray = GetEquipmentSetItemIDs(set)
|
||||
@ -1243,7 +1366,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 +1420,8 @@ 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
|
||||
-- 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 or IsClassicBC then
|
||||
return true
|
||||
end
|
||||
|
||||
|
@ -1,12 +1,21 @@
|
||||
## Interface: 80200
|
||||
## Interface: 90200
|
||||
## Interface-Retail: 90200
|
||||
## Interface-Classic: 11402
|
||||
## Interface-BCC: 20503
|
||||
## 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
|
||||
|
@ -1,3 +1,42 @@
|
||||
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
|
||||
|
||||
|
@ -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.
|
||||
|
Reference in New Issue
Block a user