Files
QuickAssist/QuickAssist.lua
T
Armadel Vida 4b66beb97c Initial commit
Update README.md

Added new keybinding and function to seleft QA Target\nRemoved debug/print messages

Update README.md

Update README.md

Update README.md

Update README.md

New keybindings for Setting and clearing the Assist target
Added Clear Assist Target for self unit dropdown (player's self right click menu, whatever)

Just changed version in the toc file

Update README.md
2026-06-28 02:36:07 +03:30

156 lines
4.7 KiB
Lua

-- Create main addon frame
local QuickAssist = CreateFrame("Frame", "QuickAssistAddon")
QuickAssist:RegisterEvent("VARIABLES_LOADED")
-- Variables
QuickAssist.targetName = nil
-- Initialize DB immediately
QuickAssistDB = QuickAssistDB or {}
-- print("QuickAssist: Addon loaded")
-- Slash commands
SLASH_QUICKASSIST1 = "/qa"
SLASH_QUICKASSIST2 = "/quickassist"
-- Save variables between sessions
function QuickAssist_OnLoad()
-- print("QuickAssist: OnLoad called")
-- Ensure DB exists
QuickAssistDB = QuickAssistDB or {}
QuickAssistDB.targetName = QuickAssistDB.targetName or nil
QuickAssist.targetName = QuickAssistDB.targetName
-- print("QuickAssist: Local targetName set to:", tostring(QuickAssist.targetName))
end
-- Event handler
QuickAssist:SetScript("OnEvent", function(self, event)
-- print("QuickAssist: Event fired:", event)
if event == "VARIABLES_LOADED" then
QuickAssist_OnLoad()
end
end)
-- Function to set target
function QuickAssist:SetTarget(name)
-- print("QuickAssist: SetTarget called with name:", tostring(name))
-- Ensure DB exists before setting
QuickAssistDB = QuickAssistDB or {}
self.targetName = name
QuickAssistDB.targetName = name
if name then
DEFAULT_CHAT_FRAME:AddMessage("QuickAssist: Target set to " .. name, 1, 1, 0)
else
DEFAULT_CHAT_FRAME:AddMessage("QuickAssist: Target cleared", 1, 1, 0)
end
end
-- Function to assist target
function QuickAssist:AssistTarget()
if self.targetName then
TargetByName(self.targetName)
AssistUnit("target")
else
-- If no "assist" target is set, assist current target
if UnitExists("target") then
AssistUnit("target")
else
DEFAULT_CHAT_FRAME:AddMessage("QuickAssist: No assist target set and no target selected", 1, 0, 0)
end
end
end
function QuickAssist:SelectTarget()
if self.targetName then
TargetByName(self.targetName)
else
DEFAULT_CHAT_FRAME:AddMessage("QuickAssist: No assist target set", 1, 0, 0)
end
end
-- Slash command handler
function SlashCmdList.QUICKASSIST(msg)
if msg == "clear" then
QuickAssist:SetTarget(nil)
else
DEFAULT_CHAT_FRAME:AddMessage("QuickAssist commands:", 1, 1, 0)
DEFAULT_CHAT_FRAME:AddMessage("/qa clear - Clear current assist target", 1, 1, 0)
-- Show current target with green color
local targetText = QuickAssist.targetName and ("|cFF00FF00" .. QuickAssist.targetName .. "|r") or "None"
DEFAULT_CHAT_FRAME:AddMessage("Current Assist Target: " .. targetText, 1, 1, 0)
end
end
-- Hook the UnitPopup_OnClick function
local original_UnitPopup_OnClick = UnitPopup_OnClick
function UnitPopup_OnClick()
if this and this.value == "SET_ASSIST_TARGET" then
local dropdownFrame = getglobal(UIDROPDOWNMENU_INIT_MENU)
if dropdownFrame then
local unit = dropdownFrame.unit
if unit then
local name = UnitName(unit)
if name then
QuickAssist:SetTarget(name)
end
end
end
PlaySound("UChatScrollButton")
CloseDropDownMenus()
elseif this and this.value == "CLEAR_ASSIST_TARGET" then
QuickAssist:SetTarget(nil)
else
original_UnitPopup_OnClick()
end
end
-- Add option to UnitPopupMenus
UnitPopupButtons["SET_ASSIST_TARGET"] = { text = "Set as Assist Target", dist = 0 }
UnitPopupButtons["CLEAR_ASSIST_TARGET"] = { text = "Clear Assist Target", dist = 0 }
-- Make sure menus are defined before adding our option
if not UnitPopupMenus["SELF"] then UnitPopupMenus["SELF"] = {} end
if not UnitPopupMenus["PARTY"] then UnitPopupMenus["PARTY"] = {} end
if not UnitPopupMenus["PLAYER"] then UnitPopupMenus["PLAYER"] = {} end
if not UnitPopupMenus["RAID"] then UnitPopupMenus["RAID"] = {} end
-- Add our option to various menus
table.insert(UnitPopupMenus["SELF"], "SET_ASSIST_TARGET")
table.insert(UnitPopupMenus["SELF"], "CLEAR_ASSIST_TARGET")
table.insert(UnitPopupMenus["PARTY"], "SET_ASSIST_TARGET")
table.insert(UnitPopupMenus["PLAYER"], "SET_ASSIST_TARGET")
table.insert(UnitPopupMenus["RAID"], "SET_ASSIST_TARGET")
-- Binding functions
BINDING_HEADER_QUICKASSIST = "QuickAssist"
BINDING_NAME_QUICKASSIST = "Assist Target"
BINDING_NAME_SELECTTARGET = "Select Assist Target"
BINDING_NAME_CLEARTARGET = "Clear Assist Target"
BINDING_NAME_SETTARGET = "Set as Assist Target"
function QAAssistBinding()
QuickAssist:AssistTarget()
end
function QASelectTargetBinding()
QuickAssist:SelectTarget()
end
function QAClearTargetBinding()
QuickAssist:SetTarget(nil)
end
function QASetTargetBinding()
if UnitExists("target") then
QuickAssist:SetTarget(UnitName("target"))
end
end