changeset 8:3b9bc71a1dd6

.Use - use first available item; .Cast - use first available spell
author rowaasr13
date Tue, 10 Jan 2017 19:40:33 +0300
parents e41de98f6b33
children 5e15478c7731
files OOCDo.lua
diffstat 1 files changed, 45 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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