mirror of
https://github.com/parnic/breakables.git
synced 2025-06-16 17:40:13 -05:00
- added options for maximum number of breakables to list, whether or not to hide the bar when no breakables are present
- added sorting so that multiple stacks separated in a player's inventory don't jump around on the bar when they are broken - added AceConfig support (which apparently requires AceGUI?) though it doesn't do much at the moment
This commit is contained in:
1
.pkgmeta
1
.pkgmeta
@ -4,6 +4,7 @@ externals:
|
||||
libs/LibStub: svn://svn.wowace.com/wow/ace3/mainline/trunk/LibStub
|
||||
libs/CallbackHandler-1.0: svn://svn.wowace.com/wow/ace3/mainline/trunk/CallbackHandler-1.0
|
||||
libs/AceAddon-3.0: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceAddon-3.0
|
||||
libs/AceGUI-3.0: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceGUI-3.0
|
||||
libs/AceConfig-3.0: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceConfig-3.0
|
||||
libs/AceConsole-3.0: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceConsole-3.0
|
||||
libs/AceDB-3.0: svn://svn.wowace.com/wow/ace3/mainline/trunk/AceDB-3.0
|
||||
|
111
Breakables.lua
111
Breakables.lua
@ -24,45 +24,90 @@ function Breakables:OnInitialize()
|
||||
profile = {
|
||||
buttonFrameLeft = 100,
|
||||
buttonFrameTop = -100,
|
||||
hideIfNoBreakables = true,
|
||||
maxBreakablesToShow = 5,
|
||||
}
|
||||
}
|
||||
self.db = LibStub("AceDB-3.0"):New("BreakablesDB", self.defaults)
|
||||
self.settings = self.db.profile
|
||||
|
||||
self:RegisterChatCommand("breakables", "OnSlashCommand")
|
||||
self:RegisterChatCommand("brk", "OnSlashCommand")
|
||||
-- self:RegisterChatCommand("breakables", "OnSlashCommand")
|
||||
-- self:RegisterChatCommand("brk", "OnSlashCommand")
|
||||
|
||||
-- would have used ITEM_PUSH here, but that seems to fire after looting and before the bag actually gets the item
|
||||
-- another alternative is to parse the chat msg, but that seems lame...however, that should only fire once as opposed to BAG_UPDATE's potential double-fire
|
||||
self:RegisterEvent("BAG_UPDATE", "OnItemReceived")
|
||||
LibStub("AceConfig-3.0"):RegisterOptionsTable("Breakables", self:GetOptions(), {"breakables", "brk"})
|
||||
end
|
||||
|
||||
function Breakables:OnEnable()
|
||||
-- would have used ITEM_PUSH here, but that seems to fire after looting and before the bag actually gets the item
|
||||
-- another alternative is to parse the chat msg, but that seems lame...however, that should only fire once as opposed to BAG_UPDATE's potential double-fire
|
||||
self:RegisterEvent("BAG_UPDATE", "OnItemReceived")
|
||||
|
||||
CanMill = IsUsableSpell(GetSpellInfo(MillingId))
|
||||
CanProspect = IsUsableSpell(GetSpellInfo(ProspectingId))
|
||||
CanDisenchant = IsUsableSpell(GetSpellInfo(DisenchantId))
|
||||
|
||||
if CanMill or CanProspect or CanDisenchant then
|
||||
self:CreateButtonFrame()
|
||||
else
|
||||
self:UnregisterAllEvents()
|
||||
end
|
||||
end
|
||||
|
||||
function Breakables:OnDisable()
|
||||
|
||||
self:UnregisterAllEvents()
|
||||
end
|
||||
|
||||
--[[
|
||||
function Breakables:OnSlashCommand(input)
|
||||
self:FindBreakables()
|
||||
end
|
||||
|
||||
]]
|
||||
function Breakables:OnItemReceived(bag)
|
||||
self:FindBreakables()
|
||||
end
|
||||
|
||||
function Breakables:GetOptions()
|
||||
return {
|
||||
name = "Breakables",
|
||||
handler = Breakables,
|
||||
type = "group",
|
||||
args = {
|
||||
hideNoBreakables = {
|
||||
type = "toggle",
|
||||
name = "Hide bar without breakables",
|
||||
desc = "Whether or not to hide the action bar if no breakables are present in your bags",
|
||||
get = function()
|
||||
return self.settings.hideIfNoBreakables
|
||||
end,
|
||||
set = function(v)
|
||||
self.settings.hideIfNoBreakables = v
|
||||
self:FindBreakables()
|
||||
end,
|
||||
},
|
||||
--[[ maxBreakables = {
|
||||
type = 'range',
|
||||
name = 'Max number of breakables to display',
|
||||
desc = 'How many breakable buttons to display next to the profession button at maximum',
|
||||
min = 1,
|
||||
max = 50,
|
||||
step = 1,
|
||||
get = function()
|
||||
return self.settings.maxBreakablesToShow
|
||||
end,
|
||||
set = function(v)
|
||||
self.settings.maxBreakablesToShow = v
|
||||
self:FindBreakables()
|
||||
end,
|
||||
},
|
||||
]]
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
function Breakables:CreateButtonFrame()
|
||||
if not self.buttonFrame then
|
||||
self.buttonFrame = CreateFrame("Button", "BreakablesButtonFrame1", UIParent, "SecureActionButtonTemplate")
|
||||
end
|
||||
self.buttonFrame:SetPoint("TOPLEFT", UIParent, "TOPLEFT", self.db.profile.buttonFrameLeft, self.db.profile.buttonFrameTop)
|
||||
self.buttonFrame:SetPoint("TOPLEFT", UIParent, "TOPLEFT", self.settings.buttonFrameLeft, self.settings.buttonFrameTop)
|
||||
|
||||
if not self.buttonFrame.icon then
|
||||
self.buttonFrame.icon = self.buttonFrame:CreateTexture(nil, "BACKGROUND")
|
||||
@ -102,8 +147,8 @@ function Breakables:OnMouseUp()
|
||||
self.buttonFrame:StopMovingOrSizing()
|
||||
|
||||
local _, _, _, xOff, yOff = self.buttonFrame:GetPoint(1)
|
||||
self.db.profile.buttonFrameLeft = xOff
|
||||
self.db.profile.buttonFrameTop = yOff
|
||||
self.settings.buttonFrameLeft = xOff
|
||||
self.settings.buttonFrameTop = yOff
|
||||
end
|
||||
|
||||
function Breakables:FindBreakables()
|
||||
@ -123,19 +168,21 @@ function Breakables:FindBreakables()
|
||||
end
|
||||
end
|
||||
|
||||
self:SortBreakables(foundBreakables)
|
||||
|
||||
for i=1,#foundBreakables do
|
||||
if foundBreakables[i][IDX_COUNT] >= 5 then
|
||||
if not self.herbs then
|
||||
self.herbs = {}
|
||||
if not self.breakableButtons then
|
||||
self.breakableButtons = {}
|
||||
end
|
||||
|
||||
numBreakableStacks = numBreakableStacks + 1
|
||||
|
||||
if not self.herbs[numBreakableStacks] then
|
||||
self.herbs[numBreakableStacks] = CreateFrame("Button", "BreakablesButtonStackFrame"..numBreakableStacks, self.buttonFrame, "SecureActionButtonTemplate")
|
||||
if not self.breakableButtons[numBreakableStacks] then
|
||||
self.breakableButtons[numBreakableStacks] = CreateFrame("Button", "BreakablesButtonStackFrame"..numBreakableStacks, self.buttonFrame, "SecureActionButtonTemplate")
|
||||
end
|
||||
local btn = self.herbs[numBreakableStacks]
|
||||
btn:SetPoint("LEFT", numBreakableStacks == 1 and self.buttonFrame or self.herbs[numBreakableStacks - 1], "RIGHT")
|
||||
local btn = self.breakableButtons[numBreakableStacks]
|
||||
btn:SetPoint("LEFT", numBreakableStacks == 1 and self.buttonFrame or self.breakableButtons[numBreakableStacks - 1], "RIGHT")
|
||||
btn:SetWidth(40)
|
||||
btn:SetHeight(40)
|
||||
btn:EnableMouse(true)
|
||||
@ -159,19 +206,23 @@ function Breakables:FindBreakables()
|
||||
end
|
||||
btn.icon:SetTexture(foundBreakables[i][IDX_TEXTURE])
|
||||
btn.icon:SetAllPoints(btn)
|
||||
|
||||
if numBreakableStacks >= self.settings.maxBreakablesToShow then
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if self.herbs and numBreakableStacks < #self.herbs then
|
||||
for i=numBreakableStacks+1,#self.herbs do
|
||||
self.herbs[i].icon:SetTexture(nil)
|
||||
self.herbs[i].text:SetText()
|
||||
self.herbs[i]:EnableMouse(false)
|
||||
if self.breakableButtons and numBreakableStacks < #self.breakableButtons then
|
||||
for i=numBreakableStacks+1,#self.breakableButtons do
|
||||
self.breakableButtons[i].icon:SetTexture(nil)
|
||||
self.breakableButtons[i].text:SetText()
|
||||
self.breakableButtons[i]:EnableMouse(false)
|
||||
end
|
||||
end
|
||||
|
||||
if self.buttonFrame then
|
||||
if numBreakableStacks == 0 then
|
||||
if numBreakableStacks == 0 and self.settings.hideIfNoBreakables then
|
||||
self.buttonFrame:Hide()
|
||||
else
|
||||
self.buttonFrame:Show()
|
||||
@ -236,3 +287,17 @@ function Breakables:MergeBreakables(foundBreakable, breakableList)
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
function Breakables:SortBreakables(foundBreakables)
|
||||
for i=1,#foundBreakables do
|
||||
local _, iId = strsplit(":", foundBreakables[i][IDX_LINK])
|
||||
for j=i,#foundBreakables do
|
||||
local _, jId = strsplit(":", foundBreakables[j][IDX_LINK])
|
||||
if iId < jId then
|
||||
local temp = foundBreakables[i]
|
||||
foundBreakables[i] = foundBreakables[j]
|
||||
foundBreakables[j] = temp
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -2,6 +2,8 @@
|
||||
<Script file="libs\LibStub\LibStub.lua"/>
|
||||
<Script file="libs\CallbackHandler-1.0\CallbackHandler-1.0.lua"/>
|
||||
<Include file="libs\AceAddon-3.0\AceAddon-3.0.xml"/>
|
||||
<Include file="libs\AceGUI-3.0\AceGUI-3.0.xml"/>
|
||||
<Include file="libs\AceConfig-3.0\AceConfig-3.0.xml"/>
|
||||
<Include file="libs\AceConsole-3.0\AceConsole-3.0.xml"/>
|
||||
<Include file="libs\AceDB-3.0\AceDB-3.0.xml"/>
|
||||
<Include file="libs\AceEvent-3.0\AceEvent-3.0.xml"/>
|
||||
|
Reference in New Issue
Block a user