⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kalented.lua

📁 时间太紧了
💻 LUA
📖 第 1 页 / 共 2 页
字号:
-- [ 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 + -