mirror of
https://github.com/ornfelt/azerothcore_lua_scripts
synced 2026-08-22 06:26:03 -04:00
1665 lines
57 KiB
Lua
1665 lines
57 KiB
Lua
|
|
-- ___ ___ _ __ _____ ___ ___ ___ ___ ___ _ ___ _ __
|
||
|
|
-- | __| __| |\ \ / / _ \ / _ \| \ | _ \ __| _ \/_\ / __| |/ /
|
||
|
|
-- | _|| _|| |_\ \/\/ / (_) | (_) | |) | | / _|| _/ _ \ (__| ' <
|
||
|
|
-- |_| |___|____\_/\_/ \___/ \___/|___/ |_|_\___|_|/_/ \_\___|_|\_\
|
||
|
|
|
||
|
|
|
||
|
|
local AIO = AIO or require("AIO")
|
||
|
|
|
||
|
|
-- CLIENT SECRET
|
||
|
|
local clientSecret = ""
|
||
|
|
local handlerName = "yQ4CiWjHET"
|
||
|
|
|
||
|
|
--|TInterface/ICONS/VAS_RaceChange:35:35|t
|
||
|
|
local LastContainerNum = 1
|
||
|
|
-- Settings
|
||
|
|
local iconSize = 35
|
||
|
|
local leftConst = 172
|
||
|
|
local itemsPerRow = 7
|
||
|
|
local current_class = 1
|
||
|
|
local current_spec = 1
|
||
|
|
local prices = {}
|
||
|
|
|
||
|
|
-- Ready-to-use for the system
|
||
|
|
|
||
|
|
local classes = {"Druid", "Hunter", "Mage", "Paladin", "Priest", "Rogue", "Shaman", "Warlock", "Warrior", "MONK", "DEMONHUNTER"};
|
||
|
|
local class_list = {"DRUID", "HUNTER", "MAGE", "PALADIN", "PRIEST", "ROGUE", "SHAMAN", "WARLOCK", "WARRIOR"}
|
||
|
|
local spell_point_list = {}
|
||
|
|
local talent_point_list = {}
|
||
|
|
|
||
|
|
|
||
|
|
--Data
|
||
|
|
if AIO.IsServer() then
|
||
|
|
--Spells
|
||
|
|
AIO.AddAddon("lua_scripts\\ClassLess\\data\\spells.data", "spells")
|
||
|
|
--Talents
|
||
|
|
AIO.AddAddon("lua_scripts\\ClassLess\\data\\talents.data", "talents")
|
||
|
|
--Locks
|
||
|
|
AIO.AddAddon("lua_scripts\\ClassLess\\data\\locks.data", "locks")
|
||
|
|
--Requirements
|
||
|
|
AIO.AddAddon("lua_scripts\\ClassLess\\data\\req.data", "req")
|
||
|
|
end
|
||
|
|
|
||
|
|
if AIO.AddAddon() then
|
||
|
|
return
|
||
|
|
end
|
||
|
|
|
||
|
|
--Variables
|
||
|
|
|
||
|
|
local spellsplus, spellsminus = {}, {}
|
||
|
|
local tpellsplus, tpellsminus = {}, {}
|
||
|
|
local talentsplus, talentsminus = {}, {}
|
||
|
|
local db = CLDB
|
||
|
|
|
||
|
|
--Functions
|
||
|
|
|
||
|
|
local function CountSpellPoints(c, s)
|
||
|
|
local r = 0
|
||
|
|
for k,v in pairs(db.data.spells[class_list[c]][s][4]) do
|
||
|
|
--check if v[1][1] in db.spells, if so r++
|
||
|
|
if tContains(db.spells, v[1][1]) then
|
||
|
|
r = r + 1
|
||
|
|
end
|
||
|
|
end
|
||
|
|
return r
|
||
|
|
end
|
||
|
|
|
||
|
|
local function CountTalentPoints(c, s)
|
||
|
|
local r = 0
|
||
|
|
for k,v in pairs(db.data.talents[class_list[c]][s][4]) do
|
||
|
|
--check if v[1][1] in db.spells, if so r++
|
||
|
|
for i,j in pairs(v[1]) do
|
||
|
|
if tContains(db.talents, j) then
|
||
|
|
r = r + 1
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
return r
|
||
|
|
end
|
||
|
|
|
||
|
|
local function UpdatePointText()
|
||
|
|
for k,v in pairs(class_list) do --zeta
|
||
|
|
local cap = 0
|
||
|
|
local ctp = 0
|
||
|
|
for i = 1, 3 do
|
||
|
|
local ap = CountSpellPoints(k, i)
|
||
|
|
cap = cap + ap
|
||
|
|
local tp = CountTalentPoints(k,i)
|
||
|
|
ctp = ctp + tp
|
||
|
|
for j = 1, 2 do
|
||
|
|
_G["CLContainer"..j.."Sub"..k.."SubButton"..i].text:SetText(tostring(ap))
|
||
|
|
_G["CLContainer"..j.."Sub"..k.."SubButton"..i].text2:SetText(tostring(tp))
|
||
|
|
end
|
||
|
|
end
|
||
|
|
for j = 1, 2 do
|
||
|
|
_G["CLContainer"..j.."SubButton"..k].text:SetText(tostring(cap))
|
||
|
|
_G["CLContainer"..j.."SubButton"..k].text2:SetText(tostring(ctp))
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local function FrameToggle(frame)
|
||
|
|
local f = _G[frame]
|
||
|
|
if f ~= nil then
|
||
|
|
if f:IsVisible() ~= 1 then
|
||
|
|
f:Show()
|
||
|
|
PlaySound(10590) -- jewelcrafting complete sound
|
||
|
|
elseif f:IsVisible() == 1 then
|
||
|
|
PlaySound(12189) -- guildvaultclose sound
|
||
|
|
f:Hide()
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local function FrameShow(fname)
|
||
|
|
local frame = fname
|
||
|
|
if type(fname) ~= "table" then
|
||
|
|
frame = _G[fname]
|
||
|
|
end
|
||
|
|
if frame ~= nil and frame:IsVisible() ~= 1 then
|
||
|
|
frame:Show()
|
||
|
|
PlaySound(83) -- jewelcrafting complete sound
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local function FrameHide(fname)
|
||
|
|
local frame = fname
|
||
|
|
if type(fname) ~= "table" then
|
||
|
|
frame = _G[fname]
|
||
|
|
end
|
||
|
|
if frame ~= nil and frame:IsVisible() == 1 then
|
||
|
|
frame:Hide()
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
--DoShit Function
|
||
|
|
local function DoShit()
|
||
|
|
--Table Functions
|
||
|
|
local function tCopy(t)
|
||
|
|
local u = {}
|
||
|
|
for k, v in pairs(t) do
|
||
|
|
u[k] = v
|
||
|
|
end
|
||
|
|
return setmetatable(u, getmetatable(t))
|
||
|
|
end
|
||
|
|
|
||
|
|
local function tRemoveKey(table, key)
|
||
|
|
for i = 1, #table do
|
||
|
|
if table[i] == key then
|
||
|
|
tremove(table, i)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local function tCompare(t1, t2)
|
||
|
|
if #t1 ~= #t2 then
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
for i = 1, #t1 do
|
||
|
|
if t1[i] ~= t2[i] then
|
||
|
|
return false
|
||
|
|
end
|
||
|
|
end
|
||
|
|
return true
|
||
|
|
end
|
||
|
|
|
||
|
|
local function pairsSort(t, f)
|
||
|
|
local a = {}
|
||
|
|
for n in pairs(t) do
|
||
|
|
table.insert(a, n)
|
||
|
|
end
|
||
|
|
table.sort(a, f)
|
||
|
|
local i = 0
|
||
|
|
local iter = function()
|
||
|
|
i = i + 1
|
||
|
|
if a[i] == nil then
|
||
|
|
return nil
|
||
|
|
else
|
||
|
|
return a[i], t[a[i]]
|
||
|
|
end
|
||
|
|
end
|
||
|
|
return iter
|
||
|
|
end
|
||
|
|
|
||
|
|
--Frame Creation Functions
|
||
|
|
local function CreateTexture(base, layer, path, blend)
|
||
|
|
local t = base:CreateTexture(nil, layer)
|
||
|
|
if path then
|
||
|
|
t:SetTexture(path)
|
||
|
|
end
|
||
|
|
if blend then
|
||
|
|
t:SetBlendMode(blend)
|
||
|
|
end
|
||
|
|
return t
|
||
|
|
end
|
||
|
|
|
||
|
|
local function FrameBackground(frame, background)
|
||
|
|
local t = CreateTexture(frame, "BACKGROUND")
|
||
|
|
t:SetPoint("TOPLEFT")
|
||
|
|
frame.topleft = t
|
||
|
|
|
||
|
|
t = CreateTexture(frame, "BACKGROUND")
|
||
|
|
t:SetPoint("TOPLEFT", frame.topleft, "TOPRIGHT")
|
||
|
|
frame.topright = t
|
||
|
|
|
||
|
|
t = CreateTexture(frame, "BACKGROUND")
|
||
|
|
t:SetPoint("TOPLEFT", frame.topleft, "BOTTOMLEFT")
|
||
|
|
frame.bottomleft = t
|
||
|
|
|
||
|
|
t = CreateTexture(frame, "BACKGROUND")
|
||
|
|
t:SetPoint("TOPLEFT", frame.topleft, "BOTTOMRIGHT")
|
||
|
|
frame.bottomright = t
|
||
|
|
-- frame.topleft:SetTexture(background .. "-TopLeft")
|
||
|
|
--frame.topright:SetTexture(background .. "-TopRight")
|
||
|
|
-- frame.bottomleft:SetTexture(background .. "-BottomLeft")
|
||
|
|
--frame.bottomright:SetTexture(background .. "-BottomRight")
|
||
|
|
end
|
||
|
|
|
||
|
|
local function FrameLayout(frame, width, height)
|
||
|
|
local texture_height = height / (256 + 75)
|
||
|
|
local texture_width = width / (256 + 44)
|
||
|
|
|
||
|
|
frame:SetSize(width, height)
|
||
|
|
|
||
|
|
local wl, wr, ht, hb = texture_width * 256, texture_width * 64, texture_height * 256, texture_height * 128
|
||
|
|
|
||
|
|
frame.topleft:SetSize(wl, ht)
|
||
|
|
frame.topright:SetSize(wr, ht)
|
||
|
|
frame.bottomleft:SetSize(wl, hb)
|
||
|
|
frame.bottomright:SetSize(wr, hb)
|
||
|
|
end
|
||
|
|
|
||
|
|
local function MakeButton(name, parent) --gamma
|
||
|
|
local button = CreateFrame("Button", name, parent)
|
||
|
|
button:SetNormalFontObject(GameFontNormal)
|
||
|
|
button:SetHighlightFontObject(GameFontHighlight)
|
||
|
|
button:SetDisabledFontObject(GameFontDisable)
|
||
|
|
if name == "CLButton1" or name == "CLButton2" then
|
||
|
|
local texture = button:CreateTexture("BACKGROUND")
|
||
|
|
if name == "CLButton1" then
|
||
|
|
texture:SetTexture("Interface\\Icons\\INV_Misc_Book_09")
|
||
|
|
button.txt = button:CreateFontString(nil, "OVERLAY") -- Spec name-- intend to set
|
||
|
|
button.txt:SetFont("Fonts\\FRIZQT__.TTF", 12, "OUTLINE")
|
||
|
|
button.txt:SetPoint("CENTER", -0, -25)
|
||
|
|
button.txt:SetText("Spells")
|
||
|
|
button.txt:SetTextColor(230/255,230/255,230/255)
|
||
|
|
button.txttex = button:CreateTexture(nil, "ARTWORK")
|
||
|
|
button.txttex:SetTexture("Interface/Buttons/CLCircleSmall")
|
||
|
|
button.txttex:SetPoint("CENTER", button.txt, "CENTER")
|
||
|
|
else
|
||
|
|
texture:SetTexture("Interface\\Icons\\Ability_Marksmanship")
|
||
|
|
button.txt = button:CreateFontString(nil, "OVERLAY") -- Spec name-- intend to set
|
||
|
|
button.txt:SetFont("Fonts\\FRIZQT__.TTF", 12, "OUTLINE")
|
||
|
|
button.txt:SetPoint("CENTER", -0, -25)
|
||
|
|
button.txt:SetText("Talents")
|
||
|
|
button.txt:SetTextColor(230/255,230/255,230/255)
|
||
|
|
button.txttex = button:CreateTexture(nil, "ARTWORK")
|
||
|
|
button.txttex:SetTexture("Interface/Buttons/CLCircleSmall")
|
||
|
|
button.txttex:SetPoint("CENTER", button.txt, "CENTER")
|
||
|
|
end
|
||
|
|
-- texture:SetTexCoord(0, 0.625, 0, 0.6875)
|
||
|
|
local size = button:GetSize()
|
||
|
|
texture:SetAllPoints()
|
||
|
|
texture:SetSize(0.5 * size, 0.5 * size)
|
||
|
|
button.texture = texture
|
||
|
|
|
||
|
|
--CREATES PUSHED FOR TALENTS_SPELLS
|
||
|
|
t = CreateTexture(button, nil, "Interface\\Buttons\\ButtonHilight-Square", "ADD")
|
||
|
|
t:SetSize(30,32) -- Had to force a stupid size for some reason
|
||
|
|
t:SetPoint("CENTER")
|
||
|
|
button.pushed = t
|
||
|
|
button:SetPushedTexture(button.pushed)
|
||
|
|
|
||
|
|
-- CREATES HIGHLIGHT FOR TALENT-SPELLS
|
||
|
|
t = CreateTexture(button, nil, "Interface\\Buttons\\ButtonHilight-Square", "ADD")
|
||
|
|
t:SetSize(30,32)
|
||
|
|
t:SetPoint("CENTER")
|
||
|
|
button.highlight = t
|
||
|
|
button:SetHighlightTexture(button.highlight)
|
||
|
|
|
||
|
|
texture = button:CreateTexture()
|
||
|
|
texture:SetAllPoints(button)
|
||
|
|
else
|
||
|
|
local texture = button:CreateTexture()
|
||
|
|
texture:SetTexture "Interface\\Buttons\\UI-Panel-Button-Up"
|
||
|
|
texture:SetTexCoord(0, 0.625, 0, 0.6875)
|
||
|
|
texture:SetAllPoints(button)
|
||
|
|
button.normal = texture
|
||
|
|
button:SetNormalTexture(texture)
|
||
|
|
texture = button:CreateTexture()
|
||
|
|
texture:SetTexture "Interface\\Buttons\\UI-Panel-Button-Down"
|
||
|
|
texture:SetTexCoord(0, 0.625, 0, 0.6875)
|
||
|
|
texture:SetAllPoints(button)
|
||
|
|
button.pushed = texture
|
||
|
|
button:SetPushedTexture(texture)
|
||
|
|
texture = button:CreateTexture()
|
||
|
|
texture:SetTexture "Interface\\Buttons\\UI-Panel-Button-Highlight"
|
||
|
|
texture:SetTexCoord(0, 0.625, 0, 0.6875)
|
||
|
|
texture:SetAllPoints(button)
|
||
|
|
button:SetHighlightTexture(texture)
|
||
|
|
end
|
||
|
|
return button
|
||
|
|
end
|
||
|
|
|
||
|
|
local function MakeRankFrame(button, anchor)
|
||
|
|
--local t = CreateTexture(button, "OVERLAY", "Interface\\Textures\\border")
|
||
|
|
t:SetSize(32, 32)
|
||
|
|
t:SetPoint("CENTER", button, anchor)
|
||
|
|
local fs = button:CreateFontString(nil, "OVERLAY", "GameFontNormalSmall")
|
||
|
|
--fs.texture = t
|
||
|
|
fs:SetPoint("TOP", button, "BOTTOM", 0, -2)
|
||
|
|
return fs
|
||
|
|
end
|
||
|
|
|
||
|
|
local function NewButton(name, parent, size, icon, rank, a, b, c, d, empty)
|
||
|
|
local button = CreateFrame("Button", name, parent)
|
||
|
|
-- ItemButtonTemplate (minus Count and Slot)
|
||
|
|
button:SetSize(size, size)
|
||
|
|
local t = CreateTexture(button, "BORDER")
|
||
|
|
t:SetSize(size * 0.8, size * 0.8)
|
||
|
|
t:SetPoint("CENTER")
|
||
|
|
button.texture = t
|
||
|
|
if(empty == nil) then
|
||
|
|
t = CreateTexture(button, nil, "Interface\\Buttons\\CLCircle")
|
||
|
|
t:SetSize(size * 1.2, size * 1.2)
|
||
|
|
t:SetPoint("CENTER")
|
||
|
|
button.normal = t
|
||
|
|
button:SetNormalTexture(t)
|
||
|
|
t = CreateTexture(button, nil, "Interface\\Buttons\\ButtonHilight-Square", "ADD")
|
||
|
|
t:SetSize(size * 1.2, size * 1.2)
|
||
|
|
t:SetPoint("CENTER")
|
||
|
|
button.pushed = t
|
||
|
|
button:SetPushedTexture(button.pushed)
|
||
|
|
t = CreateTexture(button, nil, "Interface\\Buttons\\ButtonHilight-Square", "ADD")
|
||
|
|
t:SetSize(size, size)
|
||
|
|
t:SetPoint("CENTER")
|
||
|
|
button:SetHighlightTexture(t)
|
||
|
|
--button:SetPushedTexture(t)
|
||
|
|
|
||
|
|
-- TalentButtonTemplate
|
||
|
|
--[[local texture = CreateTexture(button, "BACKGROUND", "Interface\\Buttons\\UI-EmptySlot-White")
|
||
|
|
texture:SetSize(size * 1.7, size * 1.7)
|
||
|
|
texture:SetPoint("CENTER")
|
||
|
|
button.slot = texture]]
|
||
|
|
end
|
||
|
|
if rank ~= nil then
|
||
|
|
button.rank = MakeRankFrame(button, "BOTTOMRIGHT")
|
||
|
|
end
|
||
|
|
|
||
|
|
if icon ~= nil then
|
||
|
|
button.texture:SetTexture(icon)
|
||
|
|
if a ~= nil then
|
||
|
|
button.texture:SetTexCoord(a, b, c, d)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
return button
|
||
|
|
end
|
||
|
|
|
||
|
|
--Utility Functions
|
||
|
|
function GetPoints(type)
|
||
|
|
if type == "ap" then
|
||
|
|
local ap = math.floor(UnitLevel("player") * 0.50) - #db.spells
|
||
|
|
local tap = #spellsplus
|
||
|
|
return ap - tap, tap
|
||
|
|
end
|
||
|
|
|
||
|
|
if type == "tp" then
|
||
|
|
local tp = UnitLevel("player") - 9
|
||
|
|
if tp < 0 then
|
||
|
|
tp = 0
|
||
|
|
end
|
||
|
|
tp = tp - (#db.talents + #db.tpells)
|
||
|
|
local ttp = #talentsplus + #tpellsplus
|
||
|
|
return tp - ttp, ttp
|
||
|
|
end
|
||
|
|
return 0, 0
|
||
|
|
end
|
||
|
|
--main Frame Functions
|
||
|
|
local function SelectTab(tab, cname, pname, bname)
|
||
|
|
if tab ~= 0 then
|
||
|
|
local parent = _G[pname]
|
||
|
|
local ltab = parent:GetAttribute("tab")
|
||
|
|
|
||
|
|
local button, lbutton = _G[bname .. tab], _G[bname .. ltab]
|
||
|
|
local child, lchild = _G[cname .. tab], _G[cname .. ltab]
|
||
|
|
if lchild ~= nil then
|
||
|
|
FrameHide(lchild)
|
||
|
|
end
|
||
|
|
if lbutton ~= nil then
|
||
|
|
lbutton:SetButtonState("NORMAL")
|
||
|
|
end
|
||
|
|
if button ~= nil then
|
||
|
|
button:SetButtonState("PUSHED", true)
|
||
|
|
end
|
||
|
|
if child ~= nil then
|
||
|
|
FrameShow(child)
|
||
|
|
end
|
||
|
|
parent:SetAttribute("tab", tab)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local function LearnConfirm(action, state)
|
||
|
|
local tab = _G["CLMainFrame"]:GetAttribute("tab")
|
||
|
|
if tab ~= nil and tab > 0 then
|
||
|
|
if action == "Apply" and state ~= "true" then
|
||
|
|
StaticPopup_Show("LEARN_CONFIRM")
|
||
|
|
end
|
||
|
|
if action == "Reset" and state ~= "true" then
|
||
|
|
StaticPopup_Show("RESET_CONFIRM")
|
||
|
|
end
|
||
|
|
|
||
|
|
if action == "Apply" and state == "true" then
|
||
|
|
if tab == 1 then
|
||
|
|
for i = 1, #spellsplus do
|
||
|
|
if not tContains(db.spells, spellsplus[i]) then
|
||
|
|
tinsert(db.spells, spellsplus[i])
|
||
|
|
end
|
||
|
|
end
|
||
|
|
for i = 1, #tpellsplus do
|
||
|
|
if not tContains(db.tpells, tpellsplus[i]) then
|
||
|
|
tinsert(db.tpells, tpellsplus[i])
|
||
|
|
end
|
||
|
|
end
|
||
|
|
for i=1, #spellsminus do
|
||
|
|
if tContains(db.spells, spellsminus[i]) then
|
||
|
|
tRemoveKey(db.spells, spellsminus[i])
|
||
|
|
end
|
||
|
|
end
|
||
|
|
for i=1, #tpellsminus do
|
||
|
|
if tContains(db.tpells, tpellsminus[i]) then
|
||
|
|
tRemoveKey(db.tpells, tpellsminus[i])
|
||
|
|
end
|
||
|
|
end
|
||
|
|
wipe(spellsplus)
|
||
|
|
wipe(spellsminus)
|
||
|
|
wipe(tpellsplus)
|
||
|
|
wipe(tpellsminus)
|
||
|
|
sort(db.spells)
|
||
|
|
sort(db.tpells)
|
||
|
|
AIO.Handle(handlerName, "LearnSpell", db.spells, db.tpells, clientSecret)
|
||
|
|
end
|
||
|
|
|
||
|
|
if tab == 2 then
|
||
|
|
for i = 1, #talentsplus do
|
||
|
|
if not tContains(db.talents, talentsplus[i]) then
|
||
|
|
tinsert(db.talents, talentsplus[i])
|
||
|
|
end
|
||
|
|
end
|
||
|
|
for i=1, #talentsminus do
|
||
|
|
if tContains(db.talents, talentsminus[i]) then
|
||
|
|
tRemoveKey(db.talents, talentsminus[i])
|
||
|
|
end
|
||
|
|
end
|
||
|
|
wipe(talentsplus)
|
||
|
|
wipe(talentsminus)
|
||
|
|
sort(db.talents)
|
||
|
|
AIO.Handle(handlerName, "LearnTalent", db.talents, clientSecret)
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
end
|
||
|
|
|
||
|
|
if action == "Reset" and state == "true" then
|
||
|
|
if tab == 1 then
|
||
|
|
wipe(spellsplus)
|
||
|
|
wipe(spellsminus)
|
||
|
|
wipe(tpellsplus)
|
||
|
|
wipe(tpellsminus)
|
||
|
|
end
|
||
|
|
|
||
|
|
if tab == 2 then
|
||
|
|
wipe(talentsplus)
|
||
|
|
wipe(talentsminus)
|
||
|
|
end
|
||
|
|
|
||
|
|
end
|
||
|
|
UpdatePointText()
|
||
|
|
SelectTab(tab, "CLContainer", "CLMainFrame", "CLButton")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
------Fill Spells Functions
|
||
|
|
local function TempLearnSpell(spell, talent)
|
||
|
|
if tContains(spellsminus, spell) then
|
||
|
|
tRemoveKey(spellsminus, spell)
|
||
|
|
end
|
||
|
|
if not tContains(spellsplus, spell) then
|
||
|
|
tinsert(spellsplus, spell)
|
||
|
|
end
|
||
|
|
if talent == 1 then
|
||
|
|
if tContains(tpellsminus, spell) then
|
||
|
|
tRemoveKey(tpellsminus, spell)
|
||
|
|
end
|
||
|
|
if not tContains(tpellsplus, spell) then
|
||
|
|
tinsert(tpellsplus, spell)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local function TempUnlearnSpell(spell, talent)
|
||
|
|
if tContains(spellsplus, spell) then
|
||
|
|
tRemoveKey(spellsplus, spell)
|
||
|
|
end
|
||
|
|
if not tContains(spellsminus, spell) then
|
||
|
|
tinsert(spellsminus, spell)
|
||
|
|
end
|
||
|
|
if talent == 1 then
|
||
|
|
if tContains(tpellsplus, spell) then
|
||
|
|
tRemoveKey(tpellsplus, spell)
|
||
|
|
end
|
||
|
|
if not tContains(tpellsminus, spell) then
|
||
|
|
tinsert(tpellsminus, spell)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local function TempLearnTalent(spell, talent)
|
||
|
|
if tContains(talentsminus, spell) then
|
||
|
|
tRemoveKey(talentsminus, spell)
|
||
|
|
end
|
||
|
|
if not tContains(talentsplus, spell) then
|
||
|
|
tinsert(talentsplus, spell)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local function TempUnlearnTalent(spell, talent)
|
||
|
|
if tContains(talentsplus, spell) then
|
||
|
|
tRemoveKey(talentsplus, spell)
|
||
|
|
end
|
||
|
|
if not tContains(talentsminus, spell) then
|
||
|
|
tinsert(talentsminus, spell)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local function ParseTooltip(spell)
|
||
|
|
local f = CreateFrame("GameTooltip", "CLTmpTooltip", UIParent, "GameTooltipTemplate")
|
||
|
|
f:SetOwner(UIParent, "ANCHOR_NONE")
|
||
|
|
local link = GetSpellLink(spell)
|
||
|
|
if link == nil then
|
||
|
|
link = GetSpellLink(78)
|
||
|
|
link = gsub(link, "78", spell)
|
||
|
|
end
|
||
|
|
f:SetHyperlink(link)
|
||
|
|
|
||
|
|
local t = {}
|
||
|
|
|
||
|
|
for i = 1, select("#", f:GetRegions()) do
|
||
|
|
local ttl = _G["CLTmpTooltipTextLeft" .. i]
|
||
|
|
local ttr = _G["CLTmpTooltipTextRight" .. i]
|
||
|
|
if (ttl ~= nil and ttl:GetText() ~= nil) and (ttr ~= nil and ttr:GetText() ~= nil) then
|
||
|
|
tinsert(t, {ttl:GetText(), ttr:GetText()})
|
||
|
|
elseif (ttl ~= nil and ttl:GetText() ~= nil) then
|
||
|
|
tinsert(t, ttl:GetText())
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
f:ClearLines()
|
||
|
|
f:Hide()
|
||
|
|
return t
|
||
|
|
end
|
||
|
|
|
||
|
|
local function ButtonTooltip(button, spell, nspell, rank, ranks, level, lcolor, ccolor, state, cost, lock, req, rreq)
|
||
|
|
local bname = button:GetName()
|
||
|
|
local pt = ParseTooltip(spell)
|
||
|
|
local c = RED_FONT_COLOR
|
||
|
|
button.tooltip =
|
||
|
|
_G[bname .. "tooltip"] or CreateFrame("GameTooltip", bname .. "tooltip", button, "GameTooltipTemplate")
|
||
|
|
|
||
|
|
button:SetScript(
|
||
|
|
"OnEnter",
|
||
|
|
function()
|
||
|
|
button.tooltip:Hide()
|
||
|
|
button.tooltip:SetOwner(button, "ANCHOR_RIGHT")
|
||
|
|
local link = GetSpellLink(nspell)
|
||
|
|
if link == nil then
|
||
|
|
link = GetSpellLink(78)
|
||
|
|
link = gsub(link, "78", nspell)
|
||
|
|
end
|
||
|
|
button.tooltip:SetHyperlink(link)
|
||
|
|
button.tooltip:AddDoubleLine("Current rank", rank .. "/" .. ranks, 1, 1, 1, 1, 1, 1)
|
||
|
|
if pt[#pt] ~= nil and rank > 0 and ranks > 1 and rank ~= ranks then
|
||
|
|
button.tooltip:AddLine(pt[#pt], nil, nil, nil, true)
|
||
|
|
end
|
||
|
|
|
||
|
|
if rreq ~= nil then
|
||
|
|
button.tooltip:AddLine(rreq, c.r, c.g, c.b)
|
||
|
|
end
|
||
|
|
if rank < ranks then
|
||
|
|
if req ~= nil then
|
||
|
|
button.tooltip:AddLine(req, c.r, c.g, c.b)
|
||
|
|
end
|
||
|
|
if lock ~= nil then
|
||
|
|
button.tooltip:AddLine(lock, c.r, c.g, c.b)
|
||
|
|
end
|
||
|
|
if level ~= nil then
|
||
|
|
button.tooltip:AddLine("Requires level " .. level, lcolor.r, lcolor.g, lcolor.b)
|
||
|
|
end
|
||
|
|
button.tooltip:AddLine(cost, ccolor.r, ccolor.g, ccolor.b)
|
||
|
|
end
|
||
|
|
button.tooltip:AddLine("SPELLID: " .. spell)
|
||
|
|
button.tooltip:Show()
|
||
|
|
end
|
||
|
|
)
|
||
|
|
|
||
|
|
button:SetScript(
|
||
|
|
"OnLeave",
|
||
|
|
function()
|
||
|
|
button.tooltip:Hide()
|
||
|
|
end
|
||
|
|
)
|
||
|
|
end
|
||
|
|
|
||
|
|
local function FillSpells(class, spec, parent, mode)
|
||
|
|
local spells, eqt, spellcheck
|
||
|
|
|
||
|
|
local spellcheck1 = tCopy(db.spells)
|
||
|
|
for i = 1, #spellsplus do
|
||
|
|
if not tContains(spellcheck1, spellsplus[i]) then
|
||
|
|
tinsert(spellcheck1, spellsplus[i])
|
||
|
|
else
|
||
|
|
tremove(spellsplus, i)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
for i = 1, #spellsminus do
|
||
|
|
if tContains(spellcheck1, spellsminus[i]) then
|
||
|
|
tRemoveKey(spellcheck1, spellsminus[i])
|
||
|
|
else
|
||
|
|
tremove(spellsminus, i)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local spellcheck2 = tCopy(db.talents)
|
||
|
|
for i = 1, #talentsplus do
|
||
|
|
if not tContains(spellcheck2, talentsplus[i]) then
|
||
|
|
tinsert(spellcheck2, talentsplus[i])
|
||
|
|
else
|
||
|
|
tremove(talentsplus, i)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
for i = 1, #talentsminus do
|
||
|
|
if tContains(spellcheck2, talentsminus[i]) then
|
||
|
|
tRemoveKey(spellcheck2, talentsminus[i])
|
||
|
|
else
|
||
|
|
tremove(talentsminus, i)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local allspells = tCopy(spellcheck1)
|
||
|
|
for i = 1, #spellcheck2 do
|
||
|
|
if not tContains(allspells, spellcheck2[i]) then
|
||
|
|
tinsert(allspells, spellcheck2[i])
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
if mode == "spell" then
|
||
|
|
spells = db.data.spells[class][spec][4]
|
||
|
|
eqt = "false"
|
||
|
|
if tCompare(db.spells, spellcheck1) then
|
||
|
|
eqt = "true"
|
||
|
|
end
|
||
|
|
spellcheck = spellcheck1
|
||
|
|
else
|
||
|
|
spells = db.data.talents[class][spec][4]
|
||
|
|
eqt = "false"
|
||
|
|
if tCompare(db.talents, spellcheck2) then
|
||
|
|
eqt = "true"
|
||
|
|
end
|
||
|
|
spellcheck = spellcheck2
|
||
|
|
end
|
||
|
|
|
||
|
|
local left, top = leftConst, -12
|
||
|
|
|
||
|
|
for i = 1, #spells do
|
||
|
|
local spellid, levelid = spells[i][1], spells[i][2]
|
||
|
|
|
||
|
|
local prank, rank, nrank, ranks, spell, nspell, nlevel
|
||
|
|
rank, ranks = 0, #spellid
|
||
|
|
|
||
|
|
for j = 1, ranks do
|
||
|
|
if tContains(spellcheck, spellid[j]) then
|
||
|
|
rank = j
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
if rank > 0 then
|
||
|
|
spell = spellid[rank]
|
||
|
|
else
|
||
|
|
rank = 0
|
||
|
|
spell = spellid[1]
|
||
|
|
end
|
||
|
|
if rank + 1 <= ranks then
|
||
|
|
nspell, nlevel, nrank = spellid[rank + 1], levelid[rank + 1], rank + 1
|
||
|
|
else
|
||
|
|
nspell, nlevel, nrank = spellid[rank], levelid[rank], rank
|
||
|
|
end
|
||
|
|
prank = rank - 1
|
||
|
|
|
||
|
|
local icon = ({GetSpellInfo(nspell)})[3]
|
||
|
|
if nspell == 75 then icon = "Interface/Icons/Ability_Whirlwind" end
|
||
|
|
local button =
|
||
|
|
_G["CLSpellsClass" .. class .. "Spec" .. spec .. mode .. i] or
|
||
|
|
NewButton("CLSpellsClass" .. class .. "Spec" .. spec .. mode .. i, parent, iconSize, icon, "true")
|
||
|
|
button:SetButtonState("NORMAL", "true")
|
||
|
|
button:SetPoint("TOPLEFT", left, top)
|
||
|
|
if button:GetAttribute("hrank") == nil or eqt == "true" then
|
||
|
|
button:SetAttribute("hrank", rank)
|
||
|
|
end
|
||
|
|
if mode == "spell" then
|
||
|
|
if spell_point_list[class] == nil then
|
||
|
|
spell_point_list[class] = {}
|
||
|
|
end
|
||
|
|
if spell_point_list[class][spec] == nil then
|
||
|
|
spell_point_list[class][spec] = {}
|
||
|
|
end
|
||
|
|
spell_point_list[class][spec][icon] = rank
|
||
|
|
else
|
||
|
|
if talent_point_list[class] == nil then
|
||
|
|
talent_point_list[class] = {}
|
||
|
|
end
|
||
|
|
if talent_point_list[class][spec] == nil then
|
||
|
|
talent_point_list[class][spec] = {}
|
||
|
|
end
|
||
|
|
talent_point_list[class][spec][icon] = rank
|
||
|
|
end
|
||
|
|
local hrank = button:GetAttribute("hrank")
|
||
|
|
|
||
|
|
local state, saturated, color, acost, tcost, lock, req, rreq =
|
||
|
|
"normal",
|
||
|
|
0,
|
||
|
|
GREEN_FONT_COLOR,
|
||
|
|
1,
|
||
|
|
0,
|
||
|
|
nil,
|
||
|
|
nil,
|
||
|
|
nil
|
||
|
|
local ap, tp = GetPoints("ap"), GetPoints("tp")
|
||
|
|
local lcolor, ccolor = color, color
|
||
|
|
local nacost, ntcost = acost, tcost
|
||
|
|
local ncost
|
||
|
|
|
||
|
|
if rank == 1 and spells[i][4] == 1 then
|
||
|
|
tcost = 1
|
||
|
|
end
|
||
|
|
if nrank == 1 and spells[i][4] == 1 then
|
||
|
|
ntcost = 1
|
||
|
|
end
|
||
|
|
|
||
|
|
if rank == ranks then
|
||
|
|
state = "full"
|
||
|
|
end
|
||
|
|
|
||
|
|
if state ~= "full" then
|
||
|
|
if UnitLevel("player") < nlevel then
|
||
|
|
state = "disabled"
|
||
|
|
lcolor = RED_FONT_COLOR
|
||
|
|
end
|
||
|
|
|
||
|
|
if mode == "spell" then
|
||
|
|
if ap < nacost or tp < ntcost then
|
||
|
|
state = "disabled"
|
||
|
|
ccolor = RED_FONT_COLOR
|
||
|
|
end
|
||
|
|
else
|
||
|
|
if tp < nacost or ap < ntcost then
|
||
|
|
state = "disabled"
|
||
|
|
ccolor = RED_FONT_COLOR
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
if db.locks[spell] ~= nil then
|
||
|
|
for h = 1, #db.locks[spell] do
|
||
|
|
if tContains(allspells, db.locks[spell][h]) then
|
||
|
|
state = "disabled"
|
||
|
|
lock = 'Locked by "' .. ({GetSpellInfo(db.locks[spell][h])})[1] .. '" ' .. mode
|
||
|
|
break
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
if db.req[nspell] ~= nil then
|
||
|
|
local reqs, reqr = ({GetSpellInfo(db.req[nspell])})[1], ({GetSpellInfo(db.req[nspell])})[2]
|
||
|
|
if not tContains(allspells, db.req[nspell]) then
|
||
|
|
state = "disabled"
|
||
|
|
req = "req " .. mode .. ' "' .. reqs
|
||
|
|
if reqr ~= "" then
|
||
|
|
req = req .. "(" .. reqr .. ')"'
|
||
|
|
else
|
||
|
|
req = req .. '"'
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
if db.rreq[spell] ~= nil then
|
||
|
|
local rreqs, rreqr = ({GetSpellInfo(db.rreq[spell])})[1], ({GetSpellInfo(db.rreq[spell])})[2]
|
||
|
|
if tContains(allspells, db.rreq[spell]) and rank ~= hrank then
|
||
|
|
state = "req"
|
||
|
|
rreq = "Required for " .. mode .. ' "' .. rreqs
|
||
|
|
if rreqr ~= "" then
|
||
|
|
rreq = rreq .. "(" .. rreqr .. ')"'
|
||
|
|
else
|
||
|
|
rreq = rreq .. '"'
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
if state == "disabled" and rank > 0 then
|
||
|
|
state = "temp"
|
||
|
|
end
|
||
|
|
|
||
|
|
if state == "disabled" then
|
||
|
|
saturated = 1
|
||
|
|
color = GRAY_FONT_COLOR
|
||
|
|
elseif state == "full" then
|
||
|
|
color = NORMAL_FONT_COLOR
|
||
|
|
elseif state == "temp" then
|
||
|
|
color = RAID_CLASS_COLORS["SHAMAN"]
|
||
|
|
elseif state == "req" then
|
||
|
|
color = ORANGE_FONT_COLOR
|
||
|
|
end
|
||
|
|
button.texture:SetDesaturated(saturated)
|
||
|
|
--button.slot:SetVertexColor(color.r, color.g, color.b)
|
||
|
|
button.rank:SetVertexColor(color.r, color.g, color.b)
|
||
|
|
button.rank:SetText(rank)
|
||
|
|
|
||
|
|
if mode == "spell" then
|
||
|
|
ncost = "Requires 1 AP"
|
||
|
|
if ntcost == 1 then
|
||
|
|
ncost = ncost .. ", 1 TP"
|
||
|
|
end
|
||
|
|
else
|
||
|
|
ncost = "Requires 1 TP"
|
||
|
|
if ntcost == 1 then
|
||
|
|
ncost = ncost .. ", 1 AP"
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local clickable = true
|
||
|
|
|
||
|
|
if state == "normal" and rank > hrank then
|
||
|
|
if nrank <= ranks then
|
||
|
|
button:RegisterForClicks("LeftButtonDown", "RightButtonDown")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
if state == "normal" and rank == hrank then
|
||
|
|
if nrank <= ranks then
|
||
|
|
button:RegisterForClicks("LeftButtonDown","RightButtonDown")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
if state == "normal" and rank == 0 then
|
||
|
|
button:RegisterForClicks("LeftButtonDown")
|
||
|
|
end
|
||
|
|
if (state == "full" or state == "temp") and rank > hrank then
|
||
|
|
button:RegisterForClicks("RightButtonDown")
|
||
|
|
end
|
||
|
|
if (state == "full" or state == "temp") and rank == hrank then
|
||
|
|
button:RegisterForClicks("RightButtonDown")
|
||
|
|
--clickable = false
|
||
|
|
end
|
||
|
|
if state == "req" and rank > hrank and nrank <= ranks and rreq ~= nil then
|
||
|
|
if UnitLevel("player") < nlevel then
|
||
|
|
button:RegisterForClicks()
|
||
|
|
clickable = false
|
||
|
|
else
|
||
|
|
button:RegisterForClicks("LeftButtonDown")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
if state == "disabled" then
|
||
|
|
button:RegisterForClicks()
|
||
|
|
clickable = false
|
||
|
|
end
|
||
|
|
|
||
|
|
button:SetScript(
|
||
|
|
"OnClick",
|
||
|
|
function(self, key, down)
|
||
|
|
if not (button:IsEnabled() and clickable ~= false) then return end
|
||
|
|
local ap, tap = GetPoints("ap")
|
||
|
|
local tp, ttp = GetPoints("tp")
|
||
|
|
if key == "LeftButton" then
|
||
|
|
if (mode == "spell") then
|
||
|
|
if(ap > 0 and UnitLevel("player") >= nlevel) then
|
||
|
|
if(ntcost == 1) then
|
||
|
|
if(tp > 0) then
|
||
|
|
TempLearnSpell(nspell, ntcost)
|
||
|
|
end
|
||
|
|
else
|
||
|
|
TempLearnSpell(nspell, ntcost)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
else if mode == "talent" and tp >0 and UnitLevel("player") >= nlevel then
|
||
|
|
TempLearnTalent(nspell, ntcost)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
if key == "RightButton" then
|
||
|
|
if mode == "spell" then
|
||
|
|
TempUnlearnSpell(spell, tcost)
|
||
|
|
else
|
||
|
|
TempUnlearnTalent(spell, tcost)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
FillSpells(class, spec, parent, mode)
|
||
|
|
button:Hide()
|
||
|
|
button:Show()
|
||
|
|
end)
|
||
|
|
|
||
|
|
ButtonTooltip(button, spell, nspell, rank, ranks, nlevel, lcolor, ccolor, state, ncost, lock, req, rreq)
|
||
|
|
|
||
|
|
if i / itemsPerRow == math.floor(i / itemsPerRow) then
|
||
|
|
left = leftConst
|
||
|
|
top = top - 60
|
||
|
|
else
|
||
|
|
left = left + 60
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
--Create Main Button
|
||
|
|
local button =
|
||
|
|
_G["CLButton"] or NewButton("CLButton", UIParent, 48, "Interface\\Tooltips\\Book_Icon", nil, nil, nil, nil, nil, true) --Interface\\ICONS\\INV_Enchant_FormulaEpic_01
|
||
|
|
button:SetMovable(true)
|
||
|
|
button:EnableMouse(true)
|
||
|
|
button:SetToplevel(true)
|
||
|
|
button:RegisterForDrag("RightButton")
|
||
|
|
button:SetScript("OnDragStart", button.StartMoving)
|
||
|
|
button:SetScript("OnDragStop", button.StopMovingOrSizing)
|
||
|
|
button:SetPoint("RIGHT", -24, 0)
|
||
|
|
button:SetScript(
|
||
|
|
"OnClick",
|
||
|
|
function()
|
||
|
|
FrameToggle("CLMainFrame")
|
||
|
|
end
|
||
|
|
)
|
||
|
|
|
||
|
|
AIO.SavePosition(button)
|
||
|
|
|
||
|
|
--button.flash = CreateFrame("Frame", "CLButtonFlash", button)
|
||
|
|
--button.flash:SetAllPoints()
|
||
|
|
--button.flash:Hide()
|
||
|
|
--local texture = button.flash:CreateTexture()
|
||
|
|
-- texture:SetTexture("Interface\\Cooldown\\star4")
|
||
|
|
-- texture:SetAllPoints()
|
||
|
|
-- texture:SetBlendMode("ADD")
|
||
|
|
-- button.animation = texture:CreateAnimationGroup()
|
||
|
|
-- local a1 = button.animation:CreateAnimation("Scale")
|
||
|
|
-- a1:SetScale(2.5, 2.5)
|
||
|
|
-- a1:SetDuration(3)
|
||
|
|
-- a1:SetSmoothing("OUT")
|
||
|
|
|
||
|
|
-- local a2 = button.animation:CreateAnimation("Rotation")
|
||
|
|
-- a2:SetDegrees(360)
|
||
|
|
-- a2:SetDuration(3)
|
||
|
|
-- a2:SetSmoothing("OUT")
|
||
|
|
-- button.animation:SetLooping("BOUNCE")
|
||
|
|
-- button.flash:SetScript(
|
||
|
|
-- "OnShow",
|
||
|
|
-- function()
|
||
|
|
-- button.animation:Play()
|
||
|
|
-- end
|
||
|
|
-- )
|
||
|
|
-- button.flash:SetScript(
|
||
|
|
-- "OnHide",
|
||
|
|
-- function()
|
||
|
|
-- button.animation:Stop()
|
||
|
|
-- end
|
||
|
|
-- )
|
||
|
|
|
||
|
|
button.tooltip =
|
||
|
|
_G["CLButtontooltip"] or CreateFrame("GameTooltip", "CLButtontooltip", button, "GameTooltipTemplate")
|
||
|
|
button:SetScript(
|
||
|
|
"OnEnter",
|
||
|
|
function()
|
||
|
|
local ap, tp= GetPoints("ap"), GetPoints("tp")
|
||
|
|
button.tooltip:Hide()
|
||
|
|
button.tooltip:SetOwner(button, "ANCHOR_RIGHT")
|
||
|
|
button.tooltip:AddLine("Distribute your Ability or Talents Points", nil, nil, nil, true)
|
||
|
|
local c = GREEN_FONT_COLOR
|
||
|
|
if ap > 0 or tp > 0 then
|
||
|
|
local string =
|
||
|
|
"You have\n" ..
|
||
|
|
ap .. " Ability Points\n" .. tp .. " Talent Points"
|
||
|
|
button.tooltip:AddLine(string, c.r, c.g, c.b, true)
|
||
|
|
end
|
||
|
|
button.tooltip:AddLine("Hold right mouse to drag this icon.", 1, 1, 1, true)
|
||
|
|
button.tooltip:Show()
|
||
|
|
end
|
||
|
|
)
|
||
|
|
button:SetScript(
|
||
|
|
"OnLeave",
|
||
|
|
function()
|
||
|
|
button.tooltip:Hide()
|
||
|
|
end
|
||
|
|
)
|
||
|
|
|
||
|
|
button:SetScript(
|
||
|
|
"OnUpdate",
|
||
|
|
function()
|
||
|
|
local ap, tp = GetPoints("ap"), GetPoints("tp")
|
||
|
|
if ap > 0 or tp > 0 then
|
||
|
|
FrameShow(button.flash)
|
||
|
|
else
|
||
|
|
FrameHide(button.flash)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
)
|
||
|
|
|
||
|
|
button:RegisterEvent("PLAYER_LEVEL_UP")
|
||
|
|
button:SetScript(
|
||
|
|
"OnEvent",
|
||
|
|
function()
|
||
|
|
local tab = _G["CLMainFrame"]:GetAttribute("tab")
|
||
|
|
if tab ~= 0 then
|
||
|
|
SelectTab(tab, "CLContainer", "CLMainFrame", "CLButton")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
)
|
||
|
|
|
||
|
|
--Create Main Frame
|
||
|
|
local frame = CLMainFrame or CreateFrame("Frame", "CLMainFrame", UIParent)
|
||
|
|
frame:Hide()
|
||
|
|
frame:SetMovable(true)
|
||
|
|
frame:EnableMouse(true)
|
||
|
|
frame:SetToplevel(true)
|
||
|
|
frame:SetClampedToScreen(true)
|
||
|
|
frame.titleRegion = frame:CreateTitleRegion()
|
||
|
|
frame.titleRegion:SetSize(967, 24) -- 600 wide x 24 tall
|
||
|
|
frame.titleRegion:SetPoint("TOPLEFT") -- anchor the titleRegion to top left of frame
|
||
|
|
-- this is the drag bar texture
|
||
|
|
frame.titleTexture = frame:CreateTexture("frame_titleTexture", "ARTWORK")
|
||
|
|
frame.titleTexture:SetSize(967, 24) -- texture is the same size as the title drag bar
|
||
|
|
frame.titleTexture:SetPoint("TOPLEFT")
|
||
|
|
|
||
|
|
|
||
|
|
frame:RegisterForDrag("LeftButton")
|
||
|
|
frame:SetToplevel(true)
|
||
|
|
frame:SetSize(967, 672) -- 420x680
|
||
|
|
--[[frame:SetBackdrop(
|
||
|
|
{
|
||
|
|
bgFile = "Interface\\TutorialFrame\\TutorialFrameBackground",
|
||
|
|
edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
|
||
|
|
tile = true,
|
||
|
|
edgeSize = 16,
|
||
|
|
tileSize = 32,
|
||
|
|
insets = {left = 5, right = 5, top = 5, bottom = 5}
|
||
|
|
}
|
||
|
|
)]]
|
||
|
|
|
||
|
|
--FrameBackground(frame, "Interface\\QuestFrame\\UI-QuestLog-Empty")
|
||
|
|
frame:SetPoint("CENTER", 0, 0)
|
||
|
|
frame:SetScript("OnDragStart", frame.StartMoving)
|
||
|
|
frame:SetScript("OnDragStop", frame.StopMovingOrSizing)
|
||
|
|
frame:SetAttribute("tab", 0)
|
||
|
|
frame:SetAttribute("child", "CLContainer")
|
||
|
|
|
||
|
|
AIO.SavePosition(frame)
|
||
|
|
|
||
|
|
local function TabSelect(frame)
|
||
|
|
if (frame == nil) then frame = _G["CLMainFrame"] end
|
||
|
|
local tab = frame:GetAttribute("tab")
|
||
|
|
if tab == 0 then
|
||
|
|
tab = 1
|
||
|
|
end
|
||
|
|
SelectTab(tab, "CLContainer", "CLMainFrame", "CLButton")
|
||
|
|
end
|
||
|
|
|
||
|
|
frame:SetScript(
|
||
|
|
"OnShow",
|
||
|
|
function()
|
||
|
|
TabSelect()
|
||
|
|
UpdatePointText()
|
||
|
|
end
|
||
|
|
)
|
||
|
|
|
||
|
|
frame:SetScript(
|
||
|
|
"OnHide",
|
||
|
|
function()
|
||
|
|
local tab = frame:GetAttribute("tab")
|
||
|
|
if tab ~= 0 then
|
||
|
|
FrameHide("Container" .. tab)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
)
|
||
|
|
|
||
|
|
-- SETS 0 AP 0 TP text in menu. Will need to re-adjust once I figure out currencies
|
||
|
|
frame:SetScript(
|
||
|
|
"OnUpdate",
|
||
|
|
function()
|
||
|
|
local ap, tap = GetPoints("ap")
|
||
|
|
local tp, ttp = GetPoints("tp")
|
||
|
|
-- local string =icons[1].." "..icons[2].."\n"
|
||
|
|
local string2 = "|cff2dc200" .. ap -- Kinda scuffed, setting colours using built in wow stuff
|
||
|
|
if tap > 0 then -- Could put effort in and break up this junk into 2 different parts but eh
|
||
|
|
string2 = string2 .. "(" .. tap .. ")"
|
||
|
|
end
|
||
|
|
-- string = string .. " AP "..icons[1].." " .. tp
|
||
|
|
string2 = string2.." SP|r |cff00B4FF" .. tp
|
||
|
|
if ttp > 0 then
|
||
|
|
string2 = string2 .. "(" .. ttp .. ")"
|
||
|
|
end
|
||
|
|
string2 =string2 .. " TP|r"--..icons[2]
|
||
|
|
|
||
|
|
if _G["CLMainFramePoints"] ~= nil then
|
||
|
|
-- CLMainFramePoints.text:SetText(string)
|
||
|
|
CLMainFramePoints.text2:SetFont("Fonts\\FRIZQT__.TTF", 12, "OUTLINE")
|
||
|
|
CLMainFramePoints.text2:SetText(string2)
|
||
|
|
end
|
||
|
|
|
||
|
|
local tab = _G["CLMainFrame"]:GetAttribute("tab")
|
||
|
|
if tab ~= nil and tab > 0 then
|
||
|
|
|
||
|
|
if (tab == 1 and #spellsplus + #spellsminus > 0) or (tab == 2 and #talentsplus + #talentsminus + #tpellsplus + #tpellsminus > 0) then
|
||
|
|
FrameShow("CLResetButtonFrame")
|
||
|
|
else
|
||
|
|
FrameHide("CLResetButtonFrame")
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
)
|
||
|
|
|
||
|
|
-- Close button
|
||
|
|
local button = _G["CLMainFrameClose"] or CreateFrame("Button", "CLMainFrameClose", _G["CLMainFrame"])
|
||
|
|
button:SetSize(32, 32)
|
||
|
|
button:SetPoint("TOPRIGHT", 5.3, 4.5)
|
||
|
|
button:SetNormalTexture("Interface\\Buttons\\UI-Panel-MinimizeButton-Up")
|
||
|
|
button:SetPushedTexture("Interface\\Buttons\\UI-Panel-MinimizeButton-Down")
|
||
|
|
button:SetHighlightTexture("Interface\\Buttons\\UI-Panel-MinimizeButton-Highlight")
|
||
|
|
button:SetScript(
|
||
|
|
"OnClick",
|
||
|
|
function()
|
||
|
|
FrameHide("CLMainFrame")
|
||
|
|
end
|
||
|
|
)
|
||
|
|
tinsert(UISpecialFrames, frame:GetName())
|
||
|
|
-- AP and TP points
|
||
|
|
local frame = _G["CLMainFramePoints"] or CreateFrame("Frame", "CLMainFramePoints", _G["CLMainFrame"])
|
||
|
|
frame:SetSize(160, 32)
|
||
|
|
frame:SetPoint("TOPLEFT", 25, -35)
|
||
|
|
frame.text = frame:CreateFontString("CLMainFramePointsText", "OVERLAY", "GameFontNormal")
|
||
|
|
--frame.text:SetTextColor(45/255,194/255,0/255) -- SETS CLASS Points colour
|
||
|
|
CLMainFramePoints.text:SetJustifyV("MIDDLE");
|
||
|
|
CLMainFramePoints.text:SetJustifyH("LEFT");
|
||
|
|
frame.text:SetPoint("CENTER")
|
||
|
|
|
||
|
|
frame.text2 = frame:CreateFontString("CLMainFramePointsText2", "OVERLAY", "GameFontNormal")
|
||
|
|
--frame.text2:SetTextColor(0/255,180/255,255/255)
|
||
|
|
CLMainFramePoints.text2:SetJustifyV("MIDDLE");
|
||
|
|
CLMainFramePoints.text2:SetJustifyH("LEFT");
|
||
|
|
frame.text2:SetPoint("CENTER")
|
||
|
|
--frame:SetScript("OnUpdate", UpdatePoints)
|
||
|
|
|
||
|
|
-- Learn Confirm and cancel
|
||
|
|
local frame = _G["CLResetFrame"] or CreateFrame("Frame", "CLResetFrame", _G["CLMainFrame"])
|
||
|
|
frame:SetSize(160, 32)
|
||
|
|
frame:SetPoint("BOTTOMRIGHT")
|
||
|
|
--frame:SetScript("OnUpdate", UpdateReset)
|
||
|
|
|
||
|
|
local frame = _G["CLResetButtonFrame"] or CreateFrame("Frame", "CLResetButtonFrame", _G["CLResetFrame"])
|
||
|
|
frame:Hide()
|
||
|
|
frame:SetSize(160, 32)
|
||
|
|
frame:SetPoint("CENTER")
|
||
|
|
|
||
|
|
local frame = _G["CLWipeButtonFrame"] or CreateFrame("Frame", "CLWipeButtonFrame", _G["CLResetFrame"])
|
||
|
|
frame:SetSize(32, 32)
|
||
|
|
frame:SetPoint("LEFT", 20,0)
|
||
|
|
|
||
|
|
-- Hijacks the talent button in the main bar and opens my frame instead
|
||
|
|
local b=1.48
|
||
|
|
local spellTalBtn=CreateFrame("Button", "spellTalBtn", MainMenuBarArtFrame, "MainMenuBarMicroButton")
|
||
|
|
spellTalBtn:SetPoint("CENTER",TalentMicroButton)
|
||
|
|
spellTalBtn:SetNormalTexture("Interface/Buttons/UI-MicroButton-World-Up")
|
||
|
|
spellTalBtn:SetPushedTexture("Interface/Buttons/UI-MicroButton-World-Down")
|
||
|
|
spellTalBtn:SetDisabledTexture("Interface/Buttons/UI-MicroButton-World-Disabled")
|
||
|
|
spellTalBtn:SetHighlightTexture("Interface/Buttons/UI-MicroButton-Hilight")
|
||
|
|
spellTalBtn:SetFrameStrata("HIGH")
|
||
|
|
spellTalBtn:SetScript("OnEnter",function(b)GameTooltip:SetOwner(b,"ANCHOR_RIGHT")GameTooltip:AddLine("Spells'n'Shiiieeet")GameTooltip:Show()end)
|
||
|
|
spellTalBtn:SetScript("OnClick",function()ToggleFrame(_G["CLMainFrame"])end)
|
||
|
|
spellTalBtn:SetScript("OnLeave",function(b)GameTooltip:Hide()end)
|
||
|
|
|
||
|
|
local button =
|
||
|
|
_G["CLWipeButton"] or
|
||
|
|
NewButton(
|
||
|
|
"CLWipeButton",
|
||
|
|
_G["CLWipeButtonFrame"],
|
||
|
|
36,
|
||
|
|
"Interface\\Tooltips\\Reverse_White",
|
||
|
|
nil
|
||
|
|
)
|
||
|
|
button:SetPoint("BOTTOMRIGHT", 10, 27)
|
||
|
|
button:SetScript(
|
||
|
|
"OnClick",
|
||
|
|
function()
|
||
|
|
if not (button:IsEnabled()) then return end
|
||
|
|
StaticPopup_Show("WIPE_SPELLS")
|
||
|
|
end
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
StaticPopupDialogs["WIPE_SPELLS"] = {
|
||
|
|
text = "Please, confirm resetting ALL your spells and talents",
|
||
|
|
button1 = YES,
|
||
|
|
button2 = NO,
|
||
|
|
OnAccept = function()
|
||
|
|
AIO.Handle(handlerName, "WipeAll", clientSecret)
|
||
|
|
TabSelect()
|
||
|
|
_G["CLMainFrame"]:Hide()
|
||
|
|
UpdatePointText()
|
||
|
|
end,
|
||
|
|
OnShow = function(self)
|
||
|
|
rst = db.reset + 1
|
||
|
|
if (rst > #prices) then
|
||
|
|
rst = #prices
|
||
|
|
end
|
||
|
|
MoneyFrame_Update(self.moneyFrame, prices[rst]);
|
||
|
|
end,
|
||
|
|
timeout = 0,
|
||
|
|
whileDead = true,
|
||
|
|
hideOnEscape = true,
|
||
|
|
hasMoneyFrame = 1,
|
||
|
|
preferredIndex = 3
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
local frame = _G["CLUnusedButtonFrame"] or CreateFrame("Frame", "CLUnusedButtonFrame", _G["CLResetFrame"])
|
||
|
|
frame:SetSize(32, 32)
|
||
|
|
frame:SetPoint("BOTTOMLEFT",0,35)
|
||
|
|
|
||
|
|
local button =
|
||
|
|
_G["CLUnusedButton"] or
|
||
|
|
NewButton(
|
||
|
|
"CLUnusedButton",
|
||
|
|
_G["CLUnusedButtonFrame"],
|
||
|
|
36,
|
||
|
|
"Interface\\Tooltips\\conviction",
|
||
|
|
nil
|
||
|
|
)
|
||
|
|
button:SetPoint("BOTTOMRIGHT", 100, - 8)
|
||
|
|
button:SetScript(
|
||
|
|
"OnClick",
|
||
|
|
function()
|
||
|
|
if not (button:IsEnabled()) then return end
|
||
|
|
StaticPopup_Show("BRUH")
|
||
|
|
end
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
StaticPopupDialogs["BRUH"] = {
|
||
|
|
text = "I'll bash your mum m8.",
|
||
|
|
button1 = "Skiaa",
|
||
|
|
button2 = "ABOS",
|
||
|
|
|
||
|
|
timeout = 0,
|
||
|
|
whileDead = true,
|
||
|
|
hideOnEscape = true,
|
||
|
|
preferredIndex = 3
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
local buttons = {"Apply", "Reset"}
|
||
|
|
for i = 1, #buttons do
|
||
|
|
--buttons:
|
||
|
|
local button = _G["CLResetButton" .. i] or MakeButton("CLResetButton" .. i, _G["CLResetButtonFrame"])
|
||
|
|
button:SetText(buttons[i])
|
||
|
|
button:SetSize(75, 32)
|
||
|
|
button:SetPoint("LEFT", 80 * (i - 1)-321, 45) --
|
||
|
|
button:SetScript(
|
||
|
|
"OnClick",
|
||
|
|
function()
|
||
|
|
if not (button:IsEnabled()) then return end
|
||
|
|
LearnConfirm(buttons[i], "false")
|
||
|
|
end
|
||
|
|
)
|
||
|
|
end
|
||
|
|
|
||
|
|
--Learn and reset confirm dialogs
|
||
|
|
StaticPopupDialogs["LEARN_CONFIRM"] = {
|
||
|
|
text = "Please, confirm learning.",
|
||
|
|
button1 = "Yes",
|
||
|
|
button2 = "No",
|
||
|
|
OnAccept = function()
|
||
|
|
LearnConfirm("Apply", "true")
|
||
|
|
end,
|
||
|
|
timeout = 0,
|
||
|
|
whileDead = true,
|
||
|
|
hideOnEscape = true,
|
||
|
|
preferredIndex = 3
|
||
|
|
}
|
||
|
|
|
||
|
|
StaticPopupDialogs["RESET_CONFIRM"] = {
|
||
|
|
text = "Please, confirm resetting.",
|
||
|
|
button1 = "Yes",
|
||
|
|
button2 = "No",
|
||
|
|
OnAccept = function()
|
||
|
|
LearnConfirm("Reset", "true")
|
||
|
|
end,
|
||
|
|
timeout = 0,
|
||
|
|
whileDead = true,
|
||
|
|
hideOnEscape = true,
|
||
|
|
preferredIndex = 3
|
||
|
|
}
|
||
|
|
|
||
|
|
--Main Tab buttons, containers
|
||
|
|
local buttons = {"", ""}
|
||
|
|
for i = 1, #buttons do
|
||
|
|
--buttons:
|
||
|
|
local button = _G["CLButton" .. i] or MakeButton("CLButton" .. i, _G["CLMainFrame"], true)
|
||
|
|
button:SetText(buttons[i])
|
||
|
|
button:SetSize(23,23) -- Size of 'spell-talent' buttons
|
||
|
|
button:SetPoint("TOP",50*(i) +6, -110) -- Sets spacing of the 'spell-talent' selection buttons
|
||
|
|
button.norm = button:CreateTexture(nil, "ARTWORK")
|
||
|
|
button.norm:SetTexture("Interface/Buttons/CLCircle")
|
||
|
|
button.norm:SetPoint("CENTER")
|
||
|
|
button.norm:SetSize(30,30)
|
||
|
|
button:SetNormalTexture(button.norm)
|
||
|
|
button:SetScript(
|
||
|
|
"OnClick",
|
||
|
|
function()
|
||
|
|
SelectTab(i, "CLContainer", "CLMainFrame", "CLButton")
|
||
|
|
SelectTab(current_class, "CLContainer"..i.."Sub", "CLContainer"..i, "CLContainer"..i.."SubButton")
|
||
|
|
SelectTab(current_spec, "CLContainer"..i.."Sub"..current_class.."Sub", "CLContainer"..i.."Sub"..current_class, "CLContainer"..i.."Sub"..current_class.."SubButton")
|
||
|
|
end
|
||
|
|
)
|
||
|
|
|
||
|
|
--containers:
|
||
|
|
local frame = _G["CLContainer" .. i] or CreateFrame("Frame", "CLContainer" .. i, _G["CLMainFrame"])
|
||
|
|
frame:SetSize (967, 670)
|
||
|
|
frame:SetPoint("TOPLEFT")
|
||
|
|
frame:SetAttribute("tab", 0)
|
||
|
|
frame:SetAttribute("child", "CLContainer" .. i .. "Sub")
|
||
|
|
frame:Hide()
|
||
|
|
frame:SetScript(
|
||
|
|
"OnShow",
|
||
|
|
function()
|
||
|
|
local tab = frame:GetAttribute("tab")
|
||
|
|
if tab == 0 then
|
||
|
|
tab = 1
|
||
|
|
end
|
||
|
|
local child = frame:GetAttribute("child")
|
||
|
|
SelectTab(tab, child, "CLContainer" .. i, child .. "Button")
|
||
|
|
end
|
||
|
|
)
|
||
|
|
end
|
||
|
|
|
||
|
|
|
||
|
|
local frame = _G["CLClassesFrame"] or CreateFrame("Frame", "CLClassesFrame", _G["CLMainFrame"])
|
||
|
|
frame:SetSize(967, 670)
|
||
|
|
frame:SetPoint("TOPLEFT")
|
||
|
|
t = CreateTexture(frame, "BACKGROUND")
|
||
|
|
t:SetTexCoord(0, 0.944, 0, 0.654)
|
||
|
|
frame.background = t
|
||
|
|
frame.background:SetTexture("Interface\\Tooltips\\CLMainFrame")
|
||
|
|
frame.background:SetAllPoints()
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
-- frame:SetBackdrop(
|
||
|
|
-- {
|
||
|
|
-- bgFile = "Interface\\TutorialFrame\\TutorialFrameBackground",
|
||
|
|
-- edgeFile = "Interface\\Tooltips\\UI-Tooltip-Border",
|
||
|
|
-- tile = true,
|
||
|
|
-- edgeSize = 16,
|
||
|
|
-- tileSize = 16,
|
||
|
|
-- insets = {left = 0, right = 0, top = 2, bottom = 2}
|
||
|
|
-- }
|
||
|
|
-- )
|
||
|
|
|
||
|
|
for index = 1, 2 do
|
||
|
|
--Class buttons for spells and talents
|
||
|
|
local i = 1
|
||
|
|
local arr
|
||
|
|
local mode
|
||
|
|
if index == 1 then
|
||
|
|
arr = db.data.spells
|
||
|
|
mode = "spell"
|
||
|
|
else
|
||
|
|
arr = db.data.talents
|
||
|
|
mode = "talent"
|
||
|
|
end
|
||
|
|
for k, v in pairsSort(arr) do
|
||
|
|
local class, cnum, inum = k, i, index
|
||
|
|
local button =
|
||
|
|
_G["CLContainer" .. index .. "SubButton" .. i] or
|
||
|
|
NewButton(
|
||
|
|
"CLContainer" .. index .. "SubButton" .. i,
|
||
|
|
_G["CLContainer" .. index],
|
||
|
|
36,
|
||
|
|
"Interface\\GLUES\\CHARACTERCREATE\\UI-CHARACTERCREATE-CLASSES",
|
||
|
|
nil,
|
||
|
|
unpack(CLASS_ICON_TCOORDS[class])
|
||
|
|
)
|
||
|
|
button:SetPoint("TOPLEFT", 50, - 54 - 60 * i) -- Sets spacing of class selection buttons
|
||
|
|
-- Creates the Class name tooltip
|
||
|
|
button.tooltip =
|
||
|
|
_G["CLButtontooltip"] or CreateFrame("GameTooltip", "CLButtontooltip", button, "GameTooltipTemplate")
|
||
|
|
button:SetScript("OnEnter",function()
|
||
|
|
-- Gets the class name string. Its all uppercase
|
||
|
|
local spectit = tostring(class)
|
||
|
|
-- Lower cases the entire string
|
||
|
|
spectit = string.lower(spectit)
|
||
|
|
-- Re-uppercases the first letter
|
||
|
|
-- REALLY STUPID but it works -\_(ツ)_/-
|
||
|
|
spectit = spectit:gsub("^%l", string.upper)
|
||
|
|
button.tooltip:Hide()
|
||
|
|
button.tooltip:SetOwner(button, "ANCHOR_RIGHT")
|
||
|
|
button.tooltip:AddLine(spectit, nil, nil, nil, true)
|
||
|
|
button.tooltip:Show()
|
||
|
|
end)
|
||
|
|
button:SetScript("OnLeave",function()
|
||
|
|
button.tooltip:Hide()
|
||
|
|
end)
|
||
|
|
|
||
|
|
button.text = _G["CLContainer"..index.."SubButton"..i.."Text"] or button:CreateFontString("CLContainer"..index.."SubButton"..i.."Text", "OVERLAY")
|
||
|
|
button.text:SetFont("Fonts\\FRIZQT__.TTF", 12, "OUTLINE")
|
||
|
|
button.text:SetPoint("CENTER", 50, 0)
|
||
|
|
button.text:SetText(tostring(CountSpellPoints(i,1) + CountSpellPoints(i,2) + CountSpellPoints(i,3)))
|
||
|
|
button.text:SetTextColor(45/255,194/255,0/255)
|
||
|
|
button.texttex = button:CreateTexture(nil, "ARTWORK")
|
||
|
|
button.texttex:SetTexture("Interface/Buttons/CLCircleSmall")
|
||
|
|
button.texttex:SetPoint("CENTER", button.text, "CENTER")
|
||
|
|
|
||
|
|
button.text2 = _G["CLContainer"..index.."SubButton"..i.."Text2"] or button:CreateFontString("CLContainer"..index.."SubButton"..i.."Text2", "OVERLAY")
|
||
|
|
button.text2:SetFont("Fonts\\FRIZQT__.TTF", 12, "OUTLINE")
|
||
|
|
button.text2:SetPoint("CENTER", 80, 0)
|
||
|
|
button.text2:SetText(tostring(CountTalentPoints(i,1) + CountTalentPoints(i,2) + CountTalentPoints(i, 3)))
|
||
|
|
button.text2:SetTextColor(0/255,180/255,255/255)
|
||
|
|
button.text2tex = button:CreateTexture(nil, "ARTWORK")
|
||
|
|
button.text2tex:SetTexture("Interface/Buttons/CLCircleSmall")
|
||
|
|
button.text2tex:SetPoint("CENTER", button.text2, "CENTER")
|
||
|
|
|
||
|
|
button:SetScript(
|
||
|
|
"OnClick",
|
||
|
|
function()
|
||
|
|
if not (button:IsEnabled()) then return end --delta
|
||
|
|
current_class = cnum
|
||
|
|
SelectTab(
|
||
|
|
cnum,
|
||
|
|
"CLContainer".. inum .."Sub",
|
||
|
|
"CLContainer" .. inum,
|
||
|
|
"CLContainer".. inum .."SubButton"
|
||
|
|
)
|
||
|
|
LastContainerNum = inum
|
||
|
|
end
|
||
|
|
)
|
||
|
|
|
||
|
|
local frame =
|
||
|
|
_G["CLContainer" .. index .. "Sub" .. i] or
|
||
|
|
CreateFrame("Frame", "CLContainer" .. index .. "Sub" .. i, _G["CLContainer" .. index])
|
||
|
|
--frame:SetBackdrop({bgFile="Interface\\Buttons\\WHITE8X8"})
|
||
|
|
frame:SetSize(_G["CLContainer" .. index]:GetSize())
|
||
|
|
frame:SetPoint("TOPLEFT")
|
||
|
|
frame:SetAttribute("tab", 0)
|
||
|
|
frame:SetAttribute("child", "CLContainer" .. index .. "Sub" .. i .. "Sub")
|
||
|
|
frame:Hide()
|
||
|
|
frame:SetScript(
|
||
|
|
"OnShow",
|
||
|
|
function()
|
||
|
|
local tab = frame:GetAttribute("tab")
|
||
|
|
if tab == 0 then
|
||
|
|
tab = 1
|
||
|
|
end
|
||
|
|
local child = frame:GetAttribute("child")
|
||
|
|
SelectTab(tab, child, "CLContainer" .. inum .. "Sub" .. cnum, child .. "Button")
|
||
|
|
end
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
--[[ CREATES BUTTONS FOR SPECS AND SPELLS/TALENTS]]
|
||
|
|
--buttons and containers for spells
|
||
|
|
for j = 1, #arr[class] do
|
||
|
|
local snum = j
|
||
|
|
local button =
|
||
|
|
_G["CLContainer" .. index .. "Sub" .. i .. "SubButton" .. j] or NewButton("CLContainer" .. index .. "Sub" .. i .. "SubButton" .. j, _G["CLContainer" .. index .. "Sub" .. i], 36,
|
||
|
|
"Interface\\Icons\\" .. arr[class][j][2],
|
||
|
|
nil
|
||
|
|
)
|
||
|
|
-- SPEC ICONS + CHILDREN
|
||
|
|
button:SetPoint("TOP", -220, - 80 - 110 * (j))--("TOP", 110 * (j) -330, -80) -- Set spacing of SPEC buttons
|
||
|
|
-- SPEC TITLE
|
||
|
|
--[[button.spectit = button:CreateFontString(nil, "OVERLAY") -- Spec name-- intend to set
|
||
|
|
button.spectit:SetFont("Fonts\\FRIZQT__.TTF", 15, "OUTLINE")
|
||
|
|
button.spectit:SetPoint("CENTER", -0, 30)
|
||
|
|
button.spectit:SetText(tostring(arr[class][j][1]))
|
||
|
|
button.spectit:SetTextColor(230/255,230/255,230/255)]]
|
||
|
|
button.spectittex = button:CreateTexture(nil, "ARTWORK")
|
||
|
|
button.spectittex:SetTexture("Interface/Buttons/CLCircleSmall")
|
||
|
|
button.spectittex:SetPoint("CENTER", button.spectit, "CENTER")
|
||
|
|
button.tooltip =
|
||
|
|
_G["CLButtontooltip"] or CreateFrame("GameTooltip", "CLButtontooltip", button, "GameTooltipTemplate")
|
||
|
|
button:SetScript("OnEnter",function()
|
||
|
|
local spectit = tostring(arr[class][j][1])
|
||
|
|
button.tooltip:Hide()
|
||
|
|
button.tooltip:SetOwner(button, "ANCHOR_RIGHT")
|
||
|
|
button.tooltip:AddLine(spectit, nil, nil, nil, true)
|
||
|
|
button.tooltip:Show()
|
||
|
|
end)
|
||
|
|
button:SetScript("OnLeave",function()
|
||
|
|
button.tooltip:Hide()
|
||
|
|
end)
|
||
|
|
|
||
|
|
-- SPELLS BUTTON
|
||
|
|
button.text = button:CreateFontString(nil, "OVERLAY")
|
||
|
|
button.text:SetFont("Fonts\\FRIZQT__.TTF", 12, "OUTLINE") -- Creates text for number of spells learnt in spec
|
||
|
|
button.text:SetPoint("CENTER", -15, -35)
|
||
|
|
button.text:SetText(tostring(CountSpellPoints(i,j)))
|
||
|
|
button.text:SetTextColor(45/255,194/255,0/255) -- LIGHT GREEN
|
||
|
|
button.texttex = button:CreateTexture(nil, "ARTWORK")
|
||
|
|
button.texttex:SetTexture("Interface/Buttons/CLCircleSmall")
|
||
|
|
button.texttex:SetPoint("CENTER", button.text, "CENTER")
|
||
|
|
-- TALENTS BUTTON
|
||
|
|
button.text2 = button:CreateFontString(nil, "OVERLAY")-- Creates text for number of talents learnt in spec
|
||
|
|
button.text2:SetFont("Fonts\\FRIZQT__.TTF", 12, "OUTLINE")
|
||
|
|
button.text2:SetPoint("CENTER", 15, -35)
|
||
|
|
button.text2:SetText(tostring(CountTalentPoints(i,j)))
|
||
|
|
button.text2:SetTextColor(0/255,180/255,255/255) -- LIGHT BLUE
|
||
|
|
button.text2tex = button:CreateTexture(nil, "ARTWORK")
|
||
|
|
button.text2tex:SetTexture("Interface/Buttons/CLCircleSmall")
|
||
|
|
button.text2tex:SetPoint("CENTER", button.text2, "CENTER")
|
||
|
|
|
||
|
|
button:SetScript(
|
||
|
|
"OnClick",
|
||
|
|
function()
|
||
|
|
if not (button:IsEnabled()) then return end--eta
|
||
|
|
current_spec = snum
|
||
|
|
SelectTab(
|
||
|
|
snum,
|
||
|
|
"CLContainer".. inum .."Sub" .. cnum .. "Sub",
|
||
|
|
"CLContainer".. inum .."Sub" .. cnum,
|
||
|
|
"CLContainer".. inum .."Sub" .. cnum .. "SubButton"
|
||
|
|
)
|
||
|
|
end
|
||
|
|
)
|
||
|
|
|
||
|
|
local frame =
|
||
|
|
_G["CLContainer" .. index .. "Sub" .. i .. "Sub" .. j] or
|
||
|
|
CreateFrame(
|
||
|
|
"Frame",
|
||
|
|
"CLContainer" .. index .. "Sub" .. i .. "Sub" .. j,
|
||
|
|
_G["CLContainer" .. index .. "Sub" .. i]
|
||
|
|
)
|
||
|
|
frame:SetSize(
|
||
|
|
_G["CLContainer" .. index .. "Sub" .. i]:GetWidth()+10,
|
||
|
|
_G["CLContainer" .. index .. "Sub" .. i]:GetHeight()+35
|
||
|
|
)
|
||
|
|
frame:SetPoint("TOP", 200, - 145)
|
||
|
|
FrameBackground(frame, "Interface\\TalentFrame\\" .. arr[class][j][3])
|
||
|
|
FrameLayout(frame, frame:GetWidth(), frame:GetHeight()+45)
|
||
|
|
frame:Hide()
|
||
|
|
frame:SetScript(
|
||
|
|
"OnShow",
|
||
|
|
function()
|
||
|
|
local timer = GetTime()
|
||
|
|
frame:SetScript(
|
||
|
|
"OnUpdate",
|
||
|
|
function()
|
||
|
|
if GetTime() - timer >= 0.1 then
|
||
|
|
FillSpells(class, snum, frame, mode)
|
||
|
|
_G["Zin"] = spell_point_list
|
||
|
|
frame:SetScript("OnUpdate", nil)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
)
|
||
|
|
end
|
||
|
|
)
|
||
|
|
end
|
||
|
|
|
||
|
|
i = i + 1
|
||
|
|
end
|
||
|
|
end --end of index
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
--ClassLess Bars-- Need to add Regular energy alongside rage
|
||
|
|
local frame = CLBarsFrame or CreateFrame("Frame", "CLBarsFrame", UIParent)
|
||
|
|
frame:SetMovable(true)
|
||
|
|
frame:EnableMouse(true)
|
||
|
|
frame:SetToplevel(true)
|
||
|
|
frame:RegisterForDrag("LeftButton")
|
||
|
|
frame:SetToplevel(true)
|
||
|
|
--frame:SetSize(172, 104)
|
||
|
|
frame:SetSize(172, 79)
|
||
|
|
frame:SetBackdrop(
|
||
|
|
{
|
||
|
|
bgFile = "",
|
||
|
|
edgeFile = "",
|
||
|
|
tile = true,
|
||
|
|
edgeSize = 16,
|
||
|
|
tileSize = 32,
|
||
|
|
insets = {left = 5, right = 5, top = 5, bottom = 5}
|
||
|
|
}
|
||
|
|
)
|
||
|
|
frame:SetPoint("CENTER", 0, 0)
|
||
|
|
frame:SetScript("OnDragStart", frame.StartMoving)
|
||
|
|
frame:SetScript("OnDragStop", frame.StopMovingOrSizing)
|
||
|
|
|
||
|
|
AIO.SavePosition(frame)
|
||
|
|
|
||
|
|
-- local energy={0,1,3,6} -- delete
|
||
|
|
local energy = {1}
|
||
|
|
local colors = {
|
||
|
|
-- [0] = {r = 0, g = 0, b = 255}, -- delete
|
||
|
|
[1] = {r = 255, g = 0, b = 0},
|
||
|
|
-- [3] = {r = 255, g = 255, b = 0} -- delete
|
||
|
|
-- [6]={r=0,g=209,b=255}, -- delete
|
||
|
|
}
|
||
|
|
|
||
|
|
for i = 1, #energy do
|
||
|
|
local e = energy[i]
|
||
|
|
local c = colors[e]
|
||
|
|
local bar = CreateFrame("StatusBar", nil, _G["CLBarsFrame"])
|
||
|
|
bar:SetPoint("TOPLEFT", 8, -20 * (i - 1) - 8)
|
||
|
|
bar:SetWidth(158)
|
||
|
|
bar:SetHeight(20)
|
||
|
|
bar:SetStatusBarTexture("Interface\\TARGETINGFRAME\\UI-StatusBar")
|
||
|
|
bar:GetStatusBarTexture():SetHorizTile(false)
|
||
|
|
bar:GetStatusBarTexture():SetVertTile(false)
|
||
|
|
bar:SetStatusBarColor(c.r, c.g, c.b)
|
||
|
|
|
||
|
|
bar.bg = bar:CreateTexture(nil, "BACKGROUND")
|
||
|
|
bar.bg:SetTexture("Interface\\TARGETINGFRAME\\UI-StatusBar")
|
||
|
|
bar.bg:SetAllPoints(true)
|
||
|
|
-- bar.bg:SetVertexColor(181, 255, 235)
|
||
|
|
bar.bg:SetVertexColor(0, 0, 0)
|
||
|
|
|
||
|
|
bar.value = bar:CreateFontString(nil, "OVERLAY")
|
||
|
|
bar.value:SetPoint("CENTER")
|
||
|
|
bar.value:SetFont("Fonts\\FRIZQT__.TTF", 12, "OUTLINE")
|
||
|
|
bar.value:SetJustifyH("CENTER")
|
||
|
|
bar.value:SetShadowOffset(1, -1)
|
||
|
|
bar.value:SetTextColor(1, 1, 1)
|
||
|
|
|
||
|
|
bar:SetScript(
|
||
|
|
"Onupdate",
|
||
|
|
function()
|
||
|
|
local pw = UnitPower("player", e) or 0
|
||
|
|
local pwm = UnitPowerMax("player", e) or 100
|
||
|
|
bar:SetMinMaxValues(0, pwm)
|
||
|
|
bar:SetValue(pw)
|
||
|
|
bar.value:SetText(pw .. "/" .. pwm)
|
||
|
|
end
|
||
|
|
)
|
||
|
|
end
|
||
|
|
end --End of Doshit
|
||
|
|
|
||
|
|
--Main Execution
|
||
|
|
local MyHandlers = AIO.AddHandlers(handlerName, {})
|
||
|
|
|
||
|
|
function MyHandlers.LoadVars(player, spr, tpr, tar,rem, rst, prc, scr, rsd)
|
||
|
|
--Init
|
||
|
|
db.spells = spr
|
||
|
|
db.tpells = tpr
|
||
|
|
db.talents = tar
|
||
|
|
db.reset = rst
|
||
|
|
prices = prc
|
||
|
|
if (rsd ~= true) then
|
||
|
|
clientSecret = scr
|
||
|
|
DoShit()
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
--hook original Talent Frame
|
||
|
|
function ToggleTalentFrame()
|
||
|
|
FrameToggle("CLMainFrame")
|
||
|
|
end
|