/Voodoo
BINDING_HEADER_MYLITTLEBUTTON = "MyLittleButton" |
setglobal("BINDING_NAME_CLICK MyLittleButton:LeftButton", "Execute") |
BINDING_HEADER_VOODOO = "Voodoo" |
setglobal("BINDING_NAME_CLICK Voodoo:LeftButton", "Execute") |
local frame = CreateFrame("Button",nil,UIParent) |
frame:SetScript("OnEvent", function(self, event, ...) |
end) |
frame:RegisterEvent("PLAYER_LOGIN") |
local button = CreateFrame("Button", "MyLittleButton", UIParent, "SecureActionButtonTemplate, ActionButtonTemplate") |
local button = CreateFrame("Button", "Voodoo", UIParent, "SecureActionButtonTemplate, ActionButtonTemplate") |
button:SetPoint("CENTER",UIParent) |
local function ChangeButtonAttributes(texture,type,spell,target) |
if InCombatLockdown() then return end |
local type,itemID = GetCursorInfo() |
if type == "spell" or "item" then |
MyLittleButtonDB[GetActiveTalentGroup()]["type"] = type |
VoodooDB[GetActiveTalentGroup()]["type"] = type |
if type == "spell" then |
MyLittleButtonDB[GetActiveTalentGroup()]["spell"] = select(1,GetSpellName(itemID,type)) |
MyLittleButtonDB[GetActiveTalentGroup()]["texture"] = GetSpellTexture(MyLittleButtonDB[GetActiveTalentGroup()]["spell"]) |
VoodooDB[GetActiveTalentGroup()]["spell"] = select(1,GetSpellName(itemID,type)) |
VoodooDB[GetActiveTalentGroup()]["texture"] = GetSpellTexture(VoodooDB[GetActiveTalentGroup()]["spell"]) |
elseif type == "item" then |
MyLittleButtonDB[GetActiveTalentGroup()]["spell"] = select(1,GetItemInfo(itemID)) |
MyLittleButtonDB[GetActiveTalentGroup()]["texture"] = select(10,GetItemInfo(itemID)) |
VoodooDB[GetActiveTalentGroup()]["spell"] = select(1,GetItemInfo(itemID)) |
VoodooDB[GetActiveTalentGroup()]["texture"] = select(10,GetItemInfo(itemID)) |
end |
if editbox:GetText() ~= "" then MyLittleButtonDB[GetActiveTalentGroup()]["target"] = editbox:GetText() end |
ChangeButtonAttributes(MyLittleButtonDB[GetActiveTalentGroup()]["texture"],MyLittleButtonDB[GetActiveTalentGroup()]["type"],MyLittleButtonDB[GetActiveTalentGroup()]["spell"],MyLittleButtonDB[GetActiveTalentGroup()]["target"]) |
if editbox:GetText() ~= "" then VoodooDB[GetActiveTalentGroup()]["target"] = editbox:GetText() end |
ChangeButtonAttributes(VoodooDB[GetActiveTalentGroup()]["texture"],VoodooDB[GetActiveTalentGroup()]["type"],VoodooDB[GetActiveTalentGroup()]["spell"],VoodooDB[GetActiveTalentGroup()]["target"]) |
return ClearCursor() |
end |
end |
local function CheckCooldown() |
local start,duration,enable |
if MyLittleButtonDB[GetActiveTalentGroup()]["spell"] and GetSpellInfo(MyLittleButtonDB[GetActiveTalentGroup()]["spell"]) and GetSpellTexture(MyLittleButtonDB[GetActiveTalentGroup()]["spell"]) then |
start,duration,enable = GetSpellCooldown(MyLittleButtonDB[GetActiveTalentGroup()]["spell"]) |
elseif MyLittleButtonDB[GetActiveTalentGroup()]["spell"] and GetItemInfo(MyLittleButtonDB[GetActiveTalentGroup()]["spell"]) and select(10,GetItemInfo(MyLittleButtonDB[GetActiveTalentGroup()]["spell"])) then |
start,duration,enable = GetItemCooldown(MyLittleButtonDB[GetActiveTalentGroup()]["spell"]) |
if VoodooDB[GetActiveTalentGroup()]["spell"] and GetSpellInfo(VoodooDB[GetActiveTalentGroup()]["spell"]) and GetSpellTexture(VoodooDB[GetActiveTalentGroup()]["spell"]) then |
start,duration,enable = GetSpellCooldown(VoodooDB[GetActiveTalentGroup()]["spell"]) |
elseif VoodooDB[GetActiveTalentGroup()]["spell"] and GetItemInfo(VoodooDB[GetActiveTalentGroup()]["spell"]) and select(10,GetItemInfo(VoodooDB[GetActiveTalentGroup()]["spell"])) then |
start,duration,enable = GetItemCooldown(VoodooDB[GetActiveTalentGroup()]["spell"]) |
else |
start,duration,enable = 0,0,1 |
end |
self:ClearFocus() |
return |
end |
MyLittleButtonDB[GetActiveTalentGroup()]["target"] = self:GetText() ~= "" and self:GetText() or nil |
ChangeButtonAttributes(MyLittleButtonDB[GetActiveTalentGroup()]["texture"],MyLittleButtonDB[GetActiveTalentGroup()]["type"],MyLittleButtonDB[GetActiveTalentGroup()]["spell"],MyLittleButtonDB[GetActiveTalentGroup()]["target"]) |
VoodooDB[GetActiveTalentGroup()]["target"] = self:GetText() ~= "" and self:GetText() or nil |
ChangeButtonAttributes(VoodooDB[GetActiveTalentGroup()]["texture"],VoodooDB[GetActiveTalentGroup()]["type"],VoodooDB[GetActiveTalentGroup()]["spell"],VoodooDB[GetActiveTalentGroup()]["target"]) |
self:ClearFocus() |
end) |
editbox:SetScript("OnEscapePressed", function(self) |
self:ClearFocus() |
return |
end |
MyLittleButtonDB[GetActiveTalentGroup()]["target"] = self:GetText() ~= "" and self:GetText() or nil |
ChangeButtonAttributes(MyLittleButtonDB[GetActiveTalentGroup()]["texture"],MyLittleButtonDB[GetActiveTalentGroup()]["type"],MyLittleButtonDB[GetActiveTalentGroup()]["spell"],MyLittleButtonDB[GetActiveTalentGroup()]["target"]) |
VoodooDB[GetActiveTalentGroup()]["target"] = self:GetText() ~= "" and self:GetText() or nil |
ChangeButtonAttributes(VoodooDB[GetActiveTalentGroup()]["texture"],VoodooDB[GetActiveTalentGroup()]["type"],VoodooDB[GetActiveTalentGroup()]["spell"],VoodooDB[GetActiveTalentGroup()]["target"]) |
self:ClearFocus() |
end) |
editbox:SetScript("OnEditFocusGained", function(self) |
if InCombatLockdown() then return end |
if IsShiftKeyDown() and UnitExists("target") then |
MyLittleButtonDB[GetActiveTalentGroup()]["target"] = UnitName("target") |
ChangeButtonAttributes(MyLittleButtonDB[GetActiveTalentGroup()]["texture"],MyLittleButtonDB[GetActiveTalentGroup()]["type"],MyLittleButtonDB[GetActiveTalentGroup()]["spell"],MyLittleButtonDB[GetActiveTalentGroup()]["target"]) |
self:SetText(MyLittleButtonDB[GetActiveTalentGroup()]["target"]) |
VoodooDB[GetActiveTalentGroup()]["target"] = UnitName("target") |
ChangeButtonAttributes(VoodooDB[GetActiveTalentGroup()]["texture"],VoodooDB[GetActiveTalentGroup()]["type"],VoodooDB[GetActiveTalentGroup()]["spell"],VoodooDB[GetActiveTalentGroup()]["target"]) |
self:SetText(VoodooDB[GetActiveTalentGroup()]["target"]) |
self:ClearFocus() |
else |
self:HighlightText() |
frame:SetUserPlaced(true) |
frame:SetClampedToScreen(true) |
frame:SetScript("OnDragStart", function(self) |
if not MyLittleButtonDB.lock then |
if not VoodooDB.lock then |
self:StartMoving() |
end |
end) |
frame:SetScript("OnDragStop", function(self) |
self:StopMovingOrSizing() |
MyLittleButtonDB.point, MyLittleButtonDB.x, MyLittleButtonDB.y = "BOTTOMLEFT", self:GetLeft(), self:GetBottom() |
VoodooDB.point, VoodooDB.x, VoodooDB.y = "BOTTOMLEFT", self:GetLeft(), self:GetBottom() |
end) |
frame:SetScript("OnDoubleClick", function(self) |
if IsShiftKeyDown() then |
MyLittleButtonDB.lock = not MyLittleButtonDB.lock |
if MyLittleButtonDB.lock then |
VoodooDB.lock = not VoodooDB.lock |
if VoodooDB.lock then |
frame:SetBackdropColor(0,0,0,0.5) |
else |
frame:SetBackdropColor(1,0,0,0.5) |
end) |
local function onUpdate(self,elapsed) |
if MyLittleButtonDB[GetActiveTalentGroup()]["spell"] and MyLittleButtonDB[GetActiveTalentGroup()]["target"] then |
if IsSpellInRange(MyLittleButtonDB[GetActiveTalentGroup()]["spell"],MyLittleButtonDB[GetActiveTalentGroup()]["target"]) == 1 or IsItemInRange(MyLittleButtonDB[GetActiveTalentGroup()]["spell"],MyLittleButtonDB[GetActiveTalentGroup()]["target"]) == 1 then |
if VoodooDB[GetActiveTalentGroup()]["spell"] and VoodooDB[GetActiveTalentGroup()]["target"] then |
if IsSpellInRange(VoodooDB[GetActiveTalentGroup()]["spell"],VoodooDB[GetActiveTalentGroup()]["target"]) == 1 or IsItemInRange(VoodooDB[GetActiveTalentGroup()]["spell"],VoodooDB[GetActiveTalentGroup()]["target"]) == 1 then |
frame:SetBackdropBorderColor(0,1,0,1) |
elseif string.lower(MyLittleButtonDB[GetActiveTalentGroup()]["target"]) == string.lower(UnitName("player")) then |
elseif string.lower(VoodooDB[GetActiveTalentGroup()]["target"]) == string.lower(UnitName("player")) then |
frame:SetBackdropBorderColor(1,1,0,1) |
else |
frame:SetBackdropBorderColor(1,0,0,1) |
frame:SetScript("OnUpdate", onUpdate) |
local function SetPosition() |
frame:SetPoint("TOPLEFT",MyLittleButton,"TOPLEFT",-7,7) |
frame:SetPoint("BOTTOMLEFT",MyLittleButton,"BOTTOMLEFT",-7,-7) |
frame:SetPoint("TOPLEFT",Voodoo,"TOPLEFT",-7,7) |
frame:SetPoint("BOTTOMLEFT",Voodoo,"BOTTOMLEFT",-7,-7) |
frame:SetPoint("RIGHT",MyLittleEditbox,"RIGHT",7,0) |
local width = frame:GetWidth() |
local height = frame:GetHeight() |
frame:ClearAllPoints() |
frame:SetPoint(MyLittleButtonDB.point and MyLittleButtonDB.point or "CENTER", MyLittleButtonDB.x and MyLittleButtonDB.x or UIParent, MyLittleButtonDB.y and MyLittleButtonDB.y or nil) |
frame:SetPoint(VoodooDB.point and VoodooDB.point or "CENTER", VoodooDB.x and VoodooDB.x or UIParent, VoodooDB.y and VoodooDB.y or nil) |
frame:SetWidth(width) |
frame:SetHeight(height) |
button:ClearAllPoints() |
end |
local function GetSpellData() |
if not MyLittleButtonDB[GetActiveTalentGroup()] then MyLittleButtonDB[GetActiveTalentGroup()] = {} end |
local texture = MyLittleButtonDB[GetActiveTalentGroup()]["texture"] and MyLittleButtonDB[GetActiveTalentGroup()]["texture"] or "Interface\\Icons\\INV_Misc_QuestionMark" |
local type = MyLittleButtonDB[GetActiveTalentGroup()]["type"] and MyLittleButtonDB[GetActiveTalentGroup()]["type"] or nil |
local spell = MyLittleButtonDB[GetActiveTalentGroup()]["spell"] and MyLittleButtonDB[GetActiveTalentGroup()]["spell"] or nil |
local target = MyLittleButtonDB[GetActiveTalentGroup()]["target"] and MyLittleButtonDB[GetActiveTalentGroup()]["target"] or "" |
if not VoodooDB[GetActiveTalentGroup()] then VoodooDB[GetActiveTalentGroup()] = {} end |
local texture = VoodooDB[GetActiveTalentGroup()]["texture"] and VoodooDB[GetActiveTalentGroup()]["texture"] or "Interface\\Icons\\INV_Misc_QuestionMark" |
local type = VoodooDB[GetActiveTalentGroup()]["type"] and VoodooDB[GetActiveTalentGroup()]["type"] or nil |
local spell = VoodooDB[GetActiveTalentGroup()]["spell"] and VoodooDB[GetActiveTalentGroup()]["spell"] or nil |
local target = VoodooDB[GetActiveTalentGroup()]["target"] and VoodooDB[GetActiveTalentGroup()]["target"] or "" |
return texture,type,spell,target |
end |
end |
function frame:PLAYER_LOGIN() |
if not MyLittleButtonDB then MyLittleButtonDB = {} end |
if not MyLittleButtonDB[GetActiveTalentGroup()] then MyLittleButtonDB[GetActiveTalentGroup()] = {} end |
if MyLittleButtonDB[GetActiveTalentGroup()]["spell"] and MyLittleButtonDB[GetActiveTalentGroup()]["texture"] then |
ChangeButtonAttributes(MyLittleButtonDB[GetActiveTalentGroup()]["texture"],MyLittleButtonDB[GetActiveTalentGroup()]["type"],MyLittleButtonDB[GetActiveTalentGroup()]["spell"],MyLittleButtonDB[GetActiveTalentGroup()]["target"]) |
if not VoodooDB then VoodooDB = {} end |
if not VoodooDB[GetActiveTalentGroup()] then VoodooDB[GetActiveTalentGroup()] = {} end |
if VoodooDB[GetActiveTalentGroup()]["spell"] and VoodooDB[GetActiveTalentGroup()]["texture"] then |
ChangeButtonAttributes(VoodooDB[GetActiveTalentGroup()]["texture"],VoodooDB[GetActiveTalentGroup()]["type"],VoodooDB[GetActiveTalentGroup()]["spell"],VoodooDB[GetActiveTalentGroup()]["target"]) |
end |
editbox:SetText(MyLittleButtonDB[GetActiveTalentGroup()]["target"] and MyLittleButtonDB[GetActiveTalentGroup()]["target"] or "") |
if MyLittleButtonDB.lock then |
editbox:SetText(VoodooDB[GetActiveTalentGroup()]["target"] and VoodooDB[GetActiveTalentGroup()]["target"] or "") |
if VoodooDB.lock then |
frame:SetBackdropColor(0,0,0,0.5) |
else |
frame:SetBackdropColor(1,0,0,0.5) |
## Interface: 30200 |
## Title: My Little Button |
## Notes: For the pony! |
## SavedVariablesPerCharacter: MyLittleButtonDB |
## Title: Voodoo |
## Notes: Poke the button to cast spells on your target! |
## SavedVariablesPerCharacter: VoodooDB |
MyLittleButton.lua |
Voodoo.lua |
<Bindings> |
<Binding name="CLICK MyLittleButton:LeftButton" header="MYLITTLEBUTTON"> |
<Binding name="CLICK Voodoo:LeftButton" header="VOODOO"> |
</Binding> |
</Bindings> |