아침부터 일어나서 찾았는데 비슷한 애드온이 없네요..
찾아본 애드온은 도미노/바텐더/OPIE? 등이 있는데 너무 달라서요..
도움 주시면 감사드리겠습니다.
---@diagnostic disable: undefined-field, redundant-parameter
local addonname, addon = ...
local ActionButton_UpdateState = ActionButton_UpdateState or function(self) self:UpdateState() end
local ActionButton_SetTooltip = ActionButton_SetTooltip or function(self) self:SetTooltip() end
local default = {
x = { -14, -14, -14, -19, -19, -19, 14, 14, 14, 19, 19, 19 },
y = { -5, 0, 5, -7, -2, 3, -5, 0, 5, 3, -2, -7 },
scales = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 },
yOffset = 0,
alpha = 1,
scale = 1,
hideTooltip = true,
combat = false,
mouseover = false,
vehiclehide = false,
step = 10,
showgrid = true,
page = 8,
}
addon = CreateFrame("checkbutton", addonname, UIParent, "SecureHandlerAttributeTemplate")
addon:SetFrameStrata("BACKGROUND")
addon:SetWidth(36)
addon:SetHeight(36)
addon:SetPoint("CENTER")
addon:EnableMouse(false)
addon:SetAttribute("_onattributechanged", [=[
if name == 'actionpage' then
control:ChildUpdate('state')
elseif name == "state-vehicle" then
if value == "hide" then
self:Hide()
else
self:Show()
end
end
]=])
addon.buttons = {}
local buttons = addon.buttons
-- eventhandler
local events = {}
addon:SetScript("OnEvent", function(self, event, ...)
local callback = events[event]
local types = type(callback)
if (types == "string" and self[callback]) then
self[callback](self, event, ...)
elseif (types == "function") then
callback(self, event, ...)
elseif self[event] then
self[event](self, event, ...)
end
end)
hooksecurefunc(addon, "RegisterEvent", function(self, event, callback)
events[event] = callback
end)
-- alpha
local function OnUpdate(self, elapsed)
self.update = self.update + elapsed
if self.update >= 0.3 or self.startAlpha == self.endAlpha or self.db.alpha == 1 then
self.update = 0
self:SetAlpha(self.endAlpha)
self:SetScript("OnUpdate", nil)
return
end
self:SetAlpha(self.startAlpha + (self.endAlpha - self.startAlpha) * (self.update / 0.3))
end
local function SetAlpha(endalpha)
addon.startAlpha = addon:GetAlpha()
addon.endAlpha = endalpha
addon.update = 0
addon:SetScript("OnUpdate", OnUpdate)
end
-- child script
local function OnEnter(self)
if not addon.db.hideTooltip then
ActionButton_SetTooltip(self)
end
if addon.db.mouseover and addon.endAlpha ~= 1 then
SetAlpha(1)
end
end
local function OnLeave(self)
GameTooltip:Hide()
if addon.db.mouseover and not (addon.iscombat or addon.targetselect) then
SetAlpha(addon.db.alpha)
end
end
local function OAU(self) if self.action then ActionButton_UpdateState(self) end end
-- binding
local function UpdateBindings()
for i, button in ipairs(buttons) do
local name = button:GetName()
local hotkey = _G[name .. "HotKey"]
local key = GetBindingKey(name:upper())
local text = GetBindingText(key, "KEY_", 1)
if text == "" then
hotkey:SetText(RANGE_INDICATOR)
hotkey:SetPoint("TOPLEFT", button, "TOPLEFT", 1, -2)
hotkey:Hide()
ClearOverrideBindings(button)
else
hotkey:SetText(text)
hotkey:SetPoint("TOPLEFT", button, "TOPLEFT", -2, -2)
hotkey:Show()
SetOverrideBindingClick(button, true, key, button:GetName(), "LeftButton")
end
end
end
local function SetBindingText()
BINDING_HEADER_CENTARBAR = "CentarBar"
for i, button in ipairs(buttons) do
_G["BINDING_NAME_" .. button:GetName():upper()] = "버튼 " .. i
end
UpdateBindings()
end
-- createbutton
for i = 1, 12 do
buttons[i] = CreateFrame("checkbutton", addonname .. "Button" .. i, addon, "ActionBarButtonTemplate")
buttons[i]:SetID(i)
buttons[i]:SetFrameStrata("MEDIUM")
buttons[i]:SetFrameLevel(0)
buttons[i]:HookScript("OnAttributeChanged", OAU)
buttons[i]:SetAttribute("_childupdate-state", "self:SetAttribute('action', '$input')")
buttons[i]:GetNormalTexture():SetAlpha(0.5)
buttons[i]:SetScript("OnEnter", OnEnter)
buttons[i]:SetScript("OnLeave", OnLeave)
end
function addon:Setup()
self.combatlockdown = InCombatLockdown()
if self.combatlockdown then
return
end
local db = self.db
UnregisterStateDriver(self, "vehicle")
if db.vehiclehide then
if db.mounthide then
RegisterStateDriver(self, "vehicle", "[vehicleui][mounted]hide;show")
else
RegisterStateDriver(self, "vehicle", "[vehicleui]hide;show")
end
end
self.targetselect = db.target and UnitExists("target")
self:SetAlpha(db.alpha)
self:SetScale(db.scale)
self:SetPoint("CENTER", self:GetParent(), "CENTER", 0, db.yOffset * db.step)
self:SetAttribute("actionpage", self.db.page)
for i, button in ipairs(buttons) do
if self.db.showgrid then
button:SetAttribute("showgrid", 1)
button:Show()
button:GetNormalTexture():SetAlpha(0.5)
else
button:SetAttribute("showgrid", 0)
end
button:SetScale(db.scales[i])
button:SetPoint("CENTER", db.x[i] * db.step / db.scales[i], db.y[i] * db.step / db.scales[i])
end
end
function addon:InitDB(event)
self:UnregisterEvent(event)
local dbName = addonname .. "SaveData"
_G[dbName] = _G[dbName] or default
self.db = _G[dbName]
for k, v in pairs(default) do
if (type(v) == "table") then
if type(v) ~= type(self.db[k]) then
self.db[k] = v
end
end
end
self:Setup()
end
function addon:CombatEnd(event)
self.iscombat = false
if self.combatlockdown then
self:Setup()
end
if not self.db.combat then return end
SetAlpha(self.targetselect and 1 or self.db.alpha)
end
function addon:CombatStart(event)
self.iscombat = true
if not self.db.combat then return end
SetAlpha(1)
end
function addon:PLAYER_TARGET_CHANGED(event)
if not self.db.target or self.iscombat then
self.targetselect = false
return
end
self.targetselect = UnitExists("target")
SetAlpha(self.targetselect and 1 or self.db.alpha)
end
addon:RegisterEvent("VARIABLES_LOADED", "InitDB")
addon:RegisterEvent("PLAYER_REGEN_ENABLED", "CombatEnd")
addon:RegisterEvent("PLAYER_REGEN_DISABLED", "CombatStart")
addon:RegisterEvent("UPDATE_BINDINGS", UpdateBindings)
addon:RegisterEvent("PLAYER_LOGIN", SetBindingText)
addon:RegisterEvent("PLAYER_TARGET_CHANGED")
SlashCmdList[addonname .. "Command"] = function(msg)
if not _G[addonname .. "_Option"] then
LoadAddOn(addonname .. "_Option")
_G[addonname .. "_Option"] = _G[addonname .. "_Option"] or function() end
end
_G[addonname .. "_Option"]()
end
_G["SLASH_" .. addonname .. "Command1"] = "/cbo"
_G["SLASH_" .. addonname .. "Command2"] = "/츄ㅐ"
_G["SLASH_" .. addonname .. "Command3"] = "/센타"
_G["SLASH_" .. addonname .. "Command4"] = "/중앙바"