# HG changeset patch # User rowaasr13 # Date 1484066433 -10800 # Node ID 3b9bc71a1dd63cc8d14e1d65af6cadea8b7edc67 # Parent e41de98f6b33a6eb50d617d41b277a54879bc23b .Use - use first available item; .Cast - use first available spell diff -r e41de98f6b33 -r 3b9bc71a1dd6 OOCDo.lua --- a/OOCDo.lua Tue Jan 10 19:39:55 2017 +0300 +++ b/OOCDo.lua Tue Jan 10 19:40:33 2017 +0300 @@ -28,7 +28,50 @@ button:SetAttribute("type", "macro") button:SetAttribute("macrotext", command) end - button.Macro = button.MacroText button.T = button.MacroText -button.M = button.MacroText \ No newline at end of file +button.M = button.MacroText + +--- Tries to set button to use first available item from list. +-- Sets button's .type to "item" and .item to first item that player have (GetItemCount > 0). +-- Returns if any item was found or not, so you can use this in conditional to do something else if there were no suitable items. +-- If none of items was found, button will still lose previously assigned command. +-- @param ... list of item IDs to try +-- @return true if any item was found and nil otherwise +function button.Use(...) + if InCombatLockdown() then return end + button:SetAttribute("type", "item") + button:SetAttribute("item", nil) + for idx = 1, select('#', ...) do repeat + local elem = select(idx, ...) + if elem == button then break end + if type(elem) == "number" then + if GetItemCount(elem) > 0 then + button:SetAttribute("item", "item:" .. elem) + return true + end + end + until true end +end + +--- Tries to set button to castwe first available spell from list. +-- Sets button's .type to "spell" and .spell to first spell that player knowns (GetSpellInfo(name) returns something). +-- Returns if any spell was found or not, so you can use this in conditional to do something else if there were no suitable spells. +-- If none of spells was found, button will still lose previously assigned command. +-- @param ... list of spell IDs to try +-- @return true if any spell was found and nil otherwise +function button.Cast(...) + if InCombatLockdown() then return end + button:SetAttribute("type", "spell") + button:SetAttribute("spell", nil) + for idx = 1, select('#', ...) do repeat + local elem = select(idx, ...) + if elem == button then break end + if type(elem) == "number" then + if GetSpellInfo(GetSpellInfo(elem)) then + button:SetAttribute("spell", elem) + return true + end + end + until true end +end \ No newline at end of file