📄 kalented.lua
字号:
-- [ constants ] ================================================================
local KALENTED_TALENT_OFFSET_X = 16;
local KALENTED_TALENT_OFFSET_Y = 20;
-- [ variables ] ================================================================
-- Saved Variables
XKalented_TabData = {};
-- Local Variables
local fnTalentFrame_Update = nil;
local iTalentPoints = 0;
local iPointsSpent = 0;
local strName = "";
-- [ WoW Subclassing ] ==========================================================
-- Set Subclassing
function KO_Kalented_Frame_OnLoad()
-- [ register slash commands ]
SlashCmdList["KALENTED"] = KO_Kalented_SlashCommand;
SLASH_KALENTED1 = "/kalented";
-- Setup Username and Set Tab Texture
strName = UnitName("player");
KO_Kalented_Texture:SetTexture(KO_TEXTURE_TAB);
-- Load AddOn
LoadAddOn("Blizzard_TalentUI");
-- Register Events
this:RegisterEvent("VARIABLES_LOADED");
end
-- Events
function KO_Kalented_Frame_Event(event, arg1)
if ( event == "ADDON_LOADED" ) then
message(ag1);
end
if ( event == "VARIABLES_LOADED" ) then
-- If First Time, create tables
if ( not XKalented_TabData[strName] ) then
KO_Kalented_ResetPoints_OnClick();
else
KO_Kalented_Level:SetText(XKalented_TabData[strName]["Level"]);
end
-- Subclass Talent Window
fnTalentFrame_Update = TalentFrame_Update;
TalentFrame_Update = NewTalentFrame_Update;
end
end
-- Unset Subclassing
function KO_Kalented_Frame_OnUnload()
if ( fnTalentFrame_Update ) then
TalentFrame_Update = fnTalentFrame_Update;
fnTalentFrame_Update = nil;
end
end
function NewTalentFrame_Update()
fnTalentFrame_Update();
KO_Kalented_Update();
end
-- [ WoW commands ] =============================================================
function KO_Kalented_SlashCommand(msg)
local _, _, cmd, arg1 = string.find(msg, "%s*(%S*)%s*(.*)");
cmd = string.lower(cmd);
-- List of Commands
if ( cmd == "help" ) then
KO_Kalented_Debug_Message("Kalented Help: /kalented <help> <credits> <clear>");
KO_Kalented_Debug_Message("Use a command by removing the <>");
KO_Kalented_Debug_Message("-=-=-=-=-");
-- About Information
elseif ( cmd == "credits" ) then
KO_Kalented_Debug_Message("Created by Kaluriel [ kaluriel@gmail.com ].");
KO_Kalented_Debug_Message("Translations by Filougarou, J.W and sy2451.");
KO_Kalented_Debug_Message("-=-=-=-=-");
-- Clear Tables
elseif ( cmd == "clear" ) then
KO_Kalented_Debug_Clear();
KO_Kalented_Debug_Message("Database cleared.");
KO_Kalented_Debug_Message("-=-=-=-=-");
-- Save Class Information
elseif ( cmd == "retrieve" ) then
KO_Kalented_Debug_Retrieve();
KO_Kalented_Debug_Message("Class Talent Data Retrieved.");
KO_Kalented_Debug_Message("-=-=-=-=-");
-- No Command
else
KO_Kalented_Debug_Message("Invalid command entered.");
KO_Kalented_Debug_Message("-=-=-=-=-");
end
end
-- [ WoW events ] ===============================================================
-- Reset Points
function KO_Kalented_ResetPoints_OnClick()
XKalented_TabData[strName] = {};
for i=1, MAX_TALENT_TABS, 1 do
XKalented_TabData[strName][i] = {};
for j=1, MAX_NUM_TALENTS, 1 do
XKalented_TabData[strName][i][j] = 0;
end
end
XKalented_TabData[strName]["Level"] = UnitLevel("player");
KO_Kalented_Level:SetText(XKalented_TabData[strName]["Level"]);
KO_Kalented_Update();
end
-- Transfer Points
function KO_Kalented_Transfer_OnClick()
for i=1, MAX_TALENT_TABS, 1 do
for j=1, MAX_NUM_TALENTS, 1 do
if ( j <= GetNumTalents(i) ) then
local _, _, _, _, rank, _, _, _ = GetTalentInfo(i, j);
XKalented_TabData[strName][i][j] = rank;
else
XKalented_TabData[strName][i][j] = 0;
end
end
end
XKalented_TabData[strName]["Level"] = UnitLevel("player");
KO_Kalented_Level:SetText(XKalented_TabData[strName]["Level"]);
KO_Kalented_Update();
end
-- Learn Talent
function KO_Kalented_Button_OnClick(arg1)
if ( arg1 == "LeftButton" ) then
if ( KO_Kalented_CanIncrease(this:GetID()) ) then
XKalented_TabData[strName][PanelTemplates_GetSelectedTab(TalentFrame)][this:GetID()] = XKalented_TabData[strName][PanelTemplates_GetSelectedTab(TalentFrame)][this:GetID()] + 1;
end
elseif ( arg1 == "RightButton" ) then
if ( KO_Kalented_CanDecrease(this:GetID()) ) then
XKalented_TabData[strName][PanelTemplates_GetSelectedTab(TalentFrame)][this:GetID()] = XKalented_TabData[strName][PanelTemplates_GetSelectedTab(TalentFrame)][this:GetID()] - 1;
end
end
KO_Kalented_Update();
if ( GameTooltip:IsOwned(this) ) then
KO_Kalented_SetTalentTip();
end
end
-- Update Talents
function KO_Kalented_Update()
-- Get Level Entered
XKalented_TabData[strName]["Level"] = KO_Kalented_Level:GetText();
-- Calculate Remaining Points and display
iTalentPoints = XKalented_TabData[strName]["Level"] - 9;
iPointsSpent = 0;
for i=1, MAX_TALENT_TABS, 1 do
for j=1, MAX_NUM_TALENTS, 1 do
if ( PanelTemplates_GetSelectedTab(TalentFrame) == i ) then
iPointsSpent = iPointsSpent + XKalented_TabData[strName][i][j];
end
iTalentPoints = iTalentPoints - XKalented_TabData[strName][i][j];
end
end
if ( iTalentPoints < 0 ) then
iTalentPoints = 0;
end
KO_Kalented_PointsValue:SetText(iTalentPoints);
KO_Kalented_SpentValue:SetText(iPointsSpent);
-- Setup Background Image
local _, _, _, strFilename = GetTalentTabInfo(PanelTemplates_GetSelectedTab(TalentFrame));
local base = "Interface\\TalentFrame\\";
if ( GetTalentTabInfo(PanelTemplates_GetSelectedTab(TalentFrame)) ) then
base = base .. strFilename;
else
base = base .. "MageFire";
end
KO_Kalented_BackgroundTopLeft:SetTexture(base .. "-TopLeft");
KO_Kalented_BackgroundTopRight:SetTexture(base .. "-TopRight");
KO_Kalented_BackgroundBottomLeft:SetTexture(base .. "-BottomLeft");
KO_Kalented_BackgroundBottomRight:SetTexture(base .. "-BottomRight");
-- Setup Talent Buttons
for i=1, MAX_NUM_TALENTS, 1 do
pButton = getglobal("KO_Kalented_Talent" .. i);
if ( i <= GetNumTalents(PanelTemplates_GetSelectedTab(TalentFrame)) ) then
-- Get Talent Info
local _, iconTexture, tier, column, _, maxRank, _, _ = GetTalentInfo(PanelTemplates_GetSelectedTab(TalentFrame), i);
local rank = XKalented_TabData[strName][PanelTemplates_GetSelectedTab(TalentFrame)][i];
local bForceDesaturated, bTierUnlocked = false, false;
-- Set Rank and Position Button
getglobal("KO_Kalented_Talent" .. i .. "Rank"):SetText(rank);
pButton:SetPoint("TOPLEFT", pButton:GetParent():GetName(), "TOPLEFT", 63 * (column - 1) + KALENTED_TALENT_OFFSET_X, -63 * (tier - 1) - KALENTED_TALENT_OFFSET_Y);
-- If no talent points left and rank 0, grey out button
if ( iTalentPoints <= 0 and rank == 0 ) then
bForceDesaturated = true;
end
-- If 5+ points were spent in the previous tier, highlight button
if ( iPointsSpent >= (tier - 1) * 5 ) then
bTierUnlocked = true;
end
SetItemButtonTexture(pButton, iconTexture);
-- Check if Talent meets prereqs
if ( KO_Kalented_SetPrereqs(tier, column, bForceDesaturated, bTierUnlocked, GetTalentPrereqs(PanelTemplates_GetSelectedTab(TalentFrame), i)) ) then
if ( rank < maxRank ) then
-- Rank is green
getglobal("KO_Kalented_Talent" .. i .. "Slot"):SetVertexColor(0.1, 1.0, 0.1);
getglobal("KO_Kalented_Talent" .. i .. "Rank"):SetTextColor(GREEN_FONT_COLOR.r, GREEN_FONT_COLOR.g, GREEN_FONT_COLOR.b);
else
-- Rank if yellow (max)
getglobal("KO_Kalented_Talent" .. i .. "Slot"):SetVertexColor(1.0, 0.82, 0);
getglobal("KO_Kalented_Talent" .. i .. "Rank"):SetTextColor(NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b);
end
getglobal("KO_Kalented_Talent" .. i .. "RankBorder"):Show();
getglobal("KO_Kalented_Talent" .. i .. "Rank"):Show();
SetItemButtonDesaturated(pButton, nil);
else
if ( rank == 0 ) then
-- Talent not available
getglobal("KO_Kalented_Talent" .. i .. "RankBorder"):Hide();
getglobal("KO_Kalented_Talent" .. i .. "Rank"):Hide();
else
-- Rank is grey
getglobal("KO_Kalented_Talent" .. i .. "RankBorder"):SetVertexColor(0.5, 0.5, 0.5);
getglobal("KO_Kalented_Talent" .. i .. "Rank"):SetTextColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -